src/Entity/Offerte.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use Doctrine\ORM\Mapping as ORM;
  4. use App\Controller\AppBundle\Email\Mail;
  5. use DateTime;
  6. use GuzzleHttp\Client;
  7. use SendinBlue\Client\Api\SMTPApi;
  8. use SendinBlue\Client\Configuration;
  9. use SendinBlue\Client\Model\SendSmtpEmail;
  10. use function App\Entity\env;
  11. use function App\Entity\optional;
  12. use function App\Entity\phpenv;
  13. use const App\Entity\Offerte;
  14. /**
  15.  * Offerte
  16.  */
  17. #[ORM\Table(name'offerte')]
  18. #[ORM\Entity(repositoryClass'App\Repository\OfferteRepository')]
  19. class Offerte
  20. {
  21.     /**
  22.      * @var int
  23.      */
  24.     #[ORM\Column(name'id'type'integer')]
  25.     #[ORM\Id]
  26.     #[ORM\GeneratedValue(strategy'AUTO')]
  27.     public $id;
  28.     /**
  29.      * @var string
  30.      */
  31.     #[ORM\Column(name'offerte_id'type'text')]
  32.     public $offerte_id;
  33.     /**
  34.      * @var string
  35.      */
  36.     #[ORM\Column(name'path'type'text')]
  37.     public $path;
  38.     /**
  39.      * @var string
  40.      */
  41.     #[ORM\Column(name'file'type'text')]
  42.     public $file;
  43.     /**
  44.      * @var string
  45.      */
  46.     #[ORM\Column(name'fileFinal'type'text'nullabletrue)]
  47.     public $fileFinal;
  48.     /**
  49.      * @var string
  50.      */
  51.     #[ORM\Column(name'anva_key'type'text')]
  52.     public $anva_key;
  53.     /**
  54.      * @var string
  55.      */
  56.     #[ORM\Column(name'token'type'text')]
  57.     public $token;
  58.     /**
  59.      * @var string
  60.      */
  61.     #[ORM\Column(name'created_at'type'datetime')]
  62.     public $created_at;
  63.     /**
  64.      * @var string
  65.      */
  66.     #[ORM\Column(name'confirmed_at'type'datetime'nullabletrue)]
  67.     public $confirmed_at;
  68.     #[ORM\ManyToOne(targetEntity'App\Entity\OfferteCart'inversedBy'id'cascade: ['persist'])]
  69.     public $offerte_cart;
  70.     /**
  71.      * @var Consultant
  72.      */
  73.     #[ORM\ManyToOne(targetEntity'App\Entity\Consultant'inversedBy'id'cascade: ['persist'])]
  74.     public $consultant;
  75.     /**
  76.      * @var boolean
  77.      */
  78.     #[ORM\Column(name'active'type'boolean')]
  79.     public $active;
  80.     /**
  81.      * @var string
  82.      */
  83.     #[ORM\Column(name'agent'type'string')]
  84.     public $agent;
  85.     /**
  86.      * @var string
  87.      */
  88.     #[ORM\Column(name'name'type'string')]
  89.     public $name;
  90.     /**
  91.      * @var string
  92.      */
  93.     #[ORM\Column(name'ip'type'string'nullabletrue)]
  94.     public $ip;
  95.     /**
  96.      * @var boolean
  97.      */
  98.     #[ORM\Column(name'indication'type'boolean')]
  99.     public $indication;
  100.     /**
  101.      * @var boolean
  102.      */
  103.     #[ORM\Column(name'empty_offerte'type'boolean'nullabletrue)]
  104.     public $empty false;
  105.     public function __construct($pathConsultant $consultant$agent$name$anva_key null$offerCart null)
  106.     {
  107.         $this->path $path;
  108.         $this->anva_key $anva_key;
  109.         $this->consultant $consultant;
  110.         $this->agent $agent;
  111.         $this->active true;
  112.         $this->name $name;
  113.         $this->created_at = new DateTime;
  114.         if ($offerCart) {
  115.             $this->offerte_cart $offerCart;
  116.         }
  117.         $this->indication false;
  118.         $this->empty false;
  119.     }
  120.     public function src()
  121.     {
  122.         return rtrim($this->path'/') . '/' $this->file;
  123.     }
  124.     public function srcFinal()
  125.     {
  126.         return rtrim($this->path'/') . '/' $this->fileFinal;
  127.     }
  128.     public function setFile()
  129.     {
  130.         $this->file 'Offerte-' $this->offerte_id '.pdf';
  131.     }
  132.     public function setFileFinal()
  133.     {
  134.         $this->fileFinal 'Offerte-' $this->offerte_id '-final.pdf';
  135.     }
  136.     public function getConsultant(): Consultant
  137.     {
  138.         return $this->consultant;
  139.     }
  140.     public function getUser()
  141.     {
  142.         $user = new User();
  143.         $user->setAnvaKey($this->anva_key);
  144.         $user->setAssu(is_numeric($this->anva_key));
  145.         return $user;
  146.     }
  147.     public function isValid()
  148.     {
  149.         if (!$this->active) {
  150.             return false;
  151.         }
  152.         $valid $this->confirmed_at === null;
  153.         if ($valid) {
  154.             foreach ($this->offerte_cart->processes as $row) {
  155.                 $process $row->getProcess();
  156.                 if ($process->hasExpired()) {
  157.                     $valid false;
  158.                     break;
  159.                 }
  160.             }
  161.         }
  162.         return $valid;
  163.     }
  164.     public function expireDate()
  165.     {
  166.         if ($this->empty || !isset($this->offerte_cart->getCart()->firstEntryDate)) {
  167.             return $this->offerte_cart->expireDate();
  168.         }
  169.         return $this->acceptExpireDate();
  170.     }
  171.     public function downloadPath()
  172.     {
  173.         return "/offerte/download/$this->token";
  174.     }
  175.     public function downloadPathFinal()
  176.     {
  177.         return "/offerte/download/$this->token/final";
  178.     }
  179.     public function slotvragenPath()
  180.     {
  181.         return "/offerte/$this->token";
  182.     }
  183.     public function toArray()
  184.     {
  185.         $res = [
  186.             'offerte_id' => $this->offerte_id,
  187.             'created_at' => $this->created_at->format('Y-m-d H:i:s'),
  188.             'download' => $this->downloadPath(),
  189.             'downloadFinal' => $this->downloadPathFinal(),
  190.             'slotvragen' => $this->slotvragenPath(),
  191.         ];
  192.         if (isset($this->confirmed_at)) {
  193.             $res['confirmed_at'] = $this->confirmed_at->format('Y-m-d H:i:s');
  194.         }
  195.         $res['expire_date'] = $this->expireDate()->format('Y-m-d H:i:s');
  196.         return $res;
  197.     }
  198.     /**
  199.      * @param string $userInfo
  200.      */
  201.     public function setUserInfo($userInfo): void
  202.     {
  203.         $this->userInfo serialize($userInfo);
  204.     }
  205.     public function isActive() {
  206.         if (isset($this->confirmed_at)) {
  207.             return false;
  208.         }
  209.         if ($this->active == false) {
  210.             return false;
  211.         }
  212.         if ($this->isExpired()) {
  213.             return false;
  214.         }
  215.         if (!$this->isValid()) {
  216.             return false;
  217.         }
  218.         return true;
  219.     }
  220.     public function isExpired() {
  221.         try {
  222.             if ($this->empty || !isset($this->offerte_cart->getCart()->firstEntryDate)) {
  223.                 return ($this->expireDate() < new DateTime()) || isset($this->confirmed_at);
  224.             }
  225.             return ($this->acceptExpireDate() < new DateTime()) || isset($this->confirmed_at);
  226.         } catch (\Throwable $e) {
  227.             return true;
  228.         }
  229.     }
  230.     public function acceptExpireDate() {
  231.         if ($this->empty || !isset($this->offerte_cart->getCart()->firstEntryDate)) {
  232.             return null;
  233.         }
  234.         $date = clone $this->created_at;
  235.         if ($this->offerte_cart->getCart()->firstEntryDate $date) {
  236.             return $this->offerte_cart->getCart()->firstEntryDate;
  237.         }
  238.         return $date->modify('+2 days');
  239.     }
  240.     public function mailError() {
  241.         $config Configuration::getDefaultConfiguration()
  242.             ->setApiKey('api-key'$_ENV['SENDINBLUE_APIKEY']);
  243.         $smtpApiService = new SMTPApi(new Client(), $config);
  244.         $smtpEmail = new SendSmtpEmail([$this->anva_key $this->id]);
  245.         $smtpEmail->setTo([['email' => $this->determineRecipient()]]);
  246.         $smtpEmail->setTags([$this->anva_key '-' $this->offerte_id '-admin']);
  247.         $smtpEmail->setTemplateId(13);
  248.         $smtpEmail->setParams(Mail::toArray([
  249.             'name' => $this->name,
  250.             'consultant' => $this->consultant->getUsername(),
  251.             'key' => $this->anva_key '-' $this->offerte_id,
  252.             'link' => ''
  253.         ]));
  254.         $smtpApiService->sendTransacEmail($smtpEmail);
  255.     }
  256.     public function determineRecipient()
  257.     {
  258.         try {
  259.             if (isset($this->consultant) && $this->consultant->hasEmail()) {
  260.                 return $this->consultant->email;
  261.             }
  262.             switch ($this->agent) {
  263.                 case 25:
  264.                     return 'verzekeringen@amstelgeld.nl';
  265.                 case 26:
  266.                     return 'verzekeringen@internetverzekeren.nl';
  267.                 case 32:
  268.                     return 'info@kraemer.nl';
  269.                 default:
  270.                     return 'advies@optima.nl';
  271.             }
  272.         } catch (\Exception $e) {
  273.             return 'info@hollandiaassuradeuren.nl';
  274.         }
  275.     }
  276. }