src/MDS/AdministrationBundle/Controller/BlockedProposalController.php line 251

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by Mediterranean Develup Solutions
  4.  * User: jorge.defreitas@develup.solutions
  5.  * Date: 19/03/2018
  6.  * Time: 15:32
  7.  */
  8. namespace App\MDS\AdministrationBundle\Controller;
  9. use App\Entity\Client;
  10. use App\Entity\User;
  11. use App\MDS\EventsBundle\Entity\Proposal;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use App\MDS\EventsBundle\Entity\ProposalAgents;
  14. use App\MDS\GreenPatioBundle\Entity\Reservation;
  15. use Psr\Log\LoggerInterface;
  16. use Swift_Mailer;
  17. use Swift_Message;
  18. use Swift_SmtpTransport;
  19. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. use Symfony\Component\HttpFoundation\JsonResponse;
  22. use Symfony\Component\HttpFoundation\Request;
  23. use Symfony\Component\HttpFoundation\Response;
  24. use Symfony\Component\Validator\Constraints as Assert;
  25. class BlockedProposalController extends AbstractController
  26. {
  27.     /**
  28.      * @Route("/block/proposals/",  name="block_proposals")
  29.      */
  30.     public function blockProposalAction(Request $request)
  31.     {
  32.         $em $this->getDoctrine()->getManager();
  33.         $proposals $em->getRepository(Proposal::class)->findAll();
  34.         $hoymenostreinta date('Y-m-d'strtotime('-31 day'));
  35.         $hoymenostreinta strtotime($hoymenostreinta);
  36.         foreach ($proposals as $proposal){
  37.             //Solo expiran los proposal confirmados
  38.             $expiredTime = ((strtotime(($proposal->getDateEventEndAt())->format('Y-m-d'))< $hoymenostreinta) and (($proposal->getStatus()== 'Confirmed')));
  39.             if ($expiredTime){
  40.                 // Remover los asistentes de In-Out
  41. //                $propSupServ = $em->getRepository('EventsBundle:ProposalsSupplierServices')->findByPrpoposalId($proposal->getId());
  42. //                foreach ($propSupServ as $item) {
  43. //                    if(($item->getServiceCatId() == 15) and ($item->getSupplierId() == 4)){
  44. //                        //Si es un asistente y el proveedor es In-Out
  45. //                        $em->remove($item);
  46. //                        $em->flush();
  47. //                    }
  48. //                }
  49.                 //Buscamos los agentes a notificar
  50.                 $agent $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  51.                 $agentMail $agent->getEmail();
  52.                 $mailAgent null;
  53.                 $propAgntsPer $em->getRepository(ProposalAgents::class)->findByIdProp($proposal->getId());
  54.                 if (($propAgntsPer[0]->getAgTwo()!=null) and ($propAgntsPer[0]->getAgTwo()!=0))
  55.                 {$mailAgent[] = $em->getRepository(User::class)->findOneById($propAgntsPer[0]->getAgTwo())->getEmail();}
  56.                 if (($propAgntsPer[0]->getAgThree()!=null) and ($propAgntsPer[0]->getAgThree()!=0))
  57.                 {$mailAgent[] = $em->getRepository(User::class)->findOneById($propAgntsPer[0]->getAgThree())->getEmail();}
  58.                 if (($propAgntsPer[0]->getAgFour()!=null) and ($propAgntsPer[0]->getAgFour()!=0))
  59.                 {$mailAgent[] = $em->getRepository(User::class)->findOneById($propAgntsPer[0]->getAgFour())->getEmail();}
  60.                 //Se bloquea el proposal
  61.                 $proposal->setStatus('Blocked');
  62.                 $em->persist($proposal);
  63.                 $em->flush();
  64.                 //Se prepara el correo con los agentes a notificar
  65.                 $firmGmail $agent->getFirmGmail();
  66.                 $data = array(
  67.                     'body' => 'P#' $proposal->getId() . ', ' $proposal->getTitle() . '<br><a href="http://' $request->server->get('HTTP_HOST') . '/events/proposal/edit/' $proposal->getId() . '">Ir al Proposal</a> - <a href="http://' $request->server->get('HTTP_HOST') . '/events/proposal/summary/prices/' $proposal->getId() . '">Ver Resumen</a><br><br>Notificación de Proposal: Este Proposal ha sido Bloqueado debido a que no ha sido facturado en el plazo establecido.' '<br><br>',
  68.                     'firm' => $firmGmail,
  69.                 );
  70.                 // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  71.                 $transporter = new Swift_SmtpTransport();
  72.                 $transporter->setHost('smtp.gmail.com')
  73.                     ->setEncryption('ssl')//ssl / tls
  74.                     ->setPort(465)// 465 / 587
  75. //                        ->setUsername($agentMail)
  76. //                        ->setPassword($passGmail)//;
  77.                     ->setUsername('desarrollo@develup.solutions')
  78.                     ->setPassword('MeDITeRRANeAN_Develup30102023#');
  79.                 $mailer = new Swift_Mailer($transporter);
  80.                 $message = new Swift_Message();
  81.                 $message->setSubject('P#' $proposal->getId() . ', Alerta de Proposal Bloqueado')
  82.                     ->setSender($agentMail)
  83.                     ->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
  84.                     ->setReplyTo($agentMail)
  85.                     ->setTo($mailAgent)
  86.                     ->setBody(
  87.                         $this->renderView(
  88.                             'mail/structure-mail.html.twig',
  89.                             array('data' => $data)
  90.                         ),
  91.                         'text/html'
  92.                     );
  93.                 $mailer->send($message);
  94.             } else {
  95.                 if (($proposal->getStatus()== 'Confirmed')) {
  96.                     //Verifico si esta a 10 dias de expirar para enviar notificación
  97.                     $hoymenosveinte date('Y-m-d'strtotime('-19 day'));
  98.                     $hoymenosveinte strtotime($hoymenosveinte);
  99.                     // Hoy > ffin +19 dias -- Enviar correo de notificacion al agente
  100.                     if ($hoymenosveinte strtotime(($proposal->getDateEventEndAt())->format('Y-m-d'))) {
  101.                         $agent $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  102.                         $agentMail $agent->getEmail();
  103. //                        $mailAgent[] = $agent->getEmail();
  104.                         $mailAgent null;
  105.                         $propAgntsPer $em->getRepository(ProposalAgents::class)->findByIdProp($proposal->getId());
  106.                         if (($propAgntsPer[0]->getAgTwo()!=null) and ($propAgntsPer[0]->getAgTwo()!=0))
  107.                             {$mailAgent[] = $em->getRepository(User::class)->findOneById($propAgntsPer[0]->getAgTwo())->getEmail();}
  108.                         if (($propAgntsPer[0]->getAgThree()!=null) and ($propAgntsPer[0]->getAgThree()!=0))
  109.                             {$mailAgent[] = $em->getRepository(User::class)->findOneById($propAgntsPer[0]->getAgThree())->getEmail();}
  110.                         if (($propAgntsPer[0]->getAgFour()!=null) and ($propAgntsPer[0]->getAgFour()!=0))
  111.                             {$mailAgent[] = $em->getRepository(User::class)->findOneById($propAgntsPer[0]->getAgFour())->getEmail();}
  112.                         $firmGmail $agent->getFirmGmail();
  113.                         $data = array(
  114.                             'body' => 'P#' $proposal->getId() . ', ' $proposal->getTitle() . '<br><a href="http://' $request->server->get('HTTP_HOST') . '/events/proposal/edit/' $proposal->getId() . '">Ir al Proposal</a> - <a href="http://' $request->server->get('HTTP_HOST') . '/events/proposal/summary/prices/' $proposal->getId() . '">Ver Resumen</a><br><br>Alerta de Proposal: Este Proposal será Bloqueado al pasar 30 días de finalizado el evento si no ha sido facturado.' '<br><br>',
  115.                             'firm' => $firmGmail,
  116.                         );
  117.                         // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  118.                         $transporter = new Swift_SmtpTransport();
  119.                         $transporter->setHost('smtp.gmail.com')
  120.                             ->setEncryption('ssl')//ssl / tls
  121.                             ->setPort(465)// 465 / 587
  122. //                        ->setUsername($agentMail)
  123. //                        ->setPassword($passGmail)//;
  124.                             ->setUsername('desarrollo@develup.solutions')
  125.                             ->setPassword('MeDITeRRANeAN_Develup30102023#');
  126.                         $mailer = new Swift_Mailer($transporter);
  127.                         $message = new Swift_Message();
  128.                         $message->setSubject('P#' $proposal->getId() . ', Alerta de Proposal a Bloquear')
  129.                             ->setSender($agentMail)
  130.                             ->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
  131.                             ->setReplyTo($agentMail)
  132.                             ->setTo($mailAgent)
  133.                             ->setBody(
  134.                                 $this->renderView(
  135.                                     'mail/structure-mail.html.twig',
  136.                                     array('data' => $data)
  137.                                 ),
  138.                                 'text/html'
  139.                             );
  140.                         $mailer->send($message);
  141.                     }
  142.                 }
  143.             }
  144.         }
  145.         return new JsonResponse('Done');
  146.     }
  147.     /**
  148.      * @Route("/update/proposals/agents",  name="update_proposals_agents")
  149.      */
  150.     public function updateProposalAgentsAction(Request $request)
  151.     {
  152.         $em $this->getDoctrine()->getManager();
  153.         $proposals $em->getRepository(Proposal::class)->findAll();
  154.         foreach ($proposals as $proposal){
  155.             $propAgents = new ProposalAgents();
  156.             $propAgents->setAgOne(0);
  157.             $propAgents->setAgTwo(0);
  158.             $propAgents->setAgThree(0);
  159.             $propAgents->setAgFour(0);
  160.             $propAgents->setAgOnePerc(0);
  161.             $propAgents->setAgTwoPerc(0);
  162.             $propAgents->setAgThreePerc(0);
  163.             $propAgents->setAgFourPerc(0);
  164.             $propAgents->setIdProp($proposal->getId());
  165.             $propAgents->setAgOne($proposal->getAgentId());
  166.             if ($proposal->getAgentTwoId() != null){
  167.                 $str_array_agents explode(","$proposal->getAgentTwoId());
  168.                 if($str_array_agents[0]!=999999){
  169.                     $propAgents->setAgTwo($str_array_agents[0]);
  170.                 }
  171.                 if ((sizeof($str_array_agents)>1) and ($str_array_agents[1]!=999999)){
  172.                     $propAgents->setAgThree($str_array_agents[1]);
  173.                 }
  174.                 if ((sizeof($str_array_agents)>2) and ($str_array_agents[2]!=999999)){
  175.                     $propAgents->setAgFour($str_array_agents[2]);
  176.                 }
  177.             }
  178.             $propsearch $em->getRepository(ProposalAgents::class)->findByIdProp($proposal->getId());
  179.             if ($propsearch == null){
  180.                 $em->persist($propAgents);
  181.                 $em->flush();
  182.             }
  183.         }
  184.         return new JsonResponse('Done update Proposal Agents');
  185.     }
  186.     /**
  187.      * @Route("/reservations-greenpatio/sendalertmail/",  name="send_alert_mail")
  188.      * Cuando hay un bloqueo, se envia un correo al cliente. Al pasar 5 días se le recuerda. A la semana se cancela el bloqueo si no hay confirmacion
  189.      */
  190.     public function sendAlertMailAction(Request $request){
  191.         $em $this->getDoctrine()->getManager();
  192.         $parameters = array(
  193.             'id' => 0,
  194.         );
  195.         $dql 'SELECT i
  196.                 FROM GreenPatioBundle:ReservationMailAlertClient i
  197.                 WHERE  i.reservationId != :id';
  198.         $query $em->createQuery($dql)->setParameters($parameters);
  199.         $alertas $query->getResult();
  200.         $hoy = new \DateTime("now"NULL);
  201.         foreach ($alertas as $alerta){
  202.             // Verificamos si es necesario alertar
  203.             if (!$alerta->getAlertSended()){
  204.                 $reserva $em->getRepository(Reservation::class)->findOneById($alerta->getReservationId());
  205.                 if ($alerta->getAlertDateTime()<$hoy){
  206.                     //INICIO: Enviamos la notificacion de 48 horas al cliente y al agente
  207.                     $agent $em->getRepository(User::class)->findOneById($alerta->getAgentId());
  208.                     $client $em->getRepository(Client::class)->findOneById($alerta->getClientId());
  209.                     $mailAddressTo $alerta->getClientMail();
  210.                     $mailAddressFrom $alerta->getAgentMail();
  211.                     $replyTo = array(
  212.                         $alerta->getClientMail() => $client->getName(),
  213.                         $alerta->getAgentMail() => $agent->getName().' '$agent->getLastName(),
  214.                     );
  215.                     $mailSubject 'Notificación de Bloqueo - Reserva de espacio en Green Patio';
  216.                     $mailBody 'Estimado cliente,'.
  217.                         '<br><br> Nos ponemos en contacto con usted para recordarle que su reserva expira en 48 horas. Si pasado este tiempo no hemos recibido confirmación por su parte, procederemos a la cancelación de la misma.'.
  218.                         '<br><br>Reserva: ' $reserva->getId() .' - '$reserva->getTitle();
  219.                     if (!empty($reserva->getDays())){ $mailBody $mailBody '<br>Días bloqueados: '.$reserva->getDays(); }
  220.                     $mailBody $mailBody '<br><br><br>Muchas gracias por su colaboración.<br><br><br>';
  221.                     $agentMail $mailAddressFrom;
  222.                     $mailAgent $agentMail;
  223.                     //Se prepara el correo con los agentes a notificar
  224.                     $firmGmail $agent->getFirmGmail();
  225.                     $data = array(
  226.                         'body' => $mailBody,
  227.                         'firm' => $firmGmail,
  228.                     );
  229.                     // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  230.                     $transporter = new Swift_SmtpTransport();
  231.                     $transporter->setHost('smtp.gmail.com')
  232.                         ->setEncryption('ssl')//ssl / tls
  233.                         ->setPort(465)// 465 / 587
  234.                         ->setUsername('desarrollo@develup.solutions')
  235.                         ->setPassword('MeDITeRRANeAN_Develup30102023#');
  236.                     $mailer = new Swift_Mailer($transporter);
  237.                     $message = new Swift_Message();
  238.                     $message->setSubject($mailSubject)
  239.                         ->setSender($agentMail)
  240.                         ->setFrom(array("desarrollo@develup.solutions" => "Green Patio"))
  241.                         ->setReplyTo($agentMail)
  242.                         ->setTo($replyTo)
  243.                         ->setBody(
  244.                             $this->renderView(
  245.                                 'mail/structure-mail.html.twig',
  246.                                 array('data' => $data)
  247.                             ),
  248.                             'text/html'
  249.                         );
  250.                     $mailer->send($message);
  251.                     //FIN: Enviamos la notificacion de 48 horas al cliente y al agente
  252.                     $alerta->setAlertSended(true);
  253.                     $em->persist($alerta);
  254.                     $em->flush();
  255.                 } else {
  256. //                    d('NO hemos pasado la fecha de alerta');
  257.                 }
  258.             } else {
  259.                 // Verificamos si es necesario cancelar
  260.                 if ($alerta->getCancelDateTime()<$hoy){
  261.                     //INICIO: Enviamos la notificacion de cancelacion al cliente y al agente
  262.                     $reserva $em->getRepository(Reservation::class)->findOneById($alerta->getReservationId());
  263.                     $agent $em->getRepository(User::class)->findOneById($alerta->getAgentId());
  264.                     $client $em->getRepository(Client::class)->findOneById($alerta->getClientId());
  265.                     $mailAddressTo $alerta->getClientMail();
  266.                     $mailAddressFrom $alerta->getAgentMail();
  267.                     $replyTo = array(
  268.                         $alerta->getClientMail() => $client->getName(),
  269.                         $alerta->getAgentMail() => $agent->getName().' '$agent->getLastName(),
  270.                     );
  271.                     $mailSubject 'Notificación de Bloqueo - Reserva de espacio en Green Patio';
  272.                     $mailBody 'Estimado cliente,'.
  273. //                        '<br><br>Le informamos que hemos procedido al desbloqueo del evento en la fecha en referencia, al no haber recibido ninguna confirmación de dicho evento en la fecha reservada. Para cualquier consulta por favor póngase en contacto con nuestro Departamento Comercial.'.
  274.                         '<br><br>Le informamos que hemos procedido al desbloqueo de la fecha del evento en referencia, al no haber recibido ninguna noticia por su parte. Para cualquier consulta por favor póngase en contacto con nuestro Departamento Comercial.'.
  275.                         '<br><br>Reserva: ' $reserva->getId() .' - '$reserva->getTitle();
  276. //                    if (!empty($reserva->getDays())){ $mailBody = $mailBody . '<br>Días bloqueados: '.$reserva->getDays(); }
  277.                     $mailBody $mailBody '<br>Días bloqueados: '.$reserva->getDays();            // El mensaje hace referencia a este campo por eso se quita el condicional
  278.                     $mailBody $mailBody '<br><br><br>Atentamente<br><br>';
  279.                     $agentMail $mailAddressFrom;
  280.                     $mailAgent $agentMail;
  281.                     //Se prepara el correo con los agentes a notificar
  282.                     $firmGmail $agent->getFirmGmail();
  283.                     $data = array(
  284.                         'body' => $mailBody,
  285.                         'firm' => $firmGmail,
  286.                     );
  287.                     // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  288.                     $transporter = new Swift_SmtpTransport();
  289.                     $transporter->setHost('smtp.gmail.com')
  290.                         ->setEncryption('ssl')//ssl / tls
  291.                         ->setPort(465)// 465 / 587
  292.                         ->setUsername('desarrollo@develup.solutions')
  293.                         ->setPassword('MeDITeRRANeAN_Develup30102023#');
  294.                     $mailer = new Swift_Mailer($transporter);
  295.                     $message = new Swift_Message();
  296.                     $message->setSubject($mailSubject)
  297.                         ->setSender($agentMail)
  298.                         ->setFrom(array("desarrollo@develup.solutions" => "Green Patio"))
  299.                         ->setReplyTo($agentMail)
  300.                         ->setTo($replyTo)
  301.                         ->setBody(
  302.                             $this->renderView(
  303.                                 'mail/structure-mail.html.twig',
  304.                                 array('data' => $data)
  305.                             ),
  306.                             'text/html'
  307.                         );
  308.                     $mailer->send($message);
  309.                     //FIN: Enviamos la notificacion de cancelacion al cliente y al agente
  310.                     $alerta->setCancelSended(true);
  311.                     $alerta->setOldReservationId($alerta->getReservationId());
  312.                     $alerta->setReservationId(0);
  313.                     $em->persist($alerta);
  314.                     $em->flush();
  315.                     $reserva $em->getRepository(Reservation::class)->findOneById($alerta->getOldReservationId());
  316.                     $reserva->setStatus('Cotizado');
  317.                     $em->persist($reserva);
  318.                     $em->flush();
  319.                 }
  320.             }
  321.         }
  322.         return new JsonResponse('Done');
  323.     }
  324. }