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

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('desarrollo@develup.solutions')
  76.                     ->setPassword('utvh hzoi wfdo ztjs');
  77. //                    ->setPassword('MeDITeRRANeAN_Develup30102023#');
  78.                 $mailer = new Swift_Mailer($transporter);
  79.                 $message = new Swift_Message();
  80.                 $message->setSubject('P#' $proposal->getId() . ', Alerta de Proposal Bloqueado')
  81.                     ->setSender($agentMail)
  82.                     ->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
  83.                     ->setReplyTo($agentMail)
  84.                     ->setTo($mailAgent)
  85.                     ->setBody(
  86.                         $this->renderView(
  87.                             'mail/structure-mail.html.twig',
  88.                             array('data' => $data)
  89.                         ),
  90.                         'text/html'
  91.                     );
  92.                 $mailer->send($message);
  93.             } else {
  94.                 if (($proposal->getStatus()== 'Confirmed')) {
  95.                     //Verifico si esta a 10 dias de expirar para enviar notificación
  96.                     $hoymenosveinte date('Y-m-d'strtotime('-19 day'));
  97.                     $hoymenosveinte strtotime($hoymenosveinte);
  98.                     // Hoy > ffin +19 dias -- Enviar correo de notificacion al agente
  99.                     if ($hoymenosveinte strtotime(($proposal->getDateEventEndAt())->format('Y-m-d'))) {
  100.                         $agent $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  101.                         $agentMail $agent->getEmail();
  102. //                        $mailAgent[] = $agent->getEmail();
  103.                         $mailAgent null;
  104.                         $propAgntsPer $em->getRepository(ProposalAgents::class)->findByIdProp($proposal->getId());
  105.                         if (($propAgntsPer[0]->getAgTwo()!=null) and ($propAgntsPer[0]->getAgTwo()!=0))
  106.                             {$mailAgent[] = $em->getRepository(User::class)->findOneById($propAgntsPer[0]->getAgTwo())->getEmail();}
  107.                         if (($propAgntsPer[0]->getAgThree()!=null) and ($propAgntsPer[0]->getAgThree()!=0))
  108.                             {$mailAgent[] = $em->getRepository(User::class)->findOneById($propAgntsPer[0]->getAgThree())->getEmail();}
  109.                         if (($propAgntsPer[0]->getAgFour()!=null) and ($propAgntsPer[0]->getAgFour()!=0))
  110.                             {$mailAgent[] = $em->getRepository(User::class)->findOneById($propAgntsPer[0]->getAgFour())->getEmail();}
  111.                         $firmGmail $agent->getFirmGmail();
  112.                         $data = array(
  113.                             '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>',
  114.                             'firm' => $firmGmail,
  115.                         );
  116.                         // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  117.                         $transporter = new Swift_SmtpTransport();
  118.                         $transporter->setHost('smtp.gmail.com')
  119.                             ->setEncryption('ssl')//ssl / tls
  120.                             ->setPort(465)// 465 / 587
  121.                             ->setUsername('desarrollo@develup.solutions')
  122.                             ->setPassword('utvh hzoi wfdo ztjs');
  123. //                            ->setPassword('MeDITeRRANeAN_Develup30102023#');
  124.                         $mailer = new Swift_Mailer($transporter);
  125.                         $message = new Swift_Message();
  126.                         $message->setSubject('P#' $proposal->getId() . ', Alerta de Proposal a Bloquear')
  127.                             ->setSender($agentMail)
  128.                             ->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
  129.                             ->setReplyTo($agentMail)
  130.                             ->setTo($mailAgent)
  131.                             ->setBody(
  132.                                 $this->renderView(
  133.                                     'mail/structure-mail.html.twig',
  134.                                     array('data' => $data)
  135.                                 ),
  136.                                 'text/html'
  137.                             );
  138.                         $mailer->send($message);
  139.                     }
  140.                 }
  141.             }
  142.         }
  143.         return new JsonResponse('Done');
  144.     }
  145.     /**
  146.      * @Route("/update/proposals/agents",  name="update_proposals_agents")
  147.      */
  148.     public function updateProposalAgentsAction(Request $request)
  149.     {
  150.         $em $this->getDoctrine()->getManager();
  151.         $proposals $em->getRepository(Proposal::class)->findAll();
  152.         foreach ($proposals as $proposal){
  153.             $propAgents = new ProposalAgents();
  154.             $propAgents->setAgOne(0);
  155.             $propAgents->setAgTwo(0);
  156.             $propAgents->setAgThree(0);
  157.             $propAgents->setAgFour(0);
  158.             $propAgents->setAgOnePerc(0);
  159.             $propAgents->setAgTwoPerc(0);
  160.             $propAgents->setAgThreePerc(0);
  161.             $propAgents->setAgFourPerc(0);
  162.             $propAgents->setIdProp($proposal->getId());
  163.             $propAgents->setAgOne($proposal->getAgentId());
  164.             if ($proposal->getAgentTwoId() != null){
  165.                 $str_array_agents explode(","$proposal->getAgentTwoId());
  166.                 if($str_array_agents[0]!=999999){
  167.                     $propAgents->setAgTwo($str_array_agents[0]);
  168.                 }
  169.                 if ((sizeof($str_array_agents)>1) and ($str_array_agents[1]!=999999)){
  170.                     $propAgents->setAgThree($str_array_agents[1]);
  171.                 }
  172.                 if ((sizeof($str_array_agents)>2) and ($str_array_agents[2]!=999999)){
  173.                     $propAgents->setAgFour($str_array_agents[2]);
  174.                 }
  175.             }
  176.             $propsearch $em->getRepository(ProposalAgents::class)->findByIdProp($proposal->getId());
  177.             if ($propsearch == null){
  178.                 $em->persist($propAgents);
  179.                 $em->flush();
  180.             }
  181.         }
  182.         return new JsonResponse('Done update Proposal Agents');
  183.     }
  184.     /**
  185.      * @Route("/reservations-greenpatio/sendalertmail/",  name="send_alert_mail")
  186.      * 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
  187.      */
  188.     public function sendAlertMailAction(Request $request){
  189.         $em $this->getDoctrine()->getManager();
  190.         $parameters = array(
  191.             'id' => 0,
  192.         );
  193.         $dql 'SELECT i
  194.                 FROM GreenPatioBundle:ReservationMailAlertClient i
  195.                 WHERE  i.reservationId != :id';
  196.         $query $em->createQuery($dql)->setParameters($parameters);
  197.         $alertas $query->getResult();
  198.         $hoy = new \DateTime("now"NULL);
  199.         foreach ($alertas as $alerta){
  200.             // Verificamos si es necesario alertar
  201.             if (!$alerta->getAlertSended()){
  202.                 $reserva $em->getRepository(Reservation::class)->findOneById($alerta->getReservationId());
  203.                 if ($alerta->getAlertDateTime()<$hoy){
  204.                     //INICIO: Enviamos la notificacion de 48 horas al cliente y al agente
  205.                     $agent $em->getRepository(User::class)->findOneById($alerta->getAgentId());
  206.                     $client $em->getRepository(Client::class)->findOneById($alerta->getClientId());
  207.                     $mailAddressTo $alerta->getClientMail();
  208.                     $mailAddressFrom $alerta->getAgentMail();
  209.                     $replyTo = array(
  210.                         $alerta->getClientMail() => $client->getName(),
  211.                         $alerta->getAgentMail() => $agent->getName().' '$agent->getLastName(),
  212.                     );
  213.                     $mailSubject 'Notificación de Bloqueo - Reserva de espacio en Green Patio';
  214.                     $mailBody 'Estimado cliente,'.
  215.                         '<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.'.
  216.                         '<br><br>Reserva: ' $reserva->getId() .' - '$reserva->getTitle();
  217.                     if (!empty($reserva->getDays())){ $mailBody $mailBody '<br>Días bloqueados: '.$reserva->getDays(); }
  218.                     $mailBody $mailBody '<br><br><br>Muchas gracias por su colaboración.<br><br><br>';
  219.                     $agentMail $mailAddressFrom;
  220.                     $mailAgent $agentMail;
  221.                     //Se prepara el correo con los agentes a notificar
  222.                     $firmGmail $agent->getFirmGmail();
  223.                     $data = array(
  224.                         'body' => $mailBody,
  225.                         'firm' => $firmGmail,
  226.                     );
  227.                     // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  228.                     $transporter = new Swift_SmtpTransport();
  229.                     $transporter->setHost('smtp.gmail.com')
  230.                         ->setEncryption('ssl')//ssl / tls
  231.                         ->setPort(465)// 465 / 587
  232.                         ->setUsername('desarrollo@develup.solutions')
  233.                         ->setPassword('utvh hzoi wfdo ztjs');
  234. //                        ->setPassword('MeDITeRRANeAN_Develup30102023#');
  235.                     $mailer = new Swift_Mailer($transporter);
  236.                     $message = new Swift_Message();
  237.                     $message->setSubject($mailSubject)
  238.                         ->setSender($agentMail)
  239.                         ->setFrom(array("desarrollo@develup.solutions" => "Green Patio"))
  240.                         ->setReplyTo($agentMail)
  241.                         ->setTo($replyTo)
  242.                         ->setBody(
  243.                             $this->renderView(
  244.                                 'mail/structure-mail.html.twig',
  245.                                 array('data' => $data)
  246.                             ),
  247.                             'text/html'
  248.                         );
  249.                     $mailer->send($message);
  250.                     //FIN: Enviamos la notificacion de 48 horas al cliente y al agente
  251.                     $alerta->setAlertSended(true);
  252.                     $em->persist($alerta);
  253.                     $em->flush();
  254.                 } else {
  255. //                    d('NO hemos pasado la fecha de alerta');
  256.                 }
  257.             } else {
  258.                 // Verificamos si es necesario cancelar
  259.                 if ($alerta->getCancelDateTime()<$hoy){
  260.                     //INICIO: Enviamos la notificacion de cancelacion al cliente y al agente
  261.                     $reserva $em->getRepository(Reservation::class)->findOneById($alerta->getReservationId());
  262.                     $agent $em->getRepository(User::class)->findOneById($alerta->getAgentId());
  263.                     $client $em->getRepository(Client::class)->findOneById($alerta->getClientId());
  264.                     $mailAddressTo $alerta->getClientMail();
  265.                     $mailAddressFrom $alerta->getAgentMail();
  266.                     $replyTo = array(
  267.                         $alerta->getClientMail() => $client->getName(),
  268.                         $alerta->getAgentMail() => $agent->getName().' '$agent->getLastName(),
  269.                     );
  270.                     $mailSubject 'Notificación de Bloqueo - Reserva de espacio en Green Patio';
  271.                     $mailBody 'Estimado cliente,'.
  272. //                        '<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.'.
  273.                         '<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.'.
  274.                         '<br><br>Reserva: ' $reserva->getId() .' - '$reserva->getTitle();
  275. //                    if (!empty($reserva->getDays())){ $mailBody = $mailBody . '<br>Días bloqueados: '.$reserva->getDays(); }
  276.                     $mailBody $mailBody '<br>Días bloqueados: '.$reserva->getDays();            // El mensaje hace referencia a este campo por eso se quita el condicional
  277.                     $mailBody $mailBody '<br><br><br>Atentamente<br><br>';
  278.                     $agentMail $mailAddressFrom;
  279.                     $mailAgent $agentMail;
  280.                     //Se prepara el correo con los agentes a notificar
  281.                     $firmGmail $agent->getFirmGmail();
  282.                     $data = array(
  283.                         'body' => $mailBody,
  284.                         'firm' => $firmGmail,
  285.                     );
  286.                     // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  287.                     $transporter = new Swift_SmtpTransport();
  288.                     $transporter->setHost('smtp.gmail.com')
  289.                         ->setEncryption('ssl')//ssl / tls
  290.                         ->setPort(465)// 465 / 587
  291.                         ->setUsername('desarrollo@develup.solutions')
  292.                         ->setPassword('utvh hzoi wfdo ztjs');
  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. }