src/Controller/ScheduledTaskController.php line 174

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by Mediterranean Develup Solutions
  4.  * Date: 02/04/2024
  5.  * Time: 15:32
  6.  */
  7. namespace App\Controller;
  8. use App\Entity\HtItem;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\Validator\Constraints as Assert;
  13. use App\Repository\HtFileRepository;
  14. use App\MDS\DevelupBundle\Entity\MdvTelegramUser;
  15. use Swift_Mailer;
  16. use Swift_Message;
  17. use Swift_SmtpTransport;
  18. use App\Entity\User;
  19. use DateTimeImmutable;
  20. use IntlDateFormatter;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Doctrine\ORM\EntityManagerInterface;
  23. use App\Entity\HtFile;
  24. use DateTime;
  25. class ScheduledTaskController extends AbstractController
  26. {
  27.     /**
  28.      * @Route("/alerthtfilechange/",  name="alert_ht_file_change")
  29.      * Alerta vía email y telegram de las modficaciones de un HtFile en la ultima hora
  30.      */
  31.     public function alertHtFileChangeAction(Request $requestHtFileRepository $htFileRepository)
  32.     {
  33.         $htFiles $htFileRepository->findByStatus( array('Iniciado''Confirmed') );
  34.         $oneHourAgo date('Y-m-d H:i:s'strtotime('-1 hour'));
  35.         $oneHourAgo DateTimeImmutable::createFromFormat("Y-m-d H:i:s"$oneHourAgo);
  36.         $actualHour date('Y-m-d H:i:s');
  37.         $actualHour DateTimeImmutable::createFromFormat("Y-m-d H:i:s"$actualHour);
  38.         foreach ($htFiles as $htFile){
  39.             if ( $htFile->getUpdatedAt() >= $oneHourAgo and $htFile->getUpdatedAt() <= $actualHour ) {
  40.                 $this->sendTelegramMail(20$htFile->getId(),'Orden de Trabajo: #'.$htFile->getId(). ' - '.$htFile->getTitle(). ' - DESCRIPCIÓN: ' .$htFile->getDescription());
  41. //                $this->sendTelegramMail(113, $htFile->getId(),'Nuevo Expediente: #'.$htFile->getId(). ' - '.$htFile->getTitle(). ' - DESCRIPCIÓN: ' .$htFile->getDescription());
  42. //                $this->sendTelegramMail(114, $htFile->getId(),'Nuevo Expediente: #'.$htFile->getId(). ' - '.$htFile->getTitle(). ' - DESCRIPCIÓN: ' .$htFile->getDescription());
  43.             } else {
  44.                 // Se revisan los items hasta encontrar cambio o revisarlos todos
  45.                 $htItems $htFile->getHtItems();
  46.                 foreach ($htItems as $htItem) {
  47.                     if ($htItem->getUpdatedAt() >= $oneHourAgo and $htItem->getUpdatedAt() <= $actualHour) {
  48. //                        $this->sendTelegramMail(20, $htFile->getId(), 'Nuevo Expediente: #' . $htFile->getId() . ' - ' . $htFile->getTitle() . ' - DESCRIPCIÓN: ' . $htFile->getDescription());
  49. //                        $this->sendTelegramMail(113, $htFile->getId(),'Nuevo Expediente: #'.$htFile->getId(). ' - '.$htFile->getTitle(). ' - DESCRIPCIÓN: ' .$htFile->getDescription());
  50. //                        $this->sendTelegramMail(114, $htFile->getId(),'Nuevo Expediente: #'.$htFile->getId(). ' - '.$htFile->getTitle(). ' - DESCRIPCIÓN: ' .$htFile->getDescription());
  51.                         break;
  52.                     } else {
  53.                         // Se revisa el menu del item
  54.                         $htMenus $htItem->getHtMenus();
  55.                         if(!empty($htMenus)) {
  56.                             foreach ($htMenus as $htMenu) {
  57.                                 if ($htMenu->getUpdatedAt() >= $oneHourAgo and $htMenu->getUpdatedAt() <= $actualHour) {
  58. //                                    $this->sendTelegramMail(20, $htFile->getId(), 'Nuevo Expediente: #' . $htFile->getId() . ' - ' . $htFile->getTitle() . ' - DESCRIPCIÓN: ' . $htFile->getDescription());
  59. //                                $this->sendTelegramMail(113, $htFile->getId(),'Nuevo Expediente: #'.$htFile->getId(). ' - '.$htFile->getTitle(). ' - DESCRIPCIÓN: ' .$htFile->getDescription());
  60. //                                $this->sendTelegramMail(114, $htFile->getId(),'Nuevo Expediente: #'.$htFile->getId(). ' - '.$htFile->getTitle(). ' - DESCRIPCIÓN: ' .$htFile->getDescription());
  61.                                     break;
  62.                                 }
  63.                             }
  64.                         }
  65.                     }
  66.                 }
  67.             }
  68.         }
  69.         return new JsonResponse('Done');
  70.     }
  71.     /**
  72.      * @Route("/fridaysummarynotify", name="friday_summary_notify", methods={"GET", "POST"})
  73.      * Notificaciones de las ordenes de trabajo en los siguientes diez días a partir del viernes
  74.      */
  75.     public function notifyHigoTrigoSumarysAction(EntityManagerInterface $emRequest $request)
  76.     {
  77.         $ignore_dates $request->request->get('ignore_dates');
  78.         $user $request->request->get('user');
  79.         $emailUser $request->request->get('emailUser');
  80.         $emailUserOther $request->request->get('emailUserOther');
  81.         $dateNow = new DateTimeImmutable('now');
  82.         $dateNow $dateNow->setTime(000);
  83.         $nunmeroDia $dateNow->format('w');
  84.         if (!($dateNow->format('w') == 1)){ $daysToAdd $dateNow->format('w'); $dateNextMonday $dateNow->modify("+$daysToAdd days"); } else { $dateNextMonday $dateNow->modify("+7 days"); }
  85.         $datePlusTenDays $dateNextMonday->modify('+7 days');
  86.         $message null;
  87.         $messageTelegram null;
  88.         // Si no se ha enviado la señal de ignorar fechas, se verifica si es miercoles. El mensaje solo se debe enviar los miercoles
  89.         if (empty($ignore_dates)){ if (!($nunmeroDia == 3)){ return new JsonResponse('Done'); } }
  90.         $parameters = array( 'dateStart' => $dateNextMonday'dateEnd' => $datePlusTenDays, );
  91.         $dql 'SELECT p 
  92.                 FROM App\Entity\HtItem p
  93.                 WHERE p.dateStart BETWEEN :dateStart AND :dateEnd';
  94.         $query $em->createQuery($dql)->setParameters($parameters);
  95.         $htItems $query->getResult();
  96.         $arrayHtFiles = array();
  97.         //Agregamos los HtFiles segun los HtItems
  98.         if (!empty($htItems)){ foreach ($htItems as $item){ $arrayHtFiles[$item->getDateStart()->format('YmdHi').str_pad($item->getId(), 6"0"STR_PAD_LEFT)] = $item; } }
  99.         ksort($arrayHtFiles);
  100.         if (!empty($arrayHtFiles)) {
  101.             $dateGlobalStart $arrayHtFiles[array_key_first($arrayHtFiles)]->getDateStart();
  102.             $saltoLinea '<br>';
  103.             $fecha = new DateTimeImmutable($dateGlobalStart->format('Ymd'));
  104.             $formateador = new IntlDateFormatter'es_ES'IntlDateFormatter::FULLIntlDateFormatter::NONE'Europe/Madrid'IntlDateFormatter::GREGORIAN'EEEE, d \'de\' MMMM \'del\' yyyy' );
  105.             $message $saltoLinea.'<b>'.$this->ucfirst_utf8($formateador->format($fecha)).'</b>'.$saltoLinea;
  106.             $textAdd $this->ucfirst_utf8($formateador->format($fecha));
  107.             $messageTelegram "&#10 <b>".$this->ucfirst_utf8($formateador->format($fecha))."</b>";
  108.             foreach ($arrayHtFiles as $key => $item) {
  109.                 if (!($dateGlobalStart->format('Ymd') == $item->getDateStart()->format('Ymd'))) {
  110.                     $fecha = new DateTimeImmutable($item->getDateStart()->format('Ymd'));
  111.                     $day $saltoLinea.'<b>'.$this->ucfirst_utf8($formateador->format($fecha)).'</b>'.$saltoLinea;
  112.                     $message $message.$day;
  113.                     $textAdd $this->ucfirst_utf8($formateador->format($fecha));
  114.                     $messageTelegram $messageTelegram."&#10 <b>".$textAdd"</b>";
  115.                     $dateGlobalStart $fecha;
  116.                 }
  117.                 $message $message.$item->getDateStart()->format('H:i').$saltoLinea;
  118.                 $message $message.'Evento: '.$item->getHtFile()->getTitle();
  119.                 $messageTelegram $messageTelegram."&#10 ".$item->getDateStart()->format('H:i');
  120.                 $messageTelegram $messageTelegram."&#10 Evento: ".$item->getHtFile()->getTitle();
  121.                 if (!empty($item->getLoungeGp()) or !empty($item->getLoungeOther())){
  122.                     $where = empty($item->getLoungeOther()) ? $item->getLoungeGp()->getName() : $item->getLoungeOther();
  123.                     $message $message.'Ubicación: '.$where;
  124.                     $messageTelegram $messageTelegram."&#10 Ubicación: ".$where;
  125.                 }
  126.                 $message $message.' <a href="//'.$_SERVER['HTTP_HOST'].'/higotrigo/ht/file/htexternal/'.$item->getHtFile()->getId().'/summary">( Ver Orden de Trabajo )</a> '.$saltoLinea;
  127.                 $messageTelegram $messageTelegram."&#10 <a href=\"https://" $_SERVER['HTTP_HOST'] . "/higotrigo/ht/file/htexternal/" $item->getHtFile()->getId() . "/summary\">Ver Orden de Trabajo</a>";
  128.             }
  129.         } else {
  130.             $message $messageTelegram 'No se encontró información para la semana';
  131.         }
  132.         $arrayUsers = array();
  133.         $arrayUsers['elenaaira99@gmail.com'] = 'elenaaira99@gmail.com';
  134.         $arrayUsers['marcos.arredondo.jorge@gmail.com'] = 'marcos.arredondo.jorge@gmail.com';
  135.         $arrayUsers['pedro.ruiz@higotrigo.com'] = 'pedro.ruiz@higotrigo.com';
  136.         $arrayUsers['rafael.guerrero@inout-travel.com'] = 'rafael.guerrero@inout-travel.com';
  137.         $arrayUsers['alberto.hernandez@higotrigo.com'] = 'alberto.hernandez@higotrigo.com';
  138.         $arrayUsers['alberto.hernandez@higotrigo.com'] = 'alberto.hernandez@higotrigo.com';
  139.         $arrayUsers['gabriela.bracho@greenpatio.es'] = 'gabriela.bracho@greenpatio.es';
  140.         $arrayUsers['gonzalo.alonso@higotrigo.com'] = 'gonzalo.alonso@higotrigo.com';
  141.         $arrayUsers['miguelonlon001@gmail.com'] = 'miguelonlon001@gmail.com';
  142.         $arrayUsers['gustavo.ayala@develup.solutions'] = 'gustavo.ayala@develup.solutions';
  143.         $arrayMails = array();
  144.         $user $em->getRepository(User::class)->findOneById($user);
  145.         $arrayMails[] = $user->getEmail();
  146.         if (!empty($emailUser)) { foreach ($emailUser as $key => $item){ if ($item == 'on'){ $arrayMails[] = $key; } } }
  147.         $emailUserOther explode(';'$emailUserOther);
  148.         if (!empty($emailUserOther)) { foreach ($emailUserOther as $item){ $arrayMails[] = $item; } }
  149. // ************************************ P R U E B A S **************************************************************************************************************
  150. //        $arrayMails = array();
  151. //        $arrayMails[] = 'gustavo.ayala@develup.solutions';
  152. //        $arrayMails[] = 'gustavoucv@yahoo.com.mx';
  153. // *****************************************************************************************************************************************************************
  154.         $this->sendMailCc($user->getId(),$arrayMails,$message$messageTelegram$dateNow);
  155.         if (!empty($ignore_dates)){ return $this->redirectToRoute('ht_calendar'); }
  156.         return new JsonResponse('Done');
  157.     }
  158.     /**
  159.      * @Route("/higotrigo/tendaysahead", name="app_ht_ten_days_ahead")
  160.      * Prevision de la proxima semana
  161.      */
  162.     public function tenDaysAheadAction(Request $requestEntityManagerInterface $em)
  163.     {
  164.         $user $this->getUser();
  165.         $dateNow = new DateTimeImmutable('now');
  166.         $dateNow $dateNow->setTime(000);
  167.         if (!($dateNow->format('w') == 1)){ $daysToAdd $dateNow->format('w'); $dateNextMonday $dateNow->modify("+$daysToAdd days"); } else { $dateNextMonday $dateNow->modify("+7 days"); }
  168.         $datePlusTenDays $dateNextMonday->modify('+7 days');
  169.         $message null;
  170.         $parameters = array( 'dateStart' => $dateNextMonday'dateEnd' => $datePlusTenDays, );
  171.         $dql 'SELECT p 
  172.                 FROM App\Entity\HtItem p
  173.                 WHERE p.dateStart BETWEEN :dateStart AND :dateEnd';
  174.         $query $em->createQuery($dql)->setParameters($parameters);
  175.         $htItems $query->getResult();
  176.         $arrayHtFiles = array();
  177.         //Agregamos los HtFiles segun los HtItems
  178.         if (!empty($htItems)){
  179.             foreach ($htItems as $item){
  180.                 $arrayHtFiles[$item->getDateStart()->format('YmdHi').str_pad($item->getId(), 6"0"STR_PAD_LEFT)] = $item;
  181.             }
  182.         }
  183.         ksort($arrayHtFiles);
  184.         if (!empty($arrayHtFiles)) {
  185.             $dateGlobalStart $arrayHtFiles[array_key_first($arrayHtFiles)]->getDateStart();
  186.             $saltoLinea '<br>';
  187.             $fecha = new DateTimeImmutable($dateGlobalStart->format('Ymd'));
  188.             $formateador = new IntlDateFormatter'es_ES'IntlDateFormatter::FULLIntlDateFormatter::NONE'Europe/Madrid'IntlDateFormatter::GREGORIAN'EEEE, d \'de\' MMMM \'del\' yyyy' );
  189.             $message $saltoLinea.'<b>'.$this->ucfirst_utf8($formateador->format($fecha)).'</b>'.$saltoLinea;
  190.             foreach ($arrayHtFiles as $key => $item) {
  191.                 if (!($dateGlobalStart->format('Ymd') == $item->getDateStart()->format('Ymd'))) {
  192.                     $fecha = new DateTimeImmutable($item->getDateStart()->format('Ymd'));
  193.                     $day $saltoLinea.'<b>'.$this->ucfirst_utf8($formateador->format($fecha)).'</b>'.$saltoLinea;
  194.                     $message $message.$day;
  195.                     $dateGlobalStart $fecha;
  196.                 }
  197.                 $message $message.$item->getDateStart()->format('H:i').$saltoLinea;
  198.                 $message $message.'Evento: '.$item->getHtFile()->getTitle();
  199.                 if (!empty($item->getLoungeGp()) or !empty($item->getLoungeOther())){
  200.                     $where = empty($item->getLoungeOther()) ? $item->getLoungeGp()->getName() : $item->getLoungeOther();
  201.                     $message $message.', Ubicación: '.$where;
  202.                 }
  203.                 $message $message.' <a href="//'.$_SERVER['HTTP_HOST'].'/higotrigo/ht/file/htexternal/'.$item->getHtFile()->getId().'/summary">( Ver Orden de Trabajo )</a> '.$saltoLinea;
  204.             }
  205.         } else {
  206.             $message $messageTelegram 'No se encontró información para la semana';
  207.         }
  208.         $arrayAgents = array();
  209.         $arrayAgents[$user->getEmail()] = array( 'agent' => $user->getName().' '.$user->getLastName(), 'email' => $user->getEmail(),);
  210.         $arrayAgents['rafael.guerrero@inout-travel.com'] = array( 'agent' => 'Rafael Guerrero''email' => 'rafael.guerrero@inout-travel.com',);
  211.         $arrayAgents['gabriela.bracho@greenpatio.es'] = array( 'agent' => 'Gabriela Bracho''email' => 'gabriela.bracho@greenpatio.es',);
  212.         $arrayAgents['elenaaira99@gmail.com'] = array( 'agent' => 'Elena Aira''email' => 'elenaaira99@gmail.com',);
  213.         $arrayAgents['alberto.hernandez@higotrigo.com'] = array( 'agent' => 'Alberto Hernández''email' => 'alberto.hernandez@higotrigo.com',);
  214.         $arrayAgents['gonzalo.alonso@higotrigo.com'] = array( 'agent' => 'Gonzalo Alonso''email' => 'gonzalo.alonso@higotrigo.com',);
  215.         $arrayAgents['marcos.arredondo.jorge@gmail.com'] = array( 'agent' => 'Marcos Arredondo''email' => 'marcos.arredondo.jorge@gmail.com',);
  216.         $arrayAgents['miguelonlon001@gmail.com'] = array( 'agent' => 'Miguel Martín''email' => 'miguelonlon001@gmail.com',);
  217.         $arrayAgents['pedro.ruiz@higotrigo.com'] = array( 'agent' => 'Pedro Ruiz''email' => 'pedro.ruiz@higotrigo.com',);
  218.         $arrayAgents['gustavo.ayala@develup.solutions'] = array( 'agent' => 'Gustavo Ayala''email' => 'gustavo.ayala@develup.solutions',);
  219.         return $this->render('higotrigo/ht_file/show-ot-prevision.html.twig', array(
  220.             'message' => $message,
  221.             'user' => $user,
  222.             'arrayAgents' => $arrayAgents,)
  223.         );
  224.     }
  225.     /**
  226.      * @Route("/higotrigo/verify", name="app_ht_verify")
  227.      * Verificación de ht_files modificados despues de la notificación de " notifyHigoTrigoSumarysAction " y antes del inicio de semana
  228.      */
  229.     public function verifyAction(Request $requestEntityManagerInterface $em){
  230.         $dateNow = new DateTimeImmutable('now');
  231.         $dateNow $dateNow->setTime(000);
  232.         $nunmeroDia $dateNow->format('w');
  233. //        if ($nunmeroDia == 5){
  234.         if (true){
  235.             // Configurar las fechas de la semana pasada y la semana actual
  236.             $lastWednesday = new DateTime('now');
  237.             $lastWednesday->modify('last Wednesday'); // Último miércoles de la semana
  238.             $lastFriday = clone $lastWednesday;
  239.             $lastFriday->modify('+2 days');
  240.             $lastFriday->setTime(23590);
  241.             $firstMonday = new DateTime('next Monday'); // Lunes de la próxima semana
  242.             $lastMonday = clone $firstMonday;           // Lunes de la última semana
  243.             $lastMonday->modify('+7 days');
  244.             $parameters = array(
  245.                 'lastWednesday' => $lastWednesday,
  246.                 'lastFriday' => $lastFriday,
  247.                 'thisMonday' => $firstMonday,
  248.                 'nextMonday' => $lastMonday,
  249.             );
  250.             $dql 'SELECT p 
  251.                     FROM App\Entity\HtFile p
  252.                     WHERE 
  253.                     p.updatedAt BETWEEN :lastWednesday AND :lastFriday AND 
  254.                     p.dateStart > :thisMonday AND 
  255.                     p.dateEnd < :nextMonday AND 
  256.                     p.dateStart < p.dateEnd';
  257.             $query $em->createQuery($dql)->setParameters($parameters);
  258.             $htFile $query->getResult();
  259.             $htItems = array();
  260.             foreach ($htFile as $item){
  261.                 $singleItems $em->getRepository(HtItem::class)->findByHtFile($item->getId());
  262.                 foreach ($singleItems as $elem){ $htItems[] = $elem; }
  263.             }
  264.             $arrayHtFiles = array();
  265.             //Agregamos los HtFiles segun los HtItems
  266.             if (!empty($htItems)){ foreach ($htItems as $item){ $arrayHtFiles[$item->getDateStart()->format('YmdHi').str_pad($item->getId(), 6"0"STR_PAD_LEFT)] = $item; } }
  267.             ksort($arrayHtFiles);
  268.             if (!empty($arrayHtFiles)) {
  269.                 $dateGlobalStart $arrayHtFiles[array_key_first($arrayHtFiles)]->getDateStart();
  270.                 $saltoLinea '<br>';
  271.                 $fecha = new DateTimeImmutable($dateGlobalStart->format('Ymd'));
  272.                 $formateador = new IntlDateFormatter'es_ES'IntlDateFormatter::FULLIntlDateFormatter::NONE'Europe/Madrid'IntlDateFormatter::GREGORIAN'EEEE, d \'de\' MMMM \'del\' yyyy' );
  273.                 $message $saltoLinea.'<b>ULTIMAS ACTUALIZACIONES</b><br><b>'.$this->ucfirst_utf8($formateador->format($fecha)).'</b>'.$saltoLinea;
  274.                 $textAdd $this->ucfirst_utf8($formateador->format($fecha));
  275.                 $messageTelegram "&#10 <b>".$this->ucfirst_utf8($formateador->format($fecha))."</b>";
  276.                 foreach ($arrayHtFiles as $key => $item) {
  277.                     if (!($dateGlobalStart->format('Ymd') == $item->getDateStart()->format('Ymd'))) {
  278.                         $fecha = new DateTimeImmutable($item->getDateStart()->format('Ymd'));
  279.                         $day $saltoLinea.'<b>'.$this->ucfirst_utf8($formateador->format($fecha)).'</b>'.$saltoLinea;
  280.                         $message $message.$day;
  281.                         $textAdd $this->ucfirst_utf8($formateador->format($fecha));
  282.                         $messageTelegram $messageTelegram."&#10 <b>".$textAdd"</b>";
  283.                         $dateGlobalStart $fecha;
  284.                     }
  285.                     $message $message.$item->getDateStart()->format('H:i').$saltoLinea;
  286.                     $message $message.'Evento: '.$item->getHtFile()->getTitle();
  287.                     $messageTelegram $messageTelegram."&#10 ".$item->getDateStart()->format('H:i');
  288.                     $messageTelegram $messageTelegram."&#10 Evento: ".$item->getHtFile()->getTitle();
  289.                     if (!empty($item->getLoungeGp()) or !empty($item->getLoungeOther())){
  290.                         $where = empty($item->getLoungeOther()) ? $item->getLoungeGp()->getName() : $item->getLoungeOther();
  291.                         $message $message.'Ubicación: '.$where;
  292.                         $messageTelegram $messageTelegram."&#10 Ubicación: ".$where;
  293.                     }
  294.                     $message $message.' <a href="//'.$_SERVER['HTTP_HOST'].'/higotrigo/ht/file/htexternal/'.$item->getHtFile()->getId().'/summary">( Ver Orden de Trabajo )</a> '.$saltoLinea;
  295.                     $messageTelegram $messageTelegram."&#10 <a href=\"https://" $_SERVER['HTTP_HOST'] . "/higotrigo/ht/file/htexternal/" $item->getHtFile()->getId() . "/summary\">Ver Orden de Trabajo</a>";
  296.                 }
  297.             } else {
  298.                 $message $messageTelegram 'No se encontró información para la semana';
  299.             }
  300.             $user $this->getUser();
  301.             $arrayAgents = [];
  302.             return $this->render('higotrigo/ht_file/show-ot-update.html.twig', array(
  303.                     'message' => $message,
  304.                     'user' => $user,
  305.                     'arrayAgents' => $arrayAgents,)
  306.             );
  307.         }
  308.     }
  309.     /**
  310.      * @Route("/summarynotifyupdate", name="summary_notify_update", methods={"GET", "POST"})
  311.      * Notificaciones de las actualizaciones de las ordenes de trabajo
  312.      */
  313.     public function notifyUpdatesHigoTrigoSumarysAction(EntityManagerInterface $emRequest $request)
  314.     {
  315.         $dateNow = new DateTimeImmutable('now');
  316.         $dateNow $dateNow->setTime(000);
  317.         $nunmeroDia $dateNow->format('w');
  318.         // Configurar las fechas de la semana pasada y la semana actual
  319.         $lastWednesday = new DateTime('now');
  320.         $lastWednesday->modify('last Wednesday'); // Último miércoles de la semana
  321.         $lastFriday = clone $lastWednesday;
  322.         $lastFriday->modify('+2 days');
  323.         $lastFriday->setTime(23590);
  324.         $firstMonday = new DateTime('next Monday'); // Lunes de la próxima semana
  325.         $lastMonday = clone $firstMonday;           // Lunes de la última semana
  326.         $lastMonday->modify('+7 days');
  327.         $parameters = array(
  328.             'lastWednesday' => $lastWednesday,
  329.             'lastFriday' => $lastFriday,
  330.             'thisMonday' => $firstMonday,
  331.             'nextMonday' => $lastMonday,
  332.         );
  333.         $dql 'SELECT p 
  334.                 FROM App\Entity\HtFile p
  335.                 WHERE 
  336.                 p.updatedAt BETWEEN :lastWednesday AND :lastFriday AND 
  337.                 p.dateStart > :thisMonday AND 
  338.                 p.dateEnd < :nextMonday AND 
  339.                 p.dateStart < p.dateEnd';
  340.         $query $em->createQuery($dql)->setParameters($parameters);
  341.         $htFile $query->getResult();
  342.         $htItems = array();
  343.         foreach ($htFile as $item){
  344.             $singleItems $em->getRepository(HtItem::class)->findByHtFile($item->getId());
  345.             foreach ($singleItems as $elem){ $htItems[] = $elem; }
  346.         }
  347.         $arrayHtFiles = array();
  348.         //Agregamos los HtFiles segun los HtItems
  349.         if (!empty($htItems)){ foreach ($htItems as $item){ $arrayHtFiles[$item->getDateStart()->format('YmdHi').str_pad($item->getId(), 6"0"STR_PAD_LEFT)] = $item; } }
  350.         ksort($arrayHtFiles);
  351.         if (!empty($arrayHtFiles)) {
  352.             $dateGlobalStart $arrayHtFiles[array_key_first($arrayHtFiles)]->getDateStart();
  353.             $saltoLinea '<br>';
  354.             $fecha = new DateTimeImmutable($dateGlobalStart->format('Ymd'));
  355.             $formateador = new IntlDateFormatter'es_ES'IntlDateFormatter::FULLIntlDateFormatter::NONE'Europe/Madrid'IntlDateFormatter::GREGORIAN'EEEE, d \'de\' MMMM \'del\' yyyy' );
  356.             $message $saltoLinea.'<b>ULTIMAS ACTUALIZACIONES</b><br><b>'.$this->ucfirst_utf8($formateador->format($fecha)).'</b>'.$saltoLinea;
  357.             $textAdd $this->ucfirst_utf8($formateador->format($fecha));
  358.             $messageTelegram "&#10 <b>".$this->ucfirst_utf8($formateador->format($fecha))."</b>";
  359.             foreach ($arrayHtFiles as $key => $item) {
  360.                 if (!($dateGlobalStart->format('Ymd') == $item->getDateStart()->format('Ymd'))) {
  361.                     $fecha = new DateTimeImmutable($item->getDateStart()->format('Ymd'));
  362.                     $day $saltoLinea.'<b>'.$this->ucfirst_utf8($formateador->format($fecha)).'</b>'.$saltoLinea;
  363.                     $message $message.$day;
  364.                     $textAdd $this->ucfirst_utf8($formateador->format($fecha));
  365.                     $messageTelegram $messageTelegram."&#10 <b>".$textAdd"</b>";
  366.                     $dateGlobalStart $fecha;
  367.                 }
  368.                 $message $message.$item->getDateStart()->format('H:i').$saltoLinea;
  369.                 $message $message.'Evento: '.$item->getHtFile()->getTitle();
  370.                 $messageTelegram $messageTelegram."&#10 ".$item->getDateStart()->format('H:i');
  371.                 $messageTelegram $messageTelegram."&#10 Evento: ".$item->getHtFile()->getTitle();
  372.                 if (!empty($item->getLoungeGp()) or !empty($item->getLoungeOther())){
  373.                     $where = empty($item->getLoungeOther()) ? $item->getLoungeGp()->getName() : $item->getLoungeOther();
  374.                     $message $message.'Ubicación: '.$where;
  375.                     $messageTelegram $messageTelegram."&#10 Ubicación: ".$where;
  376.                 }
  377.                 $message $message.' <a href="//'.$_SERVER['HTTP_HOST'].'/higotrigo/ht/file/htexternal/'.$item->getHtFile()->getId().'/summary">( Ver Orden de Trabajo )</a> '.$saltoLinea;
  378.                 $messageTelegram $messageTelegram."&#10 <a href=\"https://" $_SERVER['HTTP_HOST'] . "/higotrigo/ht/file/htexternal/" $item->getHtFile()->getId() . "/summary\">Ver Orden de Trabajo</a>";
  379.             }
  380.         } else {
  381.             $message $messageTelegram 'No se encontró información para la semana';
  382.         }
  383.         $user $this->getUser();
  384. //        $arrayUsers = array();
  385. //        $arrayUsers['elenaaira99@gmail.com'] = 'elenaaira99@gmail.com';
  386. //        $arrayUsers['marcos.arredondo.jorge@gmail.com'] = 'marcos.arredondo.jorge@gmail.com';
  387. //        $arrayUsers['pedro.ruiz@higotrigo.com'] = 'pedro.ruiz@higotrigo.com';
  388. //        $arrayUsers['rafael.guerrero@inout-travel.com'] = 'rafael.guerrero@inout-travel.com';
  389. //        $arrayUsers['alberto.hernandez@higotrigo.com'] = 'alberto.hernandez@higotrigo.com';
  390. //        $arrayUsers['alberto.hernandez@higotrigo.com'] = 'alberto.hernandez@higotrigo.com';
  391. //        $arrayUsers['gabriela.bracho@greenpatio.es'] = 'gabriela.bracho@greenpatio.es';
  392. //        $arrayUsers['gonzalo.alonso@higotrigo.com'] = 'gonzalo.alonso@higotrigo.com';
  393. //        $arrayUsers['miguelonlon001@gmail.com'] = 'miguelonlon001@gmail.com';
  394. //        $arrayUsers['gustavo.ayala@develup.solutions'] = 'gustavo.ayala@develup.solutions';
  395. //        $arrayMails = array();
  396. //        $user = $em->getRepository(User::class)->findOneById($user);
  397. //        $arrayMails[] = $user->getEmail();
  398. //        if (!empty($emailUser)) { foreach ($emailUser as $key => $item){ if ($item == 'on'){ $arrayMails[] = $key; } } }
  399. //        $emailUserOther = explode(';', $emailUserOther);
  400. //        if (!empty($emailUserOther)) { foreach ($emailUserOther as $item){ $arrayMails[] = $item; } }
  401. // ************************************ P R U E B A S **************************************************************************************************************
  402.         $arrayMails = array();
  403.         $arrayMails[] = 'gustavo.ayala@develup.solutions';
  404.         $arrayMails[] = 'gustavoucv@yahoo.com.mx';
  405. // *****************************************************************************************************************************************************************
  406.         $this->sendTelegram($messageTelegram);
  407.         if (!empty($ignore_dates)){ return $this->redirectToRoute('ht_calendar'); }
  408.         return new JsonResponse('Done');
  409.     }
  410.     private function sendTelegramMail($id$idProp$text )
  411.     {
  412.         $em $this->getDoctrine()->getManager();
  413.         $telegUser $em->getRepository(MdvTelegramUser::class)->findOneByUserId($id);
  414.         if (empty($telegUser)){ return true; }
  415.         $xbody '<a href="//'.$_SERVER['HTTP_HOST'].'/higotrigo/ht/file/'.$idProp.'/summary"></a> '.$text;
  416.         $text 'ORDEN DE TRABAJO - '.'https://'.$_SERVER['HTTP_HOST'].'/higotrigo/ht/file/'.$idProp.'/summary';
  417.         $parameters = array(
  418.             'chat_id' => $telegUser->getChatId(),
  419.             'text' => $text,
  420.         );
  421.         $bot_token $telegUser->getBotToken();
  422.         $url "https://api.telegram.org/bot$bot_token/sendMessage";
  423.         if (!$curl curl_init()){ exit(); }
  424.         curl_setopt($curl,CURLOPT_POST,true);
  425.         curl_setopt($curl,CURLOPT_POSTFIELDS,$parameters);
  426.         curl_setopt($curl,CURLOPT_URL,$url);
  427.         curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
  428.         $output curl_exec($curl);
  429.         curl_close($curl);
  430.         $agent $em->getRepository(User::class)->findOneById($id);
  431.         $agentMail $agent->getEmail();
  432.         $mailAgent $agentMail;
  433.         //Se prepara el correo con los agentes a notificar
  434.         $firmGmail $agent->getFirmGmail();
  435.         $data = array(
  436.             'body' => $xbody,
  437.             'firm' => $firmGmail,
  438.         );
  439.         // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  440.         $transporter = new Swift_SmtpTransport();
  441.         $transporter->setHost('smtp.gmail.com')
  442.             ->setEncryption('ssl')//ssl / tls
  443.             ->setPort(465)// 465 / 587
  444.             ->setUsername('desarrollo@develup.solutions')
  445.             ->setPassword('utvh hzoi wfdo ztjs');
  446.         $mailer = new Swift_Mailer($transporter);
  447.         $message = new Swift_Message();
  448.         $message->setSubject('Expediente #' $idProp', Notificación de orden de trabajo')
  449.             ->setSender($agentMail)
  450.             ->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
  451.             ->setReplyTo($agentMail)
  452.             ->setTo($mailAgent)
  453.             ->setBody(
  454.                 $this->renderView(
  455.                     'mail/structure-mail.html.twig',
  456.                     array('data' => $data)
  457.                 ),
  458.                 'text/html'
  459.             );
  460.         $mailer->send($message);
  461.         return true;
  462.     }
  463.     private function sendMailCc($id$arrayMails$text$messageTelegram$dateNow)
  464.     {
  465.         $em $this->getDoctrine()->getManager();
  466. //        $user = $this->getUser();
  467. //        if (($dateNow->format('w') == 3) or ($user->getRoles() == 'ROLE_ADMIN')) {                  // Solo se enviara un telegram al canal los miercoles o cuando un admin asi lo indique
  468.             $telegUser $em->getRepository(MdvTelegramUser::class)->findOneByUserId(1000);         // 1000 es el Id para el canal de Telegram de las Ordenes de Trabajo de Higo&Trigo
  469. //            $telegUser = $em->getRepository(MdvTelegramUser::class)->findOneByUserId(20);
  470.             $parameters = array(
  471.                 'chat_id' => $telegUser->getChatId(),
  472.                 'text' => $messageTelegram,
  473.                 'parse_mode' => 'HTML',
  474.             );
  475.             $bot_token $telegUser->getBotToken();
  476.             $url "https://api.telegram.org/bot$bot_token/sendMessage";
  477.             if (!$curl curl_init()) {
  478.                 exit();
  479.             }
  480.             curl_setopt($curlCURLOPT_POSTtrue);
  481.             curl_setopt($curlCURLOPT_POSTFIELDS$parameters);
  482.             curl_setopt($curlCURLOPT_URL$url);
  483.             curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
  484.             $output curl_exec($curl);
  485.             curl_close($curl);
  486. //        }
  487.         $agent $em->getRepository(User::class)->findOneById($id);
  488.         $agentMail $agent->getEmail();
  489.         $data = array(
  490.             'body' => $text,
  491.             'firm' => null,
  492.         );
  493.         // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  494.         $transporter = new Swift_SmtpTransport();
  495.         $transporter->setHost('smtp.gmail.com')
  496.             ->setEncryption('ssl')//ssl / tls
  497.             ->setPort(465)// 465 / 587
  498.             ->setUsername('desarrollo@develup.solutions')
  499.             ->setPassword('utvh hzoi wfdo ztjs');
  500.         $mailer = new Swift_Mailer($transporter);
  501.         $message = new Swift_Message();
  502.         $message->setSubject('Previsión de Servicios')
  503.             ->setSender($agentMail)
  504.             ->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
  505.             ->setReplyTo($agentMail)
  506.             ->setTo($arrayMails)
  507.             ->setBody(
  508.                 $this->renderView(
  509.                     'mail/structure-mail.html.twig',
  510.                     array('data' => $data)
  511.                 ),
  512.                 'text/html'
  513.             );
  514.         $mailer->send($message);
  515.         return true;
  516.     }
  517.     private function sendTelegram($messageTelegram)
  518.     {
  519.         $em $this->getDoctrine()->getManager();
  520.         $telegUser $em->getRepository(MdvTelegramUser::class)->findOneByUserId(1000);         // 1000 es el Id para el canal de Telegram de las Ordenes de Trabajo de Higo&Trigo
  521.         $parameters = array(
  522.             'chat_id' => $telegUser->getChatId(),
  523.             'text' => $messageTelegram,
  524.             'parse_mode' => 'HTML',
  525.         );
  526.         $bot_token $telegUser->getBotToken();
  527.         $url "https://api.telegram.org/bot$bot_token/sendMessage";
  528.         if (!$curl curl_init()) { exit(); }
  529.         curl_setopt($curlCURLOPT_POSTtrue);
  530.         curl_setopt($curlCURLOPT_POSTFIELDS$parameters);
  531.         curl_setopt($curlCURLOPT_URL$url);
  532.         curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
  533.         $output curl_exec($curl);
  534.         curl_close($curl);
  535.         return true;
  536.     }
  537.     private function ucfirst_utf8($string) {
  538.         $first_char mb_substr($string01'UTF-8');
  539.         $rest mb_substr($string1null'UTF-8');
  540.         return mb_strtoupper($first_char'UTF-8') . $rest;
  541.     }
  542. }