src/Controller/StartController.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use App\Entity\EmailTemplates;
  8. use App\Entity\SmsHistory;
  9. use App\Entity\SmsTemplates;
  10. use App\Repository\EmailTemplatesRepository;
  11. use App\Repository\SmsHistoryRepository;
  12. use App\Repository\SmsTemplatesRepository;
  13. use App\Repository\WarrantyRepository;
  14. use App\Repository\EventRepository;
  15. use App\Service\ConfigDataService;
  16. use Symfony\Component\Mailer\Transport;
  17. use Symfony\Component\Mailer\Mailer;
  18. use Symfony\Component\Mime\Email;
  19. use Symfony\Component\Mime\Address;
  20. use Smsapi\Client\Curl\SmsapiHttpClient;
  21. use Smsapi\Client\Feature\Sms\Bag\SendSmsBag;
  22. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  23. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  24. use Symfony\Bridge\Twig\Mime\BodyRenderer;
  25. use Twig\Environment;
  26. class StartController extends AbstractController
  27. {
  28.     #[Route('/'name'app_start')]
  29.     public function homepager(): Response
  30.     {
  31.         return $this->render('start/index.html.twig', [
  32.             'controller_name' => 'StartController',
  33.         ]);
  34.     }
  35.     #[Route('/cronjob_send_email_client'name'app_cronjob_send_email_client')]
  36.     public function cronSendEmailClient(EventRepository $eventRepositoryEmailTemplatesRepository $emailTemplatesRepositoryConfigDataService $configDataServiceSmsHistoryRepository $smsHistoryRepositorySmsTemplatesRepository $smsTemplatesRepositoryRequest $request): Response
  37.     {
  38.         $emailTemplates = new EmailTemplates();
  39.         $emailTemplatesfindOneByTypeBefore $emailTemplatesRepository->findOneByType($emailTemplates::TYPE_BEFORE);
  40.         $notificationBeforeEvent $configDataService->get('before_event');
  41.         $notification json_decode($notificationBeforeEventfalse512JSON_THROW_ON_ERROR);
  42.         
  43.         $newDate = new \DateTime('2022-12-31');
  44.         $events $eventRepository->findBy(['event_date' => $newDate]);
  45.         //dd($notification);
  46.         foreach($events as $event) {
  47.             $company_name $configDataService->get('company_name');
  48.             $eventDate = ($event->getEventDate() != null) ? $event->getEventDate()->format('d-m-Y') : ''
  49.             
  50.             $contractDate = ($event->getContractDate() != null) ? $event->getContractDate()->format('d-m-Y') : ''
  51.             //dd($newEventDetailsPage);
  52.             $const = array(
  53.                 '[EVENT_DATE]'  => $eventDate,
  54.                 '[CONTRACT_NUMBER]' => $event->getContractNumber() . '/'$contractDate,
  55.                 '[LOCATION]' => $event->getEventLocation()->getName(),
  56.                 '[TOTAL]'=> $event->getEventPrice()->getTotal(),
  57.                 '[ADVANCE]'=> $event->getEventPrice()->getAdvance(),
  58.                 '[AMOUNT DUE]'=> $event->getEventPrice()->getAmountDue(),
  59.                 '[EMAIL]' => $event->getClient()->getEmail(),
  60.                 '[PHONE]'   => $event->getClient()->getPhone(),
  61.                 '[FIRSTNAME]'   => $event->getClient()->getFirstName(),
  62.                 '[LASTNAME]'   => $event->getClient()->getLastName(),
  63.                 '[COMPANY_NAME]' => $company_name,
  64.                 '[SERVICE_NAME]' => $event->getService()->getName(),
  65.             );
  66.             if($notification->email == true){
  67.                 if($event->getClient()->getEmail()) {
  68.                     if( $configDataService->get('Transport') == 'sendgrid') {
  69.                         $sendGridKey $configDataService->get('sendGridKey');
  70.                         $dsn "sendgrid+api://"$sendGridKey ."@default";
  71.                         $transport Transport::fromDsn($dsn);
  72.                         $mailer = new Mailer($transport);
  73.                     } else if($configDataService->get('Transport') == 'smtp') {
  74.                        //dd($configDataService);
  75.                         $host $configDataService->get('Host');
  76.                         $port $configDataService->get('port');
  77.                         $username $configDataService->get('username');
  78.                         $password $configDataService->get('password');
  79.                         $dsn 'smtp://'.$username.':'.$password.'@'.$host.':'$port;
  80.                         $transport Transport::fromDsn($dsn);
  81.                         $mailer = new Mailer($transport);
  82.                     }
  83.                     //dd($const);
  84.                     $emailContent strtr($emailTemplatesfindOneByTypeBefore->getContent(), $const);
  85.                     //dd($emailContent);
  86.                     $emailTitle str_replace(array_keys($const), array_values($const), $emailTemplatesfindOneByTypeBefore->getTitle());
  87.                     $fromName $configDataService->get('fromName');
  88.                     $fromEmail $configDataService->get('fromEmail');
  89.                     $email = (new Email())
  90.                         ->from(new Address($fromEmail$fromName))
  91.                         ->to($event->getClient()->getEmail())
  92.                         //->cc('cc@example.com')
  93.                         //->bcc('bcc@example.com')
  94.                         //->replyTo('fabien@example.com')
  95.                         //->priority(Email::PRIORITY_HIGH)
  96.                         ->subject($emailTitle)
  97.                         ->html($emailContent);
  98.                     try {
  99.                         $mailer->send($email);
  100.                     } catch(TransportExceptionInterface $e) {
  101.                         $this->addFlash('app_event_error'$e->getMessage());
  102.                        // return $this->redirectToRoute('app_event_index', [], Response::HTTP_SEE_OTHER);       
  103.                     }
  104.                 } else {
  105.                     $this->addFlash('app_event_error''Email address is empty. Cannot send email!');
  106.                 }         
  107.             }
  108.             if($notification->sms == true) {
  109.                 if($event->getClient()->getPhone()){
  110.                     $phone $event->getClient()->getPhone();                      
  111.                     $smsApiHttpClient = new SmsapiHttpClient();
  112.                     $smsApiToken $configDataService->get('smsApiToken');
  113.                     $service $smsApiHttpClient->smsapiComService($smsApiToken); 
  114.                     $result $service->pingFeature()->ping();
  115.                             //dd($result);
  116.                     if ($result->authorized) {
  117.                         $smsTemplates = new SmsTemplates();
  118.                         $smsTemplatesfindOneByTypeBefore $smsTemplatesRepository->findOneByType($smsTemplates::TYPE_BEFORE);
  119.                         $smsContent strtr($smsTemplatesfindOneByTypeBefore->getContent(), $const);
  120.                         $smsBag SendSmsBag::withMessage($phone$smsContent);
  121.                         //dd($smsContent);
  122.                         $smsServiceBack $service->smsFeature()->sendSms($smsBag);
  123.                         $smsHistory = new SmsHistory();
  124.                         $smsHistory->setIdSmsapi($smsServiceBack->id);
  125.                         $smsHistory->setPoints($smsServiceBack->points);
  126.                         $smsHistory->setDateSent($smsServiceBack->dateSent);
  127.                         $smsHistory->setStatus($smsServiceBack->status);
  128.                         $smsHistory->setContent($smsServiceBack->content->message);
  129.                         $smsHistory->setEvent($event);
  130.                         $smsHistoryRepository->save($smsHistorytrue);
  131.                        }                                    
  132.                    } else {
  133.                     $this->addFlash('app_event_error''Phone address is empty. Cannot send sms!');
  134.                 }     
  135.             }
  136.         }
  137.         return new Response('OK!');
  138.     }
  139.     #[Route('/cronjob_send_email_client_after_event'name'app_cronjob_send_email_client_after_event')]
  140.     public function cronSendEmailClientAfterEvent(EventRepository $eventRepositoryEmailTemplatesRepository $emailTemplatesRepositoryConfigDataService $configDataServiceSmsHistoryRepository $smsHistoryRepositorySmsTemplatesRepository $smsTemplatesRepositoryRequest $request): Response
  141.     {
  142.         $emailTemplates = new EmailTemplates();
  143.         $emailTemplatesfindOneByTypeAfter $emailTemplatesRepository->findOneByType($emailTemplates::TYPE_AFTER);
  144.         $notificationAfterEvent $configDataService->get('after_event');
  145.         $notification json_decode($notificationAfterEventfalse512JSON_THROW_ON_ERROR);
  146.         $events $eventRepository->getEventsToSendEmailClientAfterEvent('cancelled');
  147.            //dd($events);
  148.         foreach($events as $event) {
  149.             $company_name $configDataService->get('company_name');
  150.             $eventDate = ($event->getEventDate() != null) ? $event->getEventDate()->format('d-m-Y') : ''
  151.             
  152.             $contractDate = ($event->getContractDate() != null) ? $event->getContractDate()->format('d-m-Y') : ''
  153.             //dd($newEventDetailsPage);
  154.             $const = array(
  155.                 '[EVENT_DATE]'  => $eventDate,
  156.                 '[CONTRACT_NUMBER]' => $event->getContractNumber() . '/'$contractDate,
  157.                 '[LOCATION]' => $event->getEventLocation()->getName(),
  158.                 '[TOTAL]'=> $event->getEventPrice()->getTotal(),
  159.                 '[ADVANCE]'=> $event->getEventPrice()->getAdvance(),
  160.                 '[AMOUNT DUE]'=> $event->getEventPrice()->getAmountDue(),
  161.                 '[EMAIL]' => $configDataService->get('email'),
  162.                 '[PHONE]'   => $configDataService->get('phone'),
  163.                 '[FIRSTNAME]'   => $event->getClient()->getFirstName(),
  164.                 '[LASTNAME]'   => $event->getClient()->getLastName(),
  165.                 '[COMPANY_NAME]' => $company_name,
  166.                 '[SERVICE_NAME]' => $event->getService()->getName(),
  167.             );
  168.             if($notification->email == true){
  169.                 if($event->getClient()->getEmail()) {
  170.                     if( $configDataService->get('Transport') == 'sendgrid') {
  171.                         $sendGridKey $configDataService->get('sendGridKey');
  172.                         $dsn "sendgrid+api://"$sendGridKey ."@default";
  173.                         $transport Transport::fromDsn($dsn);
  174.                         $mailer = new Mailer($transport);
  175.                     } else if($configDataService->get('Transport') == 'smtp') {
  176.                        //dd($configDataService);
  177.                         $host $configDataService->get('Host');
  178.                         $port $configDataService->get('port');
  179.                         $username $configDataService->get('username');
  180.                         $password $configDataService->get('password');
  181.                         $dsn 'smtp://'.$username.':'.$password.'@'.$host.':'$port;
  182.                         $transport Transport::fromDsn($dsn);
  183.                         $mailer = new Mailer($transport);
  184.                     }
  185.                     if($emailTemplatesfindOneByTypeAfter != null) {
  186.                         $emailContent strtr($emailTemplatesfindOneByTypeAfter->getContent(), $const);
  187.                         //dd($emailContent);
  188.                         $emailTitle str_replace(array_keys($const), array_values($const), $emailTemplatesfindOneByTypeAfter->getTitle());
  189.                         $fromName $configDataService->get('fromName');
  190.                         $fromEmail $configDataService->get('fromEmail');
  191.                         $email = (new Email())
  192.                             ->from(new Address($fromEmail$fromName))
  193.                             ->to($event->getClient()->getEmail())
  194.                             //->cc('cc@example.com')
  195.                             //->bcc('bcc@example.com')
  196.                             //->replyTo('fabien@example.com')
  197.                             //->priority(Email::PRIORITY_HIGH)
  198.                             ->subject($emailTitle)
  199.                             ->html($emailContent);
  200.                         try {
  201.                             $mailer->send($email);
  202.                         } catch(TransportExceptionInterface $e) {
  203.                             $this->addFlash('app_event_error'$e->getMessage());
  204.                            // return $this->redirectToRoute('app_event_index', [], Response::HTTP_SEE_OTHER);       
  205.                         }
  206.                     } else {
  207.                         $this->addFlash('app_emailtemplate_error''Template is not set for after event!');
  208.                         return $this->redirectToRoute('app_email_templates_index', [], Response::HTTP_SEE_OTHER); 
  209.                     }
  210.                     
  211.                 } else {
  212.                     $this->addFlash('app_event_error''Email address is empty. Cannot send email!');
  213.                     return $this->redirectToRoute('app_email_templates_index', [], Response::HTTP_SEE_OTHER); 
  214.                 }         
  215.             }
  216.             if($notification->sms == true) {
  217.                 if($event->getClient()->getPhone()){
  218.                     $phone $event->getClient()->getPhone();                      
  219.                     $smsApiHttpClient = new SmsapiHttpClient();
  220.                     $smsApiToken $configDataService->get('smsApiToken');
  221.                     $service $smsApiHttpClient->smsapiComService($smsApiToken); 
  222.                     $result $service->pingFeature()->ping();
  223.                             //dd($result);
  224.                     if ($result->authorized) {
  225.                         $smsTemplates = new SmsTemplates();
  226.                         $smsTemplatesfindOneByTypeAfter $smsTemplatesRepository->findOneByType($smsTemplates::TYPE_AFTER);
  227.                         $smsContent strtr($smsTemplatesfindOneByTypeAfter->getContent(), $const);
  228.                         $smsBag SendSmsBag::withMessage($phone$smsContent);
  229.                         //dd($smsContent);
  230.                         $smsServiceBack $service->smsFeature()->sendSms($smsBag);
  231.                         $smsHistory = new SmsHistory();
  232.                         $smsHistory->setIdSmsapi($smsServiceBack->id);
  233.                         $smsHistory->setPoints($smsServiceBack->points);
  234.                         $smsHistory->setDateSent($smsServiceBack->dateSent);
  235.                         $smsHistory->setStatus($smsServiceBack->status);
  236.                         $smsHistory->setContent($smsServiceBack->content->message);
  237.                         $smsHistory->setEvent($event);
  238.                         $smsHistoryRepository->save($smsHistorytrue);
  239.                        }                                    
  240.                    } else {
  241.                     $this->addFlash('app_event_error''Phone address is empty. Cannot send sms!');
  242.                     return $this->redirectToRoute('app_email_templates_index', [], Response::HTTP_SEE_OTHER); 
  243.                 }     
  244.             }
  245.         }
  246.         return new Response('OK!');
  247.     }
  248.     #[Route('/cronjob_send_email_user'name'app_cronjob_send_email_user')]
  249.     public function cronSendEmailUser(EventRepository $eventRepositoryEmailTemplatesRepository $emailTemplatesRepositoryConfigDataService $configDataServiceSmsHistoryRepository $smsHistoryRepositorySmsTemplatesRepository $smsTemplatesRepositoryRequest $request): Response
  250.     {
  251.         $emailTemplates = new EmailTemplates();
  252.         $emailTemplatesfindOneByTypeBefore $emailTemplatesRepository->findOneByType($emailTemplates::TYPE_USER_REMINDER);
  253.            //$baseURL = $request->getSchemeAndHttpHost();
  254.         $events $eventRepository->getEventsToSendEmailUser('active');
  255.         //dd($events);
  256.         //$newDate = new \DateTime('2022-12-31');
  257.         //$events = $eventRepository->findBy(['event_date' => $newDate]);
  258.         //dd($events);
  259.         foreach($events as $event) {
  260.             if($event->getClient()->getEmail()){
  261.                 if( $configDataService->get('Transport') == 'sendgrid') {
  262.                     $sendGridKey $configDataService->get('sendGridKey');
  263.                     $dsn "sendgrid+api://"$sendGridKey ."@default";
  264.                     $transport Transport::fromDsn($dsn);
  265.                     $mailer = new Mailer($transport);
  266.                 } else if($configDataService->get('Transport') == 'smtp') {
  267.                    //dd($configDataService);
  268.                     $host $configDataService->get('Host');
  269.                     $port $configDataService->get('port');
  270.                     $username $configDataService->get('username');
  271.                     $password $configDataService->get('password');
  272.                     $dsn 'smtp://'.$username.':'.$password.'@'.$host.':'$port;
  273.                     $transport Transport::fromDsn($dsn);
  274.                     $mailer = new Mailer($transport);
  275.                 }
  276.                 $company_name $configDataService->get('company_name');
  277.                 $eventDate = ($event->getEventDate() != null) ? $event->getEventDate()->format('d-m-Y') : ''
  278.                 
  279.                 $contractDate = ($event->getContractDate() != null) ? $event->getContractDate()->format('d-m-Y') : ''
  280.                 //dd($newEventDetailsPage);
  281.                 $const = array(
  282.                     '[EVENT_DATE]'  => $eventDate,
  283.                     '[CONTRACT_NUMBER]' => $event->getContractNumber() . '/'$contractDate,
  284.                     '[LOCATION]' => $event->getEventLocation()->getName(),
  285.                     '[TOTAL]'=> $event->getEventPrice()->getTotal(),
  286.                     '[ADVANCE]'=> $event->getEventPrice()->getAdvance(),
  287.                     '[AMOUNT DUE]'=> $event->getEventPrice()->getAmountDue(),
  288.                     '[EMAIL]' => $event->getClient()->getEmail(),
  289.                     '[PHONE]'   => $event->getClient()->getPhone(),
  290.                     '[FIRSTNAME]'   => $event->getClient()->getFirstName(),
  291.                     '[LASTNAME]'   => $event->getClient()->getLastName(),
  292.                     '[COMPANY_NAME]' => $company_name,
  293.                     '[SERVICE_NAME]' => $event->getService()->getName(),
  294.                 );
  295.                 //dd($const);
  296.                 $emailContent strtr($emailTemplatesfindOneByTypeBefore->getContent(), $const);
  297.                 $notificationEventDetailsJson $configDataService->get('email_user_reminder');
  298.                 $notificationEventDetailsUsers json_decode($notificationEventDetailsJsontrue512JSON_THROW_ON_ERROR);
  299.                 $notificationEventDetails json_decode($notificationEventDetailsUsers['users'], true512JSON_THROW_ON_ERROR);
  300.                 //dd($emailContent);
  301.                 $emailTitle str_replace(array_keys($const), array_values($const), $emailTemplatesfindOneByTypeBefore->getTitle());
  302.                 $fromName $configDataService->get('fromName');
  303.                 $fromEmail $configDataService->get('fromEmail');
  304.                 if(in_array($fromEmail$notificationEventDetails)) {
  305.                         //dd($notificationEventDetails);
  306.                     foreach($notificationEventDetails as $key=>$notificationEventDetail) {
  307.                         if($notificationEventDetail == $fromEmail) {
  308.                             unset($notificationEventDetails[$key]);
  309.                         }           
  310.                     }
  311.                 }
  312.                 $notificationEventDetailsMail =  array_values($notificationEventDetails);
  313.                 $email = (new Email())
  314.                     ->from(new Address($fromEmail$fromName))
  315.                     ->to($fromEmail)
  316.                     ->cc(...$notificationEventDetailsMail)
  317.                     //->bcc('bcc@example.com')
  318.                     //->replyTo('fabien@example.com')
  319.                     //->priority(Email::PRIORITY_HIGH)
  320.                     ->subject($emailTitle)
  321.                     ->html($emailContent);
  322.                 try {
  323.                     $mailer->send($email);
  324.                 } catch(TransportExceptionInterface $e) {
  325.                     $this->addFlash('app_event_error'$e->getMessage());
  326.                    // return $this->redirectToRoute('app_event_index', [], Response::HTTP_SEE_OTHER);       
  327.                 }
  328.             }
  329.         }
  330.         return new Response('OK!');
  331.     }
  332.      #[Route('/cronjob_send_email_expire_warranties'name'app_cronjob_send_email_expire_warranties')]
  333.     public function cronSendEmailExpireWarranty(WarrantyRepository $warrantyRepositoryEmailTemplatesRepository $emailTemplatesRepositoryConfigDataService $configDataServiceSmsTemplatesRepository $smsTemplatesRepositoryRequest $requestEnvironment $twig): Response
  334.     {
  335.         $configWarrantyDaysReminder $configDataService->get('warrantyDaysReminder');
  336.            //$baseURL = $request->getSchemeAndHttpHost();
  337.         $warranties $warrantyRepository->findWarrantiesActiveToSendEmail('active'$configWarrantyDaysReminder);
  338.         //dd($events);
  339.         //$newDate = new \DateTime('2022-12-31');
  340.         //$events = $eventRepository->findBy(['event_date' => $newDate]);
  341.         //dd($events);
  342.         foreach($warranties as $warranty) {
  343.             if($configDataService->get('fromEmail') != null){
  344.                 if( $configDataService->get('Transport') == 'sendgrid') {
  345.                     $sendGridKey $configDataService->get('sendGridKey');
  346.                     $dsn "sendgrid+api://"$sendGridKey ."@default";
  347.                     $transport Transport::fromDsn($dsn);
  348.                     $mailer = new Mailer($transport);
  349.                 } else if($configDataService->get('Transport') == 'smtp') {
  350.                    //dd($configDataService);
  351.                     $host $configDataService->get('Host');
  352.                     $port $configDataService->get('port');
  353.                     $username $configDataService->get('username');
  354.                     $password $configDataService->get('password');
  355.                     $dsn 'smtp://'.$username.':'.$password.'@'.$host.':'$port;
  356.                     $transport Transport::fromDsn($dsn);
  357.                     $mailer = new Mailer($transport);
  358.                 }
  359.                 //dd($emailContent);
  360.                 $emailTitle "Notificare garantie: Peste "$configWarrantyDaysReminder ." zile expira " $warranty->getName();
  361.                 $fromName $configDataService->get('fromName');
  362.                 $fromEmail $configDataService->get('fromEmail');
  363.                 $email = (new TemplatedEmail())
  364.                     ->from(new Address($fromEmail$fromName))
  365.                     ->to($fromEmail)
  366.                     //->bcc('bcc@example.com')
  367.                     //->replyTo('fabien@example.com')
  368.                     //->priority(Email::PRIORITY_HIGH)
  369.                     ->subject($emailTitle)
  370.                     ->htmlTemplate('emails/warranty_notification.html.twig')
  371.                     ->context([
  372.                         'warranty' => $warranty,
  373.                         'config'    => $configDataService,
  374.                     ]);
  375.                     $renderer = new BodyRenderer($twig);
  376.                     $renderer->render($email);
  377.                 try {
  378.                     $mailer->send($email);
  379.                 } catch(TransportExceptionInterface $e) {
  380.                     $this->addFlash('app_event_error'$e->getMessage());
  381.                    // return $this->redirectToRoute('app_event_index', [], Response::HTTP_SEE_OTHER);       
  382.                 }
  383.             }
  384.         }
  385.         return new Response('OK!');
  386.     }
  387. }