src/Controller/HomeController.php line 83

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Client;
  4. use App\Entity\ClientContact;
  5. use App\Entity\MailDelivery;
  6. use App\Entity\SettingsRol;
  7. use App\Entity\Supplier;
  8. use App\Entity\SupplierContact;
  9. use App\Entity\User;
  10. use App\Entity\WidgetNotes;
  11. use App\Form\WidgetNotesType;
  12. use App\MDS\EventsBundle\Entity\Proposal;
  13. use DateTime;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\HttpFoundation\Session\Session;
  19. use Symfony\Component\HttpFoundation\JsonResponse;
  20. use Google_Client;
  21. use Google_Service_Calendar;
  22. use Swift_Mailer;
  23. use Swift_SmtpTransport;
  24. use Symfony\Contracts\Translation\TranslatorInterface;
  25. class HomeController extends AbstractController
  26. {
  27.     protected $googleCalendar;
  28.     private $translator;
  29.     public function __construct(TranslatorInterface $translator)
  30.     {
  31.         //        $redirect_uri='urn:ietf:wg:oauth:2.0:oob';
  32.         $redirect_uri 'https://' $_SERVER['HTTP_HOST'] . '/calendar/token';
  33.         $googleCalendar = new Google_Client();
  34.         $googleCalendar->setApplicationName('Google Calendar API PHP Quickstart');
  35.         //campos a extraer de la base de datos User
  36.         $googleCalendar->setClientId('2790497987-57qc3vu4pr7vb0s8phpub2me58pe34lb.apps.googleusercontent.com');
  37.         $googleCalendar->setClientSecret('nj2C7unaTO68DRhyORsyipSj');
  38.         //fin campos user
  39.         //        $api_key = "AIzaSyBR84cS1IU2BPvk5V3VnbqdkJESlv440Ac";
  40.         //        $client->setDeveloperKey($api_key);
  41.         $googleCalendar->setRedirectUri($redirect_uri);
  42.         $googleCalendar->addScope(Google_Service_Calendar::CALENDAR);
  43.         $guzzleClient = new \GuzzleHttp\Client(array('curl' => array(CURLOPT_SSL_VERIFYPEER => false)));
  44.         $googleCalendar->setHttpClient($guzzleClient);
  45.         $this->googleCalendar $googleCalendar;
  46.         $this->translator $translator;
  47.     }
  48.     /**
  49.      * @Route("/connectGoogle", name="homepage_Connect_Google")
  50.      */
  51.     public function indexConnectGoogleAction(Request $request)
  52.     {
  53.         $session = new Session();
  54.         $token $session->get('tokenGoogleCalendar');
  55.         //        d($token);
  56.         if (!is_null($token)) {
  57.             $this->googleCalendar->setAccessToken($token);
  58.         }
  59.         // If there is no previous token or it's expired.
  60.         $data = array();
  61.         if ($this->googleCalendar->isAccessTokenExpired()) {
  62.             // Refresh the token if possible, else fetch a new one.
  63.             if ($this->googleCalendar->getRefreshToken()) {
  64.                 $this->googleCalendar->fetchAccessTokenWithRefreshToken($this->googleCalendar->getRefreshToken());
  65.             } else {
  66.                 // Request authorization from the user.
  67.                 $authUrl $this->googleCalendar->createAuthUrl();
  68.                 return $this->redirect($authUrl);
  69.             }
  70.         }
  71.         return $this->redirectToRoute('homepage');
  72.     }
  73.     /**
  74.      * @Route("/", name="homepage")
  75.      */
  76.     public function indexAction(Request $request, \Swift_Mailer $mailer)
  77.     {
  78.         $session = new Session();
  79.         $token $session->get('tokenGoogleCalendar');
  80.         if (!is_null($token)) {
  81.             $this->googleCalendar->setAccessToken($token);
  82.             $connectGoogle "1";
  83.         } else {
  84.             $connectGoogle "0";
  85.         }
  86.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  87.         $user_userrol $user_logueado->getUserrol();
  88.         $user_id $user_logueado->getId();
  89.         $em $this->getDoctrine()->getManager();
  90.         $modules $em->getRepository(SettingsRol::class)->findOneById($user_userrol);
  91.         $request->getSession()->set('_modules'$modules);
  92.         if ($user_logueado->getTeam() == 16) { return $this->redirectToRoute('gp_cvr_calendar'); }
  93.         if ($user_logueado->getUserrol() == 54) { return $this->redirectToRoute('ht_calendar_waiter'); }
  94.         if ($user_logueado->getTeam() == 17) { return $this->redirectToRoute('ht_calendar'); }
  95.         // ALL LO QUE HAY -- PROPOSAL NO ASIGNADOS
  96.         $parameterspc = array(
  97.             'pending' => 'Pending',
  98.             'confirmed' => 'Confirmed',
  99.         );
  100.         $dqlpc 'SELECT pc FROM EventsBundle:Proposal pc WHERE pc.agentId is null AND (pc.status = :pending or pc.status = :confirmed)';
  101.         $querypc $em->createQuery($dqlpc)->setParameters($parameterspc);
  102.         $cantidadpc $querypc->getResult();
  103.         $request->getSession()->set('_proposal_unassigned'count($cantidadpc));
  104.         /* ALL LO QUE HAY -- ALERTAS DE ToDo */
  105.         $parametersB = array(
  106.             'user_id' => $user_id,
  107.         );
  108.         $dqlB 'SELECT COUNT (tdl.id) 
  109.                 FROM App:ToDoLogs tdl
  110.                 WHERE tdl.readed = FALSE AND tdl.ownerToDoLog = :user_id';
  111.         $query $em->createQuery($dqlB)->setParameters($parametersB);;
  112.         $alertTodo $query->getResult()[0][1];
  113.         $request->getSession()->set('_todoalert'$alertTodo);
  114.         $hoy date('Y-m-d');
  115.         $hoy_datatime = new \DateTime($hoy);
  116.         $parametersA = array(
  117.             'commercialId' => $user_id,
  118.             'alertAt' => $hoy_datatime,
  119.         );
  120.         /* ALL LO QUE HAY  */
  121.         $dql 'SELECT ct.alertAt, ct, cl.title, cn.name, cn.lastName
  122.                 FROM CommercialBundle:CommercialTracking ct
  123.                 INNER JOIN App:Client cl WITH cl.id = ct.clientId
  124.                 INNER JOIN App:ClientContact cn WITH cn.id = ct.contactId
  125.                 WHERE ct.commercialId = :commercialId AND ct.alertAt = :alertAt';
  126.         $query $em->createQuery($dql)->setParameters($parametersA);;
  127.         $commercial_tracking $query->getResult();
  128.         $wnotes = new WidgetNotes();
  129.         $wnotes->setDateAt(new \DateTime("now"));
  130.         $form $this->createWidgetNotesCreateForm($wnotes);
  131.         // EJECUTAR ENVIO DE REPORTE COMERCIAL
  132.         $dia date("l");
  133.         $hora date("H:m");
  134.         //Si es el dia Friday y la hora 17:00
  135.         if ($dia == "Friday" and $hora >= "17:00") {
  136.             //si ya no se hizo antes
  137.             $hoy date("Y-m-d");
  138.             $hoy_datatime = new \DateTime($hoy);
  139.             $consultaMail $em->getRepository(MailDelivery::class)->findOneBy(
  140.                 array(
  141.                     'dateAt' => $hoy_datatime,
  142.                     'system' => 'Informe Seguimiento Commercial Mante3',
  143.                     'send' => 'si'
  144.                 )
  145.             );
  146.             
  147.             if (is_null($consultaMail)) {
  148.                 $this->MandarCorreoSeguimientoComercial($request$mailer);
  149.             }
  150.         }
  151.         if ($user_id == 122) {
  152.             return $this->redirectToRoute('list_news');
  153.         } else {
  154.             return $this->render(
  155.                 'home/index.html.twig',
  156.                 array(
  157.                     'tracking' => $commercial_tracking,
  158.                     'alertTodo' => $alertTodo,
  159.                     'form' => $form->createView(),
  160.                     'user' => $user_id,
  161.                     'token' => $user_logueado->getAccessKey(),
  162.                     'connectGoogle' => $connectGoogle,
  163.                 )
  164.             );
  165.         }
  166.     }
  167.     /**
  168.      * @Route("/calendar-admin", name="calendar-admin")
  169.      */
  170.     public function calendarAdminAction(Request $request)
  171.     {
  172.         $session = new Session();
  173.         $token $session->get('tokenGoogleCalendar');
  174.         if (!is_null($token)) {
  175.             $this->googleCalendar->setAccessToken($token);
  176.             $connectGoogle "1";
  177.         } else {
  178.             $connectGoogle "0";
  179.         }
  180.         //        $em = $this->getDoctrine()->getManager();
  181.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  182.         $user_userrol $user_logueado->getUserrol();
  183.         $user_id $user_logueado->getId();
  184.         $wnotes = new WidgetNotes();
  185.         $wnotes->setDateAt(new \DateTime("now"));
  186.         $form $this->createWidgetNotesCreateForm($wnotes);
  187.         //
  188.         //
  189.         //
  190.         //        $hoy = date('Y-m-d');
  191.         //        $parameters= array(
  192.         //            'createdId' => $user_id,
  193.         //            'hoy' => $hoy
  194.         //        );
  195.         //        $dqlA = 'SELECT wn
  196.         //                    FROM App:WidgetNotes wn
  197.         //                    WHERE wn.createdId = :createdId AND wn.dateAt >= :hoy
  198.         //                    ORDER BY wn.dateAt ASC';
  199.         //        $query = $em->createQuery($dqlA)->setParameters($parameters);
  200.         //        $notes = $query->getResult();
  201.         //
  202.         //        $parametersB= array(
  203.         //            'user_id' => $user_id,
  204.         //        );
  205.         //        $dqlB = 'SELECT COUNT (tdl.id)
  206.         //                FROM App:ToDoLogs tdl
  207.         //                WHERE tdl.readed = FALSE AND tdl.ownerToDoLog = :user_id';
  208.         //        $query = $em->createQuery($dqlB)->setParameters($parametersB);;
  209.         //        $alertTodo = $query->getResult()[0][1];
  210.         //
  211.         //        $hoy_datatime = new \DateTime($hoy);
  212.         //
  213.         //        $parametersA = array(
  214.         //            'commercialId' => $user_id,
  215.         //            'alertAt' => $hoy_datatime,
  216.         //        );
  217.         //        /* ALL LO QUE HAY  */
  218.         //        $dql = 'SELECT ct.alertAt, ct, cl.title, cn.name, cn.lastName
  219.         //                FROM CommercialBundle:CommercialTracking ct
  220.         //                INNER JOIN App:Client cl WITH cl.id = ct.clientId
  221.         //                INNER JOIN App:ClientContact cn WITH cn.id = ct.contactId
  222.         //                WHERE ct.commercialId = :commercialId AND ct.alertAt = :alertAt';
  223.         //
  224.         //        $query = $em->createQuery($dql)->setParameters($parametersA);;
  225.         //        $commercial_tracking = $query->getResult();
  226.         return $this->render(
  227.             'home/calendar-admin.html.twig',
  228.             array(
  229.                 //            'tracking' => $commercial_tracking,
  230.                 //            'alertTodo' => $alertTodo,
  231.                 //            'notes' => $notes,
  232.                 'form' => $form->createView(),
  233.                 'user' => $user_id,
  234.                 'connectGoogle' => $connectGoogle,
  235.                 //            'token' => $user_logueado->getAccessKey(),
  236.             )
  237.         );
  238.     }
  239.     private function createWidgetNotesCreateForm(WidgetNotes $entity)
  240.     {
  241.         $form $this->createForm(WidgetNotesType::class, $entity, array(
  242.             'action' => $this->generateUrl('widget_notes_create'),
  243.             'method' => 'POST'
  244.         ));
  245.         return $form;
  246.     }
  247.     private function createWidgetNotesEditForm(WidgetNotes $entity$id)
  248.     {
  249.         $form $this->createForm(WidgetNotesType::class, $entity, array(
  250.             'action' => $this->generateUrl(
  251.                 'widget_notes_edit',
  252.                 array(
  253.                     'id' => $id
  254.                 )
  255.             ),
  256.             'method' => 'PUT'
  257.         ));
  258.         return $form;
  259.     }
  260.     /**
  261.      * @Route("/ChangeLanguage/{idioma}", name="change_language")
  262.      */
  263.     public function cambioIdioma(Request $request$idioma)
  264.     {
  265.         $this->translator->setLocale($idioma);
  266.         $this->get('session')->set('_locale'$idioma);
  267.         return $this->redirect($request->headers->get('referer'));
  268.     }
  269.     /**
  270.      * @Route("/calendar-full", name="calendar-full")
  271.      */
  272.     public function calendarFullAction(Request $request)
  273.     {
  274.         $token $request->request->get('token');
  275.         $em $this->getDoctrine()->getManager();
  276.         $user_logueado $em->getRepository(User::class)->findOneByAccessKey($token);
  277.         $user_id $user_logueado->getId();
  278.         $wnotes = new WidgetNotes();
  279.         $wnotes->setDateAt(new \DateTime("now"));
  280.         $form $this->createWidgetNotesCreateForm($wnotes);
  281.         $hoy date('Y-m-d');
  282.         $parameters = array(
  283.             'createdId' => $user_id,
  284.             'hoy' => $hoy
  285.         );
  286.         $dqlA 'SELECT wn
  287.                     FROM App:WidgetNotes wn
  288.                     WHERE wn.createdId = :createdId AND wn.dateAt >= :hoy
  289.                     ORDER BY wn.dateAt ASC';
  290.         $query $em->createQuery($dqlA)->setParameters($parameters);
  291.         $notes $query->getResult();
  292.         $parametersB = array(
  293.             'user_id' => $user_id,
  294.         );
  295.         $dqlB 'SELECT COUNT (tdl.id) 
  296.                 FROM App:ToDoLogs tdl
  297.                 WHERE tdl.readed = FALSE AND tdl.ownerToDoLog = :user_id';
  298.         $query $em->createQuery($dqlB)->setParameters($parametersB);;
  299.         $alertTodo $query->getResult()[0][1];
  300.         $hoy_datatime = new \DateTime($hoy);
  301.         $parametersA = array(
  302.             'commercialId' => $user_id,
  303.             'alertAt' => $hoy_datatime,
  304.         );
  305.         /* ALL LO QUE HAY  */
  306.         $dql 'SELECT ct.alertAt, ct, cl.title, cn.name, cn.lastName
  307.                 FROM CommercialBundle:CommercialTracking ct
  308.                 INNER JOIN App:Client cl WITH cl.id = ct.clientId
  309.                 INNER JOIN App:ClientContact cn WITH cn.id = ct.contactId
  310.                 WHERE ct.commercialId = :commercialId AND ct.alertAt = :alertAt';
  311.         $query $em->createQuery($dql)->setParameters($parametersA);;
  312.         $commercial_tracking $query->getResult();
  313.         return $this->render(
  314.             'home/calendar-fullscreen.html.twig',
  315.             array(
  316.                 'tracking' => $commercial_tracking,
  317.                 'alertTodo' => $alertTodo,
  318.                 'notes' => $notes,
  319.                 'form' => $form->createView(),
  320.                 'user' => $user_id,
  321.                 'token' => $token,
  322.             )
  323.         );
  324.     }
  325.     /**
  326.      * @Route("/pdf/calendar-full/{token}", name="calendar-full-pdf")
  327.      */
  328.     public function calendarTokenFullAction($tokenRequest $request)
  329.     {
  330.         //        $token = $request->request->get('token');
  331.         //        d($token);exit();
  332.         $em $this->getDoctrine()->getManager();
  333.         $user_logueado $em->getRepository(User::class)->findOneByAccessKey($token);
  334.         $user_id $user_logueado->getId();
  335.         //        $wnotes = new WidgetNotes();
  336.         //        $wnotes->setDateAt(new \DateTime("now"));
  337.         //        $form = $this->createWidgetNotesCreateForm($wnotes);
  338.         $hoy date('Y-m-d');
  339.         $parameters = array(
  340.             'createdId' => $user_id,
  341.             'hoy' => $hoy
  342.         );
  343.         $dqlA 'SELECT wn
  344.                     FROM App:WidgetNotes wn
  345.                     WHERE wn.createdId = :createdId AND wn.dateAt >= :hoy
  346.                     ORDER BY wn.dateAt ASC';
  347.         $query $em->createQuery($dqlA)->setParameters($parameters);
  348.         $notes $query->getResult();
  349.         $parametersB = array(
  350.             'user_id' => $user_id,
  351.         );
  352.         $dqlB 'SELECT COUNT (tdl.id) 
  353.                 FROM App:ToDoLogs tdl
  354.                 WHERE tdl.readed = FALSE AND tdl.ownerToDoLog = :user_id';
  355.         $query $em->createQuery($dqlB)->setParameters($parametersB);;
  356.         $alertTodo $query->getResult()[0][1];
  357.         $hoy_datatime = new \DateTime($hoy);
  358.         $parametersA = array(
  359.             'commercialId' => $user_id,
  360.             'alertAt' => $hoy_datatime,
  361.         );
  362.         /* ALL LO QUE HAY  */
  363.         $dql 'SELECT ct.alertAt, ct, cl.title, cn.name, cn.lastName
  364.                 FROM CommercialBundle:CommercialTracking ct
  365.                 INNER JOIN App:Client cl WITH cl.id = ct.clientId
  366.                 INNER JOIN App:ClientContact cn WITH cn.id = ct.contactId
  367.                 WHERE ct.commercialId = :commercialId AND ct.alertAt = :alertAt';
  368.         $query $em->createQuery($dql)->setParameters($parametersA);;
  369.         $commercial_tracking $query->getResult();
  370.         return $this->render(
  371.             'home/calendar-pdf.html.twig',
  372.             array(
  373.                 'tracking' => $commercial_tracking,
  374.                 'alertTodo' => $alertTodo,
  375.                 'notes' => $notes,
  376.                 //                'form' => $form->createView(),
  377.                 'user' => $user_id,
  378.                 'token' => $token,
  379.             )
  380.         );
  381.     }
  382.     /**
  383.      * @Route("/calendar-admin-fullscreen", name="calendar-admin-fullscreen")
  384.      */
  385.     public function calendarAdminFullScreenAction(Request $request)
  386.     {
  387.         //        $em = $this->getDoctrine()->getManager();
  388.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  389.         $user_userrol $user_logueado->getUserrol();
  390.         $user_id $user_logueado->getId();
  391.         $wnotes = new WidgetNotes();
  392.         $wnotes->setDateAt(new \DateTime("now"));
  393.         $form $this->createWidgetNotesCreateForm($wnotes);
  394.         //
  395.         //
  396.         //
  397.         //        $hoy = date('Y-m-d');
  398.         //        $parameters= array(
  399.         //            'createdId' => $user_id,
  400.         //            'hoy' => $hoy
  401.         //        );
  402.         //        $dqlA = 'SELECT wn
  403.         //                    FROM App:WidgetNotes wn
  404.         //                    WHERE wn.createdId = :createdId AND wn.dateAt >= :hoy
  405.         //                    ORDER BY wn.dateAt ASC';
  406.         //        $query = $em->createQuery($dqlA)->setParameters($parameters);
  407.         //        $notes = $query->getResult();
  408.         //
  409.         //        $parametersB= array(
  410.         //            'user_id' => $user_id,
  411.         //        );
  412.         //        $dqlB = 'SELECT COUNT (tdl.id)
  413.         //                FROM App:ToDoLogs tdl
  414.         //                WHERE tdl.readed = FALSE AND tdl.ownerToDoLog = :user_id';
  415.         //        $query = $em->createQuery($dqlB)->setParameters($parametersB);;
  416.         //        $alertTodo = $query->getResult()[0][1];
  417.         //
  418.         //        $hoy_datatime = new \DateTime($hoy);
  419.         //
  420.         //        $parametersA = array(
  421.         //            'commercialId' => $user_id,
  422.         //            'alertAt' => $hoy_datatime,
  423.         //        );
  424.         //        /* ALL LO QUE HAY  */
  425.         //        $dql = 'SELECT ct.alertAt, ct, cl.title, cn.name, cn.lastName
  426.         //                FROM CommercialBundle:CommercialTracking ct
  427.         //                INNER JOIN App:Client cl WITH cl.id = ct.clientId
  428.         //                INNER JOIN App:ClientContact cn WITH cn.id = ct.contactId
  429.         //                WHERE ct.commercialId = :commercialId AND ct.alertAt = :alertAt';
  430.         //
  431.         //        $query = $em->createQuery($dql)->setParameters($parametersA);;
  432.         //        $commercial_tracking = $query->getResult();
  433.         return $this->render(
  434.             'home/calendar-admin-fullscreen.html.twig',
  435.             array(
  436.                 //            'tracking' => $commercial_tracking,
  437.                 //            'alertTodo' => $alertTodo,
  438.                 //            'notes' => $notes,
  439.                 'form' => $form->createView(),
  440.                 'user' => $user_id,
  441.                 //            'token' => $user_logueado->getAccessKey(),
  442.             )
  443.         );
  444.     }
  445.     /**
  446.      * @Route("/external/calendar-reservation/okyh759ofiuytd573450j8sdlwdf2", name="calendar-external-fullscreen")
  447.      */
  448.     public function calendarExternalReservasFullScreenAction(Request $request)
  449.     {
  450.         return $this->render('home/calendar-reservation.html.twig');
  451.     }
  452.     /**
  453.      * @Route("/external/proposals/events-reservation", name="calendar_datos_external_reservation")
  454.      */
  455.     public function proposalAdminExternalSelectAction(Request $request)
  456.     {
  457.         $em $this->getDoctrine()->getManager();
  458.         $proposals $em->getRepository(Proposal::class)->findBy(
  459.             array(
  460.                 'status' => array('Confirmed''Invoiced'),
  461.             ),
  462.             array('dateEventStarAt' => 'ASC')
  463.         );
  464.         $datos = array();
  465.         if (!empty($proposals)) {
  466.             foreach ($proposals as $proposal) {
  467.                 $client $em->getRepository(Clientent::class)->findOneById($proposal->getClientId());
  468.                 $user $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  469.                 if (empty($user) || is_null($user)) {
  470.                     //                    d($proposal->getAgentTwoId());
  471.                     if (!is_null($proposal->getTeamId())) {
  472.                         $userAsignar $em->getRepository(User::class)->findOneBy(array('team' => $proposal->getTeamId(), 'teamleader' => 1));
  473.                         $id $userAsignar->getId();
  474.                     } else {
  475.                         $admin $em->getRepository(User::class)->findOneByRole('ROLE_ADMIN');
  476.                         $id $admin->getId();
  477.                     }
  478.                     //                    d($id);
  479.                     $proposal->setAgentId($id);
  480.                     $em->persist($proposal);
  481.                     $em->flush();
  482.                     $user $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  483.                 }
  484.                 $colorHay $user->getColor();
  485.                 if (empty($colorHay)) {
  486.                     $color "#ff0000";
  487.                 } else {
  488.                     $color $user->getColor();
  489.                 }
  490.                 if (is_null($user->getPicture())) {
  491.                     $picture "";
  492.                 } else {
  493.                     $picture "<img src='https://" $_SERVER['HTTP_HOST'] . '/' $user->getPicture() . "' class='img-circle img-lg'><br>";
  494.                 }
  495.                 $tooltip $picture " " .
  496.                     $user->getName() . " " $user->getLastname() . "<br>" .
  497.                     $client->getName() . "<br>" .
  498.                     $proposal->getName() . "</b><br>";
  499.                 $datos[] = array(
  500.                     "id" => $proposal->getId(),
  501.                     "title" => $user->getName() . " " $user->getLastname() . " | " $client->getName() . ": " $proposal->getName(),
  502.                     "tooltip" => $tooltip,
  503.                     "start" => $proposal->getDateEventStarAt(),
  504.                     "end" => $proposal->getDateEventEndAt(),
  505.                     "color" => $color,
  506.                     "url" => null
  507.                 );
  508.             }
  509.         } else {
  510.             $datos = [];
  511.         }
  512.         $return = array(
  513.             'proposal' => $datos,
  514.         );
  515.         $response = new JsonResponse($return);
  516.         return $response;
  517.     }
  518.     /**
  519.      * @Route("/external/envioinformecomercial/ftdkwu6df6dfwyjdfvwsdjvdjyde6w", name="external_informe_comercial_ejecute")
  520.      */
  521.     public function envioInformeComercialxAction(Request $request, \Swift_Mailer $mailer)
  522.     {
  523.         $em $this->getDoctrine()->getManager();
  524.         // EJECUTAR ENVIO DE REPORTE COMERCIAL
  525.         $dia date("l");
  526.         $hora date("H:m");
  527.         //Si es el dia Friday y la hora 17:00
  528.         //        if( $dia == "Friday" AND $hora >= "17:00"){
  529.         //si ya no se hizo antes
  530.         $hoy date("Y-m-d");
  531.         $hoy_datatime = new \DateTime($hoy);
  532.         $consultaMail $em->getRepository('App:MailDelivery')->findOneBy(
  533.             array(
  534.                 'dateAt' => $hoy_datatime,
  535.                 'system' => 'Informe Seguimiento Commercial Mante3',
  536.                 'send' => 'si'
  537.             )
  538.         );
  539.         if (is_null($consultaMail)) {
  540.             $enviarCorreos $this->MandarCorreoSeguimientoComercial($request$mailer);
  541.         }
  542.         //        }
  543.         $response = new Response("enviado"200);
  544.         return $response;
  545.     }
  546.     /**
  547.      * @Route("/envioinformecomercialpasado/{date}", name="external_informe_comercial_past")
  548.      * Envío del mensaje para una fecha dada (un viernes pasado).
  549.      * date es de la forma 20251019 para el 19 de octubre del 2025
  550.      */
  551.     public function envioInformeComercialPasadoAction($dateRequest $request, \Swift_Mailer $mailer)
  552.     {
  553.         $em $this->getDoctrine()->getManager();
  554.         // EJECUTAR ENVIO DE REPORTE COMERCIAL A FECHA PASADA
  555.         $rawDate DateTime::createFromFormat('Ymd'$date);
  556.         $ellunes = (clone $rawDate)->modify('last monday');
  557.         $parametersA = array(
  558.             'hoy' => $rawDate,
  559.             'elLunes' => $ellunes,
  560.         );
  561.         $dqlA 'SELECT c
  562.                 FROM CommercialBundle:CommercialTracking c
  563.                 WHERE c.dateAt >= :elLunes AND c.dateAt <= :hoy
  564.                 ORDER BY c.dateAt DESC';
  565.         $queryA $em->createQuery($dqlA)->setParameters($parametersA);
  566.         $tracking $queryA->getResult();
  567.         $data = [];
  568.         foreach ($tracking as $trackings) {
  569.             $user $em->getRepository(User::class)->findOneById($trackings->getCommercialId());
  570.             $client $em->getRepository(Client::class)->findOneById($trackings->getClientId());
  571.             $contact $em->getRepository(ClientContact::class)->findOneById($trackings->getContactId());
  572.             if (empty($contact)){
  573.                 $contact $em->getRepository(SupplierContact::class)->findOneBySupplierId($trackings->getSupplierId());
  574.             }
  575.             $fecha $trackings->getDateAt()->format('d/m/Y');
  576.             // El desarrollo de los proveedores al parecer Jorge no lo finalizo, por eso este condicional se agrega para evitar error 500
  577.             if (empty($client)) {
  578.                 $client $em->getRepository(Supplier::class)->findOneById($trackings->getSupplierId());
  579.             }
  580.             $data[$user->getName() . ' ' $user->getLastName()][] = array(
  581.                 'fecha' => $fecha,
  582.                 'hourIn' => $trackings->getTimeStart()->format('H:m'),
  583.                 'hourOut' => $trackings->getTimeEnd()->format('H:m'),
  584.                 'client' => $client->getName(),
  585.                 'contact' => (!empty($contact)) ? ($contact->getName() . ' ' $contact->getLastName()) : 'No se encontro el contacto',
  586.                 'situation' => $this->translator->trans($trackings->getSituation()),
  587.                 'commercial' => $user->getName() . ' ' $user->getLastName(),
  588.                 'observation' => $trackings->getMessage(),
  589.             );
  590.         }
  591.         $dqlZ 'SELECT c
  592.                 FROM App:Client c
  593.                 WHERE c.createdAt >= :elLunes AND c.createdAt <= :hoy 
  594.                 ORDER BY c.createdAt DESC';
  595.         $queryZ $em->createQuery($dqlZ)->setParameters($parametersA);
  596.         $clientsStoreLastWeek $queryZ->getResult();
  597.         $commercialAgents $em->getRepository(User::class)->findBy(array('team' => 7));  // Grupo Comercial (7)
  598.         $commercialAgentsId = [];
  599.         $dataB = [];
  600.         foreach ($commercialAgents as $item) { $commercialAgentsId[$item->getId()] = $item->getName() . ' ' $item->getLastName(); }
  601.         foreach ($clientsStoreLastWeek as $item) {
  602.             foreach ($commercialAgentsId as $key => $elem) { if ($item->getCreatedId() == $key) { $dataB[] = array($elem$item); } }
  603.         }
  604.         // Buscamos los correos de los administradores
  605.         $emailarray = [];
  606.         $usermails $em->getRepository(User::class)->findByRole('ROLE_ADMIN');
  607.         foreach ($usermails as $usermail) {
  608.             $emailarray[] = $usermail->getEmail();
  609.         }
  610.         $transporter = new Swift_SmtpTransport();
  611.         $transporter->setHost('smtp.gmail.com')
  612.             ->setEncryption('ssl')//ssl / tls
  613.             ->setPort(465)// 465 / 587
  614.             ->setUsername('desarrollo@develup.solutions')
  615.             ->setPassword('utvh hzoi wfdo ztjs');
  616.         $mailer = new Swift_Mailer($transporter);
  617.         $message = (new \Swift_Message())
  618.             ->setSubject('Informe Seguimiento Commercial Mante3 (Manual)')
  619.             ->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
  620.             ->setTo($emailarray)
  621.             ->setBody(
  622.                 $this->renderView(
  623.                     'MDS/CommercialBundle/emails/list-email-report.html.twig',
  624.                     array('data' => $data'dataB' => $dataB)
  625.                 ),
  626.                 'text/html'
  627.             );
  628.         $mailer->send($message);
  629.         $response = new Response("enviado"200);
  630.         return $response;
  631.     }
  632.     private function MandarCorreoSeguimientoComercial(Request $request, \Swift_Mailer $mailer)
  633.     {
  634.         $em $this->getDoctrine()->getManager();
  635.         $hoy date("Y-m-d");
  636.         $hoy_datatime = new \DateTime($hoy);
  637. //        $ellunes = date('Y-m-d', strtotime('-4 day'));
  638.         $ellunes date('Y-m-d'strtotime('last monday'));
  639.         $consultaMail $em->getRepository(MailDelivery::class)->findOneBy(
  640.             array(
  641.                 'dateAt' => $hoy_datatime,
  642.                 'system' => 'Informe Seguimiento Commercial Mante3',
  643.                 'send' => 'si'
  644.             )
  645.         );
  646.         if (is_null($consultaMail)) {
  647.             $mailDelivery = new MailDelivery();
  648.             $mailDelivery->setDateAt($hoy_datatime);
  649.             $mailDelivery->setSystem('Informe Seguimiento Commercial Mante3');
  650.             $mailDelivery->setSend('si');
  651.             $em->persist($mailDelivery);
  652.             $em->flush();
  653.             $parametersA = array(
  654.                 'hoy' => $hoy ' 00:00:00',
  655.                 'elLunes' => $ellunes ' 00:00:00',
  656.             );
  657.             $dqlA 'SELECT c
  658.                     FROM CommercialBundle:CommercialTracking c
  659.                     WHERE c.dateAt >= :elLunes AND c.dateAt <= :hoy
  660.                     ORDER BY c.dateAt DESC';
  661.             $queryA $em->createQuery($dqlA)->setParameters($parametersA);
  662.             $tracking $queryA->getResult();
  663.             $data = array();
  664.             foreach ($tracking as $trackings) {
  665.                 $user $em->getRepository(User::class)->findOneById($trackings->getCommercialId());
  666.                 $client $em->getRepository(Client::class)->findOneById($trackings->getClientId());
  667.                 $contact $em->getRepository(ClientContact::class)->findOneById($trackings->getContactId());
  668.                 $fecha $trackings->getDateAt()->format('d/m/Y');
  669.                 // El desarrollo de los proveedores al parecer Jorge no lo finalizo, por eso este condicional se agrega para evitar error 500
  670.                 if (empty($client)) {
  671.                     $client $em->getRepository(Supplier::class)->findOneById($trackings->getSupplierId());
  672.                 }
  673.                 $data[$user->getName() . ' ' $user->getLastName()][] = array(
  674.                     'fecha' => $fecha,
  675.                     'hourIn' => $trackings->getTimeStart()->format('H:m'),
  676.                     'hourOut' => $trackings->getTimeEnd()->format('H:m'),
  677.                     'client' => $client->getName(),
  678.                     'contact' => (!empty($contact)) ? ($contact->getName() . ' ' $contact->getLastName()) : 'No se encontro el contacto',
  679.                     'situation' => $this->translator->trans($trackings->getSituation()),
  680.                     'commercial' => $user->getName() . ' ' $user->getLastName(),
  681.                     'observation' => $trackings->getMessage(),
  682.                 );
  683.             }
  684.             $dqlZ 'SELECT c
  685.                     FROM App:Client c
  686.                     WHERE c.createdAt >= :elLunes AND c.createdAt <= :hoy 
  687.                     ORDER BY c.createdAt DESC';
  688.             $queryZ $em->createQuery($dqlZ)->setParameters($parametersA);
  689.             $clientsStoreLastWeek $queryZ->getResult();
  690.             $commercialAgents $em->getRepository(User::class)->findBy(array('team' => 7));  // Grupo Comercial (7)
  691.             $commercialAgentsId = array();
  692.             $dataB = array();
  693.             foreach ($commercialAgents as $item) { $commercialAgentsId[$item->getId()] = $item->getName() . ' ' $item->getLastName(); }
  694.             foreach ($clientsStoreLastWeek as $item) {
  695.                 foreach ($commercialAgentsId as $key => $elem) { if ($item->getCreatedId() == $key) { $dataB[] = array($elem$item); } }
  696.             }
  697.             // Buscamos los correos de los administradores
  698.             $emailarray = array();
  699.             $usermails $em->getRepository(User::class)->findByRole('ROLE_ADMIN');
  700.             foreach ($usermails as $usermail) {
  701.                 $emailarray[] = $usermail->getEmail();
  702.             }
  703.             $transporter = new Swift_SmtpTransport();
  704.             $transporter->setHost('smtp.gmail.com')
  705.                 ->setEncryption('ssl')//ssl / tls
  706.                 ->setPort(465)// 465 / 587
  707.                 ->setUsername('desarrollo@develup.solutions')
  708.                 ->setPassword('utvh hzoi wfdo ztjs');
  709.             $mailer = new Swift_Mailer($transporter);
  710.             $message = (new \Swift_Message())
  711.                 ->setSubject('Informe Seguimiento Commercial Mante3')
  712.                 ->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
  713.                 ->setTo($emailarray)
  714.                 ->setBody(
  715.                     $this->renderView(
  716.                         'MDS/CommercialBundle/emails/list-email-report.html.twig',
  717.                         array('data' => $data'dataB' => $dataB)
  718.                     ),
  719.                     'text/html'
  720.                 );
  721.             $mailer->send($message);
  722.         }
  723.     }
  724. }