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

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 App\Service\AlertService;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Session\Session;
  15. use Symfony\Component\HttpFoundation\JsonResponse;
  16. use Psr\Log\LoggerInterface;
  17. use DateTime;
  18. use DatePeriod;
  19. use DateInterval;
  20. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  21. // Controlador para el calendario UNIFICADO de las salas de Green Patio y Covarrubias (excluyendo las visitas)
  22. class CvrGPReservationsCalendarController extends AbstractController
  23. {
  24.     /**
  25.      * @Route("/gp-cvr/calendar", name="gp_cvr_calendar")
  26.      */
  27.     public function calendarCvrGpReservationsAction(Request $requestAlertService $alertService) {
  28.         $session = new Session();
  29.         $token=$session->get('tokenGoogleCalendar');
  30.         if (!is_null($token)) {
  31.             $this->googleCalendar->setAccessToken($token);
  32.             $connectGoogle "1";
  33.         }else{
  34.             $connectGoogle "0";
  35.         }
  36.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  37.         $user_id $user_logueado->getId();
  38.         $wnotes = new WidgetNotes();
  39.         $wnotes->setDateAt(new \DateTime("now"));
  40.         $form $this->createWidgetNotesCreateForm($wnotes);
  41.         $alertService->loadGpAlerts($user_logueado);
  42.         return $this->render('MDS/GreenPatioBundle/reservations/calendar-gp-cvr-reservations.html.twig',
  43.             array(
  44.                 'form' => $form->createView(),
  45.                 'user'=> $user_id,
  46.                 'connectGoogle' => $connectGoogle,
  47.             )
  48.         );
  49.     }
  50.     /**
  51.      * @Route("/widget/notes/calendargpcvr/create/", name="widget_notes_calendar_gp_cvr_create")
  52.      */
  53.     public function addNotesAction(Request $requestLoggerInterface $logger)
  54.     {
  55.         $em $this->getDoctrine()->getManager();
  56.         $notes $em->getRepository(WidgetNotes::class)->findAll();
  57.         $wnotes = new WidgetNotes();
  58.         $form $this->createWidgetNotesCreateForm($wnotes);
  59.         $form->handleRequest($request);
  60.         $forAgent $form->get('forAgent')->getData();
  61.         if(!is_null($forAgent)){ $wnotes->setForAgent($forAgent->getId()); }
  62.         if($form->isValid())
  63.         {
  64.             /* Obtengo usuario logueado */
  65.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  66.             $user_id $user_logueado->getId();
  67.             $wnotes->setCreatedId($user_id);
  68.             $wnotes->setUpdatedId($user_id);
  69.             /* Gestión de eventos en Log */
  70.             $user_lastname $user_logueado->getLastname();
  71.             $user_name $user_logueado->getName();
  72.             $user_email $user_logueado->getEmail();
  73.             $user_rol $user_logueado->getRoles();
  74.             $event_url $request->getPathInfo();
  75.             $event_complete $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
  76.             try{
  77.                 $em->persist($wnotes);
  78.                 $em->flush();
  79.                 $event 'The Note has been created succesfully.';
  80.                 $successMessage $this->get('translator')->trans($event);
  81.                 $this->addFlash('mensaje'$successMessage);
  82.                 $logger->info($event_complete.' | '.$event);
  83.             } catch (\Exception $e){
  84.                 $event 'An error occurred: '.$e->getMessage();
  85.                 /* Para el log */
  86.                 $logger->error($event_complete.' | '.$event);
  87.                 /* Para el usuario */
  88.                 $errorMessage $this->get('translator')->trans($event);
  89.                 $this->addFlash('mensajeerror'$errorMessage);
  90.             }
  91.         }else{
  92.             $errorMessage $this->get('translator')->trans('Error, some fields are empty');
  93.             $this->addFlash('mensajeerror'$errorMessage);
  94.         }
  95.         return $this->redirectToRoute('homepage');
  96.     }
  97.     /**
  98.      * @Route("/gp-cvr/eventsgpcvr", name="get_reservations_gp_cvr")
  99.      */
  100.     public function reservationGpCvrEventsAction(Request $request)
  101.     {
  102.         $em $this->getDoctrine()->getManager();
  103.         // Buscamos las reservas desde 1 año atras en adelante para no traer exceso de datos
  104.         $todayOneYearAgo = new DateTime('now -365 days');
  105.         $parameters = array('dateStart' => $todayOneYearAgo,);
  106.         $dql 'SELECT p
  107.                 FROM GreenPatioBundle:ReservationLoungeSimple p                         
  108.                 WHERE p.dateStart >= :dateStart  
  109.                 ORDER BY p.dateStart ASC ';
  110.         $query $em->createQuery($dql)->setParameters($parameters);
  111.         $reservation $query->getResult();
  112.         // Buscamos las visitas desde 1 semana atras en adelante para no traer exceso de datos (Tiempo confirmado por Gabriela Bracho)
  113.         $todayOneWeekAgo = new DateTime('now -1 week');
  114.         $parameters = array('dateStart' => $todayOneWeekAgo,);
  115.         $dql 'SELECT p
  116.                 FROM GreenPatioBundle:ReservationVisit p                         
  117.                 WHERE p.dateStart >= :dateStart  
  118.                 ORDER BY p.dateStart ASC ';
  119.         $query $em->createQuery($dql)->setParameters($parameters);
  120.         $visitas $query->getResult();
  121.         $arrayFechaVisitas = array();
  122.         foreach ($visitas as $item) {
  123.             //Se agrupan las visitas por fechas
  124.             $arrayFechaVisitas[$item->getDateStart()->format('Y-m-d').$item->getId()][] = $item;
  125.         }
  126.         $newArrayVisitas = array();
  127.         //Se agrupan las visitas por agente
  128.         foreach ($arrayFechaVisitas as $fecha) {
  129.             foreach ($fecha as $item) {
  130.                 //Se van concatenando los titulos de las visitas en una sola
  131.                 $loungeNameTemp '';
  132.                 $idAgentLounge = ($item->getIdLounge() == 0) ? $item->getAgentId() : '0';
  133.                 if (!empty($newArrayVisitas[$item->getDateStart()->format('Y-m-d') . '-' $idAgentLounge])) {
  134. //                    $loungeNameTemp = $newArrayVisitas[$item->getDateStart()->format('Y-m-d') . '-' . $idAgentLounge]->getLoungeName();
  135.                 }
  136.                 $item->setLoungeName($loungeNameTemp $item->getDateStart()->format('H:i') . ' ' $item->getLoungeName() . '<br>');
  137.                 $newArrayVisitas[$item->getDateStart()->format('Y-m-d') . '-' $idAgentLounge] = $item;
  138.             }
  139.         }
  140.         $visitas $newArrayVisitas;
  141. //        foreach ($visitas as $item) { array_push($reservation, $item); }
  142.         $xArray = array();
  143.         foreach ($arrayFechaVisitas as $elem) { foreach ($elem as $item) { $xArray[] = $item; } }
  144.         foreach ($xArray as $item) { array_push($reservation$item); }
  145.         $datos = array();
  146.         $datosMontaje = array();
  147.         $datosDesMontaje = array();
  148.         if (!empty($reservation)) {
  149.             foreach ($reservation as $reservaSala) {
  150.                 if (!empty($reservaSala->getIdReservation())) {
  151.                     $reserva $em->getRepository(Reservation::class)->findOneById($reservaSala->getIdReservation());
  152.                     if ($reservaSala->getType() == 'Visit') {
  153.                         $reserva->setStatus('Visit');
  154.                     }
  155.                 } else {
  156.                     // Estamos con una visita
  157.                     $reserva = new Reservation();
  158.                     $reserva->setStatus('Visit');
  159.                     $reserva->setTitle($reservaSala->getLoungeName());
  160.                 }
  161.                 if ($reservaSala->getDateStart()->format('d') == $reservaSala->getDateEnd()->format('d')) {
  162.                     $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();
  163.                 } else {
  164.                     $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();
  165.                 }
  166.                 $logicoVisita false;
  167.                 if (!is_null($reserva->getStatus())) {
  168.                     $statusColorMap = [
  169.                         'Bloqueo' => function($reservaSala) { return ($reservaSala->getIdLounge() > 21) ? "#b873bf" "#ffaa00"; },
  170.                         'Confirmed' => "#13ad27",
  171.                         'Invoiced' => "#13ad27",
  172.                         'Deleted' => "#ff0000",
  173.                         'Cotizado' => "#faafc3",
  174.                         'Reservado' => "#13ad27",
  175.                         'Visit' => function($reservaSala) {
  176.                             if ($reservaSala->getIdLounge() == 0) {
  177.                                 $agentColorMap = [
  178.                                     77 => "#22cbf5",
  179.                                     82 => "#f5229a",
  180.                                     120 => "#157cc2",
  181.                                 ];
  182.                                 return $agentColorMap[$reservaSala->getAgentId()] ?? "";
  183.                             } else {
  184.                                 return '#f0d800';
  185.                             }
  186.                         },
  187.                         'default' => "",
  188.                     ];
  189.                     
  190.                     $color "";
  191.                     $logicoVisita false;
  192.                     
  193.                     if (array_key_exists($reserva->getStatus(), $statusColorMap)) {
  194.                         $value $statusColorMap[$reserva->getStatus()];
  195.                         // Si el valor es una función, la ejecutamos para obtener el color.
  196.                         $color is_callable($value) ? $value($reservaSala) : $value;
  197.                         if ($reserva->getStatus() === 'Visit') {
  198.                             $logicoVisita true;
  199.                         }
  200.                     } else {
  201.                         $color $statusColorMap['default'];
  202.                     }
  203.                     if (!empty($reservaSala->getType()) and !($reservaSala->getType() == 'Visit')) {
  204.                         //Es un montaje o desmontaje
  205.                         $color "#a5b8a2";
  206.                         // Si es un montaje o desmontaje pero esta cancelado debe prevalecer el color de cancelado
  207.                         if ($reserva->getStatus() == 'Deleted') { $color "#ff0000"; }
  208.                     }
  209.                     if (($reservaSala->getIdLounge() == 22) or  ($reservaSala->getIdLounge() == 23) or
  210.                         ($reservaSala->getIdLounge() == 24) or ($reservaSala->getIdLounge() == 25)){
  211.                         //Ajustamos el color a una sala de covarrubia
  212.                         switch ($color) {
  213.                             case '#ffaa00'$color "#b873bf"; break; //naranja (bloqueo) => morado
  214.                             case '#13ad27'$color "#017362"; break; //verde (Confirmed) => verde olivo
  215.                             case '#ff0000'$color "#ff0000"; break; //rojo
  216.                             case '#faafc3'$color "#faafc3"; break; //Rojo claro
  217.                             default: break; //no modificar el color
  218.                         }
  219.                     }
  220.                 }
  221.                 $pago1 "";
  222.                 $pago2 "";
  223.                 $ht "";
  224.                 if (!($reserva->getStatus() == 'Visit')) {
  225.                     $paymentsAll $em->getRepository(ReservationPaymentsClient::class)->findOneByReservationId($reserva->getId());
  226.                 } else {
  227.                     $paymentsAll null;
  228.                 }
  229.                 if (!empty($paymentsAll)) {
  230.                     $pago2 "<i class='icon-coin-euro' style='color: #000 !important;'></i>";      //Hay pagos parciales
  231.                 }
  232.                 if (!($reserva->getStatus() == 'Visit')) {
  233.                     $facturas $em->getRepository(ReservationInvoice::class)->findByReservationId($reserva->getId());
  234.                     $facturasCVR $em->getRepository(CvrReservationInvoice::class)->findByReservationId($reserva->getId());
  235.                     foreach ($facturasCVR as $item) { array_push($facturas$item); }
  236.                 }
  237.                 if (!empty($facturas)) {
  238.                     foreach ($facturas as $factura) {
  239.                         if ($factura->getMaster() == "master") {
  240.                             $pago1 "<i class='icon-thumbs-up3' style='color: #000 !important;'></i>";// Se ha pagado la totalidad
  241.                         }
  242.                         if ($factura->getMaster() != "master") {
  243.                             $pago2 "<i class='icon-coin-euro' style='color: #000 !important;'></i>";      //Hay pagos parciales
  244.                         }
  245.                     }
  246.                 }
  247.                 if ($reserva->getCateringName() == 'HIGO & TRIGO, S.L.') {
  248.                     $ht "<a style='color: #000 !important;'><strong>H&T</strong></a>";      // Es una reserva con servicio de Catering Higo & Trigo
  249.                 }
  250.                 // Pagos parciales y totales
  251.                 if (!empty($reserva)) {
  252.                     if (!$logicoVisita) {
  253.                         $datos[] = array(
  254. //                            "title" => $reservaSala->getDateStart()->format('H:i') . ' ' . $pago2 . $pago1 . $ht . ' ' . $reservaSala->getType() . '<br>' . $reservaSala->getLoungeName() . '<br>' . '<br>' . $reserva->getTitle(),
  255.                             "title" => $reservaSala->getDateStart()->format('H:i') . ' ' $pago2 $pago1 $ht ' ' $reservaSala->getType() . ' ' $reservaSala->getLoungeName() . '<br>' $reserva->getTitle(),
  256.                             "titleOne" => $reservaSala->getDateStart()->format('H:i') . ' ' $pago2 $pago1 $ht ' ' $reservaSala->getType(),
  257.                             "titleTwo" => $reservaSala->getLoungeName(),
  258.                             "titleThree" => '' '<br>' $reserva->getTitle(),
  259.                             "type" => $reservaSala->getType(),
  260.                             "id" => $reserva->getId(),
  261.                             "tooltip" => $tooltip,
  262.                             "start" => $reservaSala->getDateStart(),
  263.                             "end" => $reservaSala->getDateEnd(),
  264.                             "color" => $color,
  265.                             "loungeId" => $reservaSala->getIdLounge(),
  266.                             "url" => "/reservations-greenpatio/edit/" $reserva->getId(),
  267.                             "status" => $reserva->getStatus(),
  268.                         );
  269.                     } else {
  270.                         // Es una visita
  271.                         $datos[] = array(
  272.                             "title" => $reservaSala->getLoungeName(),
  273.                             "titleOne" => $reservaSala->getDateStart()->format('H:i') . ' ' ' ' $reservaSala->getType() . '<br>',
  274.                             "titleTwo" => $reservaSala->getLoungeName(),
  275.                             "titleThree" => '' '<br>' '<br>' $reserva->getTitle(),
  276.                             "type" => $reservaSala->getType(),
  277.                             "id" => $reservaSala->getId() . 'V',
  278.                             "tooltip" => $tooltip,
  279.                             "start" => $reservaSala->getDateStart(),
  280.                             "end" => $reservaSala->getDateEnd(),
  281.                             "color" => $color,
  282.                             "loungeId" => $reservaSala->getIdLounge(),
  283.                             "url" => '/reservations-greenpatio/addvisit',
  284.                             "status" => $reserva->getStatus(),
  285.                             "agentId" => $reservaSala->getAgentId(),
  286.                         );
  287.                     }
  288.                 } else {
  289.                     $datos = [];
  290.                 }
  291.             }
  292.         }
  293.         $newDatos = array();
  294.         // INICIO: Se unen las salas en una sola reserva por ID de reserva
  295.         foreach ($datos as $dato) {
  296.             // Inicializamos el arreglo para crear los indices
  297.             switch ($dato['color']){
  298.                 case '#a5b8a2':              //Montaje o Desmontaje
  299.                     if ($dato['type'] == 'Montaje'){
  300.                         $newDatos[$dato['id'].'M'] = null;
  301.                     } else {
  302.                         $newDatos[$dato['id'].'D'] = null;
  303.                     }
  304.                     break;
  305.                 default:                    //Dia de reserva o Visita (la visita ya viene con su indice #V )
  306.                     $newDatos[$dato['id']] = null;
  307.                     break;
  308.             }
  309.         }
  310.         foreach ($datos as $dato) {
  311.             switch ($dato['color']){
  312.                 //Montaje o Desmontaje
  313.                 case '#a5b8a2':
  314.                     if ($dato['type'] == "Montaje") {
  315.                         if (!empty($newDatos[$dato['id'] . 'M'])) {
  316.                             // El Montaje esta ocupando mas de 1 dia, se deben unir los dias de montaje si estamos tratando la misma sala (no se deben unir montajes de salas diferentes)
  317.                             if ($newDatos[$dato['id'] . 'M']['loungeId'] == $dato['loungeId']) {
  318.                                 if ($newDatos[$dato['id'] . 'M']['start'] > $dato['start']) { $newDatos[$dato['id'] . 'M']['start'] = $dato['start']; }
  319.                                 if ($newDatos[$dato['id'] . 'M']['end'] < $dato['end']) { $newDatos[$dato['id'] . 'M']['end'] = $dato['end']; }
  320.                             } else {
  321.                                 if (array_key_exists($dato['id'] . 'M'.$dato['loungeId'],$newDatos)){
  322.                                     if ($newDatos[$dato['id'] . 'M'.$dato['loungeId']]['start'] > $dato['start']) { $newDatos[$dato['id'] . 'M'.$dato['loungeId']]['start'] = $dato['start']; }
  323.                                     if ($newDatos[$dato['id'] . 'M'.$dato['loungeId']]['end'] < $dato['end']) { $newDatos[$dato['id'] . 'M'.$dato['loungeId']]['end'] = $dato['end']; }
  324.                                 } else {
  325.                                     $newDatos[$dato['id'] . 'M'.$dato['loungeId']] = $dato;
  326.                                 }
  327.                             }
  328.                         } else {
  329.                             $newDatos[$dato['id'] . 'M'] = $dato;
  330.                         }
  331.                     } else {
  332.                         if ($dato['type'] == "Desmontaje") {
  333.                             if (!empty($newDatos[$dato['id'] . 'D'])) {
  334.                                 // El Desmontaje esta ocupando mas de 1 dia, se deben unir los dias de desmontaje
  335.                                 if ($newDatos[$dato['id'] . 'D']['start'] > $dato['start']) { $newDatos[$dato['id'] . 'D']['start'] = $dato['start']; }
  336.                                 if ($newDatos[$dato['id'] . 'D']['end'] < $dato['end']) { $newDatos[$dato['id'] . 'D']['end'] = $dato['end']; }
  337.                             } else {
  338.                                 $newDatos[$dato['id'] . 'D'] = $dato;
  339.                             }
  340.                         }
  341.                     }
  342.                 break;
  343.                 //Visita Angie (id user 77)
  344.                 case '#22cbf5':
  345.                     if ($dato['type'] == "Visit") {
  346.                         $newDatos[$dato['start']->format('Ymd').'V77'.$dato['id']] = $dato;
  347.                         if (!empty($newDatos[$dato['start']->format('Ymd').'V77'])) {
  348.                             // Hay varias visitas ese mismo dia para el agente
  349. //                            $newDatos[$dato['start']->format('Ymd').'V77']['tooltip'] = $newDatos[$dato['start']->format('Ymd').'V77']['tooltip'] . $dato['tooltip'];
  350.                         } else {
  351. //                            $newDatos[$dato['start']->format('Ymd').'V77'] = $dato;
  352.                         }
  353.                     }
  354.                 break;
  355.                 //Visita Gabriela (id user 82)
  356.                 case '#f5229a':
  357.                     if ($dato['type'] == "Visit") {
  358.                         $newDatos[$dato['start']->format('Ymd').'V82'.$dato['id']] = $dato;
  359.                         if (!empty($newDatos[$dato['start']->format('Ymd').'V82'])) {
  360.                             // Hay varias visitas ese mismo dia para el agente
  361. //                            $newDatos[$dato['start']->format('Ymd').'V82']['tooltip'] = $newDatos[$dato['start']->format('Ymd').'V82']['tooltip'] . $dato['tooltip'];
  362.                         } else {
  363. //                            $newDatos[$dato['start']->format('Ymd').'V82'] = $dato;
  364.                         }
  365.                     }
  366.                 break;
  367.                 //Visita Cristina (id user 120)
  368.                 case '#157cc2':
  369.                     if ($dato['type'] == "Visit") {
  370.                         $newDatos[$dato['start']->format('Ymd').'V120'.$dato['id']] = $dato;
  371.                         if (!empty($newDatos[$dato['start']->format('Ymd').'V120'])) {
  372.                             // Hay varias visitas ese mismo dia para el agente
  373. //                            $newDatos[$dato['start']->format('Ymd').'V120']['tooltip'] = $newDatos[$dato['start']->format('Ymd').'V120']['tooltip'] . $dato['tooltip'];
  374.                         } else {
  375. //                            $newDatos[$dato['start']->format('Ymd').'V120'] = $dato;
  376.                         }
  377.                     }
  378.                 break;
  379.                 //Visita Generica para agentes a Covarrubias
  380.                 case '#f0d800':
  381.                     if ($dato['type'] == "Visit") {
  382.                         $newDatos[$dato['start']->format('Ymd').'V0'.$dato['id']] = $dato;
  383.                         if (!empty($newDatos[$dato['start']->format('Ymd').'V0'])) {
  384.                             // Hay varias visitas ese mismo dia para el agente
  385. //                            $newDatos[$dato['start']->format('Ymd').'V0']['tooltip'] = $newDatos[$dato['start']->format('Ymd').'V0']['tooltip'] . $dato['tooltip'];
  386.                         } else {
  387. //                            $newDatos[$dato['start']->format('Ymd').'V0'] = $dato;
  388.                         }
  389.                     }
  390.                     break;
  391.                 //Reserva color naranja Bloqueo
  392.                 case '#ffaa00':
  393.                     if (empty($newDatos[$dato['id']])){
  394.                         $newDatos[$dato['id']] = $dato;
  395.                     } else {
  396.                         // Se verifican la actualizacion de incio y fin, para tener el menor inicio y el mayor fin
  397.                         if ($newDatos[$dato['id']]['start'] > $dato['start']) { $newDatos[$dato['id']]['start'] = $dato['start']; }
  398.                         if ($newDatos[$dato['id']]['end'] < $dato['end']) { $newDatos[$dato['id']]['end'] = $dato['end']; }
  399.                         $newDatos[$dato['id']]['tooltip'] = $newDatos[$dato['id']]['tooltip'] . ' | ' $dato['tooltip'];
  400.                         // Verificamos si la sala ya ha sido previamente agregada a la lista de salas para no repetirla
  401.                         if (strpos($newDatos[$dato['id']]['title'], $dato['titleTwo']) === false) {
  402.                             // No se encontro la cadena, debemos agregar
  403.                             $newDatos[$dato['id']]['titleTwo'] = $newDatos[$dato['id']]['titleTwo'] . '<br>' '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'$dato['titleTwo'];
  404.                             $newDatos[$dato['id']]['title'] = $newDatos[$dato['id']]['titleOne'] . $newDatos[$dato['id']]['titleTwo'] . $newDatos[$dato['id']]['titleThree'];
  405.                         }
  406.                     }
  407.                 break;
  408.                 //Reserva color morado Bloqueo (Covarrubias)
  409.                 case '#b873bf':
  410.                     if (empty($newDatos[$dato['id']])){
  411.                         $newDatos[$dato['id']] = $dato;
  412.                     } else {
  413.                         // Se verifican la actualizacion de incio y fin, para tener el menor inicio y el mayor fin
  414.                         if ($newDatos[$dato['id']]['start'] > $dato['start']) { $newDatos[$dato['id']]['start'] = $dato['start']; }
  415.                         if ($newDatos[$dato['id']]['end'] < $dato['end']) { $newDatos[$dato['id']]['end'] = $dato['end']; }
  416.                         $newDatos[$dato['id']]['tooltip'] = $newDatos[$dato['id']]['tooltip'] . ' | ' $dato['tooltip'];
  417.                         // Verificamos si la sala ya ha sido previamente agregada a la lista de salas para no repetirla
  418.                         if (strpos($newDatos[$dato['id']]['title'], $dato['titleTwo']) === false) {
  419.                             // No se encontro la cadena, debemos agregar
  420.                             $newDatos[$dato['id']]['titleTwo'] = $newDatos[$dato['id']]['titleTwo'] . '<br>' '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'$dato['titleTwo'];
  421.                             $newDatos[$dato['id']]['title'] = $newDatos[$dato['id']]['titleOne'] . $newDatos[$dato['id']]['titleTwo'] . $newDatos[$dato['id']]['titleThree'];
  422.                         }
  423.                     }
  424.                 break;
  425.                 //Reserva color Rojo claro Cotizado
  426.                 case '#faafc3':
  427.                     if (empty($newDatos[$dato['id']])){
  428.                         $newDatos[$dato['id']] = $dato;
  429.                     } else {
  430.                         // Se verifican la actualizacion de incio y fin, para tener el menor inicio y el mayor fin
  431.                         if ($newDatos[$dato['id']]['start'] > $dato['start']) { $newDatos[$dato['id']]['start'] = $dato['start']; }
  432.                         if ($newDatos[$dato['id']]['end'] < $dato['end']) { $newDatos[$dato['id']]['end'] = $dato['end']; }
  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>' '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'$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']) { $newDatos[$dato['id']]['start'] = $dato['start']; }
  453.                         if ($newDatos[$dato['id']]['end'] < $dato['end']) { $newDatos[$dato['id']]['end'] = $dato['end']; }
  454.                         $newDatos[$dato['id']]['tooltip'] = $newDatos[$dato['id']]['tooltip'] . ' | ' $dato['tooltip'];
  455.                         // Verificamos si la sala ya ha sido previamente agregada a la lista de salas para no repetirla
  456.                         if (strpos($newDatos[$dato['id']]['title'], $dato['titleTwo']) === false) {
  457.                             // No se encontro la cadena, debemos agregar
  458.                             $newDatos[$dato['id']]['titleTwo'] = $newDatos[$dato['id']]['titleTwo'] . '<br>' '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'$dato['titleTwo'];
  459.                             $newDatos[$dato['id']]['title'] = $newDatos[$dato['id']]['titleOne'] . $newDatos[$dato['id']]['titleTwo'] . $newDatos[$dato['id']]['titleThree'];
  460.                         }
  461.                     }
  462.                 break;
  463.                 //Reserva color Verde Reserva Confirmada, Facturada, (Covarrubias)
  464.                 case '#017362':
  465.                     if (empty($newDatos[$dato['id']])){
  466.                         $newDatos[$dato['id']] = $dato;
  467.                     } else {
  468.                         // Se verifican la actualizacion de incio y fin, para tener el menor inicio y el mayor fin
  469.                         if ($newDatos[$dato['id']]['start'] > $dato['start']) { $newDatos[$dato['id']]['start'] = $dato['start']; }
  470.                         if ($newDatos[$dato['id']]['end'] < $dato['end']) { $newDatos[$dato['id']]['end'] = $dato['end']; }
  471.                         $newDatos[$dato['id']]['tooltip'] = $newDatos[$dato['id']]['tooltip'] . ' | ' $dato['tooltip'];
  472.                         // Verificamos si la sala ya ha sido previamente agregada a la lista de salas para no repetirla
  473.                         if (strpos($newDatos[$dato['id']]['title'], $dato['titleTwo']) === false) {
  474.                             // No se encontro la cadena, debemos agregar
  475.                             $newDatos[$dato['id']]['titleTwo'] = $newDatos[$dato['id']]['titleTwo'] . '<br>' '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'$dato['titleTwo'];
  476.                             $newDatos[$dato['id']]['title'] = $newDatos[$dato['id']]['titleOne'] . $newDatos[$dato['id']]['titleTwo'] . $newDatos[$dato['id']]['titleThree'];
  477.                         }
  478.                     }
  479.                 break;
  480.                 //Se pondra color a negro para resaltar este cualquier caso que no haya sido considerado (status Pendiente)
  481.                 default:
  482.                     if (empty($newDatos[$dato['id']])){
  483.                         $newDatos[$dato['id']] = $dato;
  484.                     } else {
  485.                         // Se verifican la actualizacion de incio y fin, para tener el menor inicio y el mayor fin
  486.                         if ($newDatos[$dato['id']]['start'] > $dato['start']) { $newDatos[$dato['id']]['start'] = $dato['start']; }
  487.                         if ($newDatos[$dato['id']]['end'] < $dato['end']) { $newDatos[$dato['id']]['end'] = $dato['end']; }
  488.                         $newDatos[$dato['id']]['tooltip'] = $newDatos[$dato['id']]['tooltip'] . ' | ' $dato['tooltip'];
  489.                         // Verificamos si la sala ya ha sido previamente agregada a la lista de salas para no repetirla
  490.                         if (strpos($newDatos[$dato['id']]['title'], $dato['titleTwo']) === false) {
  491.                             // No se encontro la cadena, debemos agregar
  492.                             $newDatos[$dato['id']]['titleTwo'] = $newDatos[$dato['id']]['titleTwo'] . '<br>' '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'$dato['titleTwo'];
  493.                             $newDatos[$dato['id']]['title'] = $newDatos[$dato['id']]['titleOne'] . $newDatos[$dato['id']]['titleTwo'] . $newDatos[$dato['id']]['titleThree'];
  494.                         }
  495.                     }
  496.                     // Se pone en color negro para resaltar este caso que no esta entrando en ninguno de los casos anteriores
  497.                     $newDatos[$dato['id']]['color'] = '#000000';
  498.                     if ($dato['type'] == "Visit") {
  499.                         // Si no es una de los agentes regulares (Gaby, Angie, Cristina) se busca el color del usuario configurado en el perfil
  500.                         $elAgente $em->getRepository(User::class)->findOneById($dato['agentId']);
  501.                         $elAgenteColor = !empty($elAgente) ? $elAgente->getColor() : null;
  502.                         if (!empty($elAgenteColor)){ $newDatos[$dato['id']]['color'] = $elAgenteColor; }
  503.                     }
  504.                 break;
  505.             }
  506.         }
  507.         $datos0 = array();
  508.         foreach ($newDatos as $key => $item) {
  509.             if (!empty($item['id'])) {
  510.                 $datos0[$key] = array('title' => $item['title'],
  511.                     'titleOne' => $item['titleOne'],
  512.                     'titleTwo' => $item['titleTwo'],
  513.                     'titleThree' => $item['titleThree'],
  514.                     'type' => $item['type'],
  515.                     'id' => $item['id'],
  516.                     'tooltip' => $item['tooltip'],
  517.                     'start' => $item['start'],
  518.                     'end' => $item['end'],
  519.                     'color' => $item['color'],
  520.                     'loungeId' => $item['loungeId'],
  521.                     'url' => $item['url']
  522.                 );
  523.             }
  524.         }
  525.         $newDatos $datos0;
  526.         $datos = array();
  527.         foreach ($newDatos as $item) {
  528.             if ($item['color'] != '#ff0000') {
  529.                 // No se agregan al calendario los elementos eliminados oelementos vacios
  530.                 if (!empty($item)) {
  531.                     //INICIO: Verificamos por huecos dentro de la reserva
  532.                     if (empty($item['type'])) {
  533.                         // solo las reservas se van a verificar en este if
  534.                         if ((date_diff($item['start'], $item['end'])->d) > 1) {    //el evento tiene mas de 2 dias, puede haber huecos
  535.                             $resSimples $em->getRepository(ReservationLoungeSimple::class)->findByIdReservation($item['id']);
  536.                             $period = new DatePeriod$item['start'], new DateInterval('P1D'), $item['end'] );
  537.                             $arrayPeriod = array();
  538.                             foreach ($period as $key => $value) { $arrayPeriod[] = $value; }
  539.                             $logAllDiasEnReserva false;
  540.                             $logDiaEnReserva false;
  541.                             //Verificamos que cada dia tenga su reserva de sala para que no haya hueco
  542.                             foreach ($arrayPeriod as $day) {
  543.                                 foreach ($resSimples as $resSimple) {
  544.                                     if ($resSimple->getDateStart()->format('Y-m-d') == $day->format('Y-m-d')) {
  545.                                         $logDiaEnReserva true;
  546.                                         break;
  547.                                     }
  548.                                 }
  549.                                 if (!$logDiaEnReserva) {
  550.                                     //Un dia no se encontraba, hay un hueco
  551.                                     foreach ($resSimples as $resDayToAdd) {
  552.                                         if (empty($resDayToAdd->getType())) {       // Solo se deben agregar salsa los montajes y desmontajes aqui no van
  553.                                             $item['start'] = $resDayToAdd->getDateStart();
  554.                                             $item['end'] = $resDayToAdd->getDateEnd();
  555.                                             $br '<br>';
  556.                                             $br strpos($item['title'], $br);
  557.                                             $tempText substr($item['title'], $br 4);
  558.                                             $item['title'] = $resDayToAdd->getDateStart()->format('H:i') . ' ' '<br>' $tempText;
  559.                                             $datos[] = $item;
  560.                                         }
  561.                                     }
  562.                                     break;
  563.                                 } else {
  564.                                     //Se debe evaluar el siguiente dia
  565.                                     $logDiaEnReserva false;
  566.                                     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
  567.                                         $logAllDiasEnReserva true;
  568.                                     }
  569.                                 }
  570.                             }
  571.                             if ($logAllDiasEnReserva) { $datos[] = $item; }
  572.                         } else {
  573.                             // El evento es de 1 o 2 dias, no hay posibilidad de hueco
  574.                             $datos[] = $item;
  575.                         }
  576.                     } else {
  577.                         //Es Visita Las visitas son las unicas entradas que no tienen hueco
  578.                         if ($item['type'] == 'Visit'){
  579.                             $datos[] = $item;
  580.                         } else {
  581.                             // es montaje o desmontaje, se va verificar por huecos
  582.                             if ((date_diff($item['start'], $item['end'])->d) > 1) {    //el item tiene mas de 2 dias, puede haber huecos
  583.                                 $parameters = array(
  584.                                     'id' => $item['id'],
  585.                                     'type' => $item['type'],
  586.                                 );
  587.                                 $dql 'SELECT i
  588.                                         FROM GreenPatioBundle:ReservationLoungeSimple i
  589.                                         WHERE  i.idReservation = :id
  590.                                           and i.type = :type';
  591.                                 $query $em->createQuery($dql)->setParameters($parameters);
  592.                                 $resSimples $query->getResult();
  593.                                 $period = new DatePeriod$item['start'], new DateInterval('P1D'), $item['end'] );
  594.                                 $arrayPeriod = array();
  595.                                 foreach ($period as $key => $value) { $arrayPeriod[] = $value; }
  596.                                 $logAllDiasEnReserva false;
  597.                                 $logDiaEnReserva false;
  598.                                 //Verificamos que cada dia tenga su reserva de sala para que no haya hueco
  599.                                 foreach ($arrayPeriod as $day) {
  600.                                     foreach ($resSimples as $resSimple) {
  601.                                         if ($resSimple->getDateStart()->format('Y-m-d') == $day->format('Y-m-d')) {
  602.                                             $logDiaEnReserva true;
  603.                                             break;
  604.                                         }
  605.                                     }
  606.                                     if (!$logDiaEnReserva) {
  607.                                         //Un dia no se encontraba, hay un hueco
  608.                                         foreach ($resSimples as $resDayToAdd) {
  609.                                             if (!empty($resDayToAdd->getType())) {       // Solo se deben agregar montajes y desmontajes aqui
  610.                                                 $item['start'] = $resDayToAdd->getDateStart();
  611.                                                 $item['end'] = $resDayToAdd->getDateEnd();
  612.                                                 $br '<br>';
  613.                                                 $br strpos($item['title'], $br);
  614.                                                 $tempText substr($item['title'], $br 4);
  615.                                                 $item['title'] = $resDayToAdd->getDateStart()->format('H:i') . ' ' '<br>' $tempText;
  616.                                                 $datos[] = $item;
  617.                                             }
  618.                                         }
  619.                                         break;
  620.                                     } else {
  621.                                         //Se debe evaluar el siguiente dia
  622.                                         $logDiaEnReserva false;
  623.                                         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
  624.                                             $logAllDiasEnReserva true;
  625.                                         }
  626.                                     }
  627.                                 }
  628.                                 if ($logAllDiasEnReserva) { $datos[] = $item; }
  629.                             } else {
  630.                                 // El montaje o desmontaje es de 1 o 2 dias, no hay posibilidad de hueco
  631.                                 $datos[] = $item;
  632.                             }
  633.                         }
  634.                     }
  635.                     //FIN: Verificamos por huecos dentro de la reserva
  636.                 }
  637.             }
  638.         }
  639.         $return = array( 'reservation' => $datos, );
  640.         $response = new JsonResponse($return);
  641.         return $response;
  642.     }
  643.     /**
  644.      * @Route("/gp-cvr/calendarconfac", name="gp_cvr_calendar_con_fac")
  645.      */
  646.     public function calendarCvrGpConfFactReservationsAction(Request $requestAlertService $alertService) {
  647.         $session = new Session();
  648.         $token=$session->get('tokenGoogleCalendar');
  649.         if (!is_null($token)) {
  650.             $this->googleCalendar->setAccessToken($token);
  651.             $connectGoogle "1";
  652.         }else{
  653.             $connectGoogle "0";
  654.         }
  655.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  656.         $user_id $user_logueado->getId();
  657.         $wnotes = new WidgetNotes();
  658.         $wnotes->setDateAt(new \DateTime("now"));
  659.         $form $this->createWidgetNotesCreateForm($wnotes);
  660.         $alertService->loadGpAlerts($user_logueado);
  661.         return $this->render('MDS/GreenPatioBundle/reservations/calendar-gp-cvr-confac-reservations.html.twig',
  662.             array(
  663.                 'form' => $form->createView(),
  664.                 'user'=> $user_id,
  665.                 'connectGoogle' => $connectGoogle,
  666.             )
  667.         );
  668.     }
  669.     /**
  670.      * @Route("/gp-cvr/eventsgpcvrconfac", name="get_reservations_gp_cvr_con_fac")
  671.      */
  672.     public function reservationGpCvrEventsConfFactAction(Request $request)
  673.     {
  674.         $em $this->getDoctrine()->getManager();
  675.         // Buscamos las reservas desde 1 año atras en adelante para no traer exceso de datos
  676.         $todayOneYearAgo = new DateTime('now -365 days');
  677.         $parameters = array('dateStart' => $todayOneYearAgo,);
  678.         $dql 'SELECT p
  679.                 FROM GreenPatioBundle:ReservationLoungeSimple p                         
  680.                 WHERE p.dateStart >= :dateStart  
  681.                 ORDER BY p.dateStart ASC ';
  682.         $query $em->createQuery($dql)->setParameters($parameters);
  683.         $reservation $query->getResult();
  684.         // Buscamos las visitas desde 1 semana atras en adelante para no traer exceso de datos (Tiempo confirmado por Gabriela Bracho)
  685.         $todayOneWeekAgo = new DateTime('now -1 week');
  686.         $parameters = array('dateStart' => $todayOneWeekAgo,);
  687.         $dql 'SELECT p
  688.                 FROM GreenPatioBundle:ReservationVisit p                         
  689.                 WHERE p.dateStart >= :dateStart  
  690.                 ORDER BY p.dateStart ASC ';
  691.         $query $em->createQuery($dql)->setParameters($parameters);
  692.         $visitas $query->getResult();
  693.         $arrayFechaVisitas = array();
  694.         foreach ($visitas as $item) {
  695.             //Se agrupan las visitas por fechas
  696.             $arrayFechaVisitas[$item->getDateStart()->format('Y-m-d').$item->getId()][] = $item;
  697.         }
  698.         $newArrayVisitas = array();
  699.         //Se agrupan las visitas por agente
  700.         foreach ($arrayFechaVisitas as $fecha) {
  701.             foreach ($fecha as $item) {
  702.                 //Se van concatenando los titulos de las visitas en una sola
  703.                 $loungeNameTemp '';
  704.                 $idAgentLounge = ($item->getIdLounge() == 0) ? $item->getAgentId() : '0';
  705.                 if (!empty($newArrayVisitas[$item->getDateStart()->format('Y-m-d') . '-' $idAgentLounge])) {
  706. //                    $loungeNameTemp = $newArrayVisitas[$item->getDateStart()->format('Y-m-d') . '-' . $idAgentLounge]->getLoungeName();
  707.                 }
  708.                 $item->setLoungeName($loungeNameTemp $item->getDateStart()->format('H:i') . ' ' $item->getLoungeName() . '<br>');
  709.                 $newArrayVisitas[$item->getDateStart()->format('Y-m-d') . '-' $idAgentLounge] = $item;
  710.             }
  711.         }
  712.         $visitas $newArrayVisitas;
  713. //        foreach ($visitas as $item) { array_push($reservation, $item); }
  714.         $xArray = array();
  715.         foreach ($arrayFechaVisitas as $elem) { foreach ($elem as $item) { $xArray[] = $item; } }
  716.         foreach ($xArray as $item) { array_push($reservation$item); }
  717.         $datos = array();
  718.         $datosMontaje = array();
  719.         $datosDesMontaje = array();
  720.         if (!empty($reservation)) {
  721.             foreach ($reservation as $reservaSala) {
  722.                 if (!empty($reservaSala->getIdReservation())) {
  723.                     $reserva $em->getRepository(Reservation::class)->findOneById($reservaSala->getIdReservation());
  724.                     if ($reservaSala->getType() == 'Visit') {
  725.                         $reserva->setStatus('Visit');
  726.                     }
  727.                 } else {
  728.                     // Estamos con una visita
  729.                     $reserva = new Reservation();
  730.                     $reserva->setStatus('Visit');
  731.                     $reserva->setTitle($reservaSala->getLoungeName());
  732.                 }
  733.                 if ($reservaSala->getDateStart()->format('d') == $reservaSala->getDateEnd()->format('d')) {
  734.                     $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();
  735.                 } else {
  736.                     $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();
  737.                 }
  738.                 $logicoVisita false;
  739.                 if (!is_null($reserva->getStatus())) {
  740.                     $statusColorMap = [
  741.                         'Bloqueo' => function($reservaSala) { return ($reservaSala->getIdLounge() > 21) ? "#b873bf" "#ffaa00"; },
  742.                         'Confirmed' => "#13ad27",
  743.                         'Invoiced' => "#13ad27",
  744.                         'Deleted' => "#ff0000",
  745.                         'Cotizado' => "#faafc3",
  746.                         'Reservado' => "#13ad27",
  747.                         'Visit' => function($reservaSala) {
  748.                             if ($reservaSala->getIdLounge() == 0) {
  749.                                 $agentColorMap = [
  750.                                     77 => "#22cbf5",
  751.                                     82 => "#f5229a",
  752.                                     120 => "#157cc2",
  753.                                 ];
  754.                                 return $agentColorMap[$reservaSala->getAgentId()] ?? "";
  755.                             } else {
  756.                                 return '#f0d800';
  757.                             }
  758.                         },
  759.                         'default' => "",
  760.                     ];
  761.                     $color "";
  762.                     $logicoVisita false;
  763.                     if (array_key_exists($reserva->getStatus(), $statusColorMap)) {
  764.                         $value $statusColorMap[$reserva->getStatus()];
  765.                         // Si el valor es una función, la ejecutamos para obtener el color.
  766.                         $color is_callable($value) ? $value($reservaSala) : $value;
  767.                         if ($reserva->getStatus() === 'Visit') {
  768.                             $logicoVisita true;
  769.                         }
  770.                     } else {
  771.                         $color $statusColorMap['default'];
  772.                     }
  773.                     if (!empty($reservaSala->getType()) and !($reservaSala->getType() == 'Visit')) {
  774.                         //Es un montaje o desmontaje
  775.                         $color "#a5b8a2";
  776.                         // Si es un montaje o desmontaje pero esta cancelado debe prevalecer el color de cancelado
  777.                         if ($reserva->getStatus() == 'Deleted') { $color "#ff0000"; }
  778.                     }
  779.                     if (($reservaSala->getIdLounge() == 22) or  ($reservaSala->getIdLounge() == 23) or
  780.                         ($reservaSala->getIdLounge() == 24) or ($reservaSala->getIdLounge() == 25)){
  781.                         //Ajustamos el color a una sala de covarrubia
  782.                         switch ($color) {
  783.                             case '#ffaa00'$color "#b873bf"; break; //naranja (bloqueo) => morado
  784.                             case '#13ad27'$color "#017362"; break; //verde (Confirmed) => verde olivo
  785.                             case '#ff0000'$color "#ff0000"; break; //rojo
  786.                             case '#faafc3'$color "#faafc3"; break; //Rojo claro
  787.                             default: break; //no modificar el color
  788.                         }
  789.                     }
  790.                 }
  791.                 $pago1 "";
  792.                 $pago2 "";
  793.                 $ht "";
  794.                 if (!($reserva->getStatus() == 'Visit')) {
  795.                     $paymentsAll $em->getRepository(ReservationPaymentsClient::class)->findOneByReservationId($reserva->getId());
  796.                 } else {
  797.                     $paymentsAll null;
  798.                 }
  799.                 if (!empty($paymentsAll)) {
  800.                     $pago2 "<i class='icon-coin-euro' style='color: #000 !important;'></i>";      //Hay pagos parciales
  801.                 }
  802.                 if (!($reserva->getStatus() == 'Visit')) {
  803.                     $facturas $em->getRepository(ReservationInvoice::class)->findByReservationId($reserva->getId());
  804.                     $facturasCVR $em->getRepository(CvrReservationInvoice::class)->findByReservationId($reserva->getId());
  805.                     foreach ($facturasCVR as $item) { array_push($facturas$item); }
  806.                 }
  807.                 if (!empty($facturas)) {
  808.                     foreach ($facturas as $factura) {
  809.                         if ($factura->getMaster() == "master") {
  810.                             $pago1 "<i class='icon-thumbs-up3' style='color: #000 !important;'></i>";// Se ha pagado la totalidad
  811.                         }
  812.                         if ($factura->getMaster() != "master") {
  813.                             $pago2 "<i class='icon-coin-euro' style='color: #000 !important;'></i>";      //Hay pagos parciales
  814.                         }
  815.                     }
  816.                 }
  817.                 if ($reserva->getCateringName() == 'HIGO & TRIGO, S.L.') {
  818.                     $ht "<a style='color: #000 !important;'><strong>H&T</strong></a>";      // Es una reserva con servicio de Catering Higo & Trigo
  819.                 }
  820.                 // Pagos parciales y totales
  821.                 if (!empty($reserva)) {
  822.                     if (!$logicoVisita) {
  823.                         if (($reserva->getStatus() == 'Confirmed') or ($reserva->getStatus() == 'Invoiced')) {
  824.                             $datos[] = array(
  825.                                 "title" => $reservaSala->getDateStart()->format('H:i') . ' ' $pago2 $pago1 $ht ' ' $reservaSala->getType() . ' ' $reservaSala->getLoungeName() . '<br>' $reserva->getTitle(),
  826.                                 "titleOne" => $reservaSala->getDateStart()->format('H:i') . ' ' $pago2 $pago1 $ht ' ' $reservaSala->getType(),
  827.                                 "titleTwo" => $reservaSala->getLoungeName(),
  828.                                 "titleThree" => '' '<br>' $reserva->getTitle(),
  829.                                 "type" => $reservaSala->getType(),
  830.                                 "id" => $reserva->getId(),
  831.                                 "tooltip" => $tooltip,
  832.                                 "start" => $reservaSala->getDateStart(),
  833.                                 "end" => $reservaSala->getDateEnd(),
  834.                                 "color" => $color,
  835.                                 "loungeId" => $reservaSala->getIdLounge(),
  836.                                 "url" => "/reservations-greenpatio/edit/" $reserva->getId(),
  837.                                 "status" => $reserva->getStatus(),
  838.                             );
  839.                         }
  840.                     } else {
  841.                         // Es una visita
  842.                     }
  843.                 } else {
  844.                     $datos = [];
  845.                 }
  846.             }
  847.         }
  848.         $newDatos = array();
  849.         // INICIO: Se unen las salas en una sola reserva por ID de reserva
  850.         foreach ($datos as $dato) {
  851.             // Inicializamos el arreglo para crear los indices
  852.             switch ($dato['color']){
  853.                 case '#a5b8a2':              //Montaje o Desmontaje
  854.                     if ($dato['type'] == 'Montaje'){
  855.                         $newDatos[$dato['id'].'M'] = null;
  856.                     } else {
  857.                         $newDatos[$dato['id'].'D'] = null;
  858.                     }
  859.                     break;
  860.                 default:                    //Dia de reserva o Visita (la visita ya viene con su indice #V )
  861.                     $newDatos[$dato['id']] = null;
  862.                     break;
  863.             }
  864.         }
  865.         foreach ($datos as $dato) {
  866.             switch ($dato['color']){
  867.                 //Montaje o Desmontaje
  868.                 case '#a5b8a2':
  869.                     if ($dato['type'] == "Montaje") {
  870.                         if (!empty($newDatos[$dato['id'] . 'M'])) {
  871.                             // El Montaje esta ocupando mas de 1 dia, se deben unir los dias de montaje si estamos tratando la misma sala (no se deben unir montajes de salas diferentes)
  872.                             if ($newDatos[$dato['id'] . 'M']['loungeId'] == $dato['loungeId']) {
  873.                                 if ($newDatos[$dato['id'] . 'M']['start'] > $dato['start']) { $newDatos[$dato['id'] . 'M']['start'] = $dato['start']; }
  874.                                 if ($newDatos[$dato['id'] . 'M']['end'] < $dato['end']) { $newDatos[$dato['id'] . 'M']['end'] = $dato['end']; }
  875.                             } else {
  876.                                 if (array_key_exists($dato['id'] . 'M'.$dato['loungeId'],$newDatos)){
  877.                                     if ($newDatos[$dato['id'] . 'M'.$dato['loungeId']]['start'] > $dato['start']) { $newDatos[$dato['id'] . 'M'.$dato['loungeId']]['start'] = $dato['start']; }
  878.                                     if ($newDatos[$dato['id'] . 'M'.$dato['loungeId']]['end'] < $dato['end']) { $newDatos[$dato['id'] . 'M'.$dato['loungeId']]['end'] = $dato['end']; }
  879.                                 } else {
  880.                                     $newDatos[$dato['id'] . 'M'.$dato['loungeId']] = $dato;
  881.                                 }
  882.                             }
  883.                         } else {
  884.                             $newDatos[$dato['id'] . 'M'] = $dato;
  885.                         }
  886.                     } else {
  887.                         if ($dato['type'] == "Desmontaje") {
  888.                             if (!empty($newDatos[$dato['id'] . 'D'])) {
  889.                                 // El Desmontaje esta ocupando mas de 1 dia, se deben unir los dias de desmontaje
  890.                                 if ($newDatos[$dato['id'] . 'D']['start'] > $dato['start']) { $newDatos[$dato['id'] . 'D']['start'] = $dato['start']; }
  891.                                 if ($newDatos[$dato['id'] . 'D']['end'] < $dato['end']) { $newDatos[$dato['id'] . 'D']['end'] = $dato['end']; }
  892.                             } else {
  893.                                 $newDatos[$dato['id'] . 'D'] = $dato;
  894.                             }
  895.                         }
  896.                     }
  897.                     break;
  898.                 //Visita Angie (id user 77)
  899.                 case '#22cbf5':
  900.                     if ($dato['type'] == "Visit") {
  901.                         $newDatos[$dato['start']->format('Ymd').'V77'.$dato['id']] = $dato;
  902.                         if (!empty($newDatos[$dato['start']->format('Ymd').'V77'])) {
  903.                             // Hay varias visitas ese mismo dia para el agente
  904. //                            $newDatos[$dato['start']->format('Ymd').'V77']['tooltip'] = $newDatos[$dato['start']->format('Ymd').'V77']['tooltip'] . $dato['tooltip'];
  905.                         } else {
  906. //                            $newDatos[$dato['start']->format('Ymd').'V77'] = $dato;
  907.                         }
  908.                     }
  909.                     break;
  910.                 //Visita Gabriela (id user 82)
  911.                 case '#f5229a':
  912.                     if ($dato['type'] == "Visit") {
  913.                         $newDatos[$dato['start']->format('Ymd').'V82'.$dato['id']] = $dato;
  914.                         if (!empty($newDatos[$dato['start']->format('Ymd').'V82'])) {
  915.                             // Hay varias visitas ese mismo dia para el agente
  916. //                            $newDatos[$dato['start']->format('Ymd').'V82']['tooltip'] = $newDatos[$dato['start']->format('Ymd').'V82']['tooltip'] . $dato['tooltip'];
  917.                         } else {
  918. //                            $newDatos[$dato['start']->format('Ymd').'V82'] = $dato;
  919.                         }
  920.                     }
  921.                     break;
  922.                 //Visita Cristina (id user 120)
  923.                 case '#157cc2':
  924.                     if ($dato['type'] == "Visit") {
  925.                         $newDatos[$dato['start']->format('Ymd').'V120'.$dato['id']] = $dato;
  926.                         if (!empty($newDatos[$dato['start']->format('Ymd').'V120'])) {
  927.                             // Hay varias visitas ese mismo dia para el agente
  928. //                            $newDatos[$dato['start']->format('Ymd').'V120']['tooltip'] = $newDatos[$dato['start']->format('Ymd').'V120']['tooltip'] . $dato['tooltip'];
  929.                         } else {
  930. //                            $newDatos[$dato['start']->format('Ymd').'V120'] = $dato;
  931.                         }
  932.                     }
  933.                     break;
  934.                 //Visita Generica para agentes a Covarrubias
  935.                 case '#f0d800':
  936.                     if ($dato['type'] == "Visit") {
  937.                         $newDatos[$dato['start']->format('Ymd').'V0'.$dato['id']] = $dato;
  938.                         if (!empty($newDatos[$dato['start']->format('Ymd').'V0'])) {
  939.                             // Hay varias visitas ese mismo dia para el agente
  940. //                            $newDatos[$dato['start']->format('Ymd').'V0']['tooltip'] = $newDatos[$dato['start']->format('Ymd').'V0']['tooltip'] . $dato['tooltip'];
  941.                         } else {
  942. //                            $newDatos[$dato['start']->format('Ymd').'V0'] = $dato;
  943.                         }
  944.                     }
  945.                     break;
  946.                 //Reserva color naranja Bloqueo
  947.                 case '#ffaa00':
  948.                     if (empty($newDatos[$dato['id']])){
  949.                         $newDatos[$dato['id']] = $dato;
  950.                     } else {
  951.                         // Se verifican la actualizacion de incio y fin, para tener el menor inicio y el mayor fin
  952.                         if ($newDatos[$dato['id']]['start'] > $dato['start']) { $newDatos[$dato['id']]['start'] = $dato['start']; }
  953.                         if ($newDatos[$dato['id']]['end'] < $dato['end']) { $newDatos[$dato['id']]['end'] = $dato['end']; }
  954.                         $newDatos[$dato['id']]['tooltip'] = $newDatos[$dato['id']]['tooltip'] . ' | ' $dato['tooltip'];
  955.                         // Verificamos si la sala ya ha sido previamente agregada a la lista de salas para no repetirla
  956.                         if (strpos($newDatos[$dato['id']]['title'], $dato['titleTwo']) === false) {
  957.                             // No se encontro la cadena, debemos agregar
  958.                             $newDatos[$dato['id']]['titleTwo'] = $newDatos[$dato['id']]['titleTwo'] . '<br>' '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'$dato['titleTwo'];
  959.                             $newDatos[$dato['id']]['title'] = $newDatos[$dato['id']]['titleOne'] . $newDatos[$dato['id']]['titleTwo'] . $newDatos[$dato['id']]['titleThree'];
  960.                         }
  961.                     }
  962.                     break;
  963.                 //Reserva color morado Bloqueo (Covarrubias)
  964.                 case '#b873bf':
  965.                     if (empty($newDatos[$dato['id']])){
  966.                         $newDatos[$dato['id']] = $dato;
  967.                     } else {
  968.                         // Se verifican la actualizacion de incio y fin, para tener el menor inicio y el mayor fin
  969.                         if ($newDatos[$dato['id']]['start'] > $dato['start']) { $newDatos[$dato['id']]['start'] = $dato['start']; }
  970.                         if ($newDatos[$dato['id']]['end'] < $dato['end']) { $newDatos[$dato['id']]['end'] = $dato['end']; }
  971.                         $newDatos[$dato['id']]['tooltip'] = $newDatos[$dato['id']]['tooltip'] . ' | ' $dato['tooltip'];
  972.                         // Verificamos si la sala ya ha sido previamente agregada a la lista de salas para no repetirla
  973.                         if (strpos($newDatos[$dato['id']]['title'], $dato['titleTwo']) === false) {
  974.                             // No se encontro la cadena, debemos agregar
  975.                             $newDatos[$dato['id']]['titleTwo'] = $newDatos[$dato['id']]['titleTwo'] . '<br>' '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'$dato['titleTwo'];
  976.                             $newDatos[$dato['id']]['title'] = $newDatos[$dato['id']]['titleOne'] . $newDatos[$dato['id']]['titleTwo'] . $newDatos[$dato['id']]['titleThree'];
  977.                         }
  978.                     }
  979.                     break;
  980.                 //Reserva color Rojo claro Cotizado
  981.                 case '#faafc3':
  982.                     if (empty($newDatos[$dato['id']])){
  983.                         $newDatos[$dato['id']] = $dato;
  984.                     } else {
  985.                         // Se verifican la actualizacion de incio y fin, para tener el menor inicio y el mayor fin
  986.                         if ($newDatos[$dato['id']]['start'] > $dato['start']) { $newDatos[$dato['id']]['start'] = $dato['start']; }
  987.                         if ($newDatos[$dato['id']]['end'] < $dato['end']) { $newDatos[$dato['id']]['end'] = $dato['end']; }
  988.                         $newDatos[$dato['id']]['tooltip'] = $newDatos[$dato['id']]['tooltip'] . ' | ' $dato['tooltip'];
  989.                         // Verificamos si la sala ya ha sido previamente agregada a la lista de salas para no repetirla
  990.                         if (strpos($newDatos[$dato['id']]['title'], $dato['titleTwo']) === false) {
  991.                             // No se encontro la cadena, debemos agregar
  992.                             $newDatos[$dato['id']]['titleTwo'] = $newDatos[$dato['id']]['titleTwo'] . '<br>' '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'$dato['titleTwo'];
  993.                             $newDatos[$dato['id']]['title'] = $newDatos[$dato['id']]['titleOne'] . $newDatos[$dato['id']]['titleTwo'] . $newDatos[$dato['id']]['titleThree'];
  994.                         }
  995.                     }
  996.                     break;
  997.                 //Reserva color Rojo Reserva Cancelada
  998.                 case '#ff0000':
  999.                     //Las canceladas no se muestran en el calendario
  1000.                     break;
  1001.                 //Reserva color Verde Reserva Confirmada, Facturada, (se ha adelantado un pago parcial)
  1002.                 case '#13ad27':
  1003.                     if (empty($newDatos[$dato['id']])){
  1004.                         $newDatos[$dato['id']] = $dato;
  1005.                     } else {
  1006.                         // Se verifican la actualizacion de incio y fin, para tener el menor inicio y el mayor fin
  1007.                         if ($newDatos[$dato['id']]['start'] > $dato['start']) { $newDatos[$dato['id']]['start'] = $dato['start']; }
  1008.                         if ($newDatos[$dato['id']]['end'] < $dato['end']) { $newDatos[$dato['id']]['end'] = $dato['end']; }
  1009.                         $newDatos[$dato['id']]['tooltip'] = $newDatos[$dato['id']]['tooltip'] . ' | ' $dato['tooltip'];
  1010.                         // Verificamos si la sala ya ha sido previamente agregada a la lista de salas para no repetirla
  1011.                         if (strpos($newDatos[$dato['id']]['title'], $dato['titleTwo']) === false) {
  1012.                             // No se encontro la cadena, debemos agregar
  1013.                             $newDatos[$dato['id']]['titleTwo'] = $newDatos[$dato['id']]['titleTwo'] . '<br>' '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'$dato['titleTwo'];
  1014.                             $newDatos[$dato['id']]['title'] = $newDatos[$dato['id']]['titleOne'] . $newDatos[$dato['id']]['titleTwo'] . $newDatos[$dato['id']]['titleThree'];
  1015.                         }
  1016.                     }
  1017.                     break;
  1018.                 //Reserva color Verde Reserva Confirmada, Facturada, (Covarrubias)
  1019.                 case '#017362':
  1020.                     if (empty($newDatos[$dato['id']])){
  1021.                         $newDatos[$dato['id']] = $dato;
  1022.                     } else {
  1023.                         // Se verifican la actualizacion de incio y fin, para tener el menor inicio y el mayor fin
  1024.                         if ($newDatos[$dato['id']]['start'] > $dato['start']) { $newDatos[$dato['id']]['start'] = $dato['start']; }
  1025.                         if ($newDatos[$dato['id']]['end'] < $dato['end']) { $newDatos[$dato['id']]['end'] = $dato['end']; }
  1026.                         $newDatos[$dato['id']]['tooltip'] = $newDatos[$dato['id']]['tooltip'] . ' | ' $dato['tooltip'];
  1027.                         // Verificamos si la sala ya ha sido previamente agregada a la lista de salas para no repetirla
  1028.                         if (strpos($newDatos[$dato['id']]['title'], $dato['titleTwo']) === false) {
  1029.                             // No se encontro la cadena, debemos agregar
  1030.                             $newDatos[$dato['id']]['titleTwo'] = $newDatos[$dato['id']]['titleTwo'] . '<br>' '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'$dato['titleTwo'];
  1031.                             $newDatos[$dato['id']]['title'] = $newDatos[$dato['id']]['titleOne'] . $newDatos[$dato['id']]['titleTwo'] . $newDatos[$dato['id']]['titleThree'];
  1032.                         }
  1033.                     }
  1034.                     break;
  1035.                 //Se pondra color a negro para resaltar este cualquier caso que no haya sido considerado (status Pendiente)
  1036.                 default:
  1037.                     if (empty($newDatos[$dato['id']])){
  1038.                         $newDatos[$dato['id']] = $dato;
  1039.                     } else {
  1040.                         // Se verifican la actualizacion de incio y fin, para tener el menor inicio y el mayor fin
  1041.                         if ($newDatos[$dato['id']]['start'] > $dato['start']) { $newDatos[$dato['id']]['start'] = $dato['start']; }
  1042.                         if ($newDatos[$dato['id']]['end'] < $dato['end']) { $newDatos[$dato['id']]['end'] = $dato['end']; }
  1043.                         $newDatos[$dato['id']]['tooltip'] = $newDatos[$dato['id']]['tooltip'] . ' | ' $dato['tooltip'];
  1044.                         // Verificamos si la sala ya ha sido previamente agregada a la lista de salas para no repetirla
  1045.                         if (strpos($newDatos[$dato['id']]['title'], $dato['titleTwo']) === false) {
  1046.                             // No se encontro la cadena, debemos agregar
  1047.                             $newDatos[$dato['id']]['titleTwo'] = $newDatos[$dato['id']]['titleTwo'] . '<br>' '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'$dato['titleTwo'];
  1048.                             $newDatos[$dato['id']]['title'] = $newDatos[$dato['id']]['titleOne'] . $newDatos[$dato['id']]['titleTwo'] . $newDatos[$dato['id']]['titleThree'];
  1049.                         }
  1050.                     }
  1051.                     // Se pone en color negro para resaltar este caso que no esta entrando en ninguno de los casos anteriores
  1052.                     $newDatos[$dato['id']]['color'] = '#000000';
  1053.                     if ($dato['type'] == "Visit") {
  1054.                         // Si no es una de los agentes regulares (Gaby, Angie, Cristina) se busca el color del usuario configurado en el perfil
  1055.                         $elAgente $em->getRepository(User::class)->findOneById($dato['agentId']);
  1056.                         $elAgenteColor = !empty($elAgente) ? $elAgente->getColor() : null;
  1057.                         if (!empty($elAgenteColor)){ $newDatos[$dato['id']]['color'] = $elAgenteColor; }
  1058.                     }
  1059.                     break;
  1060.             }
  1061.         }
  1062.         $datos0 = array();
  1063.         foreach ($newDatos as $key => $item) {
  1064.             if (!empty($item['id'])) {
  1065.                 $datos0[$key] = array('title' => $item['title'],
  1066.                     'titleOne' => $item['titleOne'],
  1067.                     'titleTwo' => $item['titleTwo'],
  1068.                     'titleThree' => $item['titleThree'],
  1069.                     'type' => $item['type'],
  1070.                     'id' => $item['id'],
  1071.                     'tooltip' => $item['tooltip'],
  1072.                     'start' => $item['start'],
  1073.                     'end' => $item['end'],
  1074.                     'color' => $item['color'],
  1075.                     'loungeId' => $item['loungeId'],
  1076.                     'url' => $item['url']
  1077.                 );
  1078.             }
  1079.         }
  1080.         $newDatos $datos0;
  1081.         $datos = array();
  1082.         foreach ($newDatos as $item) {
  1083.             if ($item['color'] != '#ff0000') {
  1084.                 // No se agregan al calendario los elementos eliminados oelementos vacios
  1085.                 if (!empty($item)) {
  1086.                     //INICIO: Verificamos por huecos dentro de la reserva
  1087.                     if (empty($item['type'])) {
  1088.                         // solo las reservas se van a verificar en este if
  1089.                         if ((date_diff($item['start'], $item['end'])->d) > 1) {    //el evento tiene mas de 2 dias, puede haber huecos
  1090.                             $resSimples $em->getRepository(ReservationLoungeSimple::class)->findByIdReservation($item['id']);
  1091.                             $period = new DatePeriod$item['start'], new DateInterval('P1D'), $item['end'] );
  1092.                             $arrayPeriod = array();
  1093.                             foreach ($period as $key => $value) { $arrayPeriod[] = $value; }
  1094.                             $logAllDiasEnReserva false;
  1095.                             $logDiaEnReserva false;
  1096.                             //Verificamos que cada dia tenga su reserva de sala para que no haya hueco
  1097.                             foreach ($arrayPeriod as $day) {
  1098.                                 foreach ($resSimples as $resSimple) {
  1099.                                     if ($resSimple->getDateStart()->format('Y-m-d') == $day->format('Y-m-d')) {
  1100.                                         $logDiaEnReserva true;
  1101.                                         break;
  1102.                                     }
  1103.                                 }
  1104.                                 if (!$logDiaEnReserva) {
  1105.                                     //Un dia no se encontraba, hay un hueco
  1106.                                     foreach ($resSimples as $resDayToAdd) {
  1107.                                         if (empty($resDayToAdd->getType())) {       // Solo se deben agregar salsa los montajes y desmontajes aqui no van
  1108.                                             $item['start'] = $resDayToAdd->getDateStart();
  1109.                                             $item['end'] = $resDayToAdd->getDateEnd();
  1110.                                             $br '<br>';
  1111.                                             $br strpos($item['title'], $br);
  1112.                                             $tempText substr($item['title'], $br 4);
  1113.                                             $item['title'] = $resDayToAdd->getDateStart()->format('H:i') . ' ' '<br>' $tempText;
  1114.                                             $datos[] = $item;
  1115.                                         }
  1116.                                     }
  1117.                                     break;
  1118.                                 } else {
  1119.                                     //Se debe evaluar el siguiente dia
  1120.                                     $logDiaEnReserva false;
  1121.                                     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
  1122.                                         $logAllDiasEnReserva true;
  1123.                                     }
  1124.                                 }
  1125.                             }
  1126.                             if ($logAllDiasEnReserva) { $datos[] = $item; }
  1127.                         } else {
  1128.                             // El evento es de 1 o 2 dias, no hay posibilidad de hueco
  1129.                             $datos[] = $item;
  1130.                         }
  1131.                     } else {
  1132.                         //Es Visita Las visitas son las unicas entradas que no tienen hueco
  1133.                         if ($item['type'] == 'Visit'){
  1134.                             $datos[] = $item;
  1135.                         } else {
  1136.                             // es montaje o desmontaje, se va verificar por huecos
  1137.                             if ((date_diff($item['start'], $item['end'])->d) > 1) {    //el item tiene mas de 2 dias, puede haber huecos
  1138.                                 $parameters = array(
  1139.                                     'id' => $item['id'],
  1140.                                     'type' => $item['type'],
  1141.                                 );
  1142.                                 $dql 'SELECT i
  1143.                                         FROM GreenPatioBundle:ReservationLoungeSimple i
  1144.                                         WHERE  i.idReservation = :id
  1145.                                           and i.type = :type';
  1146.                                 $query $em->createQuery($dql)->setParameters($parameters);
  1147.                                 $resSimples $query->getResult();
  1148.                                 $period = new DatePeriod$item['start'], new DateInterval('P1D'), $item['end'] );
  1149.                                 $arrayPeriod = array();
  1150.                                 foreach ($period as $key => $value) { $arrayPeriod[] = $value; }
  1151.                                 $logAllDiasEnReserva false;
  1152.                                 $logDiaEnReserva false;
  1153.                                 //Verificamos que cada dia tenga su reserva de sala para que no haya hueco
  1154.                                 foreach ($arrayPeriod as $day) {
  1155.                                     foreach ($resSimples as $resSimple) {
  1156.                                         if ($resSimple->getDateStart()->format('Y-m-d') == $day->format('Y-m-d')) {
  1157.                                             $logDiaEnReserva true;
  1158.                                             break;
  1159.                                         }
  1160.                                     }
  1161.                                     if (!$logDiaEnReserva) {
  1162.                                         //Un dia no se encontraba, hay un hueco
  1163.                                         foreach ($resSimples as $resDayToAdd) {
  1164.                                             if (!empty($resDayToAdd->getType())) {       // Solo se deben agregar montajes y desmontajes aqui
  1165.                                                 $item['start'] = $resDayToAdd->getDateStart();
  1166.                                                 $item['end'] = $resDayToAdd->getDateEnd();
  1167.                                                 $br '<br>';
  1168.                                                 $br strpos($item['title'], $br);
  1169.                                                 $tempText substr($item['title'], $br 4);
  1170.                                                 $item['title'] = $resDayToAdd->getDateStart()->format('H:i') . ' ' '<br>' $tempText;
  1171.                                                 $datos[] = $item;
  1172.                                             }
  1173.                                         }
  1174.                                         break;
  1175.                                     } else {
  1176.                                         //Se debe evaluar el siguiente dia
  1177.                                         $logDiaEnReserva false;
  1178.                                         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
  1179.                                             $logAllDiasEnReserva true;
  1180.                                         }
  1181.                                     }
  1182.                                 }
  1183.                                 if ($logAllDiasEnReserva) { $datos[] = $item; }
  1184.                             } else {
  1185.                                 // El montaje o desmontaje es de 1 o 2 dias, no hay posibilidad de hueco
  1186.                                 $datos[] = $item;
  1187.                             }
  1188.                         }
  1189.                     }
  1190.                     //FIN: Verificamos por huecos dentro de la reserva
  1191.                 }
  1192.             }
  1193.         }
  1194.         $return = array( 'reservation' => $datos, );
  1195.         $response = new JsonResponse($return);
  1196.         return $response;
  1197.     }
  1198.     private function createWidgetNotesCreateForm(WidgetNotes $entity)
  1199.     {
  1200.         $form $this->createForm(WidgetNotesType::class, $entity, array(
  1201.             'action' => $this->generateUrl('widget_notes_calendar_cvr_create'),
  1202.             'method' => 'POST'
  1203.         ));
  1204.         return $form;
  1205.     }
  1206. };