src/MDS/GreenPatioBundle/Controller/CvrGPReservationsCalendarController.php line 118

Open in your IDE?
  1. <?php
  2. namespace App\MDS\GreenPatioBundle\Controller;
  3. use App\Entity\User;
  4. use App\Entity\WidgetNotes;
  5. use App\Form\WidgetNotesType;
  6. use App\MDS\GreenPatioBundle\Entity\CvrReservationInvoice;
  7. use App\MDS\GreenPatioBundle\Entity\Reservation;
  8. use App\MDS\GreenPatioBundle\Entity\ReservationInvoice;
  9. use App\MDS\GreenPatioBundle\Entity\ReservationLoungeSimple;
  10. use App\MDS\GreenPatioBundle\Entity\ReservationPaymentsClient;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Session\Session;
  14. use Symfony\Component\HttpFoundation\JsonResponse;
  15. use Psr\Log\LoggerInterface;
  16. use DateTime;
  17. use DatePeriod;
  18. use DateInterval;
  19. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  20. // Controlador para el calendario UNIFICADO de las salas de Green Patio y Covarrubias (excluyendo las visitas)
  21. class CvrGPReservationsCalendarController extends AbstractController
  22. {
  23.     /**
  24.      * @Route("/gp-cvr/calendar", name="gp_cvr_calendar")
  25.      */
  26.     public function calendarCvrGpReservationsAction(Request $request) {
  27.         $session = new Session();
  28.         $token=$session->get('tokenGoogleCalendar');
  29.         if (!is_null($token)) {
  30.             $this->googleCalendar->setAccessToken($token);
  31.             $connectGoogle "1";
  32.         }else{
  33.             $connectGoogle "0";
  34.         }
  35.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  36.         $user_id $user_logueado->getId();
  37.         $wnotes = new WidgetNotes();
  38.         $wnotes->setDateAt(new \DateTime("now"));
  39.         $form $this->createWidgetNotesCreateForm($wnotes);
  40.         return $this->render('MDS/GreenPatioBundle/reservations/calendar-gp-cvr-reservations.html.twig',
  41.             array(
  42.                 'form' => $form->createView(),
  43.                 'user'=> $user_id,
  44.                 'connectGoogle' => $connectGoogle,
  45.             )
  46.         );
  47.     }
  48.     /**
  49.      * @Route("/widget/notes/calendargpcvr/create/", name="widget_notes_calendar_gp_cvr_create")
  50.      */
  51.     public function addNotesAction(Request $requestLoggerInterface $logger)
  52.     {
  53.         $em $this->getDoctrine()->getManager();
  54.         $notes $em->getRepository(WidgetNotes::class)->findAll();
  55.         $wnotes = new WidgetNotes();
  56.         $form $this->createWidgetNotesCreateForm($wnotes);
  57.         $form->handleRequest($request);
  58.         $forAgent $form->get('forAgent')->getData();
  59.         if(!is_null($forAgent)){ $wnotes->setForAgent($forAgent->getId()); }
  60.         if($form->isValid())
  61.         {
  62.             /* Obtengo usuario logueado */
  63.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  64.             $user_id $user_logueado->getId();
  65.             $wnotes->setCreatedId($user_id);
  66.             $wnotes->setUpdatedId($user_id);
  67.             /* Gestión de eventos en Log */
  68.             $user_lastname $user_logueado->getLastname();
  69.             $user_name $user_logueado->getName();
  70.             $user_email $user_logueado->getEmail();
  71.             $user_rol $user_logueado->getRoles();
  72.             $event_url $request->getPathInfo();
  73.             $event_complete $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
  74.             try{
  75.                 $em->persist($wnotes);
  76.                 $em->flush();
  77.                 $event 'The Note has been created succesfully.';
  78.                 $successMessage $this->get('translator')->trans($event);
  79.                 $this->addFlash('mensaje'$successMessage);
  80.                 $logger->info($event_complete.' | '.$event);
  81.             } catch (\Exception $e){
  82.                 $event 'An error occurred: '.$e->getMessage();
  83.                 /* Para el log */
  84.                 $logger->error($event_complete.' | '.$event);
  85.                 /* Para el usuario */
  86.                 $errorMessage $this->get('translator')->trans($event);
  87.                 $this->addFlash('mensajeerror'$errorMessage);
  88.             }
  89.         }else{
  90.             $errorMessage $this->get('translator')->trans('Error, some fields are empty');
  91.             $this->addFlash('mensajeerror'$errorMessage);
  92.         }
  93.         return $this->redirectToRoute('homepage');
  94.     }
  95.     /**
  96.      * @Route("/gp-cvr/eventsgpcvr", name="get_reservations_gp_cvr")
  97.      */
  98.     public function reservationGpCvrEventsAction(Request $request)
  99.     {
  100.         $em $this->getDoctrine()->getManager();
  101.         // Buscamos las reservas desde 1 año atras en adelante para no traer exceso de datos
  102.         $todayOneYearAgo = new DateTime('now -365 days');
  103.         $parameters = array('dateStart' => $todayOneYearAgo,);
  104.         $dql 'SELECT p
  105.                 FROM GreenPatioBundle:ReservationLoungeSimple p                         
  106.                 WHERE p.dateStart >= :dateStart  
  107.                 ORDER BY p.dateStart ASC ';
  108.         $query $em->createQuery($dql)->setParameters($parameters);
  109.         $reservation $query->getResult();
  110.         // Buscamos las visitas desde 1 semana atras en adelante para no traer exceso de datos (Tiempo confirmado por Gabriela Bracho)
  111.         $todayOneWeekAgo = new DateTime('now -1 week');
  112.         $parameters = array('dateStart' => $todayOneWeekAgo,);
  113.         $dql 'SELECT p
  114.                 FROM GreenPatioBundle:ReservationVisit p                         
  115.                 WHERE p.dateStart >= :dateStart  
  116.                 ORDER BY p.dateStart ASC ';
  117.         $query $em->createQuery($dql)->setParameters($parameters);
  118.         $visitas $query->getResult();
  119.         $arrayFechaVisitas = array();
  120.         foreach ($visitas as $item) {
  121.             //Se agrupan las visitas por fechas
  122.             $arrayFechaVisitas[$item->getDateStart()->format('Y-m-d').$item->getId()][] = $item;
  123.         }
  124.         $newArrayVisitas = array();
  125.         //Se agrupan las visitas por agente
  126.         foreach ($arrayFechaVisitas as $fecha) {
  127.             foreach ($fecha as $item) {
  128.                 //Se van concatenando los titulos de las visitas en una sola
  129.                 $loungeNameTemp '';
  130.                 $idAgentLounge = ($item->getIdLounge() == 0) ? $item->getAgentId() : '0';
  131.                 if (!empty($newArrayVisitas[$item->getDateStart()->format('Y-m-d') . '-' $idAgentLounge])) {
  132. //                    $loungeNameTemp = $newArrayVisitas[$item->getDateStart()->format('Y-m-d') . '-' . $idAgentLounge]->getLoungeName();
  133.                 }
  134.                 $item->setLoungeName($loungeNameTemp $item->getDateStart()->format('H:i') . ' ' $item->getLoungeName() . '<br>');
  135.                 $newArrayVisitas[$item->getDateStart()->format('Y-m-d') . '-' $idAgentLounge] = $item;
  136.             }
  137.         }
  138.         $visitas $newArrayVisitas;
  139. //        foreach ($visitas as $item) { array_push($reservation, $item); }
  140.         $xArray = array();
  141.         foreach ($arrayFechaVisitas as $elem) { foreach ($elem as $item) { $xArray[] = $item; } }
  142.         foreach ($xArray as $item) { array_push($reservation$item); }
  143.         $datos = array();
  144.         $datosMontaje = array();
  145.         $datosDesMontaje = array();
  146.         if (!empty($reservation)) {
  147.             foreach ($reservation as $reservaSala) {
  148.                 if (!empty($reservaSala->getIdReservation())) {
  149.                     $reserva $em->getRepository(Reservation::class)->findOneById($reservaSala->getIdReservation());
  150.                     if ($reservaSala->getType() == 'Visit') {
  151.                         $reserva->setStatus('Visit');
  152.                     }
  153.                 } else {
  154.                     // Estamos con una visita
  155.                     $reserva = new Reservation();
  156.                     $reserva->setStatus('Visit');
  157.                     $reserva->setTitle($reservaSala->getLoungeName());
  158.                 }
  159.                 if ($reservaSala->getDateStart()->format('d') == $reservaSala->getDateEnd()->format('d')) {
  160.                     $tooltip $reserva->getTitle() . ' - <b><h3>' $reservaSala->getLoungeName() . "</h3></b> Del " $reservaSala->getDateStart()->format('d/m') . ' desde ' $reservaSala->getHourStart() . ":" $reservaSala->getMinStart() . " a " $reservaSala->getHourEnd() . ":" $reservaSala->getMinEnd();
  161.                 } else {
  162.                     $tooltip $reserva->getTitle() . ' - <b><h3>' $reservaSala->getLoungeName() . "</h3></b> Del " $reservaSala->getDateStart()->format('d/m') . ' desde ' $reservaSala->getHourStart() . ":" $reservaSala->getMinStart() . " al " $reservaSala->getDateEnd()->format('d/m') . ' hasta ' $reservaSala->getHourEnd() . ":" $reservaSala->getMinEnd();
  163.                 }
  164.                 $logicoVisita false;
  165.                 if (!is_null($reserva->getStatus())) {
  166.                     $statusColorMap = [
  167.                         'Bloqueo' => function($reservaSala) { return ($reservaSala->getIdLounge() > 21) ? "#b873bf" "#ffaa00"; },
  168.                         'Confirmed' => "#13ad27",
  169.                         'Invoiced' => "#13ad27",
  170.                         'Deleted' => "#ff0000",
  171.                         'Cotizado' => "#faafc3",
  172.                         'Reservado' => "#13ad27",
  173.                         'Visit' => function($reservaSala) {
  174.                             if ($reservaSala->getIdLounge() == 0) {
  175.                                 $agentColorMap = [
  176.                                     77 => "#22cbf5",
  177.                                     82 => "#f5229a",
  178.                                     120 => "#157cc2",
  179.                                 ];
  180.                                 return $agentColorMap[$reservaSala->getAgentId()] ?? "";
  181.                             } else {
  182.                                 return '#f0d800';
  183.                             }
  184.                         },
  185.                         'default' => "",
  186.                     ];
  187.                     
  188.                     $color "";
  189.                     $logicoVisita false;
  190.                     
  191.                     if (array_key_exists($reserva->getStatus(), $statusColorMap)) {
  192.                         $value $statusColorMap[$reserva->getStatus()];
  193.                         // Si el valor es una función, la ejecutamos para obtener el color.
  194.                         $color is_callable($value) ? $value($reservaSala) : $value;
  195.                         if ($reserva->getStatus() === 'Visit') {
  196.                             $logicoVisita true;
  197.                         }
  198.                     } else {
  199.                         $color $statusColorMap['default'];
  200.                     }
  201.                     if (!empty($reservaSala->getType()) and !($reservaSala->getType() == 'Visit')) {
  202.                         //Es un montaje o desmontaje
  203.                         $color "#a5b8a2";
  204.                         // Si es un montaje o desmontaje pero esta cancelado debe prevalecer el color de cancelado
  205.                         if ($reserva->getStatus() == 'Deleted') { $color "#ff0000"; }
  206.                     }
  207.                     if (($reservaSala->getIdLounge() == 22) or  ($reservaSala->getIdLounge() == 23) or
  208.                         ($reservaSala->getIdLounge() == 24) or ($reservaSala->getIdLounge() == 25)){
  209.                         //Ajustamos el color a una sala de covarrubia
  210.                         switch ($color) {
  211.                             case '#ffaa00'$color "#b873bf"; break; //naranja (bloqueo) => morado
  212.                             case '#13ad27'$color "#017362"; break; //verde (Confirmed) => verde olivo
  213.                             case '#ff0000'$color "#ff0000"; break; //rojo
  214.                             case '#faafc3'$color "#faafc3"; break; //Rojo claro
  215.                             default: break; //no modificar el color
  216.                         }
  217.                     }
  218.                 }
  219.                 $pago1 "";
  220.                 $pago2 "";
  221.                 $ht "";
  222.                 if (!($reserva->getStatus() == 'Visit')) {
  223.                     $paymentsAll $em->getRepository(ReservationPaymentsClient::class)->findOneByReservationId($reserva->getId());
  224.                 } else {
  225.                     $paymentsAll null;
  226.                 }
  227.                 if (!empty($paymentsAll)) {
  228.                     $pago2 "<i class='icon-coin-euro' style='color: #000 !important;'></i>";      //Hay pagos parciales
  229.                 }
  230.                 if (!($reserva->getStatus() == 'Visit')) {
  231.                     $facturas $em->getRepository(ReservationInvoice::class)->findByReservationId($reserva->getId());
  232.                     $facturasCVR $em->getRepository(CvrReservationInvoice::class)->findByReservationId($reserva->getId());
  233.                     foreach ($facturasCVR as $item) { array_push($facturas$item); }
  234.                 }
  235.                 if (!empty($facturas)) {
  236.                     foreach ($facturas as $factura) {
  237.                         if ($factura->getMaster() == "master") {
  238.                             $pago1 "<i class='icon-thumbs-up3' style='color: #000 !important;'></i>";// Se ha pagado la totalidad
  239.                         }
  240.                         if ($factura->getMaster() != "master") {
  241.                             $pago2 "<i class='icon-coin-euro' style='color: #000 !important;'></i>";      //Hay pagos parciales
  242.                         }
  243.                     }
  244.                 }
  245.                 if ($reserva->getCateringName() == 'HIGO & TRIGO, S.L.') {
  246.                     $ht "<a style='color: #000 !important;'><strong>H&T</strong></a>";      // Es una reserva con servicio de Catering Higo & Trigo
  247.                 }
  248.                 // Pagos parciales y totales
  249.                 if (!empty($reserva)) {
  250.                     if (!$logicoVisita) {
  251.                         $datos[] = array(
  252.                             "title" => $reservaSala->getDateStart()->format('H:i') . ' ' $pago2 $pago1 $ht ' ' $reservaSala->getType() . '<br>' $reservaSala->getLoungeName() . '<br>' '<br>' $reserva->getTitle(),
  253.                             "titleOne" => $reservaSala->getDateStart()->format('H:i') . ' ' $pago2 $pago1 $ht ' ' $reservaSala->getType() . '<br>',
  254.                             "titleTwo" => $reservaSala->getLoungeName(),
  255.                             "titleThree" => '' '<br>' '<br>' $reserva->getTitle(),
  256.                             "type" => $reservaSala->getType(),
  257.                             "id" => $reserva->getId(),
  258.                             "tooltip" => $tooltip,
  259.                             "start" => $reservaSala->getDateStart(),
  260.                             "end" => $reservaSala->getDateEnd(),
  261.                             "color" => $color,
  262.                             "loungeId" => $reservaSala->getIdLounge(),
  263.                             "url" => "/reservations-greenpatio/edit/" $reserva->getId(),
  264.                             "status" => $reserva->getStatus(),
  265.                         );
  266.                     } else {
  267.                         // Es una visita
  268.                         $datos[] = array(
  269.                             "title" => $reservaSala->getLoungeName(),
  270.                             "titleOne" => $reservaSala->getDateStart()->format('H:i') . ' ' ' ' $reservaSala->getType() . '<br>',
  271.                             "titleTwo" => $reservaSala->getLoungeName(),
  272.                             "titleThree" => '' '<br>' '<br>' $reserva->getTitle(),
  273.                             "type" => $reservaSala->getType(),
  274.                             "id" => $reservaSala->getId() . 'V',
  275.                             "tooltip" => $tooltip,
  276.                             "start" => $reservaSala->getDateStart(),
  277.                             "end" => $reservaSala->getDateEnd(),
  278.                             "color" => $color,
  279.                             "loungeId" => $reservaSala->getIdLounge(),
  280.                             "url" => '/reservations-greenpatio/addvisit',
  281.                             "status" => $reserva->getStatus(),
  282.                             "agentId" => $reservaSala->getAgentId(),
  283.                         );
  284.                     }
  285.                 } else {
  286.                     $datos = [];
  287.                 }
  288.             }
  289.         }
  290.         $newDatos = array();
  291.         // INICIO: Se unen las salas en una sola reserva por ID de reserva
  292.         foreach ($datos as $dato) {
  293.             // Inicializamos el arreglo para crear los indices
  294.             switch ($dato['color']){
  295.                 case '#a5b8a2':              //Montaje o Desmontaje
  296.                     if ($dato['type'] == 'Montaje'){
  297.                         $newDatos[$dato['id'].'M'] = null;
  298.                     } else {
  299.                         $newDatos[$dato['id'].'D'] = null;
  300.                     }
  301.                     break;
  302.                 default:                    //Dia de reserva o Visita (la visita ya viene con su indice #V )
  303.                     $newDatos[$dato['id']] = null;
  304.                     break;
  305.             }
  306.         }
  307.         foreach ($datos as $dato) {
  308.             switch ($dato['color']){
  309.                 //Montaje o Desmontaje
  310.                 case '#a5b8a2':
  311.                     if ($dato['type'] == "Montaje") {
  312.                         if (!empty($newDatos[$dato['id'] . 'M'])) {
  313.                             // El Montaje esta ocupando mas de 1 dia, se deben unir los dias de montaje
  314.                             if ($newDatos[$dato['id'] . 'M']['start'] > $dato['start']) { $newDatos[$dato['id'] . 'M']['start'] = $dato['start']; }
  315.                             if ($newDatos[$dato['id'] . 'M']['end'] < $dato['end']) { $newDatos[$dato['id'] . 'M']['end'] = $dato['end']; }
  316.                         } else {
  317.                             $newDatos[$dato['id'] . 'M'] = $dato;
  318.                         }
  319.                     } else {
  320.                         if ($dato['type'] == "Desmontaje") {
  321.                             if (!empty($newDatos[$dato['id'] . 'D'])) {
  322.                                 // El Desmontaje esta ocupando mas de 1 dia, se deben unir los dias de desmontaje
  323.                                 if ($newDatos[$dato['id'] . 'D']['start'] > $dato['start']) { $newDatos[$dato['id'] . 'D']['start'] = $dato['start']; }
  324.                                 if ($newDatos[$dato['id'] . 'D']['end'] < $dato['end']) { $newDatos[$dato['id'] . 'D']['end'] = $dato['end']; }
  325.                             } else {
  326.                                 $newDatos[$dato['id'] . 'D'] = $dato;
  327.                             }
  328.                         }
  329.                     }
  330.                 break;
  331.                 //Visita Angie (id user 77)
  332.                 case '#22cbf5':
  333.                     if ($dato['type'] == "Visit") {
  334.                         $newDatos[$dato['start']->format('Ymd').'V77'.$dato['id']] = $dato;
  335.                         if (!empty($newDatos[$dato['start']->format('Ymd').'V77'])) {
  336.                             // Hay varias visitas ese mismo dia para el agente
  337. //                            $newDatos[$dato['start']->format('Ymd').'V77']['tooltip'] = $newDatos[$dato['start']->format('Ymd').'V77']['tooltip'] . $dato['tooltip'];
  338.                         } else {
  339. //                            $newDatos[$dato['start']->format('Ymd').'V77'] = $dato;
  340.                         }
  341.                     }
  342.                 break;
  343.                 //Visita Gabriela (id user 82)
  344.                 case '#f5229a':
  345.                     if ($dato['type'] == "Visit") {
  346.                         $newDatos[$dato['start']->format('Ymd').'V82'.$dato['id']] = $dato;
  347.                         if (!empty($newDatos[$dato['start']->format('Ymd').'V82'])) {
  348.                             // Hay varias visitas ese mismo dia para el agente
  349. //                            $newDatos[$dato['start']->format('Ymd').'V82']['tooltip'] = $newDatos[$dato['start']->format('Ymd').'V82']['tooltip'] . $dato['tooltip'];
  350.                         } else {
  351. //                            $newDatos[$dato['start']->format('Ymd').'V82'] = $dato;
  352.                         }
  353.                     }
  354.                 break;
  355.                 //Visita Cristina (id user 120)
  356.                 case '#157cc2':
  357.                     if ($dato['type'] == "Visit") {
  358.                         $newDatos[$dato['start']->format('Ymd').'V120'.$dato['id']] = $dato;
  359.                         if (!empty($newDatos[$dato['start']->format('Ymd').'V120'])) {
  360.                             // Hay varias visitas ese mismo dia para el agente
  361. //                            $newDatos[$dato['start']->format('Ymd').'V120']['tooltip'] = $newDatos[$dato['start']->format('Ymd').'V120']['tooltip'] . $dato['tooltip'];
  362.                         } else {
  363. //                            $newDatos[$dato['start']->format('Ymd').'V120'] = $dato;
  364.                         }
  365.                     }
  366.                 break;
  367.                 //Visita Generica para agentes a Covarrubias
  368.                 case '#f0d800':
  369.                     if ($dato['type'] == "Visit") {
  370.                         $newDatos[$dato['start']->format('Ymd').'V0'.$dato['id']] = $dato;
  371.                         if (!empty($newDatos[$dato['start']->format('Ymd').'V0'])) {
  372.                             // Hay varias visitas ese mismo dia para el agente
  373. //                            $newDatos[$dato['start']->format('Ymd').'V0']['tooltip'] = $newDatos[$dato['start']->format('Ymd').'V0']['tooltip'] . $dato['tooltip'];
  374.                         } else {
  375. //                            $newDatos[$dato['start']->format('Ymd').'V0'] = $dato;
  376.                         }
  377.                     }
  378.                     break;
  379.                 //Reserva color naranja Bloqueo
  380.                 case '#ffaa00':
  381.                     if (empty($newDatos[$dato['id']])){
  382.                         $newDatos[$dato['id']] = $dato;
  383.                     } else {
  384.                         // Se verifican la actualizacion de incio y fin, para tener el menor inicio y el mayor fin
  385.                         if ($newDatos[$dato['id']]['start'] > $dato['start']) {
  386.                             $newDatos[$dato['id']]['start'] = $dato['start'];
  387.                         }
  388.                         if ($newDatos[$dato['id']]['end'] < $dato['end']) {
  389.                             $newDatos[$dato['id']]['end'] = $dato['end'];
  390.                         }
  391.                         $newDatos[$dato['id']]['tooltip'] = $newDatos[$dato['id']]['tooltip'] . ' | ' $dato['tooltip'];
  392.                         // Verificamos si la sala ya ha sido previamente agregada a la lista de salas para no repetirla
  393.                         if (strpos($newDatos[$dato['id']]['title'], $dato['titleTwo']) === false) {
  394.                             // No se encontro la cadena, debemos agregar
  395.                             $newDatos[$dato['id']]['titleTwo'] = $newDatos[$dato['id']]['titleTwo'] . '<br>' $dato['titleTwo'];
  396.                             $newDatos[$dato['id']]['title'] = $newDatos[$dato['id']]['titleOne'] . $newDatos[$dato['id']]['titleTwo'] . $newDatos[$dato['id']]['titleThree'];
  397.                         }
  398.                     }
  399.                 break;
  400.                 //Reserva color morado Bloqueo (Covarrubias)
  401.                 case '#b873bf':
  402.                     if (empty($newDatos[$dato['id']])){
  403.                         $newDatos[$dato['id']] = $dato;
  404.                     } else {
  405.                         // Se verifican la actualizacion de incio y fin, para tener el menor inicio y el mayor fin
  406.                         if ($newDatos[$dato['id']]['start'] > $dato['start']) {
  407.                             $newDatos[$dato['id']]['start'] = $dato['start'];
  408.                         }
  409.                         if ($newDatos[$dato['id']]['end'] < $dato['end']) {
  410.                             $newDatos[$dato['id']]['end'] = $dato['end'];
  411.                         }
  412.                         $newDatos[$dato['id']]['tooltip'] = $newDatos[$dato['id']]['tooltip'] . ' | ' $dato['tooltip'];
  413.                         // Verificamos si la sala ya ha sido previamente agregada a la lista de salas para no repetirla
  414.                         if (strpos($newDatos[$dato['id']]['title'], $dato['titleTwo']) === false) {
  415.                             // No se encontro la cadena, debemos agregar
  416.                             $newDatos[$dato['id']]['titleTwo'] = $newDatos[$dato['id']]['titleTwo'] . '<br>' $dato['titleTwo'];
  417.                             $newDatos[$dato['id']]['title'] = $newDatos[$dato['id']]['titleOne'] . $newDatos[$dato['id']]['titleTwo'] . $newDatos[$dato['id']]['titleThree'];
  418.                         }
  419.                     }
  420.                 break;
  421.                 //Reserva color Rojo claro Cotizado
  422.                 case '#faafc3':
  423.                     if (empty($newDatos[$dato['id']])){
  424.                         $newDatos[$dato['id']] = $dato;
  425.                     } else {
  426.                         // Se verifican la actualizacion de incio y fin, para tener el menor inicio y el mayor fin
  427.                         if ($newDatos[$dato['id']]['start'] > $dato['start']) {
  428.                             $newDatos[$dato['id']]['start'] = $dato['start'];
  429.                         }
  430.                         if ($newDatos[$dato['id']]['end'] < $dato['end']) {
  431.                             $newDatos[$dato['id']]['end'] = $dato['end'];
  432.                         }
  433.                         $newDatos[$dato['id']]['tooltip'] = $newDatos[$dato['id']]['tooltip'] . ' | ' $dato['tooltip'];
  434.                         // Verificamos si la sala ya ha sido previamente agregada a la lista de salas para no repetirla
  435.                         if (strpos($newDatos[$dato['id']]['title'], $dato['titleTwo']) === false) {
  436.                             // No se encontro la cadena, debemos agregar
  437.                             $newDatos[$dato['id']]['titleTwo'] = $newDatos[$dato['id']]['titleTwo'] . '<br>' $dato['titleTwo'];
  438.                             $newDatos[$dato['id']]['title'] = $newDatos[$dato['id']]['titleOne'] . $newDatos[$dato['id']]['titleTwo'] . $newDatos[$dato['id']]['titleThree'];
  439.                         }
  440.                     }
  441.                 break;
  442.                 //Reserva color Rojo Reserva Cancelada
  443.                 case '#ff0000':
  444.                     //Las canceladas no se muestran en el calendario
  445.                 break;
  446.                 //Reserva color Verde Reserva Confirmada, Facturada, (se ha adelantado un pago parcial)
  447.                 case '#13ad27':
  448.                     if (empty($newDatos[$dato['id']])){
  449.                         $newDatos[$dato['id']] = $dato;
  450.                     } else {
  451.                         // Se verifican la actualizacion de incio y fin, para tener el menor inicio y el mayor fin
  452.                         if ($newDatos[$dato['id']]['start'] > $dato['start']) {
  453.                             $newDatos[$dato['id']]['start'] = $dato['start'];
  454.                         }
  455.                         if ($newDatos[$dato['id']]['end'] < $dato['end']) {
  456.                             $newDatos[$dato['id']]['end'] = $dato['end'];
  457.                         }
  458.                         $newDatos[$dato['id']]['tooltip'] = $newDatos[$dato['id']]['tooltip'] . ' | ' $dato['tooltip'];
  459.                         // Verificamos si la sala ya ha sido previamente agregada a la lista de salas para no repetirla
  460.                         if (strpos($newDatos[$dato['id']]['title'], $dato['titleTwo']) === false) {
  461.                             // No se encontro la cadena, debemos agregar
  462.                             $newDatos[$dato['id']]['titleTwo'] = $newDatos[$dato['id']]['titleTwo'] . '<br>' $dato['titleTwo'];
  463.                             $newDatos[$dato['id']]['title'] = $newDatos[$dato['id']]['titleOne'] . $newDatos[$dato['id']]['titleTwo'] . $newDatos[$dato['id']]['titleThree'];
  464.                         }
  465.                     }
  466.                 break;
  467.                 //Reserva color Verde Reserva Confirmada, Facturada, (Covarrubias)
  468.                 case '#017362':
  469.                     if (empty($newDatos[$dato['id']])){
  470.                         $newDatos[$dato['id']] = $dato;
  471.                     } else {
  472.                         // Se verifican la actualizacion de incio y fin, para tener el menor inicio y el mayor fin
  473.                         if ($newDatos[$dato['id']]['start'] > $dato['start']) {
  474.                             $newDatos[$dato['id']]['start'] = $dato['start'];
  475.                         }
  476.                         if ($newDatos[$dato['id']]['end'] < $dato['end']) {
  477.                             $newDatos[$dato['id']]['end'] = $dato['end'];
  478.                         }
  479.                         $newDatos[$dato['id']]['tooltip'] = $newDatos[$dato['id']]['tooltip'] . ' | ' $dato['tooltip'];
  480.                         // Verificamos si la sala ya ha sido previamente agregada a la lista de salas para no repetirla
  481.                         if (strpos($newDatos[$dato['id']]['title'], $dato['titleTwo']) === false) {
  482.                             // No se encontro la cadena, debemos agregar
  483.                             $newDatos[$dato['id']]['titleTwo'] = $newDatos[$dato['id']]['titleTwo'] . '<br>' $dato['titleTwo'];
  484.                             $newDatos[$dato['id']]['title'] = $newDatos[$dato['id']]['titleOne'] . $newDatos[$dato['id']]['titleTwo'] . $newDatos[$dato['id']]['titleThree'];
  485.                         }
  486.                     }
  487.                 break;
  488.                 //Se pondra color a negro para resaltar este cualquier caso que no haya sido considerado (status Pendiente)
  489.                 default:
  490.                     if (empty($newDatos[$dato['id']])){
  491.                         $newDatos[$dato['id']] = $dato;
  492.                     } else {
  493.                         // Se verifican la actualizacion de incio y fin, para tener el menor inicio y el mayor fin
  494.                         if ($newDatos[$dato['id']]['start'] > $dato['start']) {
  495.                             $newDatos[$dato['id']]['start'] = $dato['start'];
  496.                         }
  497.                         if ($newDatos[$dato['id']]['end'] < $dato['end']) {
  498.                             $newDatos[$dato['id']]['end'] = $dato['end'];
  499.                         }
  500.                         $newDatos[$dato['id']]['tooltip'] = $newDatos[$dato['id']]['tooltip'] . ' | ' $dato['tooltip'];
  501.                         // Verificamos si la sala ya ha sido previamente agregada a la lista de salas para no repetirla
  502.                         if (strpos($newDatos[$dato['id']]['title'], $dato['titleTwo']) === false) {
  503.                             // No se encontro la cadena, debemos agregar
  504.                             $newDatos[$dato['id']]['titleTwo'] = $newDatos[$dato['id']]['titleTwo'] . '<br>' $dato['titleTwo'];
  505.                             $newDatos[$dato['id']]['title'] = $newDatos[$dato['id']]['titleOne'] . $newDatos[$dato['id']]['titleTwo'] . $newDatos[$dato['id']]['titleThree'];
  506.                         }
  507.                     }
  508.                     // Se pone en color negro para resaltar este caso que no esta entrando en ninguno de los casos anteriores
  509.                     $newDatos[$dato['id']]['color'] = '#000000';
  510.                     if ($dato['type'] == "Visit") {
  511.                         // Si no es una de los agentes regulares (Gaby, Angie, Cristina) se busca el color del usuario configurado en el perfil
  512.                         $elAgente $em->getRepository(User::class)->findOneById($dato['agentId']);
  513.                         $elAgenteColor = !empty($elAgente) ? $elAgente->getColor() : null;
  514.                         if (!empty($elAgenteColor)){ $newDatos[$dato['id']]['color'] = $elAgenteColor; }
  515.                     }
  516.                 break;
  517.             }
  518.         }
  519.         $datos0 = array();
  520.         foreach ($newDatos as $key => $item) {
  521.             if (!empty($item['id'])) {
  522.                 $datos0[$key] = array('title' => $item['title'],
  523.                     'titleOne' => $item['titleOne'],
  524.                     'titleTwo' => $item['titleTwo'],
  525.                     'titleThree' => $item['titleThree'],
  526.                     'type' => $item['type'],
  527.                     'id' => $item['id'],
  528.                     'tooltip' => $item['tooltip'],
  529.                     'start' => $item['start'],
  530.                     'end' => $item['end'],
  531.                     'color' => $item['color'],
  532.                     'loungeId' => $item['loungeId'],
  533.                     'url' => $item['url']
  534.                 );
  535.             }
  536.         }
  537.         $newDatos $datos0;
  538.         $datos = array();
  539.         foreach ($newDatos as $item) {
  540.             if ($item['color'] != '#ff0000') {
  541.                 // No se agregan al calendario los elementos eliminados oelementos vacios
  542.                 if (!empty($item)) {
  543.                     //INICIO: Verificamos por huecos dentro de la reserva
  544.                     if (empty($item['type'])) {
  545.                         // solo las reservas se van a verificar en este if
  546.                         if ((date_diff($item['start'], $item['end'])->d) > 1) {    //el evento tiene mas de 2 dias, puede haber huecos
  547.                             $resSimples $em->getRepository(ReservationLoungeSimple::class)->findByIdReservation($item['id']);
  548.                             $period = new DatePeriod$item['start'], new DateInterval('P1D'), $item['end'] );
  549.                             $arrayPeriod = array();
  550.                             foreach ($period as $key => $value) { $arrayPeriod[] = $value; }
  551.                             $logAllDiasEnReserva false;
  552.                             $logDiaEnReserva false;
  553.                             //Verificamos que cada dia tenga su reserva de sala para que no haya hueco
  554.                             foreach ($arrayPeriod as $day) {
  555.                                 foreach ($resSimples as $resSimple) {
  556.                                     if ($resSimple->getDateStart()->format('Y-m-d') == $day->format('Y-m-d')) {
  557.                                         $logDiaEnReserva true;
  558.                                         break;
  559.                                     }
  560.                                 }
  561.                                 if (!$logDiaEnReserva) {
  562.                                     //Un dia no se encontraba, hay un hueco
  563.                                     foreach ($resSimples as $resDayToAdd) {
  564.                                         if (empty($resDayToAdd->getType())) {       // Solo se deben agregar salsa los montajes y desmontajes aqui no van
  565.                                             $item['start'] = $resDayToAdd->getDateStart();
  566.                                             $item['end'] = $resDayToAdd->getDateEnd();
  567.                                             $br '<br>';
  568.                                             $br strpos($item['title'], $br);
  569.                                             $tempText substr($item['title'], $br 4);
  570.                                             $item['title'] = $resDayToAdd->getDateStart()->format('H:i') . ' ' '<br>' $tempText;
  571.                                             $datos[] = $item;
  572.                                         }
  573.                                     }
  574.                                     break;
  575.                                 } else {
  576.                                     //Se debe evaluar el siguiente dia
  577.                                     $logDiaEnReserva false;
  578.                                     if ($day->format('Y-m-d') == (end($arrayPeriod))->format('Y-m-d')) {   //Si es el ultimo elemento evaluado, todos los dias se encontraban en Reservas Simple
  579.                                         $logAllDiasEnReserva true;
  580.                                     }
  581.                                 }
  582.                             }
  583.                             if ($logAllDiasEnReserva) { $datos[] = $item; }
  584.                         } else {
  585.                             // El evento es de 1 o 2 dias, no hay posibilidad de hueco
  586.                             $datos[] = $item;
  587.                         }
  588.                     } else {
  589.                         //Es Visita Las visitas son las unicas entradas que no tienen hueco
  590.                         if ($item['type'] == 'Visit'){
  591.                             $datos[] = $item;
  592.                         } else {
  593.                             // es montaje o desmontaje, se va verificar por huecos
  594.                             if ((date_diff($item['start'], $item['end'])->d) > 1) {    //el item tiene mas de 2 dias, puede haber huecos
  595.                                 $parameters = array(
  596.                                     'id' => $item['id'],
  597.                                     'type' => $item['type'],
  598.                                 );
  599.                                 $dql 'SELECT i
  600.                                         FROM GreenPatioBundle:ReservationLoungeSimple i
  601.                                         WHERE  i.idReservation = :id
  602.                                           and i.type = :type';
  603.                                 $query $em->createQuery($dql)->setParameters($parameters);
  604.                                 $resSimples $query->getResult();
  605.                                 $period = new DatePeriod$item['start'], new DateInterval('P1D'), $item['end'] );
  606.                                 $arrayPeriod = array();
  607.                                 foreach ($period as $key => $value) { $arrayPeriod[] = $value; }
  608.                                 $logAllDiasEnReserva false;
  609.                                 $logDiaEnReserva false;
  610.                                 //Verificamos que cada dia tenga su reserva de sala para que no haya hueco
  611.                                 foreach ($arrayPeriod as $day) {
  612.                                     foreach ($resSimples as $resSimple) {
  613.                                         if ($resSimple->getDateStart()->format('Y-m-d') == $day->format('Y-m-d')) {
  614.                                             $logDiaEnReserva true;
  615.                                             break;
  616.                                         }
  617.                                     }
  618.                                     if (!$logDiaEnReserva) {
  619.                                         //Un dia no se encontraba, hay un hueco
  620.                                         foreach ($resSimples as $resDayToAdd) {
  621.                                             if (!empty($resDayToAdd->getType())) {       // Solo se deben agregar montajes y desmontajes aqui
  622.                                                 $item['start'] = $resDayToAdd->getDateStart();
  623.                                                 $item['end'] = $resDayToAdd->getDateEnd();
  624.                                                 $br '<br>';
  625.                                                 $br strpos($item['title'], $br);
  626.                                                 $tempText substr($item['title'], $br 4);
  627.                                                 $item['title'] = $resDayToAdd->getDateStart()->format('H:i') . ' ' '<br>' $tempText;
  628.                                                 $datos[] = $item;
  629.                                             }
  630.                                         }
  631.                                         break;
  632.                                     } else {
  633.                                         //Se debe evaluar el siguiente dia
  634.                                         $logDiaEnReserva false;
  635.                                         if ($day->format('Y-m-d') == (end($arrayPeriod))->format('Y-m-d')) {   //Si es el ultimo elemento evaluado, todos los dias se encontraban en Reservas Simple
  636.                                             $logAllDiasEnReserva true;
  637.                                         }
  638.                                     }
  639.                                 }
  640.                                 if ($logAllDiasEnReserva) { $datos[] = $item; }
  641.                             } else {
  642.                                 // El montaje o desmontaje es de 1 o 2 dias, no hay posibilidad de hueco
  643.                                 $datos[] = $item;
  644.                             }
  645.                         }
  646.                     }
  647.                     //FIN: Verificamos por huecos dentro de la reserva
  648.                 }
  649.             }
  650.         }
  651.         $return = array( 'reservation' => $datos, );
  652.         $response = new JsonResponse($return);
  653.         return $response;
  654.     }
  655.     private function createWidgetNotesCreateForm(WidgetNotes $entity)
  656.     {
  657.         $form $this->createForm(WidgetNotesType::class, $entity, array(
  658.             'action' => $this->generateUrl('widget_notes_calendar_cvr_create'),
  659.             'method' => 'POST'
  660.         ));
  661.         return $form;
  662.     }
  663. };