src/MDS/GreenPatioBundle/Controller/ReservationsController.php line 4008

Open in your IDE?
  1. <?php
  2. namespace App\MDS\GreenPatioBundle\Controller;
  3. use App\Constants\LanguageConstants;
  4. use App\Entity\DocContract;
  5. use App\Entity\DocContractModel;
  6. use App\Entity\Client;
  7. use App\Entity\ClientContact;
  8. use App\Entity\Supplier;
  9. use App\Entity\User;
  10. use App\Entity\HtFile;
  11. use App\Entity\ReservationLoungeWebDescription;
  12. use App\MDS\AvexpressBundle\Entity\AveFiles;
  13. use App\Entity\WidgetNotes;
  14. use App\Form\WidgetNotesType;
  15. use App\MDS\DevelupBundle\Entity\MdvTelegramUser;
  16. use App\MDS\EventsBundle\Entity\Proposal;
  17. use App\MDS\GreenPatioBundle\Entity\CvrReservationInvoice;
  18. use App\MDS\GreenPatioBundle\Entity\CvrReservationInvoiceRec;
  19. use App\MDS\GreenPatioBundle\Entity\ExternalUser;
  20. use App\MDS\GreenPatioBundle\Entity\Reservation;
  21. use App\MDS\GreenPatioBundle\Entity\ReservationDeposit;
  22. use App\MDS\GreenPatioBundle\Entity\ReservationLounge;
  23. use App\MDS\GreenPatioBundle\Entity\ReservationLoungeDescription;
  24. use App\MDS\GreenPatioBundle\Entity\ReservationLoungeDetails;
  25. use App\MDS\GreenPatioBundle\Entity\ReservationLoungePicture;
  26. use App\MDS\GreenPatioBundle\Entity\ReservationLoungeProfile;
  27. use App\MDS\GreenPatioBundle\Entity\ReservationLoungeSimple;
  28. use App\MDS\GreenPatioBundle\Entity\ReservationLoungeVideo;
  29. use App\MDS\GreenPatioBundle\Entity\ReservationMailAlertClient;
  30. use App\MDS\GreenPatioBundle\Entity\ReservationPeriod;
  31. use App\MDS\GreenPatioBundle\Entity\ReservationService;
  32. use App\MDS\GreenPatioBundle\Entity\ReservationVisit;
  33. use App\MDS\GreenPatioBundle\Entity\ReservationAlertStarted;
  34. use App\MDS\GreenPatioBundle\Entity\ReservationAlertSecondDeposit;
  35. use App\MDS\GreenPatioBundle\Entity\ReservationInvoice;
  36. use App\MDS\GreenPatioBundle\Entity\ReservationInvoiceDepositItems;
  37. use App\MDS\GreenPatioBundle\Entity\ReservationInvoiceItems;
  38. use App\MDS\GreenPatioBundle\Entity\ReservationInvoiceRec;
  39. use App\MDS\GreenPatioBundle\Entity\ReservationPaymentsClient;
  40. use App\MDS\GreenPatioBundle\Form\ReservationLoungeDetailsType;
  41. use App\MDS\GreenPatioBundle\Form\ReservationLoungeProfileType;
  42. use App\MDS\GreenPatioBundle\Form\ReservationLoungeType;
  43. use App\MDS\GreenPatioBundle\Form\ReservationPeriodType;
  44. use App\MDS\GreenPatioBundle\Form\ReservationType;
  45. use Symfony\Component\Routing\Annotation\Route;
  46. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  47. use Symfony\Component\HttpFoundation\Request;
  48. use Symfony\Component\HttpFoundation\Session\Session;
  49. use Symfony\Component\HttpFoundation\JsonResponse;
  50. use App\Service\DocContractService;
  51. use Google_Client;
  52. use Google_Service_Calendar;
  53. use Psr\Log\LoggerInterface;
  54. use DateTime;
  55. use DatePeriod;
  56. use DateInterval;
  57. use Symfony\Contracts\Translation\TranslatorInterface;
  58. use Doctrine\ORM\EntityManagerInterface;
  59. use Symfony\Component\Serializer\SerializerInterface;
  60. class ReservationsController extends AbstractController
  61. {
  62. //    private $translator;
  63. //    protected $googleCalendar;
  64. //
  65. //    public function __construct(TranslatorInterface $translator)
  66. //    {
  67. ////        $redirect_uri='urn:ietf:wg:oauth:2.0:oob';
  68. //        $redirect_uri = 'https://' . $_SERVER['HTTP_HOST']. '/calendar/token';
  69. //        $googleCalendar = new Google_Client();
  70. //        $googleCalendar->setApplicationName('Google Calendar API PHP Quickstart');
  71. //        //campos a extraer de la base de datos User
  72. //        $googleCalendar->setClientId('2790497987-57qc3vu4pr7vb0s8phpub2me58pe34lb.apps.googleusercontent.com');
  73. //        $googleCalendar->setClientSecret('nj2C7unaTO68DRhyORsyipSj');
  74. //        //fin campos user
  75. ////        $api_key = "AIzaSyBR84cS1IU2BPvk5V3VnbqdkJESlv440Ac";
  76. ////        $client->setDeveloperKey($api_key);
  77. //        $googleCalendar->setRedirectUri($redirect_uri);
  78. //        $googleCalendar->addScope(Google_Service_Calendar::CALENDAR);
  79. //        $guzzleClient = new \GuzzleHttp\Client(array('curl' => array(CURLOPT_SSL_VERIFYPEER => false)));
  80. //        $googleCalendar->setHttpClient($guzzleClient);
  81. //        $this->googleCalendar = $googleCalendar;
  82. //        $this->translator = $translator;
  83. //    }
  84.     private $translator;
  85.     protected $googleCalendar;
  86.     private $docContractService;
  87.     public function __construct(TranslatorInterface $translatorDocContractService $docContractService)
  88.     {
  89.         $redirect_uri 'https://' $_SERVER['HTTP_HOST'] . '/calendar/token';
  90.         $googleCalendar = new Google_Client();
  91.         $googleCalendar->setApplicationName('Google Calendar API PHP Quickstart');
  92.         $googleCalendar->setClientId('2790497987-57qc3vu4pr7vb0s8phpub2me58pe34lb.apps.googleusercontent.com');
  93.         $googleCalendar->setClientSecret('nj2C7unaTO68DRhyORsyipSj');
  94.         $googleCalendar->setRedirectUri($redirect_uri);
  95.         $googleCalendar->addScope(Google_Service_Calendar::CALENDAR);
  96.         $guzzleClient = new \GuzzleHttp\Client(['curl' => [CURLOPT_SSL_VERIFYPEER => false]]);
  97.         $googleCalendar->setHttpClient($guzzleClient);
  98.         $this->googleCalendar $googleCalendar;
  99.         $this->translator $translator;
  100.         $this->docContractService $docContractService;
  101.     }
  102.     /**
  103.      * @Route("/connectGoogle", name="homepage_Connect_Google")
  104.      */
  105.     public function indexConnectGoogleAction(Request $request) {
  106.         $session = new Session();
  107.         $token=$session->get('tokenGoogleCalendar');
  108.         if (!is_null($token)) {
  109.             $this->googleCalendar->setAccessToken($token);
  110.         }
  111.         // If there is no previous token or it's expired.
  112.         $data=array();
  113.         if ($this->googleCalendar->isAccessTokenExpired()) {
  114.             // Refresh the token if possible, else fetch a new one.
  115.             if ($this->googleCalendar->getRefreshToken()) {
  116.                 $this->googleCalendar->fetchAccessTokenWithRefreshToken($this->googleCalendar->getRefreshToken());
  117.             } else {
  118.                 // Request authorization from the user.
  119.                 $authUrl $this->googleCalendar->createAuthUrl();
  120.                 return $this->redirect($authUrl);
  121.             }
  122.         }
  123.         return $this->redirectToRoute('homepage');
  124.     }
  125.     /**
  126.      * @Route("/add",  name="reservations_greenpatio_add")
  127.      */
  128.     public function addReservationActionRequest $request)
  129.     {
  130.         return $this->redirectToRoute('reservations_greenpatio_add_simple');
  131.     }
  132.     /**
  133.      * @Route("/create", name="reservations_greenpatio_create")
  134.      */
  135.     public function createAction(EntityManagerInterface $emRequest $request)
  136.     {
  137.         $reserva = new Reservation();
  138.         $form $this->createReservationCreateForm($reserva);
  139.         $form->handleRequest($request);
  140.         /* Obtengo usuario logueado */
  141.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  142.         $user_id $user_logueado->getId();
  143.         $hoy = new \DateTime("now"NULL);
  144.         if($form->isValid())
  145.         {
  146.             $reserva->setUpdatedBy($user_id);
  147.             $reserva->setUpdatedAt($hoy);
  148.             if (is_null($reserva->getCateringName())){
  149.                 $reserva->setSupplier(null);
  150.                 $reserva->setCateringName(null);
  151.             } else {
  152.                 $reserva->setSupplier($reserva->getCateringName()->getId());
  153.                 $reserva->setCateringName($reserva->getCateringName()->getName());
  154.             }
  155.             if (!empty($reserva->getClient())){ $reserva->setClient($reserva->getClient()->getId()); }
  156.             $reserva->setCreatedAt($hoy);
  157.             $reserva->setCreatedBy($user_id);
  158.             $reserva->setDateStart(new \DateTime('2078-01-01'));
  159.             $reserva->setDateEnd(new \DateTime('2000-01-01'));
  160.             if(is_null($reserva->getStatus())){$reserva->setStatus('Cotizado');}
  161.             if(is_null($reserva->getPriority()) or empty($reserva->getPriority()) or ($reserva->getPriority() == 'Auto')){ $reserva->setPriority(1); }
  162.             // Buscamos la menor fecha de sala para el inicio y la mayor para determinar el fin del evento
  163.             $salas $request->request->get('salas');
  164.             // crea una reserva sin sala. que fechas le pongo al evento
  165.             if (!is_null($salas)) {
  166.                 foreach ($salas as $sala) {
  167.                     if (sizeof($sala['mountingHourStart']) != 5){
  168.                         // Necesitamos la hora en formato HH:mm
  169.                         switch (strlen($sala['mountingHourStart'])) {
  170.                             case 0:  $sala['mountingHourStart'] = '00:00'; break; // Vacio
  171.                             case 1// H  -> 0H:00
  172.                                 if (is_numeric($sala['mountingHourStart'])){
  173.                                     $sala['mountingHourStart'] = '0'.$sala['mountingHourStart'].':00';
  174.                                 } else {
  175.                                     $sala['mountingHourStart'] = '00:00';
  176.                                 }
  177.                                 break;
  178.                             case 2$sala['mountingHourStart'] = $sala['mountingHourStart'].':00'; break;   // HH  -> HH:00
  179.                             case 3:$sala['mountingHourStart'] = '0'.$sala['mountingHourStart']; break;     // Hmm  -> 0H:mm
  180.                             case 4$sala['mountingHourStart'] = substr($sala['mountingHourStart'], 02) . ':' substr($sala['mountingHourStart'], 22); break;      // HHmm  -> HH:mm
  181.                             default: $sala['mountingHourStart'] = '00:00'; break;      // XXXXyyy
  182.                         }
  183.                     }
  184.                     if (sizeof($sala['removalHourEnd']) != 5){
  185.                         // Necesitamos la hora en formato HH:mm
  186.                         switch (strlen($sala['removalHourEnd'])) {
  187.                             case 0$sala['removalHourEnd'] = '00:00'; break;      // Vacio
  188.                             case 1:
  189.                                 if (is_numeric($sala['removalHourEnd'])){
  190.                                     $sala['removalHourEnd'] = '0'.$sala['removalHourEnd'].':00';
  191.                                 } else {
  192.                                     $sala['removalHourEnd'] = '00:00';
  193.                                 }
  194.                                 break;      // H  -> 0H:00
  195.                             case 2$sala['removalHourEnd'] = $sala['removalHourEnd'].':00'; break;      // HH  -> HH:00
  196.                             case 3$sala['removalHourEnd'] = '0'.$sala['removalHourEnd']; break;      // Hmm  -> 0H:mm
  197.                             case 4$sala['removalHourEnd'] = substr($sala['removalHourEnd'], 02) . ':' substr($sala['removalHourEnd'], 22); break;      // HHmm  -> HH:mm
  198.                             default: $sala['removalHourEnd'] = '00:00'; break;      // XXXXyyy
  199.                         }
  200.                     }
  201.                     // Verificamos el montaje
  202.                     if ($reserva->getDateStart() > (new \DateTime($sala['mountingDate']))) { $reserva->setDateStart((new \DateTime($sala['mountingDate']." ".$sala['mountingHourStart']))); }
  203.                     if ($reserva->getDateStart() > (new \DateTime($sala['dateStart']))) { $reserva->setDateStart((new \DateTime($sala['dateStart']." ".$sala['hourStart']))); }
  204.                     if ($reserva->getDateEnd() < (new \DateTime($sala['dateEnd']))) { $reserva->setDateEnd((new \DateTime($sala['dateEnd']." ".$sala['hourEnd']))); }
  205.                     //Verificamos el desmontaje
  206.                     if ($reserva->getDateEnd() < (new \DateTime($sala['removalDate']))) { $reserva->setDateEnd((new \DateTime($sala['removalDate']." ".$sala['removalHourEnd']))); }
  207.                 }
  208.             } else {
  209.                 // No hay salas, se asigna a la reserva la fecha del dia actual
  210.                 $reserva->setDateStart((new \DateTime()));
  211.                 $reserva->setDateEnd((new \DateTime()));
  212.             }
  213.             // INICIO: se determina el numero de opcion o prioridad que tiene el evento
  214.             $salasTemp =$request->request->get('salas');
  215.             // Pendiente reunion con Rafa (se determina el numero de opcion o prioridad que tiene el evento)
  216.             // FIN: se determina el numero de opcion o prioridad que tiene el evento
  217.             try{
  218.                 $em->persist($reserva);
  219.                 $em->flush();
  220.                 $event 'The Reservation has been created.';
  221. //                $successMessage = $this->translator->trans($event);
  222.                 $successMessage 'La reserva ha sido creada.';
  223.                 $this->addFlash('mensajereservation'$successMessage);
  224.             } catch (\Exception $e){
  225.                 $event 'An error occurred: '.$e->getMessage();
  226.                 $errorMessage $this->translator->trans($event);
  227.                 $this->addFlash('mensajereservationerror'$errorMessage);
  228.             }
  229.         } else {
  230.             $errorMessagebase $this->translator->trans('Error, some fields are empty');
  231.             $this->addFlash('mensajetracingerror'$errorMessagebase);
  232.             $periods $em->getRepository(ReservationPeriod::class)->findAll();
  233.             return $this->render('MDS/GreenPatioBundle/reservations/add-reservations.html.twig',
  234.                 array(
  235.                     'form' => $form->createView(),
  236.                     'periods' => $periods,
  237.                 )
  238.             );
  239.         }
  240.         /* Fin Gestión de eventos en Log */
  241.         $salas =$request->request->get('salas');
  242.         // Inicio: Verificamos que hayan metido bien las salas, toda sala para poder facturar debe tener IdLounge, Fecha de inicio y fecha de fin
  243.         for ($i=0$i<sizeof($salas); $i++){
  244.             if (empty($salas[$i]['idLounge']) or empty($salas[$i]['dateStart']) or empty($salas[$i]['dateEnd'])){ unset($salas[$i]); }
  245.         }
  246.         // Fin: Verificamos que hayan metido bien las salas, toda sala para poder facturar debe tener IdLounge, Fecha de inicio y fecha de fin
  247.         if (!is_null($reserva->getId())){
  248.             if (!is_null($salas)) {
  249.                 foreach ($salas as $sala) {
  250.                     // Se guarda una sala si hay una sala seleccionada
  251.                     // IdLounge es el ID en la tabla reservation profile
  252.                     if (!empty(($sala['idLounge']))) {
  253.                         // consulto la tabla de precios para obtener el id de salon desde el id de precios
  254.                         $queryProfile $em->getRepository(ReservationLoungeProfile::class)->findOneById($sala['idLounge']);
  255.                         $reservaLounge = new ReservationLounge();
  256.                         $reservaLounge->setIdLounge($queryProfile->getLoungeId());
  257.                         $reservaLounge->setLoungeName(($em->getRepository(ReservationLoungeDetails::class)->findOneById($queryProfile->getLoungeId()))->getName());
  258.                         $reservaLounge->setCreatedAt($hoy);
  259.                         $reservaLounge->setCreatedBy($user_id);
  260.                         $reservaLounge->setUpdatedAt($hoy);
  261.                         $reservaLounge->setUpdatedBy($user_id);
  262.                         $reservaLounge->setIdReservation($reserva->getId());
  263.                         $reservaLounge->setDateStart(new \DateTime($sala['dateStart']." ".$sala['hourStart']));
  264.                         $reservaLounge->setDateEnd(new \DateTime($sala['dateEnd']." ".$sala['hourEnd']));
  265.                         $reservaLounge->setHourStart(substr($sala['hourStart'], 02));
  266.                         $reservaLounge->setMinStart(substr($sala['hourStart'], 32));
  267.                         $reservaLounge->setHourEnd(substr($sala['hourEnd'], 02));
  268.                         $reservaLounge->setMinEnd(substr($sala['hourEnd'], 32));
  269.                         $reservaLounge->setServicePrice($sala['servicePrice']);
  270.                         // el service name es la descripcion
  271.                         $reservaLounge->setServiceName($sala['serviceName']);
  272.                         $reservaLounge->setIdPeriod($sala['idLoungePrice']);
  273.                         if (empty($sala['servicePax'])){$reservaLounge->setPax(null);} else {$reservaLounge->setPax($sala['servicePax']);}
  274.                         $reservaLounge->setMounting($sala['serviceMounting']);
  275.                         if (empty($sala['mountingPrice'])){$reservaLounge->setMountingPrice(0);} else {$reservaLounge->setMountingPrice($sala['mountingPrice']);}
  276.                         $reservaLounge->setMountingLapse($sala['mountingLapse']);
  277.                         switch (strlen($sala['mountingHourStart'])) {
  278.                             case 0// Vacio
  279.                                 $reservaLounge->setMountingHourStart('00');
  280.                                 $reservaLounge->setMountingMinStart('00');
  281.                                 break;
  282.                             case 1// H  -> 0H:00
  283.                                 if (is_numeric($sala['mountingHourStart'])){
  284.                                     $reservaLounge->setMountingHourStart('0'.$sala['mountingHourStart']);
  285.                                 } else {
  286.                                     $reservaLounge->setMountingHourStart('00');
  287.                                 }
  288.                                 $reservaLounge->setMountingMinStart('00');
  289.                                 break;
  290.                             case 2// HH  -> HH:00
  291.                                 $reservaLounge->setMountingHourStart($sala['mountingHourStart']);
  292.                                 $reservaLounge->setMountingMinStart('00');
  293.                                 break;
  294.                             case 3// Hmm  -> 0H:mm
  295.                                 $reservaLounge->setMountingHourStart('0'.substr($sala['mountingHourStart'], 01));
  296.                                 $reservaLounge->setMountingMinStart(substr($sala['mountingHourStart'], 12));
  297.                                 break;
  298.                             case 4// HHmm  -> HH:mm
  299.                                 $reservaLounge->setMountingHourStart(substr($sala['mountingHourStart'], 02));
  300.                                 $reservaLounge->setMountingMinStart(substr($sala['mountingHourStart'], 22));
  301.                                 break;
  302.                             case 5// HH:mm  -> HH:mm
  303.                                 $reservaLounge->setMountingHourStart(substr($sala['mountingHourStart'], 02));
  304.                                 $reservaLounge->setMountingMinStart(substr($sala['mountingHourStart'], 32));
  305.                                 break;
  306.                             default: // XXXXyyy
  307.                                 $reservaLounge->setMountingHourStart('00');
  308.                                 $reservaLounge->setMountingMinStart('00');
  309.                                 break;
  310.                         }
  311.                         switch (strlen($sala['mountingHourEnd'])) {
  312.                             case 0// Vacio
  313.                                 $reservaLounge->setMountingHourEnd('00');
  314.                                 $reservaLounge->setMountingMinEnd('00');
  315.                                 break;
  316.                             case 1// H  -> 0H:00
  317.                                 if (is_numeric($sala['mountingHourEnd'])){
  318.                                     $reservaLounge->setMountingHourEnd('0'.$sala['mountingHourEnd']);
  319.                                 } else {
  320.                                     $reservaLounge->setMountingHourEnd('00');
  321.                                 }
  322.                                 $reservaLounge->setMountingMinEnd('00');
  323.                                 break;
  324.                             case 2// HH  -> HH:00
  325.                                 $reservaLounge->setMountingHourEnd($sala['mountingHourEnd']);
  326.                                 $reservaLounge->setMountingMinEnd('00');
  327.                                 break;
  328.                             case 3// Hmm  -> 0H:mm
  329.                                 $reservaLounge->setMountingHourEnd('0'.substr($sala['mountingHourEnd'], 01));
  330.                                 $reservaLounge->setMountingMinEnd(substr($sala['mountingHourEnd'], 12));
  331.                                 break;
  332.                             case 4// HHmm  -> HH:mm
  333.                                 $reservaLounge->setMountingHourEnd(substr($sala['mountingHourEnd'], 02));
  334.                                 $reservaLounge->setMountingMinEnd(substr($sala['mountingHourEnd'], 22));
  335.                                 break;
  336.                             case 5// HH:mm  -> HH:mm
  337.                                 $reservaLounge->setMountingHourEnd(substr($sala['mountingHourEnd'], 02));
  338.                                 $reservaLounge->setMountingMinEnd(substr($sala['mountingHourEnd'], 32));
  339.                                 break;
  340.                             default: // XXXXyyy
  341.                                 $reservaLounge->setMountingHourEnd('00');
  342.                                 $reservaLounge->setMountingMinEnd('00');
  343.                                 break;
  344.                         }
  345.                         $reservaLounge->setMountingDate(new \DateTime($sala['mountingDate'].' '.$reservaLounge->getMountingHourStart().':'.$reservaLounge->getMountingMinStart()));
  346.                         $reservaLounge->setRemovalLapse($sala['removalLapse']);
  347.                         $reservaLounge->setRemovalDate(new \DateTime($sala['removalDate']));
  348.                         switch (strlen($sala['removalHourStart'])) {
  349.                             case 0// Vacio
  350.                                 $reservaLounge->setRemovalHourStart('00');
  351.                                 $reservaLounge->setRemovalMinStart('00');
  352.                                 break;
  353.                             case 1// H  -> 0H:00
  354.                                 if (is_numeric($sala['removalHourStart'])){
  355.                                     $reservaLounge->setRemovalHourStart('0'.$sala['removalHourStart']);
  356.                                 } else {
  357.                                     $reservaLounge->setRemovalHourStart('00');
  358.                                 }
  359.                                 $reservaLounge->setRemovalMinStart('00');
  360.                                 break;
  361.                             case 2// HH  -> HH:00
  362.                                 $reservaLounge->setRemovalHourStart($sala['removalHourStart']);
  363.                                 $reservaLounge->setRemovalMinStart('00');
  364.                                 break;
  365.                             case 3// Hmm  -> 0H:mm
  366.                                 $reservaLounge->setRemovalHourStart('0'.substr($sala['removalHourStart'], 01));
  367.                                 $reservaLounge->setRemovalMinStart(substr($sala['removalHourStart'], 12));
  368.                                 break;
  369.                             case 4// HHmm  -> HH:mm
  370.                                 $reservaLounge->setRemovalHourStart(substr($sala['removalHourStart'], 02));
  371.                                 $reservaLounge->setRemovalMinStart(substr($sala['removalHourStart'], 22));
  372.                                 break;
  373.                             case 5// HH:mm  -> HH:mm
  374.                                 $reservaLounge->setRemovalHourStart(substr($sala['removalHourStart'], 02));
  375.                                 $reservaLounge->setRemovalMinStart(substr($sala['removalHourStart'], 32));
  376.                                 break;
  377.                             default: // XXXXyyy
  378.                                 $reservaLounge->setRemovalHourStart('00');
  379.                                 $reservaLounge->setRemovalMinStart('00');
  380.                                 break;
  381.                         }
  382.                         switch (strlen($sala['removalHourEnd'])) {
  383.                             case 0// Vacio
  384.                                 $reservaLounge->setRemovalHourEnd('00');
  385.                                 $reservaLounge->setRemovalMinEnd('00');
  386.                                 break;
  387.                             case 1// H  -> 0H:00
  388.                                 if (is_numeric($sala['removalHourEnd'])){
  389.                                     $reservaLounge->setRemovalHourEnd('0'.$sala['removalHourEnd']);
  390.                                 } else {
  391.                                     $reservaLounge->setRemovalHourEnd('00');
  392.                                 }
  393.                                 $reservaLounge->setRemovalMinEnd('00');
  394.                                 break;
  395.                             case 2// HH  -> HH:00
  396.                                 $reservaLounge->setRemovalHourEnd($sala['removalHourEnd']);
  397.                                 $reservaLounge->setRemovalMinEnd('00');
  398.                                 break;
  399.                             case 3// Hmm  -> 0H:mm
  400.                                 $reservaLounge->setRemovalHourEnd('0'.substr($sala['removalHourEnd'], 01));
  401.                                 $reservaLounge->setRemovalMinEnd(substr($sala['removalHourEnd'], 12));
  402.                                 break;
  403.                             case 4// HHmm  -> HH:mm
  404.                                 $reservaLounge->setRemovalHourEnd(substr($sala['removalHourEnd'], 02));
  405.                                 $reservaLounge->setRemovalMinEnd(substr($sala['removalHourEnd'], 22));
  406.                                 break;
  407.                             case 5// HH:mm  -> HH:mm
  408.                                 $reservaLounge->setRemovalHourEnd(substr($sala['removalHourEnd'], 02));
  409.                                 $reservaLounge->setRemovalMinEnd(substr($sala['removalHourEnd'], 32));
  410.                                 break;
  411.                             default: // XXXXyyy
  412.                                 $reservaLounge->setRemovalHourEnd('00');
  413.                                 $reservaLounge->setRemovalMinEnd('00');
  414.                                 break;
  415.                         }
  416.                         if (empty($sala['removalPrice'])){$reservaLounge->setRemovalPrice(0);} else {$reservaLounge->setRemovalPrice($sala['removalPrice']);}
  417.                         // INICIO: Verificamos si choca con otra reserva
  418.                         // Si sucede se usara el booleano OtherPriceSave para indicarlo
  419.                         $resFun $this->VerificarCoflictosEnSalas($reservaLounge);
  420.                         $tempBool $resFun['bool'];
  421.                         if($tempBool){
  422.                             $reservaLounge->setOtherPriceSave(true);
  423.                             $reserva->setPriority($resFun['priority']);
  424.                             // Se debe modificar la prioridad de la nueva reserva, que ya se habia guardado previamente
  425.                             try {
  426.                                 $em->persist($reserva);
  427.                                 $em->flush();
  428.                             } catch (\Exception $e) {
  429.                                 $event 'Error al actualizar la prioridad del evento ' $e->getMessage();
  430.                                 /* Para el usuario */
  431.                                 $errorMessage $this->translator->trans($event);
  432.                                 $this->addFlash('mensajereservationerror'$errorMessage);
  433.                             }
  434.                         } else {
  435.                             $reservaLounge->setOtherPriceSave(false);
  436.                         }
  437.                         // FIN: Verificamos si choca con otra reserva
  438.                         // INICIO: Si es necesario se actualizan fechas de inicio y fin usando dia de montaje y desmontaje
  439.                         if (($reservaLounge->getMountingDate() < $reserva->getDateStart()) or ($reserva->getDateEnd() < $reservaLounge->getRemovalDate())){
  440.                             if ($reservaLounge->getMountingDate() < $reserva->getDateStart()){
  441.                                 $reserva->setDateStart($reservaLounge->getMountingDate());
  442.                             }
  443.                             if ($reserva->getDateEnd() < $reservaLounge->getRemovalDate()){
  444.                                 $reserva->setDateEnd($reservaLounge->getRemovalDate());
  445.                             }
  446.                             try {
  447.                                 $em->persist($reserva);
  448.                                 $em->flush();
  449.                             } catch (\Exception $e) {
  450.                                 $event 'Error al actualizar fechas de inicio y fin, por montaje y desmontaje de sala: ' $e->getMessage();
  451.                                 $errorMessage $this->translator->trans($event);
  452.                                 $this->addFlash('mensajereservationerror'$errorMessage);
  453.                             }
  454.                         }
  455.                         // FIN: Si es necesario se actualizan fechas de inicio y fin usando dia de montaje y desmontaje
  456.                         try {
  457.                             $em->persist($reservaLounge);
  458.                             $em->flush();
  459.                         } catch (\Exception $e) {
  460.                             $event 'Al agregar la sala ha ocurrido un error: ' $e->getMessage();
  461.                             /* Para el usuario */
  462.                             $errorMessage $this->translator->trans($event);
  463.                             $this->addFlash('mensajereservationerror'$errorMessage);
  464.                         }
  465.                     }
  466.                 }
  467.                 // INICIO: Verificamos la prioridad
  468.                 $numeroPriority 1;
  469.                 //INICIO: Buscamos las salas que coincidan en tiempo de reserva
  470.                 foreach ($salas as $sala){
  471.                     $newdateStar $sala['dateStart'].' '.$sala['hourStart'];
  472.                     $newdateEnd $sala['dateEnd'].' '.$sala['hourEnd'];
  473.                     $reservaProfile $em->getRepository(ReservationLoungeProfile::class)->findOneById($sala['idLounge']);
  474.                     $parameters = array(
  475.                         'dateStar' => $newdateStar,
  476.                         'dateEnd' => $newdateEnd,
  477.                         'idLounge' => $reservaProfile->getLoungeId(),
  478.                         'idRes' => $reserva->getId(),
  479.                     );
  480.                     $dql 'SELECT i
  481.                             FROM GreenPatioBundle:ReservationLounge i
  482.                             WHERE  (i.dateStart >= :dateStar
  483.                               and i.dateStart <= :dateEnd
  484.                               and i.idLounge = :idLounge
  485.                               and i.idReservation != :idRes)
  486.                               or 
  487.                               (i.dateStart <= :dateStar
  488.                               and i.dateStart >= :dateEnd
  489.                               and i.idLounge = :idLounge
  490.                               and i.idReservation != :idRes)
  491.                               ';
  492.                     $query $em->createQuery($dql)->setParameters($parameters);
  493.                     $reservationLounge $query->getResult();
  494.                 }
  495.                 //FIN: Buscamos las salas que coincidan en tiempo de reserva
  496.                 // INICIO: Buscamos el numero de opcion a asignar
  497.                 $modificarPrior false;
  498.                 if (!empty($reservaLounge)){
  499.                     foreach($reservationLounge as $resLoung){
  500.                         $reservaClash $em->getRepository(Reservation::class)->findOneById($resLoung->getIdReservation());
  501.                         $tempPrior $reservaClash->getPriority();
  502.                         if ($numeroPriority <= $tempPrior){
  503.                             // Ya tenemos una reserva con opcion de mayor relevancia (un numero de opción inferior)
  504.                             $numeroPriority $tempPrior +1;
  505.                             $modificarPrior true;
  506.                         }
  507.                     }
  508.                     if ($modificarPrior){
  509.                         // Se debe modificar la prioridad
  510.                         $reserva->setPriority($numeroPriority);
  511.                         try{
  512.                             $em->persist($reserva);
  513.                             $em->flush();
  514.                             $event 'The Reservation has been created.';
  515. //                            $successMessage = $this->translator->trans($event);
  516.                             $successMessage 'La reserva ha sido creada.';
  517.                             $this->addFlash('mensajereservation'$successMessage);
  518.                         } catch (\Exception $e){
  519.                             $event 'An error occurred: '.$e->getMessage();
  520.                             $errorMessage $this->translator->trans($event);
  521.                             $this->addFlash('mensajereservationerror'$errorMessage);
  522.                         }
  523.                     }
  524.                 } else {
  525.                     // El numero de opción asignada fue el correcto
  526.                 }
  527.                 // FIN: Buscamos el numero de opcion a asignar
  528.                 // FIN: Verificamos la prioridad
  529.             }
  530.         } else {
  531.             $lounges null;    // Si fallo la reserva no habrá salas
  532.         }
  533.         return $this->redirectToRoute('reservations_greenpatio_index');
  534.     }
  535.     public function VerificarCoflictosEnSalas(EntityManagerInterface $em$nuevaSala)
  536.     {
  537.         $allSalas $em->getRepository(ReservationLounge::class)->findAll();
  538.         $tempBool false;  //Aun no se ha detectado un conflicto
  539.         $prioridad 1;
  540.         foreach ($allSalas as $sala){
  541.             if ($sala->getIdReservation()== $nuevaSala->getIdReservation()){
  542.                 // No hay conflicto son de la misma reserva
  543.                 $tempBool = ($tempBool or false);
  544.             } else {
  545.                 if (!($sala->getIdLounge() == $nuevaSala->getIdLounge())) {
  546.                     // No hay conflicto no son la misma sala
  547.                     $tempBool = ($tempBool or false);
  548.                 } else {
  549.                     // Caso 1: F. inicio de $nuevaSala entre las feachas de $sala
  550.                     if (($nuevaSala->getDateStart()>$sala->getDateStart()) and ($nuevaSala->getDateStart()<$sala->getDateEnd())){
  551.                         $tempBool true;
  552.                         // Buscamos la prioridad que tiene el evento de la sala que colisiona para determinar la nueva prioridad del evento que se está creando
  553.                         $resTemp $em->getRepository(Reservation::class)->findOneById($sala->getIdReservation());
  554.                         if (($prioridad $resTemp->getPriority()) or ($prioridad == $resTemp->getPriority())){
  555.                             $prioridad $resTemp->getPriority() +1;
  556.                         }
  557.                     }
  558.                     // Caso 2: F. fin de $nuevaSala entre las feachas de $sala
  559.                     if (($nuevaSala->getDateEnd()>$sala->getDateStart()) and ($nuevaSala->getDateEnd()<$sala->getDateEnd())){
  560.                         $tempBool true;
  561.                         // Buscamos la prioridad que tiene el evento de la sala que colisiona para determinar la nueva prioridad del evento que se está creando
  562.                         $resTemp $em->getRepository(Reservation::class)->findOneById($sala->getIdReservation());
  563.                         if (($prioridad <= $resTemp->getPriority()) or ($prioridad == $resTemp->getPriority())){
  564.                             $prioridad $resTemp->getPriority() +1;
  565.                         }
  566.                     }
  567.                     // Caso 3: F. inicio de $sala entre las feachas de $nuevaSala
  568.                     if (($sala->getDateStart()>$nuevaSala->getDateStart()) and ($sala->getDateStart()<$nuevaSala->getDateEnd())){
  569.                         $tempBool true;
  570.                         // Buscamos la prioridad que tiene el evento de la sala que colisiona para determinar la nueva prioridad del evento que se está creando
  571.                         $resTemp $em->getRepository(Reservation::class)->findOneById($sala->getIdReservation());
  572.                         if (($prioridad <= $resTemp->getPriority()) or ($prioridad == $resTemp->getPriority())){
  573.                             $prioridad $resTemp->getPriority() +1;
  574.                         }
  575.                     }
  576.                     // Caso 4: F. fin de $sala entre las feachas de $nuevaSala
  577.                     if (($sala->getDateEnd()>$nuevaSala->getDateStart()) and ($sala->getDateEnd()<$nuevaSala->getDateEnd())){
  578.                         $tempBool true;
  579.                         // Buscamos la prioridad que tiene el evento de la sala que colisiona para determinar la nueva prioridad del evento que se está creando
  580.                         $resTemp $em->getRepository(Reservation::class)->findOneById($sala->getIdReservation());
  581.                         if (($prioridad <= $resTemp->getPriority()) or ($prioridad == $resTemp->getPriority())){
  582.                             $prioridad $resTemp->getPriority() +1;
  583.                         }
  584.                     }
  585.                     // Caso 5: fechas iguales
  586.                     if (($nuevaSala->getDateStart()==$sala->getDateStart()) or
  587.                         ($nuevaSala->getDateStart()==$sala->getDateEnd()) or
  588.                         ($nuevaSala->getDateEnd()==$sala->getDateStart()) or
  589.                         ($nuevaSala->getDateEnd()==$sala->getDateEnd())) {
  590.                         $tempBool true;
  591.                     }
  592.                 }
  593.             }
  594.         }
  595.         $res = array('bool' => $tempBool,'priority' => $prioridad);
  596.         return ($res);
  597.     }
  598.     public function CalculoPrioridad(EntityManagerInterface $em$reserva)
  599.     {
  600.         $listAllReservas $em->getRepository(Reservation::class)->findAll();
  601.         // logico para controlar el conflicto entre salas
  602.         $logSalasError false;
  603.         // valor original de la prioridad
  604.         $oldPriority $reserva->getPriority();
  605.         foreach ($listAllReservas as $resv)
  606.         {
  607.             $reservaSala explode(","$reserva->getSalas());          // Arreglo de salas para agregar
  608.             $resSala explode(","$resv->getSalas());                  // Arreglo de salas que ya estan en
  609.             foreach ($reservaSala as $item){
  610.                 if (in_array($item$resSala)){
  611.                     $logSalasError = ($logSalasError or true);          // Este logico indica si hay conflicto entre las salas
  612.                 }
  613.             }
  614.             if ((($reserva->getDateStart()==$resv->getDateStart()) or ($reserva->getDateStart() < $resv->getDateStart())) and
  615.                 ($resv->getDateStart() < $reserva->getDateEnd()) and ($resv->getStatus()=='Confirmed')) {
  616.                 if ($resv->getPriority() == $reserva->getPriority()){
  617.                     $reserva->setPriority($reserva->getPriority()-1);
  618.                 } else {
  619.                     if ($resv->getPriority() < $reserva->getPriority()){
  620.                         $reserva->setPriority($resv->getPriority()-1);
  621.                     } else {
  622.                         // ($resv->getPriority() > $reserva->getPriority())
  623.                         // No se debe cambiar la prioridad ya que esta por debajo de la reserva ya creada
  624.                     }
  625.                 }
  626.             }
  627.             if ((($resv->getDateStart()==$reserva->getDateStart()) or ($resv->getDateStart() < $reserva->getDateStart())) and
  628.                 ($reserva->getDateEnd() < $resv->getDateEnd()) and ($resv->getStatus()=='Confirmed')) {
  629.                 if ($resv->getPriority() == $reserva->getPriority()){
  630.                     $reserva->setPriority($reserva->getPriority()-1);
  631.                 } else {
  632.                     if ($resv->getPriority() < $reserva->getPriority()){
  633.                         $reserva->setPriority($resv->getPriority()-1);
  634.                     } else {
  635.                         // ($resv->getPriority() > $reserva->getPriority())
  636.                         // No se debe cambiar la prioridad ya que esta por debajo de la reserva ya creada
  637.                     }
  638.                 }
  639.             }
  640.             if ((($reserva->getDateStart()==$resv->getDateStart()) or ($reserva->getDateStart() < $resv->getDateStart())) and
  641.                 (($resv->getDateEnd()==$reserva->getDateEnd()) or ($resv->getDateEnd() < $reserva->getDateEnd())) and
  642.                 ($resv->getStatus()=='Confirmed')) {
  643.                 if ($resv->getPriority() == $reserva->getPriority()){
  644.                     $reserva->setPriority($reserva->getPriority()-1);
  645.                 } else {
  646.                     if ($resv->getPriority() < $reserva->getPriority()){
  647.                         $reserva->setPriority($resv->getPriority()-1);
  648.                     } else {
  649.                         // ($resv->getPriority() > $reserva->getPriority())
  650.                         // No se debe cambiar la prioridad ya que esta por debajo de la reserva ya creada
  651.                     }
  652.                 }
  653.             }
  654.             if ((($resv->getDateStart()==$reserva->getDateStart()) or ($resv->getDateStart()<$reserva->getDateStart())) and
  655.                 (($resv->getDateEnd()==$reserva->getDateEnd()) or ($resv->getDateEnd()<$reserva->getDateEnd())) and
  656.                 ($resv->getStatus()=='Confirmed')) {
  657.                 if ($resv->getPriority() == $reserva->getPriority()){
  658.                     $reserva->setPriority($reserva->getPriority()-1);
  659.                 } else {
  660.                     if ($resv->getPriority() < $reserva->getPriority()){
  661.                         $reserva->setPriority($resv->getPriority()-1);
  662.                     } else {
  663.                         // ($resv->getPriority() > $reserva->getPriority())
  664.                         // No se debe cambiar la prioridad ya que esta por debajo de la reserva ya creada
  665.                     }
  666.                 }
  667.             }
  668.         }
  669.         $priority $reserva->getPriority();
  670.         $reserva->setPriority($oldPriority);    // Se restablece el valor de origen de la prioridad
  671.         $data = array( 'prioridad' => $priority );
  672.         return $data;
  673.     }
  674.     public function NombreSalasPrecios(EntityManagerInterface $em)
  675.     {
  676.         $reservaLoungeDetails $em->getRepository(ReservationLoungeDetails::class)->findAll();
  677.         $data = array();
  678.         foreach ($reservaLoungeDetails as $res){ if (!empty($data['salas'])) { $data['salas'] = $data['salas'] . ',' $res->getName(); } else { $data['salas'] = $res->getName(); } }
  679.         $dataArray = array('-1');
  680.         foreach ($reservaLoungeDetails as $res){ array_push($dataArray,array($res->getId(), $res->getName())); }
  681.         unset($dataArray[0]);
  682.         $data['arraySalas'] = $dataArray;
  683.         $parameters = array();
  684.         $dql 'SELECT p
  685.                 FROM GreenPatioBundle:ReservationGpPrice p                         
  686.                 ORDER BY p.idService ASC ';
  687.         $query $em->createQuery($dql)->setParameters($parameters);
  688.         $reservaGpPrice $query->getResult();
  689.         foreach ($reservaGpPrice as $res){ if (!empty($data['precios'])) { $data['precios'] = $data['precios'] . ',' $res->getNameAndPrice(); } else { $data['precios'] = $res->getNameAndPrice(); } }
  690.         $dataArray = array('-1');
  691.         foreach ($reservaGpPrice as $res){ array_push($dataArray,array($res->getIdService(), $res->getNameAndPrice())); }
  692.         unset($dataArray[0]);
  693.         $data['arrayPrecios'] = $dataArray;
  694.         return $data;
  695.     }
  696. //    private function CalculosTotalesEdit($id)
  697. //    {
  698. //        $em = $this->getDoctrine()->getManager();
  699. //        $reservaLounges = $em->getRepository(ReservationLounge::class)->findByIdReservation($id);
  700. //        $reservaServices = $em->getRepository(ReservationService::class)->findByReservationId($id);
  701. //
  702. //        $data_iva = array(
  703. //            'iva' => 21,
  704. //            'ivaMontoVeintiUno' => 0,
  705. //            'ivaMontoDiez' => 0,
  706. //            'ivaMontoCero' => 0,
  707. //        );
  708. //
  709. //        $lounge = array(
  710. //            'neto' => 0,
  711. //            'sumSubT' => 0,
  712. //        ); // Acumula sumatoria de netos y sumantoria de subtotales
  713. //
  714. //        $service = array(
  715. //            'neto' => 0,
  716. //            'sumSubT' => 0,
  717. //        ); // Acumula sumatoria de netos y sumantoria de subtotales
  718. //
  719. //        $totales_neto_all = 0;
  720. //
  721. //        foreach ($reservaLounges as $item){
  722. //
  723. //            if (is_null($item->getServicePrice()) or empty($item->getServicePrice())){
  724. //                $subtotal = 0;
  725. //                $neto = 0;
  726. //                $subnetoMounting = 0;
  727. //                $subtotalLounge = 0;
  728. //                $subnetoRemoval = 0;
  729. //
  730. //            } else {
  731. //                if (!empty($item->getMountingPrice()) and ($item->getMountingPrice() != 0 )){
  732. //                    $subtotalMounting = $item->getMountingPrice() * 1.21;
  733. //                    $subnetoMounting = $item->getMountingPrice();
  734. //                } else {
  735. //                    $subtotalMounting = 0;
  736. //                    $subnetoMounting = 0;
  737. //                }
  738. //
  739. //                $subtotalLounge = $item->getServicePrice() * 1.21;
  740. //                $subneto = $item->getServicePrice();
  741. //
  742. //                if (!empty($item->getRemovalPrice()) and ($item->getRemovalPrice() != 0 )){
  743. //                    $subtotalRemoval = $item->getRemovalPrice() * 1.21;
  744. //                    $subnetoRemoval = $item->getRemovalPrice();
  745. //                } else {
  746. //                    $subtotalRemoval = 0;
  747. //                    $subnetoRemoval = 0;
  748. //                }
  749. //
  750. //                $subtotal = $subtotalMounting + $subtotalLounge + $subtotalRemoval;
  751. //                $neto = $subnetoMounting + $subneto + $subnetoRemoval;
  752. //
  753. //                // Se lleva a 2 decimales round($totales_neto_antes,2,PHP_ROUND_HALF_UP),
  754. //                $subtotal = round($subtotal,2,PHP_ROUND_HALF_UP);
  755. //                $neto = round($neto,2,PHP_ROUND_HALF_UP);
  756. //            }
  757. //
  758. //            // Acumula netos totales e IVA
  759. //            $totales_neto_all = $totales_neto_all + $neto;
  760. //            $data_iva['ivaMontoVeintiUno'] = $data_iva['ivaMontoVeintiUno'] + ($neto * 0.21);
  761. //            // Se lleva a 2 decimales round($totales_neto_antes,2,PHP_ROUND_HALF_UP)
  762. //            $totales_neto_all = round($totales_neto_all,2,PHP_ROUND_HALF_UP);
  763. //            $data_iva['ivaMontoVeintiUno'] = round($data_iva['ivaMontoVeintiUno'],2,PHP_ROUND_HALF_UP);
  764. //            // Acumula netos totales e IVA
  765. //
  766. //            $lounge['neto'] = $lounge['neto'] + $neto;
  767. //            $lounge['sumSubT'] = $lounge['sumSubT'] + $subtotal;
  768. ////            // Se lleva a 2 decimales round($totales_neto_antes,2,PHP_ROUND_HALF_UP)
  769. //            $lounge['neto'] = round($lounge['neto'],2,PHP_ROUND_HALF_UP);
  770. //            $lounge['sumSubT'] = round($lounge['sumSubT'],2,PHP_ROUND_HALF_UP);
  771. //        }
  772. //
  773. //        foreach ($reservaServices as $item){
  774. //            if (is_null($item->getPrice()) or empty($item->getPrice())){
  775. //                $subtotal = 0;
  776. //                $neto = 0;
  777. //                $subtotalService = 0;
  778. //
  779. //            } else {
  780. //                $subtotalService = $item->getPrice();
  781. //                $subneto = $item->getPrice();
  782. //
  783. //                // Commission
  784. //                if ($item->getOpCommission()=='1'){
  785. //                    $subtotalService = $subtotalService * (1 + ($item->getCommission()/100));
  786. //                    $subneto = $subneto  * (1 + ($item->getCommission()/100));
  787. //                } else {
  788. //                    $subtotalService = $subtotalService * (1 - ($item->getCommission()/100));
  789. //                    $subneto = $subneto * (1 - ($item->getCommission()/100));
  790. //                }
  791. //
  792. //                // Over
  793. //                if ($item->getOpOver()=='1'){
  794. //                    $subtotalService = $subtotalService + $item->getOver();
  795. //                    $subneto = $subneto + $item->getOver();
  796. //                } else {
  797. //                    $subtotalService = $subtotalService - $item->getOver();
  798. //                    $subneto = $subneto - $item->getOver();
  799. //                }
  800. //
  801. //                // IVA
  802. //                if ($item->getOpIva()=='1'){
  803. //                    $subtotalService = $subtotalService * (1 + ($item->getIva()/100));
  804. //                } else {
  805. //                    $subtotalService = $item->getPrice();
  806. //                    $subneto = ($subneto * 100) / (100 + $item->getIva());
  807. //                }
  808. //
  809. //                switch ($item->getServiceCatId()){
  810. //                    case 1: // Alojamiento
  811. //                        // el numero de noches $numNoches; precio unitario $subneto
  812. //                        $numNoches = (($item->getDateOutAt())->diff($item->getDateInAt()))->days;
  813. //                        // La personas no afectan este calculo
  814. //                        $subtotal = $subtotalService * $numNoches * $item->getUnits();
  815. //                        $subnetoUnit = $subneto;
  816. //                        $subneto = $subneto * $numNoches * $item->getUnits();
  817. //                        break;
  818. //
  819. //                    case 2: //Actividades
  820. //                        // El número de personas es considerado en el calculo
  821. //                        $pax = $item->getPax();
  822. //                        if (empty($pax) or $pax == "0") {
  823. //                            $pax = 1;
  824. //                        }
  825. //                        $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days + 1);
  826. //
  827. //                        if ($days > 1){
  828. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y'). ' - '.($item->getDateOutAt())->format('d/m/Y');
  829. //                        } else {
  830. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y');
  831. //                        }
  832. //
  833. //                        $subtotal = $subtotalService * $days * $item->getUnits();
  834. //                        $subnetoUnit = $subneto;
  835. //                        $subneto = $subneto * $days * $item->getUnits();
  836. //                        break;
  837. //
  838. //                    case 3: // AV
  839. //                        $pax = $item->getPax();
  840. //                        if (empty($pax) or $pax == "0") {
  841. //                            $pax = 1;
  842. //                        }
  843. //
  844. //                        $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days + 1);
  845. //                        if ($days > 1){
  846. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y'). ' - '.($item->getDateOutAt())->format('d/m/Y');
  847. //                        } else {
  848. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y');
  849. //                        }
  850. //
  851. //                        $unitsServ = $item->getUnits();
  852. //                        if (empty($unitsServ) or $unitsServ == "0") {
  853. //                            $unitsServ = 1;
  854. //                        }
  855. //
  856. //                        $subtotal = $subtotalService * $days * $unitsServ * $pax;
  857. //                        $subnetoUnit = $subneto;
  858. //                        $subneto = $subneto * $days * $unitsServ * $pax;
  859. //                        break;
  860. //
  861. //                    case 4: //Creative
  862. //                        $pax = $item->getPax();
  863. //                        if (empty($pax) or $pax == "0") {
  864. //                            $pax = 1;
  865. //                        }
  866. //
  867. //                        $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days + 1);
  868. //                        if ($days > 1){
  869. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y'). ' - '.($item->getDateOutAt())->format('d/m/Y');
  870. //                        } else {
  871. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y');
  872. //                        }
  873. //
  874. //                        $unitsServ = $item->getUnits();
  875. //                        if (empty($unitsServ) or $unitsServ == "0") {
  876. //                            $unitsServ = 1;
  877. //                        }
  878. //
  879. //                        $subtotal = $subtotalService * $days * $unitsServ * $pax;
  880. //                        $subnetoUnit = $subneto;
  881. //                        $subneto = $subneto * $days * $unitsServ * $pax;
  882. //                        break;
  883. //
  884. //                    case 5: //Cruise
  885. //                        $pax = $item->getPax();
  886. //                        if (empty($pax) or $pax == "0") {
  887. //                            $pax = 1;
  888. //                        }
  889. //
  890. //                        $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days);
  891. //                        if ($days > 1){
  892. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y'). ' - '.($item->getDateOutAt())->format('d/m/Y');
  893. //                        } else {
  894. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y');
  895. //                        }
  896. //
  897. //                        $unitsServ = $item->getUnits();
  898. //                        if (empty($unitsServ) or $unitsServ == "0") {
  899. //                            $unitsServ = 1;
  900. //                        }
  901. //
  902. //                        $subtotal = $subtotalService * $days * $unitsServ * $pax;
  903. //                        $subnetoUnit = $subneto;
  904. //                        $subneto = $subneto * $days * $unitsServ * $pax;
  905. //                        break;
  906. //
  907. //                    case 6: //Entertaiment
  908. //                        $pax = $item->getPax();
  909. //                        if (empty($pax) or $pax == "0") {
  910. //                            $pax = 1;
  911. //                        }
  912. //
  913. //                        $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days + 1);
  914. //                        if ($days > 1){
  915. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y'). ' - '.($item->getDateOutAt())->format('d/m/Y');
  916. //                        } else {
  917. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y');
  918. //                        }
  919. //
  920. //                        $unitsServ = $item->getUnits();
  921. //                        if (empty($unitsServ) or $unitsServ == "0") {
  922. //                            $unitsServ = 1;
  923. //                        }
  924. //
  925. //                        $subtotal = $subtotalService * $days * $unitsServ * $pax;
  926. //                        $subnetoUnit = $subneto;
  927. //                        $subneto = $subneto * $days * $unitsServ * $pax;
  928. //                        break;
  929. //
  930. //                    case 7: // Gifts
  931. //                        $pax = $item->getPax();
  932. //                        if (empty($pax) or $pax == "0") {
  933. //                            $pax = 1;
  934. //                        }
  935. //
  936. ////                        $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days + 1);
  937. //                        $days = 1;
  938. //                        if ($days > 1){
  939. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y'). ' - '.($item->getDateOutAt())->format('d/m/Y');
  940. //                        } else {
  941. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y');
  942. //                        }
  943. //
  944. //                        $unitsServ = $item->getUnits();
  945. //                        if (empty($unitsServ) or $unitsServ == "0") {
  946. //                            $unitsServ = 1;
  947. //                        }
  948. //
  949. //                        $subtotal = $subtotalService * $days * $unitsServ * $pax;
  950. //                        $subnetoUnit = $subneto;
  951. //                        $subneto = $subneto * $days * $unitsServ * $pax;
  952. //                        break;
  953. //
  954. //                    case 8: //Guide
  955. //                        $pax = $item->getPax();
  956. //                        if (empty($pax) or $pax == "0") {
  957. //                            $pax = 1;
  958. //                        }
  959. //
  960. //                        $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days + 1);
  961. //                        if ($days > 1){
  962. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y'). ' - '.($item->getDateOutAt())->format('d/m/Y');
  963. //                        } else {
  964. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y');
  965. //                        }
  966. //
  967. //                        $unitsServ = $item->getUnits();
  968. //                        if (empty($unitsServ) or $unitsServ == "0") {
  969. //                            $unitsServ = 1;
  970. //                        }
  971. //
  972. //                        $subtotal = $subtotalService * $days * $unitsServ * $pax;
  973. //                        $subnetoUnit = $subneto;
  974. //                        $subneto = $subneto * $days * $unitsServ * $pax;
  975. //                        break;
  976. //
  977. //                    case 9: //Itineraries
  978. //                        $pax = $item->getPax();
  979. //                        if (empty($pax) or $pax == "0") {
  980. //                            $pax = 1;
  981. //                        }
  982. //
  983. //                        $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days + 1);
  984. //                        if ($days > 1){
  985. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y'). ' - '.($item->getDateOutAt())->format('d/m/Y');
  986. //                        } else {
  987. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y');
  988. //                        }
  989. //
  990. //                        $unitsServ = $item->getUnits();
  991. //                        if (empty($unitsServ) or $unitsServ == "0") {
  992. //                            $unitsServ = 1;
  993. //                        }
  994. //
  995. //                        $subtotal = $subtotalService * $days * $unitsServ * $pax;
  996. //                        $subnetoUnit = $subneto;
  997. //                        $subneto = $subneto * $days * $unitsServ * $pax;
  998. //                        break;
  999. //
  1000. //                    case 10: //Lounge  -- No Aplica
  1001. //                        break;
  1002. //
  1003. //                    case 11: //Menu
  1004. //                        $pax = $item->getPax();
  1005. //                        if (empty($pax) or $pax == "0") {
  1006. //                            $pax = 1;
  1007. //                        }
  1008. //
  1009. //                        $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days + 1);
  1010. //                        if ($days > 1){
  1011. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y'). ' - '.($item->getDateOutAt())->format('d/m/Y');
  1012. //                        } else {
  1013. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y');
  1014. //                        }
  1015. //
  1016. //                        $unitsServ = $item->getUnits();
  1017. //                        if (empty($unitsServ) or $unitsServ == "0") {
  1018. //                            $unitsServ = 1;
  1019. //                        }
  1020. //
  1021. //                        $subtotal = $subtotalService * $days * $unitsServ * $pax;
  1022. //                        $subnetoUnit = $subneto;
  1023. //                        $subneto = $subneto * $days * $unitsServ * $pax;
  1024. //                        break;
  1025. //
  1026. //                    case 12: //Others
  1027. //                        $pax = $item->getPax();
  1028. //                        if (empty($pax) or $pax == "0") {
  1029. //                            $pax = 1;
  1030. //                        }
  1031. //
  1032. //                        $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days + 1);
  1033. //                        if ($days > 1){
  1034. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y'). ' - '.($item->getDateOutAt())->format('d/m/Y');
  1035. //                        } else {
  1036. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y');
  1037. //                        }
  1038. //
  1039. //                        $unitsServ = $item->getUnits();
  1040. //                        if (empty($unitsServ) or $unitsServ == "0") {
  1041. //                            $unitsServ = 1;
  1042. //                        }
  1043. //
  1044. //                        $subtotal = $subtotalService * $days * $unitsServ * $pax;
  1045. //                        $subnetoUnit = $subneto;
  1046. //                        $subneto = $subneto * $days * $unitsServ * $pax;
  1047. //                        break;
  1048. //
  1049. //                    case 13: //Transport
  1050. //                        $pax = $item->getPax();
  1051. //                        if (empty($pax) or $pax == "0") {
  1052. //                            $pax = 1;
  1053. //                        }
  1054. //
  1055. //                        $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days + 1);
  1056. //                        if ($days > 1){
  1057. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y'). ' - '.($item->getDateOutAt())->format('d/m/Y');
  1058. //                        } else {
  1059. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y');
  1060. //                        }
  1061. //
  1062. //                        $unitsServ = $item->getUnits();
  1063. //                        if (empty($unitsServ) or $unitsServ == "0") {
  1064. //                            $unitsServ = 1;
  1065. //                        }
  1066. //
  1067. //                        $subtotal = $subtotalService * $days * $unitsServ * $pax;
  1068. //                        $subnetoUnit = $subneto;
  1069. //                        $subneto = $subneto * $days * $unitsServ * $pax;
  1070. //                        break;
  1071. //
  1072. //                    case 14: //Technology
  1073. //                        $pax = $item->getPax();
  1074. //                        if (empty($pax) or $pax == "0") {
  1075. //                            $pax = 1;
  1076. //                        }
  1077. //
  1078. ////                        $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days + 1);
  1079. //                        $days = 1;
  1080. //                        $dateServ = ($item->getDateInAt())->format('d/m/Y'). ' - '.($item->getDateOutAt())->format('d/m/Y');
  1081. //
  1082. //                        $unitsServ = $item->getUnits();
  1083. //                        if (empty($unitsServ) or $unitsServ == "0") {
  1084. //                            $unitsServ = 1;
  1085. //                        }
  1086. //
  1087. //                        $subtotal = $subtotalService * $days * $unitsServ * $pax;
  1088. //                        $subnetoUnit = $subneto;
  1089. //                        $subneto = $subneto * $days * $unitsServ * $pax;
  1090. //                        break;
  1091. //
  1092. //                    case 15: //Assisstant
  1093. //                        $pax = $item->getPax();
  1094. //                        if (empty($pax) or $pax == "0") {
  1095. //                            $pax = 1;
  1096. //                        }
  1097. //                        $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days + 1);
  1098. //                        $unitsServ = $item->getUnits();
  1099. //                        if (empty($unitsServ) or $unitsServ == "0") {
  1100. //                            $unitsServ = 1;
  1101. //                        }
  1102. //                        $subtotal = $subtotalService * $days * $unitsServ * $pax;
  1103. //                        $subnetoUnit = $subneto;
  1104. //                        $subneto = $subneto * $days * $unitsServ * $pax;
  1105. //                        break;
  1106. //
  1107. //                    case 16: //DDR
  1108. //                        $pax = $item->getPax();
  1109. //                        if (empty($pax) or $pax == "0") {
  1110. //                            $pax = 1;
  1111. //                        }
  1112. //
  1113. //                        $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days + 1);
  1114. //                        if ($days > 1){
  1115. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y'). ' - '.($item->getDateOutAt())->format('d/m/Y');
  1116. //                        } else {
  1117. //                            $dateServ = ($item->getDateInAt())->format('d/m/Y');
  1118. //                        }
  1119. //
  1120. //                        $unitsServ = $item->getUnits();
  1121. //                        if (empty($unitsServ) or $unitsServ == "0") {
  1122. //                            $unitsServ = 1;
  1123. //                        }
  1124. //
  1125. //                        $subtotal = $subtotalService * $days * $unitsServ * $pax;
  1126. //                        $subnetoUnit = $subneto;
  1127. //                        $subneto = $subneto * $days * $unitsServ * $pax;
  1128. //                        break;
  1129. //
  1130. //                    default:
  1131. //                        $pax = $item->getPax();
  1132. //                        if (empty($pax) or $pax == "0") { $pax = 1; }
  1133. //                        $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days + 1);
  1134. //                        $unitsServ = $item->getUnits();
  1135. //                        if (empty($unitsServ) or $unitsServ == "0") { $unitsServ = 1; }
  1136. //                        $subtotal = $subtotalService * $days * $unitsServ * $pax;
  1137. //                        $subnetoUnit = $subneto;
  1138. //                        $subneto = $subneto * $days * $unitsServ * $pax;
  1139. //                        break;
  1140. //                }
  1141. //
  1142. //                // Se lleva a 2 decimales round($totales_neto_antes,2,PHP_ROUND_HALF_UP),
  1143. //                $subtotal = round($subtotal,2,PHP_ROUND_HALF_UP);
  1144. //                $neto = round($subneto,2,PHP_ROUND_HALF_UP);
  1145. //            }
  1146. //
  1147. //            switch ($item->getIva()){
  1148. //                // Acumula IVA
  1149. //                case 21:
  1150. //                    $data_iva['ivaMontoVeintiUno'] = $data_iva['ivaMontoVeintiUno'] + ($neto * ($item->getIva()/100));
  1151. //                    break;
  1152. //
  1153. //                case 10:
  1154. //                    $data_iva['ivaMontoDiez'] = $data_iva['ivaMontoDiez'] + ($neto * ($item->getIva()/100));
  1155. //                    break;
  1156. //
  1157. //                case 0:
  1158. //                    break;
  1159. //
  1160. //                default:
  1161. //                    break;
  1162. //
  1163. //            }
  1164. //
  1165. //            $totales_neto_all = $totales_neto_all + $neto;
  1166. //
  1167. //            // Se lleva a 2 decimales round($totales_neto_antes,2,PHP_ROUND_HALF_UP)
  1168. //            $totales_neto_all = round($totales_neto_all,2,PHP_ROUND_HALF_UP);
  1169. //            $data_iva['ivaMontoVeintiUno'] = round($data_iva['ivaMontoVeintiUno'],2,PHP_ROUND_HALF_UP);
  1170. //            $data_iva['ivaMontoDiez'] = round($data_iva['ivaMontoDiez'],2,PHP_ROUND_HALF_UP);
  1171. //            // Acumula netos totales e IVA
  1172. //
  1173. //            $service['neto'] = $service['neto'] + $neto;
  1174. //            $service['sumSubT'] = $service['sumSubT'] + $subtotal;
  1175. //            // Se lleva a 2 decimales round($totales_neto_antes,2,PHP_ROUND_HALF_UP)
  1176. //            $service['neto'] = round($service['neto'],2,PHP_ROUND_HALF_UP);
  1177. //            $service['sumSubT'] = round($service['sumSubT'],2,PHP_ROUND_HALF_UP);
  1178. //
  1179. //
  1180. ////            $i++;
  1181. //
  1182. //        }
  1183. //
  1184. //        $data = array(
  1185. //            'totales_global_con_iva' => $lounge['sumSubT'],
  1186. //            'totales_global_iva' => $lounge['sumSubT'] - $lounge['neto'],
  1187. //            'totales_global_neto' => $lounge['neto'],
  1188. //            'totales_global_servicios_neto' => $service['neto'],
  1189. //            'totales_global_servicios_con_iva' => $service['sumSubT'],
  1190. //            'totales_global_servicios_iva' => $service['sumSubT'] - $service['neto'],
  1191. //            'sumatoria_totales_global_con_iva' => $lounge['sumSubT'] + $service['sumSubT'],
  1192. //            'sumatoria_totales_global_neto' => $lounge['neto'] + $service['neto'],
  1193. //            'sumatoria_totales_global_iva' => $lounge['sumSubT'] + $service['sumSubT'] - $lounge['neto'] - $service['neto'],
  1194. //        );
  1195. //
  1196. //        return $data;
  1197. //    }
  1198.     private function CalculosTotalesEditSimple($id)
  1199.     {
  1200.         $em $this->getDoctrine()->getManager();
  1201.         $reservaLounges $em->getRepository(ReservationLoungeSimple::class)->findByIdReservation($id);
  1202.         $reservaServices $em->getRepository(ReservationService::class)->findByReservationId($id);
  1203.         $data_iva = array(
  1204.             'iva' => 21,
  1205.             'ivaMontoVeintiUno' => 0,
  1206.             'ivaMontoDiez' => 0,
  1207.             'ivaMontoCero' => 0,
  1208.         );
  1209.         $lounge = array(
  1210.             'neto' => 0,
  1211.             'sumSubT' => 0,
  1212.         ); // Acumula sumatoria de netos y sumantoria de subtotales
  1213.         $service = array(
  1214.             'neto' => 0,
  1215.             'sumSubT' => 0,
  1216.             'sumIvas' => 0,
  1217.         ); // Acumula sumatoria de netos y sumantoria de subtotales
  1218.         $totales_neto_all 0;
  1219.         foreach ($reservaLounges as $item){
  1220.             // Si el iva es vacio se asume 21
  1221.             if(empty($item->getIva()) && !is_numeric($item->getIva())){
  1222.                 $item->setIva(21);
  1223.                 $this->addFlash('mensajereservationerror''Revisa el IVA de la sala: '.$item->getLoungeName());
  1224.             }
  1225.             if (is_null($item->getServicePrice()) or empty($item->getServicePrice())){
  1226.                 $subtotal 0;
  1227.                 $neto 0;
  1228.                 $subtotalLounge 0;
  1229.             } else {
  1230.                 $subtotalLounge $item->getServicePrice() * (1+ ($item->getIva()/100));
  1231.                 $subneto $item->getServicePrice();
  1232.                 $subtotal $subtotalLounge;
  1233.                 $neto $subneto;
  1234.                 // Se lleva a 2 decimales round($totales_neto_antes,2,PHP_ROUND_HALF_UP),
  1235.                 $subtotal round($subtotal,2,PHP_ROUND_HALF_UP);
  1236.                 $neto round($neto,2,PHP_ROUND_HALF_UP);
  1237.             }
  1238.             // Acumula netos totales e IVA
  1239.             $totales_neto_all $totales_neto_all $neto;
  1240.             $data_iva['ivaMontoVeintiUno'] = $data_iva['ivaMontoVeintiUno'] + ($neto * ($item->getIva()/100));
  1241.             // Se lleva a 2 decimales round($totales_neto_antes,2,PHP_ROUND_HALF_UP)
  1242.             $totales_neto_all round($totales_neto_all,2,PHP_ROUND_HALF_UP);
  1243.             $data_iva['ivaMontoVeintiUno'] = round($data_iva['ivaMontoVeintiUno'],2,PHP_ROUND_HALF_UP);
  1244.             // Acumula netos totales e IVA
  1245.             $lounge['neto'] = $lounge['neto'] + $neto;
  1246.             $lounge['sumSubT'] = $lounge['sumSubT'] + $subtotal;
  1247. //            // Se lleva a 2 decimales round($totales_neto_antes,2,PHP_ROUND_HALF_UP)
  1248.             $lounge['neto'] = round($lounge['neto'],2,PHP_ROUND_HALF_UP);
  1249.             $lounge['sumSubT'] = round($lounge['sumSubT'],2,PHP_ROUND_HALF_UP);
  1250.         }
  1251.         foreach ($reservaServices as $item){
  1252.                 $subtotal 0$neto 0$subtotalService 0;
  1253.             if (!is_null($item->getPrice()) and !empty($item->getPrice())){
  1254.                 $subtotalService $item->getPrice();
  1255.                 $subneto $item->getPrice();
  1256.                 // Commission
  1257.                 if ($item->getOpCommission()=='1'){
  1258.                     $subtotalService = (float)$subtotalService * (+ ((float)$item->getCommission()/100));
  1259.                     $subneto = (float)$subneto  * (+ ($item->getCommission()/100));
  1260.                 } else {
  1261.                     $subtotalService = (float)$subtotalService * (- ((float)$item->getCommission()/100));
  1262.                     $subneto = (float)$subneto * (- ($item->getCommission()/100));
  1263.                 }
  1264.                 switch ($item->getServiceCatId()){
  1265.                     case 1// Alojamiento
  1266.                         // el numero de noches $numNoches; precio unitario $subneto
  1267.                         $numNoches = (($item->getDateOutAt())->diff($item->getDateInAt()))->days;
  1268.                         // La personas no afectan este calculo
  1269.                         $subtotal $subtotalService $numNoches $item->getUnits();
  1270.                         $subneto $subneto $numNoches $item->getUnits();
  1271.                         break;
  1272.                     case 2//Actividades
  1273.                         // El número de personas es considerado en el calculo
  1274.                         $pax $item->getPax();
  1275.                         if (empty($pax) or $pax == "0") { $pax 1; }
  1276.                         $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days 1);
  1277.                         $subtotal $subtotalService $days $item->getUnits();
  1278.                         $subneto $subneto $days $item->getUnits();
  1279.                         break;
  1280.                     case 3// AV
  1281.                         $pax $item->getPax();
  1282.                         if (empty($pax) or $pax == "0") { $pax 1; }
  1283.                         $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days 1);
  1284.                         $unitsServ $item->getUnits();
  1285.                         if (empty($unitsServ) or $unitsServ == "0") { $unitsServ 1; }
  1286.                         $subtotal $subtotalService $days $unitsServ $pax;
  1287.                         $subneto $subneto $days $unitsServ $pax;
  1288.                         break;
  1289.                     case 4//Creative
  1290.                         $pax $item->getPax();
  1291.                         if (empty($pax) or $pax == "0") { $pax 1; }
  1292.                         $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days 1);
  1293.                         $unitsServ $item->getUnits();
  1294.                         if (empty($unitsServ) or $unitsServ == "0") { $unitsServ 1; }
  1295.                         $subtotal $subtotalService $days $unitsServ $pax;
  1296.                         $subneto $subneto $days $unitsServ $pax;
  1297.                         break;
  1298.                     case 5//Cruise
  1299.                         $pax $item->getPax();
  1300.                         if (empty($pax) or $pax == "0") { $pax 1; }
  1301.                         $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days);
  1302.                         $unitsServ $item->getUnits();
  1303.                         if (empty($unitsServ) or $unitsServ == "0") { $unitsServ 1; }
  1304.                         $subtotal $subtotalService $days $unitsServ $pax;
  1305.                         $subneto $subneto $days $unitsServ $pax;
  1306.                         break;
  1307.                     case 6//Entertaiment
  1308.                         $pax $item->getPax();
  1309.                         if (empty($pax) or $pax == "0") { $pax 1; }
  1310.                         $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days 1);
  1311.                         $unitsServ $item->getUnits();
  1312.                         if (empty($unitsServ) or $unitsServ == "0") { $unitsServ 1; }
  1313.                         $subtotal $subtotalService $days $unitsServ $pax;
  1314.                         $subneto $subneto $days $unitsServ $pax;
  1315.                         break;
  1316.                     case 7// Gifts
  1317.                         $pax $item->getPax();
  1318.                         if (empty($pax) or $pax == "0") { $pax 1; }
  1319.                         $days 1;
  1320.                         $unitsServ $item->getUnits();
  1321.                         if (empty($unitsServ) or $unitsServ == "0") { $unitsServ 1; }
  1322.                         $subtotal $subtotalService $days $unitsServ $pax;
  1323.                         $subneto $subneto $days $unitsServ $pax;
  1324.                         break;
  1325.                     case 8//Guide
  1326.                         $pax $item->getPax();
  1327.                         if (empty($pax) or $pax == "0") { $pax 1; }
  1328.                         $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days 1);
  1329.                         $unitsServ $item->getUnits();
  1330.                         if (empty($unitsServ) or $unitsServ == "0") { $unitsServ 1; }
  1331.                         $subtotal $subtotalService $days $unitsServ $pax;
  1332.                         $subneto $subneto $days $unitsServ $pax;
  1333.                         break;
  1334.                     case 9//Itineraries
  1335.                         $pax $item->getPax();
  1336.                         if (empty($pax) or $pax == "0") { $pax 1; }
  1337.                         $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days 1);
  1338.                         $unitsServ $item->getUnits();
  1339.                         if (empty($unitsServ) or $unitsServ == "0") { $unitsServ 1; }
  1340.                         $subtotal $subtotalService $days $unitsServ $pax;
  1341.                         $subneto $subneto $days $unitsServ $pax;
  1342.                         break;
  1343.                     case 10: break;     //Lounge  -- No Aplica
  1344.                     case 11//Menu
  1345.                         $pax $item->getPax();
  1346.                         if (empty($pax) or $pax == "0") { $pax 1; }
  1347.                         $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days 1);
  1348.                         $unitsServ $item->getUnits();
  1349.                         if (empty($unitsServ) or $unitsServ == "0") { $unitsServ 1; }
  1350.                         $subtotal $subtotalService $days $unitsServ $pax;
  1351.                         $subneto $subneto $days $unitsServ $pax;
  1352.                         break;
  1353.                     case 12//Others
  1354.                         $pax $item->getPax();
  1355.                         if (empty($pax) or $pax == "0") { $pax 1; }
  1356.                         $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days 1);
  1357.                         $unitsServ $item->getUnits();
  1358.                         if (empty($unitsServ) or $unitsServ == "0") { $unitsServ 1; }
  1359.                         $subtotal $subtotalService $days $unitsServ $pax;
  1360.                         $subneto $subneto $days $unitsServ $pax;
  1361.                         break;
  1362.                     case 13//Transport
  1363.                         $pax $item->getPax();
  1364.                         if (empty($pax) or $pax == "0") { $pax 1; }
  1365.                         $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days 1);
  1366.                         $unitsServ $item->getUnits();
  1367.                         if (empty($unitsServ) or $unitsServ == "0") { $unitsServ 1; }
  1368.                         $subtotal $subtotalService $days $unitsServ $pax;
  1369.                         $subneto $subneto $days $unitsServ $pax;
  1370.                         break;
  1371.                     case 14//Technology
  1372.                         $pax $item->getPax();
  1373.                         if (empty($pax) or $pax == "0") { $pax 1; }
  1374.                         $days 1;
  1375.                         $unitsServ $item->getUnits();
  1376.                         if (empty($unitsServ) or $unitsServ == "0") { $unitsServ 1; }
  1377.                         $subtotal $subtotalService $days $unitsServ $pax;
  1378.                         $subneto $subneto $days $unitsServ $pax;
  1379.                         break;
  1380.                     case 15//Assisstant
  1381.                         $pax $item->getPax();
  1382.                         if (empty($pax) or $pax == "0") { $pax 1; }
  1383.                         $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days 1);
  1384.                         $unitsServ $item->getUnits();
  1385.                         if (empty($unitsServ) or $unitsServ == "0") { $unitsServ 1; }
  1386.                         $subtotalService $subtotalService $days $unitsServ $pax;
  1387.                         $subneto $subneto $days $unitsServ $pax;
  1388.                         break;
  1389.                     case 16//DDR
  1390.                         $pax $item->getPax();
  1391.                         if (empty($pax) or $pax == "0") { $pax 1; }
  1392.                         $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days 1);
  1393.                         $unitsServ $item->getUnits();
  1394.                         if (empty($unitsServ) or $unitsServ == "0") { $unitsServ 1; }
  1395.                         $subtotal $subtotalService $days $unitsServ $pax;
  1396.                         $subneto $subneto $days $unitsServ $pax;
  1397.                         break;
  1398.                     default:
  1399.                         $pax $item->getPax();
  1400.                         if (empty($pax) or $pax == "0") { $pax 1; }
  1401.                         $days = ((($item->getDateOutAt())->diff($item->getDateInAt()))->days 1);
  1402.                         $unitsServ $item->getUnits();
  1403.                         if (empty($unitsServ) or $unitsServ == "0") { $unitsServ 1; }
  1404.                         $subtotalService $subtotalService $days $unitsServ $pax;
  1405.                         $subneto $subneto $days $unitsServ $pax;
  1406.                         break;
  1407.                 }
  1408.                 // Over
  1409.                 if ($item->getOpOver()=='1'){
  1410.                     $subtotalService $subtotalService $item->getOver();
  1411.                     $subneto $subneto $item->getOver();
  1412.                 } else {
  1413.                     $subtotalService $subtotalService $item->getOver();
  1414.                     $subneto $subneto $item->getOver();
  1415.                 }
  1416.                 // IVA
  1417.                 if ($item->getOpIva()=='1'){
  1418.                     $subtotalService = ($subtotalService * (+ ($item->getIva()/100)));
  1419.                 } else {
  1420.                     $subtotalService $item->getPrice();
  1421.                     $subneto = ($subneto 100) / (100 $item->getIva());
  1422.                 }
  1423.                 $subtotal += $subtotalService;
  1424.                 // Se lleva a 2 decimales round($totales_neto_antes,2,PHP_ROUND_HALF_UP),
  1425.                 $subtotal round($subtotal,2,PHP_ROUND_HALF_UP);
  1426.                 $neto round($subneto,2,PHP_ROUND_HALF_UP);
  1427.             }
  1428.             // Iva vacio se calcula al 21%
  1429.             $ivaServ = (empty($item->getIva()) && !is_numeric($item->getIva())) ? ($neto * (21/100)) : ($neto * ($item->getIva()/100));
  1430.             switch ($item->getIva()){
  1431.                 // Acumula IVA
  1432.                 case 21$data_iva['ivaMontoVeintiUno'] += $ivaServ; break;
  1433.                 case 10$data_iva['ivaMontoDiez'] += $ivaServ; break;
  1434.                 case 0: break;
  1435.                 default: $data_iva['ivaMontoVeintiUno'] += $ivaServ; break;
  1436.             }
  1437.             $totales_neto_all += $neto;
  1438.             // Se lleva a 2 decimales round($totales_neto_antes,2,PHP_ROUND_HALF_UP)
  1439.             $totales_neto_all round($totales_neto_all,2,PHP_ROUND_HALF_UP);
  1440.             $data_iva['ivaMontoVeintiUno'] = round($data_iva['ivaMontoVeintiUno'],2,PHP_ROUND_HALF_UP);
  1441.             $data_iva['ivaMontoDiez'] = round($data_iva['ivaMontoDiez'],2,PHP_ROUND_HALF_UP);
  1442.             // Acumula netos totales e IVA
  1443.             $service['neto'] += $neto;
  1444.             $service['sumSubT'] += $subtotalService;
  1445.             $service['sumIvas'] += $ivaServ;
  1446.             // Se lleva a 2 decimales round($totales_neto_antes,2,PHP_ROUND_HALF_UP)
  1447.             $service['neto'] = round($service['neto'],2,PHP_ROUND_HALF_UP);
  1448.             $service['sumSubT'] = round($service['sumSubT'],2,PHP_ROUND_HALF_UP);
  1449.         }
  1450.         $data = array(
  1451.             'totales_global_con_iva' => $lounge['sumSubT'],
  1452.             'totales_global_iva' => $lounge['sumSubT'] - $lounge['neto'],
  1453.             'totales_global_neto' => $lounge['neto'],
  1454.             'totales_global_servicios_neto' => $service['neto'],
  1455.             'totales_global_servicios_con_iva' => $service['sumSubT'],
  1456.             'totales_global_servicios_iva' => $service['sumSubT'] - $service['neto'],
  1457.             'sumatoria_totales_global_con_iva' => $lounge['sumSubT'] + $service['sumSubT'],
  1458.             'sumatoria_totales_global_neto' => $lounge['neto'] + $service['neto'],
  1459.             'sumatoria_totales_global_iva' => $lounge['sumSubT'] + $service['sumSubT'] - $lounge['neto'] - $service['neto'],
  1460.         );
  1461.         return $data;
  1462.     }
  1463.     /**
  1464.      * @Route("/", name="reservations_greenpatio")
  1465.      */
  1466.     public function calendarReservationAction(Request $request) {
  1467.         // Enviar correos a los agentes de las reservas que se deban Cotizar
  1468.         $this->notificacionReservasPorCotizar();
  1469.         // Enviar correos a los agentes de las reservas que tienen depositos pendientes por recibir
  1470.         $this->notificacionReservasPendientesDelSegundoDeposito();
  1471.         $session = new Session();
  1472.         $token=$session->get('tokenGoogleCalendar');
  1473.         if (!is_null($token)) {
  1474.             $this->googleCalendar->setAccessToken($token);
  1475.             $connectGoogle "1";
  1476.         }else{
  1477.             $connectGoogle "0";
  1478.         }
  1479.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  1480.         $user_id $user_logueado->getId();
  1481.         $wnotes = new WidgetNotes();
  1482.         $wnotes->setDateAt(new \DateTime("now"));
  1483.         $form $this->createWidgetNotesCreateForm($wnotes);
  1484.         return $this->render('MDS/GreenPatioBundle/reservations/calendar-reservations.html.twig',
  1485.             array(
  1486.                 'form' => $form->createView(),
  1487.                 'user'=> $user_id,
  1488.                 'connectGoogle' => $connectGoogle,
  1489.             )
  1490.         );
  1491.     }
  1492.     private function createWidgetNotesCreateForm(WidgetNotes $entity)
  1493.     {
  1494.         $form $this->createForm(WidgetNotesType::class, $entity, array(
  1495.             'action' => $this->generateUrl('widget_notes_calendar_create'),
  1496.             'method' => 'POST'
  1497.         ));
  1498.         return $form;
  1499.     }
  1500. //    private function createWidgetNotesEditForm(WidgetNotes $entity, $id)
  1501. //    {
  1502. //        $form = $this->createForm(WidgetNotesType::class, $entity, array(
  1503. //            'action' => $this->generateUrl('widget_notes_edit',
  1504. //                array(
  1505. //                    'id' => $id
  1506. //                )),
  1507. //            'method' => 'PUT'
  1508. //        ));
  1509. //
  1510. //        return $form;
  1511. //    }
  1512.     /**
  1513.      * @Route("/widget/notes/calendar/create/", name="widget_notes_calendar_create")
  1514.      */
  1515.     public function addNotesAction(EntityManagerInterface $emRequest $requestLoggerInterface $logger)
  1516.     {
  1517.         $notes $em->getRepository(WidgetNotes::class)->findAll();
  1518.         $wnotes = new WidgetNotes();
  1519.         $form $this->createWidgetNotesCreateForm($wnotes);
  1520.         $form->handleRequest($request);
  1521.         $forAgent $form->get('forAgent')->getData();
  1522.         if(!is_null($forAgent)){ $wnotes->setForAgent($forAgent->getId()); }
  1523.         if($form->isValid())
  1524.         {
  1525.             /* Obtengo usuario logueado */
  1526.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  1527.             $user_id $user_logueado->getId();
  1528.             $wnotes->setCreatedId($user_id);
  1529.             $wnotes->setUpdatedId($user_id);
  1530.             /* Gestión de eventos en Log */
  1531.             $user_lastname $user_logueado->getLastname();
  1532.             $user_name $user_logueado->getName();
  1533.             $user_email $user_logueado->getEmail();
  1534.             $user_rol $user_logueado->getRoles();
  1535.             $event_url $request->getPathInfo();
  1536.             $event_complete $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
  1537.             try{
  1538.                 $em->persist($wnotes);
  1539.                 $em->flush();
  1540.                 $event 'The Note has been created succesfully.';
  1541.                 $successMessage $this->translator->trans($event);
  1542.                 $this->addFlash('mensaje'$successMessage);
  1543.                 $logger->info($event_complete.' | '.$event);
  1544.             } catch (\Exception $e){
  1545.                 $event 'An error occurred: '.$e->getMessage();
  1546.                 /* Para el log */
  1547.                 $logger->error($event_complete.' | '.$event);
  1548.                 /* Para el usuario */
  1549.                 $errorMessage $this->translator->trans($event);
  1550.                 $this->addFlash('mensajeerror'$errorMessage);
  1551.             }
  1552.             /* Fin Gestión de eventos en Log */
  1553.         } else {
  1554.             $errorMessage $this->translator->trans('Error, some fields are empty');
  1555.             $this->addFlash('mensajeerror'$errorMessage);
  1556.         }
  1557.         return $this->redirectToRoute('homepage');
  1558.     }
  1559.     /**
  1560.      * @Route("/list/{idgroup}", defaults={"idgroup" = 0}, name="reservations_greenpatio_index")
  1561.      */
  1562.     public function indexAction($idgroupEntityManagerInterface $emRequest $request) {
  1563.         $parameters = array( 'statusdel' => 'Deleted' );
  1564.         $dql 'SELECT i
  1565.                 FROM GreenPatioBundle:Reservation i
  1566.                 WHERE i.status <> :statusdel
  1567.                 ORDER BY i.dateStart ASC';
  1568.         $query $em->createQuery($dql)->setParameters($parameters);
  1569.         $ref = array();
  1570.         $reservas $query->getResult();
  1571.         $reservasZero = array();
  1572.         foreach ($reservas as $res){
  1573.             $client $em->getRepository(Client::class)->findOneById($res->getClient());
  1574.             if (!empty($client)){ $res->setClient($client->getName()); } else { $res->setClient(null); }
  1575.             $res->setCreatedBy(
  1576.                 ($em->getRepository(User::class)->findOneById($res->getCreatedBy()))->getName() . ' '.
  1577.                 ($em->getRepository(User::class)->findOneById($res->getCreatedBy()))->getLastName());
  1578.             $ref[$res->getId()] = '#'.($res->getDateStart())->format('ymd').($res->getDateEnd())->format('ymd');
  1579.             switch ($res->getStatus()){
  1580.                 case 'Bloqueo'$res->setStatus('BLOQUEO'); break;
  1581.                 case 'Confirmed'$res->setStatus('CONFIRMADO'); break;
  1582.                 case 'Invoiced'$res->setStatus('FACTURADO'); break;
  1583.                 case 'Cotizado'$res->setStatus('COTIZADO'); break;
  1584.                 case 'Deleted'$res->setStatus('CANCELADO'); break;
  1585.                 default: $res->setStatus('INICIADO'); break;
  1586.             }
  1587.             $reservasZero[] = array(
  1588.                 'dateStart' => $res->getDateStart(),
  1589.                 'dateEnd' => $res->getDateEnd(),
  1590.                 'id' => $res->getId(),
  1591.                 'title' => $res->getTitle(),
  1592.                 'client' => $res->getClient(),
  1593.                 'createdBy' => $res->getCreatedBy(),
  1594.                 'createdAt' => $res->getCreatedAt(),
  1595.                 'ref' => $ref[$res->getId()],
  1596.                 'status' => $res->getStatus(),
  1597.             );
  1598.         }
  1599.         $reservas $reservasZero;
  1600.         return $this->render('MDS/GreenPatioBundle/reservations/list-reservations.html.twig',
  1601.             array(
  1602.                 'groups' => null,
  1603.                 'titleView' => '',
  1604.                 'reservations' => $reservas
  1605.             )
  1606.         );
  1607.     }
  1608.     /**
  1609.      * @Route("/listcanceled/{idgroup}", defaults={"idgroup" = 0}, name="reservations_canceled")
  1610.      */
  1611.     public function indexCanceledAction(EntityManagerInterface $em$idgroupRequest $request) {
  1612.         $parameters = array( 'status' => 'Deleted' );
  1613.         $dql 'SELECT i
  1614.                 FROM GreenPatioBundle:Reservation i
  1615.                 WHERE i.status = :status
  1616.                 ORDER BY i.dateStart ASC';
  1617.         $query $em->createQuery($dql)->setParameters($parameters);
  1618.         $ref = array();
  1619.         $reservas $query->getResult();
  1620.         foreach ($reservas as $res){
  1621.             $client $em->getRepository(Client::class)->findOneById($res->getClient());
  1622.             if (!empty($client)){ $res->setClient($client->getName()); } else { $res->setClient(null); }
  1623.             $res->setCreatedBy(
  1624.                 ($em->getRepository(User::class)->findOneById($res->getCreatedBy()))->getName() . ' '.
  1625.                 ($em->getRepository(User::class)->findOneById($res->getCreatedBy()))->getLastName());
  1626.             $ref[$res->getId()] = '#'.($res->getDateStart())->format('ymd').($res->getDateEnd())->format('ymd');
  1627.         }
  1628.         $reservasZero = array();
  1629.         foreach ($reservas as $res){
  1630.             $reservasZero[] = array(
  1631.                 'dateStart' => $res->getDateStart(),
  1632.                 'dateEnd' => $res->getDateEnd(),
  1633.                 'id' => $res->getId(),
  1634.                 'title' => $res->getTitle(),
  1635.                 'client' => $res->getClient(),
  1636.                 'createdBy' => $res->getCreatedBy(),
  1637.                 'createdAt' => $res->getCreatedAt(),
  1638.                 'ref' => $ref[$res->getId()],
  1639.                 'status' => $res->getStatus(),
  1640.             );
  1641.         }
  1642.         $reservas $reservasZero;
  1643.         return $this->render('MDS/GreenPatioBundle/reservations/list-reservations.html.twig',
  1644.             array(
  1645.                 'groups' => null,
  1646.                 'titleView' => ' Canceladas',
  1647.                 'reservations' => $reservas
  1648.             )
  1649.         );
  1650.     }
  1651.     /**
  1652.      * @Route("/listquoted/{idgroup}", defaults={"idgroup" = 0}, name="reservations_quoted")
  1653.      */
  1654.     public function indexQuotedAction(EntityManagerInterface $em$idgroupRequest $request) {
  1655.         $parameters = array( 'status' => 'Cotizado' );
  1656.         $dql 'SELECT i
  1657.                 FROM GreenPatioBundle:Reservation i
  1658.                 WHERE i.status = :status
  1659.                 ORDER BY i.createdAt ASC';
  1660.         $query $em->createQuery($dql)->setParameters($parameters);
  1661.         $ref = array();
  1662.         $reservas $query->getResult();
  1663.         foreach ($reservas as $res){
  1664.             $client $em->getRepository(Client::class)->findOneById($res->getClient());
  1665.             if (!empty($client)){ $res->setClient($client->getName()); } else { $res->setClient(null); }
  1666.             $res->setCreatedBy(
  1667.                 ($em->getRepository(User::class)->findOneById($res->getCreatedBy()))->getName() . ' '.
  1668.                 ($em->getRepository(User::class)->findOneById($res->getCreatedBy()))->getLastName());
  1669.             $ref[$res->getId()] = '#'.($res->getCreatedAt())->format('ymdHi');
  1670.         }
  1671.         $reservasZero = array();
  1672.         foreach ($reservas as $res){
  1673.             $data $this->CalculosTotalesEditSimple($res->getId());
  1674.             $reservasZero[] = array(
  1675.                 'dateStart' => $res->getDateStart(),
  1676.                 'dateEnd' => $res->getDateEnd(),
  1677.                 'id' => $res->getId(),
  1678.                 'title' => $res->getTitle(),
  1679.                 'client' => $res->getClient(),
  1680.                 'sales' => $data['sumatoria_totales_global_con_iva'],
  1681.                 'ref' => $ref[$res->getId()],
  1682.                 'createdAt' => $res->getCreatedAt(),
  1683.             );
  1684.         }
  1685.         $reservas $reservasZero;
  1686.         return $this->render('MDS/GreenPatioBundle/reservations/list-reservations-quotation.html.twig',
  1687.             array(
  1688.                 'groups' => null,
  1689.                 'titleView' => ' Cotizadas',
  1690.                 'reservations' => $reservas
  1691.             )
  1692.         );
  1693.     }
  1694.     /**
  1695.      * @Route("/edit/{id}", name="reservations_greenpatio_edit")
  1696.      */
  1697.     public function editAction($id)
  1698.     {
  1699.         return $this->redirectToRoute('reservations_greenpatio_edit_simple', array( 'id' => $id'token' => null ));
  1700.     }
  1701.     private function createEditReservationsForm(Reservation $entity$id)
  1702.     {
  1703.         $form $this->createForm(ReservationType::class, $entity, array( 'action' => $this->generateUrl('reservations_update', array( 'id' => $id ) ), 'method' => 'PUT'));
  1704.         return $form;
  1705.     }
  1706.     /**
  1707.      * @Route("/update/{id}", name="reservations_update")
  1708.      */
  1709.     public function updateAction($idEntityManagerInterface $emRequest $request)
  1710.     {
  1711.         // INICIO: Si la reserva esta facturada no puede ser modificada
  1712.         $reserva $em->getRepository(Reservation::class)->findOneById($id);
  1713.         $oldPriority $reserva->getPriority();         // Si no es un administrador la prioridad no se debe modificar
  1714.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  1715.         $user_id $user_logueado->getId();
  1716.         $hoy = new \DateTime("now"NULL);
  1717.         $reserva->setUpdatedBy($user_id);
  1718.         $reserva->setUpdatedAt($hoy);
  1719.         $arrayRequest $request->request->get('reservation');
  1720.         $boolConfirmacion false;
  1721.         $clientContact $request->request->get('clientContact');
  1722.         $contactUnregistered $request->request->get('contactUnregistered');
  1723.         $nameContactUnregistered $request->request->get('nameContactUnregistered');
  1724.         $phoneContactUnregistered $request->request->get('phoneContactUnregistered');
  1725.         $reserva->setTitle($arrayRequest['title']);
  1726.         $reserva->setClientContact($clientContact);
  1727.         $reserva->setContactUnregistered($contactUnregistered);
  1728.         if (!empty($nameContactUnregistered)){ $reserva->setNameContactUnregistered($nameContactUnregistered); }
  1729.         if (!empty($phoneContactUnregistered)){ $reserva->setPhoneContactUnregistered($phoneContactUnregistered); }
  1730.         if(!empty($arrayRequest['client'])){
  1731.             // Solo se puede cambiar un cliente si no se ha creado una factura
  1732.             if ($this->verificarCambioCliente($id)){ $reserva->setClient($arrayRequest['client']); }
  1733.         } else {
  1734.             $reserva->setClient(null);
  1735.         }
  1736.         $daysBlock $arrayRequest['daysBlock'] ?? null;
  1737.         if(!is_null($daysBlock) && $reserva->getDaysBlock() != $daysBlock){
  1738.             if (empty($daysBlock) && $daysBlock !== 0) {
  1739.                 $reserva->setDaysBlock(7);
  1740.             } else {
  1741.                 $reserva->setDaysBlock($daysBlock);
  1742.             }
  1743.         }
  1744.         // Si se ha cambiado al estado "Bloqueo" se envia un correo al cliente y al agente
  1745.         if (!empty($arrayRequest['status'])){
  1746.             if ($arrayRequest['status'] == 'Bloqueo'){
  1747.                 //Calculamos la fecha limite de bloqueo en función de los dias de bloqueo
  1748.                 if(empty($reserva->getDays())){
  1749.                     $now = new \DateTime("now");
  1750.                     $dateLimit date"Y-m-d H:i"strtotime$now->format('Y-m-d H:i') . "+".$reserva->getDaysBlock()." days" ));
  1751.                     $dateLimit = new \DateTime($dateLimit);
  1752.     
  1753.                     $reserva->setDays($dateLimit);
  1754.                 }
  1755.                 if ((!empty($reserva->getClient())) or (!empty($reserva->getClientContact())) or (!empty($reserva->getContactUnregistered()))) {
  1756.                     //Solo se envia correo de notificacion del correo si hay cliente o contacto o contacto no registrado
  1757.                     $client $em->getRepository(Client::class)->findOneById($reserva->getClient());
  1758.                     $mailAddressTo null;
  1759.                     // if (!empty($client) and (!empty($client->getEmail()))){ $mailAddressTo = $client->getEmail(); }         // Si hay cliente con correo se le envia a este
  1760.                     // if (!empty($reserva->getClientContact())){
  1761.                     //     $contacto = $em->getRepository(ClientContact::class)->findOneById($reserva->getClientContact());
  1762.                     //     if (!empty($contacto) and (!empty($contacto->getEmail()))){ $mailAddressTo = $contacto->getEmail(); }   // Si hay un contacto seleccionado tiene prioridad sobre el contacto de cliente
  1763.                     // }
  1764.                     // if (!empty($reserva->getContactUnregistered())){ $mailAddressTo = $reserva->getContactUnregistered(); }     // Si hay correo de contacto no registrado este tiene prioridad sobre todos
  1765.                     if (!empty($mailAddressTo)) {
  1766.                         $agente $em->getRepository(User::class)->findOneById($user_id);
  1767.                         $mailAddressFrom $agente->getEmail();
  1768.                         $mailSubject 'Notificación de Bloqueo - Reserva de espacio en Green Patio';
  1769.                         $mailBody 'Estimado cliente,' .
  1770.                             '<br><br> Nos ponemos en contacto con usted para confirmarle que su reserva ha quedado registrada en Green Patio para la realización de su próximo evento.' .
  1771.                             '<br>Le recordamos que esta reserva tiene una validez de ' $reserva->getDaysBlock() . ' días. Si pasado este tiempo no hemos recibido confirmación de vuestra parte, procederemos a la cancelación de la misma.' .
  1772.                             '<br><br>Reserva: ' $reserva->getId() .' - '$reserva->getTitle();
  1773.                         $mailBody $mailBody '<br><br><br>Muchas gracias por su colaboración.<br><br><br>';
  1774.                         //Se envia el correo al cliente y al agente
  1775.                         $alertaPrevia $em->getRepository(ReservationMailAlertClient::class)->findOneByReservationId($reserva->getId());
  1776.                         if (empty($alertaPrevia)){
  1777.                             //El correo solo se enviara si no se ha enviado ya una alerta previamente
  1778.                             $this->sendMail($mailAddressFrom$mailAddressTo$mailSubject$mailBody);
  1779.                         }
  1780.                         //Se genera el control de la alerta
  1781.                         $this->makeAlert($reserva->getId(), $reserva->getClient(), $mailAddressTo$agente->getId(), $agente->getEmail());
  1782.                     }
  1783.                 }
  1784.                 // Modificar la fecha de notificación
  1785.                 if (!empty($arrayRequest['dateNextMailAlert'])) {
  1786.                     $nextReservaMailAlert $em->getRepository(ReservationMailAlertClient::class)->findOneByReservationId($id);
  1787.                     if (!empty($nextReservaMailAlert)){
  1788.                         // La nueva fecha tiene que ser de mañana en adelante
  1789.                         if (new \Datetime($arrayRequest['dateNextMailAlert']) > new \Datetime('now')){
  1790.                             if ($nextReservaMailAlert->getAlertSended() == 0){
  1791.                                 // Si no se ha enviado el mensaje de alerta se modifican la alerta y la cancelacion (+2 dias)
  1792.                                 $newAlertDatetime = new \DateTime($arrayRequest['dateNextMailAlert'].' 15:00');
  1793.                                 $newCancelDatetime date"Y-m-d H:i"strtotime$newAlertDatetime->format('Y-m-d H:i') . "+2 days" ));
  1794.                                 $newCancelDatetime = new \DateTime($newCancelDatetime);
  1795.                                 $nextReservaMailAlert->setAlertDateTime($newAlertDatetime);
  1796.                                 $nextReservaMailAlert->setCancelDateTime($newCancelDatetime);
  1797.                                 $em->persist($nextReservaMailAlert);
  1798.                                 $em->flush();
  1799.                             } else {
  1800.                                 // Si no se ha enviado el mensaje de cancelacion (paso a cotizacion)
  1801.                                 $newCancelDatetime = new \DateTime($arrayRequest['dateNextMailAlert'].' 15:00');
  1802.                                 $nextReservaMailAlert->setCancelDateTime($newCancelDatetime);
  1803.                                 $em->persist($nextReservaMailAlert);
  1804.                                 $em->flush();
  1805.                             }
  1806.                         }
  1807.                     }
  1808.                 }
  1809.             } else{
  1810.                 if(!empty($reserva->getDays())){
  1811.                     $reserva->setDays(null);
  1812.                 }
  1813.             }
  1814.             $newStatus $this->verificarStatusInicialyFinal($id,$user_id,$reserva->getStatus(),$arrayRequest['status']);
  1815.             // Despues de estudiar el estatus se actualiza con el valor que puede tomar
  1816.             $arrayRequest['status'] = $newStatus;
  1817.             $reserva->setStatus($newStatus);
  1818.             if (!($arrayRequest['status'] == 'Bloqueo')){
  1819.                 // Si no es un bloqueo, tal vez se deba eliminar una alerta
  1820.                 $alertaPrevia $em->getRepository(ReservationMailAlertClient::class)->findOneByReservationId($id);
  1821.                 if (!empty($alertaPrevia)){
  1822.                     if ($arrayRequest['status'] == 'Deleted'){
  1823.                         // Si se cancela y hay una alerta previa se debe enviar automaticamente correo al cliente y agente acerca de la cancelacion o desbloqueo
  1824.                         $agent $em->getRepository(User::class)->findOneById($alertaPrevia->getAgentId());
  1825.                         $mailAddressTo $alertaPrevia->getClientMail();
  1826.                         $mailAddressFrom $alertaPrevia->getAgentMail();
  1827.                         $replyTo = array(
  1828.                             $alertaPrevia->getClientMail() => $alertaPrevia->getClientMail(),
  1829.                             $alertaPrevia->getAgentMail() => $agent->getName().' '$agent->getLastName(),
  1830.                         );
  1831.                         $mailSubject 'Notificación de Bloqueo - Reserva de espacio en Green Patio';
  1832.                         $mailBody 'Estimado cliente,'.
  1833.                             '<br><br>Nos ponemos en contacto con usted para informarle de que su reserva ha sido cancelada.'.
  1834.                             '<br><br>Reserva: ' $reserva->getId() .' - '$reserva->getTitle();
  1835.                         if (!empty($reserva->getDays())){ $mailBody $mailBody '<br>Días bloqueados: '.$reserva->getDays(); }
  1836.                         $mailBody $mailBody '<br><br><br>Muchas gracias por su colaboración.<br><br><br>';
  1837.                         //Se envia el correo al cliente y al agente
  1838.                         $this->sendMail($mailAddressFrom$mailAddressTo$mailSubject$mailBody);
  1839.                         $alertaPrevia->setOldReservationId($alertaPrevia->getReservationId());
  1840.                         $alertaPrevia->setReservationId(0);
  1841.                         $alertaPrevia->setCancelSended(1);
  1842.                     } else {
  1843.                         $alertaPrevia->setOldReservationId($alertaPrevia->getReservationId());
  1844.                         $alertaPrevia->setReservationId(0);
  1845.                     }
  1846.                     $em->persist($alertaPrevia);
  1847.                     $em->flush();
  1848.                 }
  1849.             }
  1850.         }
  1851.         $boolConfirmacion = ($boolConfirmacion and ($reserva->getStatus() == 'Pendiente'));  // Si se pidio cambiar el estado y se quedo en Pendiente y es un usario de GreenPatio (rol 48)
  1852.         $reserva->setContract($arrayRequest['contract']);
  1853.         $reserva->setDescription($arrayRequest['description']);
  1854.         if(!empty($arrayRequest['advancePayment'])){ $reserva->setAdvancePayment($arrayRequest['advancePayment']); } else { $reserva->setAdvancePayment(0); }
  1855.         if(!empty($arrayRequest['deposit'])){ $reserva->setDeposit($arrayRequest['deposit']); } else { $reserva->setDeposit(0); }
  1856.         if(!empty($arrayRequest['pax'])){ $reserva->setPax($arrayRequest['pax']); } else { $reserva->setPax(null); }
  1857.         if(!empty($arrayRequest['idProposal'])){ $reserva->setIdProposal($arrayRequest['idProposal']); } else { $reserva->setIdProposal(null); }
  1858.         if (!empty($arrayRequest['cateringName'])){ $reserva->setCateringName($arrayRequest['cateringName']); }
  1859.         if(is_null($arrayRequest['priority']) or empty($arrayRequest['priority']) or ($arrayRequest['priority'] == 0)){ $reserva->setPriority(1); } else { $reserva->setPriority($arrayRequest['priority']); }
  1860.         if ($user_logueado->getRole() == 'ROLE_USER'){
  1861.             // La opcion o prioridad solo la pueden modificar los administradores para evitar competencias entre lo agentes
  1862.             $reserva->setPriority($oldPriority);
  1863.         }
  1864.         if(empty($reserva->getStatus())){$reserva->setStatus('Cotizado');}      //El estado de reserva en vacio es que esta en el proceso de cotizacion
  1865.         // Actualizamos las fechas de la reserva
  1866.         $resLoungeSimples $em->getRepository(ReservationLoungeSimple::class)->findByIdReservation($id);
  1867.         $newStart null$newEnd null;
  1868.         foreach ($resLoungeSimples as $item) {
  1869.             $dateStart $item->getDateStart();
  1870.             $dateEnd $item->getDateEnd();
  1871.             if ($newStart === null || $dateStart $newStart) { $newStart $dateStart; }
  1872.             if ($newEnd === null || $dateEnd $newEnd) { $newEnd $dateEnd; }
  1873.         }
  1874.         if (!empty($newStart) and !empty($newEnd)){
  1875.             $reserva->setDateStart($newStart);
  1876.             $reserva->setDateEnd($newEnd);
  1877.         }
  1878.         try{
  1879.             $em->persist($reserva);
  1880.             $em->flush();
  1881. //            $event = 'The Reservation has been Updated. Now';
  1882.             $successMessage 'La reserva ha sido actualizada.';
  1883. //            $successMessage = $this->translator->trans($event);
  1884.             $this->addFlash('mensajereservation'$successMessage);
  1885.         } catch (\Exception $e){
  1886.             $event 'An error occurred: '.$e->getMessage();
  1887.             /* Para el usuario */
  1888.             $errorMessage $this->translator->trans($event);
  1889.             $this->addFlash('mensajereservationerror'$errorMessage);
  1890.         }
  1891.         // Se debe solicitar la confirmación ed la reserva
  1892.         if ($boolConfirmacion){ return $this->redirectToRoute('reservations_greenpatio_send_confirmation_request_mail', array( 'id' => $id )); }
  1893.         // Si han confirmado se debe notificar a Salvador y a Rafa, no para que confirmen sino para que esten informados
  1894.         if ($reserva->getStatus() == 'Confirmed'){ return $this->redirectToRoute('reservations_greenpatio_send_confirmation_request_mail', array( 'id' => $id )); }
  1895.         // Sincronización con HT
  1896.         if (!empty($reserva)) {
  1897.             // Rafa indico que siempre se sincronice al abrir un expediente de GP
  1898.             if (in_array($reserva->getStatus(), [null'''Confirmed''Invoiced''Iniciado''Cotizado''Bloqueo'])) {
  1899.                 if ($reserva->getCateringName() == 'HIGO & TRIGO, S.L.') {
  1900.                     // Si no se ha creado aun el expediente de HT debemos crearlo
  1901.                     $htFile $em->getRepository(HtFile::class)->findByReservation($reserva);
  1902.                     if (empty($htFile)) {
  1903.                         return $this->redirectToRoute('sinc_gp_ht', array('id' => $id,));
  1904.                     }
  1905.                 }
  1906.             }
  1907.         }
  1908.         // Sincronización con Av Express
  1909.         $cotizable $this->laReservaEsCotizable($reserva->getId());
  1910.         if ($cotizable) {
  1911.             // Rafa indico que siempre se sincronice al abrir un expediente de GP
  1912.             if (in_array($reserva->getStatus(), [null'''Confirmed''Invoiced''Iniciado''Cotizado''Bloqueo'])) {
  1913.                 $AveFile $em->getRepository(AveFiles::class)->findByReservation($reserva);
  1914.                 if (empty($AveFile)) {
  1915.                     // Si no se ha creado aun el expediente de Av Express debemos crearlo
  1916.                     return $this->redirectToRoute('sinc_gp_ave', array('id' => $id,));
  1917.                 }
  1918.             }
  1919.         }
  1920.         return $this->redirectToRoute('reservations_greenpatio_edit_simple', array( 'id' => $id'token' => null ));
  1921.     }
  1922.     /**
  1923.      * @Route("/events", name="get_reservations")
  1924.      */
  1925.     public function reservationSelectAction(Request $request)
  1926.     {
  1927.         $em $this->getDoctrine()->getManager();
  1928.         $fechaInicio = new \DateTime('first day of January last year');
  1929.         $qb $em->getRepository(ReservationLoungeSimple::class)->createQueryBuilder('r');
  1930.         $reservation $qb->where('r.dateStart >= :fechaInicio')
  1931.             ->andWhere('r.idLounge < :idLounge')
  1932.             ->setParameter('fechaInicio'$fechaInicio)
  1933.             ->setParameter('idLounge'22)
  1934.             ->getQuery()
  1935.             ->getResult();
  1936.         $qb $em->getRepository(ReservationVisit::class)->createQueryBuilder('v');
  1937.         $visitas $qb->where('v.dateStart >= :fechaInicio')
  1938.                     ->andWhere('v.idLounge = 0')
  1939.                     ->setParameter('fechaInicio'$fechaInicio)
  1940.                     ->getQuery()
  1941.                     ->getResult();
  1942.         $arrayFechaVisitas = [];
  1943.         //Se agrupan las visitas por fechas
  1944.         foreach ($visitas as $item) { $arrayFechaVisitas[$item->getDateStart()->format('Y-m-d')][] = $item; }
  1945.         $newArrayVisitas = [];
  1946.         //Se agrupan las visitas por agente
  1947.         foreach ($arrayFechaVisitas as $fecha) {
  1948.             foreach ($fecha as $item) {
  1949.                 //Se van concatenando los titulos de las visitas en una sola
  1950.                 $loungeNameTemp '';
  1951.                 $item->setLoungeName($loungeNameTemp $item->getDateStart()->format('H:i') . ' ' $item->getLoungeName() . '<br>');
  1952.                 $newArrayVisitas[$item->getDateStart()->format('Y-m-d') . '-' $item->getAgentId()] = $item;
  1953.             }
  1954.         }
  1955.         $visitas $newArrayVisitas;
  1956.         $xArray = [];
  1957.         foreach ($arrayFechaVisitas as $elem) { foreach ($elem as $item) { $xArray[] = $item; } }
  1958.         foreach ($xArray as $item) { array_push($reservation$item); }
  1959.         $datos = [];
  1960.         $datosMontaje = [];
  1961.         $datosDesMontaje = [];
  1962.         if (!empty($reservation)) {
  1963.             foreach ($reservation as $reservaSala) {
  1964.                 if (!empty($reservaSala->getIdReservation())) {
  1965.                     $reserva $em->getRepository(Reservation::class)->findOneById($reservaSala->getIdReservation());
  1966.                     if ($reservaSala->getType() == 'Visit') {
  1967.                         $reserva->setStatus('Visit');
  1968.                     }
  1969.                 } else {
  1970.                     // Estamos con una visita
  1971.                     $reserva = new Reservation();
  1972.                     $reserva->setStatus('Visit');
  1973.                     $reserva->setTitle($reservaSala->getLoungeName());
  1974.                 }
  1975.                 if ($reservaSala->getDateStart()->format('d') == $reservaSala->getDateEnd()->format('d')) {
  1976.                     $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();
  1977.                 } else {
  1978.                     $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();
  1979.                 }
  1980.                 $logicoVisita false;
  1981.                 if (!is_null($reserva->getStatus())) {
  1982.                     switch ($reserva->getStatus()) {
  1983.                         case 'Bloqueo'//naranja
  1984.                             $color "#ffaa00";
  1985.                             break;
  1986.                         case 'Confirmed'//verde
  1987.                             $color "#13ad27";
  1988.                             break;
  1989.                         case 'Invoiced'//verde
  1990.                             $color "#13ad27";
  1991.                             break;
  1992.                         case 'Deleted'//rojo
  1993.                             $color "#ff0000";
  1994.                             break;
  1995.                         case 'Cotizado'//Rojo claro
  1996.                             $color "#faafc3";
  1997.                             break;
  1998.                         case 'Reservado'//verde, se ha adelantado un pago parcial
  1999.                             $color "#13ad27";
  2000.                             break;
  2001.                         case 'Visit'//Azul Almudena (id user 77), Rosa Gaby
  2002.                             $logicoVisita true;
  2003.                             if ($reservaSala->getAgentId() == 77) {
  2004.                                 $color "#22cbf5";
  2005.                             } else {
  2006.                                 $color "#f5229a";
  2007.                             }
  2008.                             break;
  2009.                         default: //naranja
  2010.                             $color "";
  2011.                             break;
  2012.                     }
  2013.                     if (!empty($reservaSala->getType()) and !($reservaSala->getType() == 'Visit')) {
  2014.                         //Es un montaje o desmontaje
  2015.                         $color "#a5b8a2";
  2016.                         // Si es un montaje o desmontaje pero esta cancelado debe prevalecer el color de cancelado
  2017.                         if ($reserva->getStatus() == 'Deleted') {
  2018.                             $color "#ff0000";
  2019.                         }
  2020.                         if (($reservaSala->getIdLounge() == 22) or  ($reservaSala->getIdLounge() == 23) or
  2021.                         ($reservaSala->getIdLounge() == 24) or ($reservaSala->getIdLounge() == 25)){
  2022.                             //Ajustamos el color a una sala de covarrubia
  2023.                             switch ($color) {
  2024.                                 case '#ffaa00'$color "#b873bf"; break; //naranja (bloqueo) => morado
  2025.                                 case '#13ad27'$color "#017362"; break; //verde (Confirmed) => verde olivo
  2026.                                 case '#ff0000'$color "#ff0000"; break; //rojo
  2027.                                 case '#faafc3'$color "#faafc3"; break; //Rojo claro
  2028.                                 default: break; //no modificar el color
  2029.                             }
  2030.                         }
  2031.                     }
  2032.                 }
  2033.                 $pago1 "";
  2034.                 $pago2 "";
  2035.                 $ht "";
  2036.                 if (!($reserva->getStatus() == 'Visit')) {
  2037.                     $paymentsAll $em->getRepository(ReservationPaymentsClient::class)->findOneByReservationId($reserva->getId());
  2038.                 } else {
  2039.                     $paymentsAll null;
  2040.                 }
  2041.                 if (!empty($paymentsAll)) {
  2042.                     $pago2 "<i class='icon-coin-euro' style='color: #000 !important;'></i>";      //Hay pagos parciales
  2043.                 }
  2044.                 if (!($reserva->getStatus() == 'Visit')) {
  2045.                     $facturas $em->getRepository(ReservationInvoice::class)->findByReservationId($reserva->getId());
  2046.                 }
  2047.                 if (!empty($facturas)) {
  2048.                     foreach ($facturas as $factura) {
  2049.                         if ($factura->getMaster() == "master") {
  2050.                             $pago1 "<i class='icon-thumbs-up3' style='color: #000 !important;'></i>";// Se ha pagado la totalidad
  2051.                         }
  2052.                         if ($factura->getMaster() != "master") {
  2053.                             $pago2 "<i class='icon-coin-euro' style='color: #000 !important;'></i>";      //Hay pagos parciales
  2054.                         }
  2055.                     }
  2056.                 }
  2057.                 if ($reserva->getCateringName() == 'HIGO & TRIGO, S.L.') {
  2058.                     $ht "<a style='color: #000 !important;'><strong>H&T</strong></a>";      // Es una reserva con servicio de Catering Higo & Trigo
  2059.                 }
  2060.                 // Pagos parciales y totales
  2061.                 if (!empty($reserva)) {
  2062.                     if (!$logicoVisita) {
  2063.                         $datos[] = array(
  2064. //                            "title" => $reservaSala->getDateStart()->format('H:i') . ' ' . $pago2 . $pago1 . $ht . ' ' . $reservaSala->getType() . '<br>' . $reservaSala->getLoungeName() . '<br>' . '<br>' . $reserva->getTitle(),
  2065.                             "title" => $reservaSala->getDateStart()->format('H:i') . ' ' $pago2 $pago1 $ht ' ' $reservaSala->getType() .' '$reservaSala->getLoungeName() . '<br>' $reserva->getTitle(),
  2066.                             "titleOne" => $reservaSala->getDateStart()->format('H:i') . ' ' $pago2 $pago1 $ht ' ' $reservaSala->getType(),
  2067.                             "titleTwo" => $reservaSala->getLoungeName(),
  2068.                             "titleThree" => '' '<br>' $reserva->getTitle(),
  2069.                             "type" => $reservaSala->getType(),
  2070.                             "id" => $reserva->getId(),
  2071.                             "tooltip" => $tooltip,
  2072.                             "start" => $reservaSala->getDateStart(),
  2073.                             "end" => $reservaSala->getDateEnd(),
  2074.                             "color" => $color,
  2075.                             "loungeId" => $reservaSala->getIdLounge(),
  2076.                             "url" => "/reservations-greenpatio/edit/" $reserva->getId(),
  2077.                             "status" => $reserva->getStatus(),
  2078.                         );
  2079.                     } else {
  2080.                         // Es una visita
  2081.                         $datos[] = array(
  2082.                             "title" => $reservaSala->getLoungeName(),
  2083.                             "titleOne" => $reservaSala->getDateStart()->format('H:i') . ' ' ' ' $reservaSala->getType() . '<br>',
  2084.                             "titleTwo" => $reservaSala->getLoungeName(),
  2085.                             "titleThree" => '' '<br>' '<br>' $reserva->getTitle(),
  2086.                             "type" => $reservaSala->getType(),
  2087.                             "id" => $reservaSala->getId() . 'V',
  2088.                             "tooltip" => $tooltip,
  2089.                             "start" => $reservaSala->getDateStart(),
  2090.                             "end" => $reservaSala->getDateEnd(),
  2091.                             "color" => $color,
  2092.                             "loungeId" => $reservaSala->getIdLounge(),
  2093.                             "url" => '/reservations-greenpatio/addvisit',
  2094.                             "status" => $reserva->getStatus(),
  2095.                             "agentId" => $reservaSala->getAgentId(),
  2096.                         );
  2097.                     }
  2098.                 } else {
  2099.                     $datos = [];
  2100.                 }
  2101.             }
  2102.         }
  2103.         $newDatos = array();
  2104.         // INICIO: Se unen las salas en una sola reserva por ID de reserva
  2105.         foreach ($datos as $dato) {
  2106.             // Inicializamos el arreglo para crear los indices
  2107.             switch ($dato['color']){
  2108.                 case '#a5b8a2': if ($dato['type'] == 'Montaje'){ $newDatos[$dato['id'].'M'] = null; } else { $newDatos[$dato['id'].'D'] = null; } break;      //Montaje o Desmontaje
  2109.                 default: $newDatos[$dato['id']] = null; break;      //Dia de reserva o Visita (la visita ya viene con su indice #V )
  2110.             }
  2111.         }
  2112.         foreach ($datos as $dato) {
  2113.             switch ($dato['color']){
  2114.                                             //Montaje o Desmontaje
  2115.                 case '#a5b8a2':
  2116.                     if ($dato['type'] == "Montaje") {
  2117.                         if (!empty($newDatos[$dato['id'] . 'M'])) {
  2118. //                            if ($newDatos[$dato['id'] . 'M']['start'] > $dato['start']) { $newDatos[$dato['id'] . 'M']['start'] = $dato['start']; }
  2119. //                            if ($newDatos[$dato['id'] . 'M']['end'] < $dato['end']) { $newDatos[$dato['id'] . 'M']['end'] = $dato['end']; }
  2120.                             // 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)
  2121.                             if ($newDatos[$dato['id'] . 'M']['loungeId'] == $dato['loungeId']) {
  2122.                                 if ($newDatos[$dato['id'] . 'M']['start'] > $dato['start']) { $newDatos[$dato['id'] . 'M']['start'] = $dato['start']; }
  2123.                                 if ($newDatos[$dato['id'] . 'M']['end'] < $dato['end']) { $newDatos[$dato['id'] . 'M']['end'] = $dato['end']; }
  2124.                             } else {
  2125.                                 if (array_key_exists($dato['id'] . 'M'.$dato['loungeId'],$newDatos)){
  2126.                                     if ($newDatos[$dato['id'] . 'M'.$dato['loungeId']]['start'] > $dato['start']) { $newDatos[$dato['id'] . 'M'.$dato['loungeId']]['start'] = $dato['start']; }
  2127.                                     if ($newDatos[$dato['id'] . 'M'.$dato['loungeId']]['end'] < $dato['end']) { $newDatos[$dato['id'] . 'M'.$dato['loungeId']]['end'] = $dato['end']; }
  2128.                                 } else {
  2129.                                     $newDatos[$dato['id'] . 'M'.$dato['loungeId']] = $dato;
  2130.                                 }
  2131.                             }
  2132.                         } else {
  2133.                             $newDatos[$dato['id'] . 'M'] = $dato;
  2134.                         }
  2135.                     } else {
  2136.                         if ($dato['type'] == "Desmontaje") {
  2137.                             if (!empty($newDatos[$dato['id'] . 'D'])) {
  2138.                                 // El Desmontaje esta ocupando mas de 1 dia, se deben unir los dias de desmontaje
  2139.                                 if ($newDatos[$dato['id'] . 'D']['start'] > $dato['start']) { $newDatos[$dato['id'] . 'D']['start'] = $dato['start']; }
  2140.                                 if ($newDatos[$dato['id'] . 'D']['end'] < $dato['end']) { $newDatos[$dato['id'] . 'D']['end'] = $dato['end']; }
  2141.                             } else {
  2142.                                 $newDatos[$dato['id'] . 'D'] = $dato;
  2143.                             }
  2144.                         }
  2145.                     }
  2146.                     break;
  2147.                                             //Visita Almudena (id user 77)
  2148.                 case '#22cbf5':
  2149.                     if ($dato['type'] == "Visit") {
  2150.                         $newDatos[$dato['start']->format('Ymd').'V77'.$dato['id']] = $dato;
  2151.                         if (!empty($newDatos[$dato['start']->format('Ymd').'V77'])) {
  2152.                             // Hay varias visitas ese mismo dia para el agente
  2153. //                            $newDatos[$dato['start']->format('Ymd').'V77']['tooltip'] = $newDatos[$dato['start']->format('Ymd').'V77']['tooltip'] . $dato['tooltip'];
  2154.                         } else {
  2155. //                            $newDatos[$dato['start']->format('Ymd').'V77'] = $dato;
  2156.                         }
  2157.                     }
  2158.                     break;
  2159.                                             //Visita Gabriela (id user 82)
  2160.                 case '#f5229a':
  2161.                     if ($dato['type'] == "Visit") {
  2162.                         $newDatos[$dato['start']->format('Ymd').'V82'.$dato['id']] = $dato;
  2163.                         if (!empty($newDatos[$dato['start']->format('Ymd').'V82'])) {
  2164.                             // Hay varias visitas ese mismo dia para el agente
  2165. //                            $newDatos[$dato['start']->format('Ymd').'V82']['tooltip'] = $newDatos[$dato['start']->format('Ymd').'V82']['tooltip'] . $dato['tooltip'];
  2166.                         } else {
  2167. //                            $newDatos[$dato['start']->format('Ymd').'V82'] = $dato;
  2168.                         }
  2169.                     }
  2170.                     break;
  2171.                 //Visita María (id user 120)
  2172.                 case '#157cc2':
  2173.                     if ($dato['type'] == "Visit") {
  2174.                         $newDatos[$dato['start']->format('Ymd').'V120'.$dato['id']] = $dato;
  2175.                         if (!empty($newDatos[$dato['start']->format('Ymd').'V120'])) {
  2176.                             // Hay varias visitas ese mismo dia para el agente
  2177. //                            $newDatos[$dato['start']->format('Ymd').'V120']['tooltip'] = $newDatos[$dato['start']->format('Ymd').'V120']['tooltip'] . $dato['tooltip'];
  2178.                         } else {
  2179. //                            $newDatos[$dato['start']->format('Ymd').'V120'] = $dato;
  2180.                         }
  2181.                     }
  2182.                     break;
  2183.                                             //Reserva color naranja Bloqueo
  2184.                 case '#ffaa00':
  2185.                     if (empty($newDatos[$dato['id']])){
  2186.                         $newDatos[$dato['id']] = $dato;
  2187.                     } else {
  2188.                         // Se verifican la actualizacion de incio y fin, para tener el menor inicio y el mayor fin
  2189.                         if ($newDatos[$dato['id']]['start'] > $dato['start']) { $newDatos[$dato['id']]['start'] = $dato['start']; }
  2190.                         if ($newDatos[$dato['id']]['end'] < $dato['end']) { $newDatos[$dato['id']]['end'] = $dato['end']; }
  2191.                         $newDatos[$dato['id']]['tooltip'] = $newDatos[$dato['id']]['tooltip'] . ' | ' $dato['tooltip'];
  2192.                         // Verificamos si la sala ya ha sido previamente agregada a la lista de salas para no repetirla
  2193.                         if (strpos($newDatos[$dato['id']]['title'], $dato['titleTwo']) === false) {
  2194.                             // No se encontro la cadena, debemos agregar
  2195.                             $newDatos[$dato['id']]['titleTwo'] = $newDatos[$dato['id']]['titleTwo'] . '<br>' .'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'$dato['titleTwo'];
  2196.                             $newDatos[$dato['id']]['title'] = $newDatos[$dato['id']]['titleOne'] . $newDatos[$dato['id']]['titleTwo'] . $newDatos[$dato['id']]['titleThree'];
  2197.                         }
  2198.                     }
  2199.                     break;
  2200.                                             //Reserva color Rojo claro Cotizado
  2201.                 case '#faafc3':
  2202.                     if (empty($newDatos[$dato['id']])){
  2203.                         $newDatos[$dato['id']] = $dato;
  2204.                     } else {
  2205.                         // Se verifican la actualizacion de incio y fin, para tener el menor inicio y el mayor fin
  2206.                         if ($newDatos[$dato['id']]['start'] > $dato['start']) { $newDatos[$dato['id']]['start'] = $dato['start']; }
  2207.                         if ($newDatos[$dato['id']]['end'] < $dato['end']) { $newDatos[$dato['id']]['end'] = $dato['end']; }
  2208.                         $newDatos[$dato['id']]['tooltip'] = $newDatos[$dato['id']]['tooltip'] . ' | ' $dato['tooltip'];
  2209.                         // Verificamos si la sala ya ha sido previamente agregada a la lista de salas para no repetirla
  2210.                         if (strpos($newDatos[$dato['id']]['title'], $dato['titleTwo']) === false) {
  2211.                             // No se encontro la cadena, debemos agregar
  2212.                             $newDatos[$dato['id']]['titleTwo'] = $newDatos[$dato['id']]['titleTwo'] . '<br>' .'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'$dato['titleTwo'];
  2213.                             $newDatos[$dato['id']]['title'] = $newDatos[$dato['id']]['titleOne'] . $newDatos[$dato['id']]['titleTwo'] . $newDatos[$dato['id']]['titleThree'];
  2214.                         }
  2215.                     }
  2216.                     break;
  2217.                                             //Reserva color Rojo Reserva Cancelada
  2218.                 case '#ff0000':
  2219.                                             //Las canceladas no se muestran en el calendario
  2220.                     break;
  2221.                                             //Reserva color Verde Reserva Confirmada, Facturada, (se ha adelantado un pago parcial)
  2222.                 case '#13ad27':
  2223.                     if (empty($newDatos[$dato['id']])){
  2224.                         $newDatos[$dato['id']] = $dato;
  2225.                     } else {
  2226.                         // Se verifican la actualizacion de incio y fin, para tener el menor inicio y el mayor fin
  2227.                         if ($newDatos[$dato['id']]['start'] > $dato['start']) { $newDatos[$dato['id']]['start'] = $dato['start']; }
  2228.                         if ($newDatos[$dato['id']]['end'] < $dato['end']) { $newDatos[$dato['id']]['end'] = $dato['end']; }
  2229.                         $newDatos[$dato['id']]['tooltip'] = $newDatos[$dato['id']]['tooltip'] . ' | ' $dato['tooltip'];
  2230.                         // Verificamos si la sala ya ha sido previamente agregada a la lista de salas para no repetirla
  2231.                         if (strpos($newDatos[$dato['id']]['title'], $dato['titleTwo']) === false) {
  2232.                             // No se encontro la cadena, debemos agregar
  2233.                             $newDatos[$dato['id']]['titleTwo'] = $newDatos[$dato['id']]['titleTwo'] . '<br>' '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'$dato['titleTwo'];
  2234.                             $newDatos[$dato['id']]['title'] = $newDatos[$dato['id']]['titleOne'] . $newDatos[$dato['id']]['titleTwo'] . $newDatos[$dato['id']]['titleThree'];
  2235.                         }
  2236.                     }
  2237.                     break;
  2238.                 
  2239.                 //Reserva color Verde Reserva Confirmada, Facturada, (Covarrubias)
  2240.                 case '#017362':
  2241.                     if ($newDatos[$dato['id']]['end'] < $dato['end']) {
  2242.                         if (empty($newDatos[$dato['id']])){
  2243.                                 $newDatos[$dato['id']]['end'] = $dato['end'];
  2244.                             $newDatos[$dato['id']] = $dato;
  2245.                         } else {
  2246.                             // Se verifican la actualizacion de incio y fin, para tener el menor inicio y el mayor fin
  2247.                             if ($newDatos[$dato['id']]['start'] > $dato['start']) { $newDatos[$dato['id']]['start'] = $dato['start']; }
  2248.                             if ($newDatos[$dato['id']]['end'] < $dato['end']) { $newDatos[$dato['id']]['end'] = $dato['end']; }
  2249.                             $newDatos[$dato['id']]['tooltip'] = $newDatos[$dato['id']]['tooltip'] . ' | ' $dato['tooltip'];
  2250.                             // Verificamos si la sala ya ha sido previamente agregada a la lista de salas para no repetirla
  2251.                             if (strpos($newDatos[$dato['id']]['title'], $dato['titleTwo']) === false) {
  2252.                                 // No se encontro la cadena, debemos agregar
  2253.                                 $newDatos[$dato['id']]['titleTwo'] = $newDatos[$dato['id']]['titleTwo'] . '<br>' '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'$dato['titleTwo'];
  2254.                                 $newDatos[$dato['id']]['title'] = $newDatos[$dato['id']]['titleOne'] . $newDatos[$dato['id']]['titleTwo'] . $newDatos[$dato['id']]['titleThree'];
  2255.                             }
  2256.                         }
  2257.                     }
  2258.                 break;
  2259.                                             //Se pondra color a negro para resaltar este cualquier caso que no haya sido considerado (status Pendiente)
  2260.                 default:
  2261.                     if (empty($newDatos[$dato['id']])){
  2262.                         $newDatos[$dato['id']] = $dato;
  2263.                     } else {
  2264.                         // Se verifican la actualizacion de incio y fin, para tener el menor inicio y el mayor fin
  2265.                         if ($newDatos[$dato['id']]['start'] > $dato['start']) { $newDatos[$dato['id']]['start'] = $dato['start']; }
  2266.                         if ($newDatos[$dato['id']]['end'] < $dato['end']) { $newDatos[$dato['id']]['end'] = $dato['end']; }
  2267.                         $newDatos[$dato['id']]['tooltip'] = $newDatos[$dato['id']]['tooltip'] . ' | ' $dato['tooltip'];
  2268.                         // Verificamos si la sala ya ha sido previamente agregada a la lista de salas para no repetirla
  2269.                         if (strpos($newDatos[$dato['id']]['title'], $dato['titleTwo']) === false) {
  2270.                             // No se encontro la cadena, debemos agregar
  2271.                             $newDatos[$dato['id']]['titleTwo'] = $newDatos[$dato['id']]['titleTwo'] . '<br>' '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'$dato['titleTwo'];
  2272.                             $newDatos[$dato['id']]['title'] = $newDatos[$dato['id']]['titleOne'] . $newDatos[$dato['id']]['titleTwo'] . $newDatos[$dato['id']]['titleThree'];
  2273.                         }
  2274.                     }
  2275.                     // Se pone en color negro para resaltar este caso que no esta entrando en ninguno de los casos anteriores
  2276.                     $newDatos[$dato['id']]['color'] = '#000000';
  2277.                     if ($dato['type'] == "Visit") {
  2278.                         // Si no es una de los agentes regulares (Gaby, Angie, Cristina) se busca el color del usuario configurado en el perfil
  2279.                         $elAgente $em->getRepository(User::class)->findOneById($dato['agentId']);
  2280.                         $elAgenteColor = !empty($elAgente) ? $elAgente->getColor() : null;
  2281.                         if (!empty($elAgenteColor)){ $newDatos[$dato['id']]['color'] = $elAgenteColor; }
  2282.                     }
  2283.                     break;
  2284.             }
  2285.         }
  2286.         $datos0 = array();
  2287.         foreach ($newDatos as $key => $item) {
  2288.             if (!empty($item['id'])) {
  2289.                 $datos0[$key] = array('title' => $item['title'],
  2290.                     'titleOne' => $item['titleOne'],
  2291.                     'titleTwo' => $item['titleTwo'],
  2292.                     'titleThree' => $item['titleThree'],
  2293.                     'type' => $item['type'],
  2294.                     'id' => $item['id'],
  2295.                     'tooltip' => $item['tooltip'],
  2296.                     'start' => $item['start'],
  2297.                     'end' => $item['end'],
  2298.                     'color' => $item['color'],
  2299.                     'loungeId' => $item['loungeId'],
  2300.                     'url' => $item['url']);
  2301.             }
  2302.         }
  2303.         $newDatos $datos0;
  2304.         $datos = [];
  2305.         foreach ($newDatos as $item) {
  2306.             if ($item['color'] != '#ff0000') {
  2307.                 // No se agregan al calendario los elementos eliminados oelementos vacios
  2308.                 if (!empty($item)) {
  2309.                     //INICIO: Verificamos por huecos dentro de la reserva
  2310.                     if (empty($item['type'])) {
  2311.                         // solo las reservas se van a verificar en este if
  2312.                         if ((date_diff($item['start'], $item['end'])->d) > 1) {    //el evento tiene mas de 2 dias, puede haber huecos
  2313.                             $resSimples $em->getRepository(ReservationLoungeSimple::class)->findByIdReservation($item['id']);
  2314.                             $period = new DatePeriod(
  2315.                                 $item['start'],
  2316.                                 new DateInterval('P1D'),
  2317.                                 $item['end']
  2318.                             );
  2319.                             $arrayPeriod = [];
  2320.                             foreach ($period as $key => $value) { $arrayPeriod[] = $value; }
  2321.                             $logAllDiasEnReserva false;
  2322.                             $logDiaEnReserva false;
  2323.                             //Verificamos que cada dia tenga su reserva de sala para que no haya hueco
  2324.                             foreach ($arrayPeriod as $day) {
  2325.                                 foreach ($resSimples as $resSimple) {
  2326.                                     if ($resSimple->getDateStart()->format('Y-m-d') == $day->format('Y-m-d')) {
  2327.                                         $logDiaEnReserva true;
  2328.                                         break;
  2329.                                     }
  2330.                                 }
  2331.                                 if (!$logDiaEnReserva) {
  2332.                                     //Un dia no se encontraba, hay un hueco
  2333.                                     foreach ($resSimples as $resDayToAdd) {
  2334.                                         if (empty($resDayToAdd->getType())) {       // Solo se deben agregar salsa los montajes y desmontajes aqui no van
  2335.                                             $item['start'] = $resDayToAdd->getDateStart();
  2336.                                             $item['end'] = $resDayToAdd->getDateEnd();
  2337.                                             $br '<br>';
  2338.                                             $br strpos($item['title'], $br);
  2339.                                             $tempText substr($item['title'], $br 4);
  2340.                                             $item['title'] = $resDayToAdd->getDateStart()->format('H:i') . ' ' '<br>' $tempText;
  2341.                                             $datos[] = $item;
  2342.                                         }
  2343.                                     }
  2344.                                     break;
  2345.                                 } else {
  2346.                                     //Se debe evaluar el siguiente dia
  2347.                                     $logDiaEnReserva false;
  2348.                                     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
  2349.                                         $logAllDiasEnReserva true;
  2350.                                     }
  2351.                                 }
  2352.                             }
  2353.                             if ($logAllDiasEnReserva) {
  2354.                                 $datos[] = $item;
  2355.                             }
  2356.                         } else {
  2357.                             // El evento es de 1 o 2 dias, no hay posibilidad de hueco
  2358.                             $datos[] = $item;
  2359.                         }
  2360.                     } else {
  2361.                         //Es Visita Las visitas son las unicas entradas que no tienen hueco
  2362.                         if ($item['type'] == 'Visit'){
  2363.                             $datos[] = $item;
  2364.                         } else {
  2365.                             // es montaje o desmontaje, se va verificar por huecos
  2366.                             if ((date_diff($item['start'], $item['end'])->d) > 1) {    //el item tiene mas de 2 dias, puede haber huecos
  2367.                                 $parameters = array( 'id' => $item['id'], 'type' => $item['type'], );
  2368.                                 $dql 'SELECT i
  2369.                                         FROM GreenPatioBundle:ReservationLoungeSimple i
  2370.                                         WHERE  i.idReservation = :id
  2371.                                           and i.type = :type';
  2372.                                 $query $em->createQuery($dql)->setParameters($parameters);
  2373.                                 $resSimples $query->getResult();
  2374.                                 $period = new DatePeriod(
  2375.                                     $item['start'],
  2376.                                     new DateInterval('P1D'),
  2377.                                     $item['end']
  2378.                                 );
  2379.                                 $arrayPeriod = [];
  2380.                                 foreach ($period as $key => $value) { $arrayPeriod[] = $value; }
  2381.                                 $logAllDiasEnReserva false;
  2382.                                 $logDiaEnReserva false;
  2383.                                 //Verificamos que cada dia tenga su reserva de sala para que no haya hueco
  2384.                                 foreach ($arrayPeriod as $day) {
  2385.                                     foreach ($resSimples as $resSimple) {
  2386.                                         if ($resSimple->getDateStart()->format('Y-m-d') == $day->format('Y-m-d')) {
  2387.                                             $logDiaEnReserva true;
  2388.                                             break;
  2389.                                         }
  2390.                                     }
  2391.                                     if (!$logDiaEnReserva) {
  2392.                                         //Un dia no se encontraba, hay un hueco
  2393.                                         foreach ($resSimples as $resDayToAdd) {
  2394.                                             if (!empty($resDayToAdd->getType())) {       // Solo se deben agregar montajes y desmontajes aqui
  2395.                                                 $item['start'] = $resDayToAdd->getDateStart();
  2396.                                                 $item['end'] = $resDayToAdd->getDateEnd();
  2397.                                                 $br '<br>';
  2398.                                                 $br strpos($item['title'], $br);
  2399.                                                 $tempText substr($item['title'], $br 4);
  2400.                                                 $item['title'] = $resDayToAdd->getDateStart()->format('H:i') . ' ' '<br>' $tempText;
  2401.                                                 $datos[] = $item;
  2402.                                             }
  2403.                                         }
  2404.                                         break;
  2405.                                     } else {
  2406.                                         //Se debe evaluar el siguiente dia
  2407.                                         $logDiaEnReserva false;
  2408.                                         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
  2409.                                             $logAllDiasEnReserva true;
  2410.                                         }
  2411.                                     }
  2412.                                 }
  2413.                                 if ($logAllDiasEnReserva) { $datos[] = $item; }
  2414.                             } else {
  2415.                                 // El montaje o desmontaje es de 1 o 2 dias, no hay posibilidad de hueco
  2416.                                 $datos[] = $item;
  2417.                             }
  2418.                         }
  2419.                     }
  2420.                     //FIN: Verificamos por huecos dentro de la reserva
  2421.                 }
  2422.             }
  2423.         }
  2424.         $return = array( 'reservation' => $datos, );
  2425.         $response = new JsonResponse($return);
  2426.         return $response;
  2427.     }
  2428.     /**
  2429.      * @Route("/delete/{id}", name="reservations_delete")
  2430.      */
  2431.     public function deleteAction($idEntityManagerInterface $emRequest $request)
  2432.     {
  2433.         $reserva $em->getRepository(Reservation::class)->findOneById($id);
  2434.         $hoy = new \DateTime("now"NULL);
  2435.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  2436.         $user_id $user_logueado->getId();
  2437.         $reserva->setUpdatedBy($user_id);
  2438.         $reserva->setUpdatedAt($hoy);
  2439.         $reserva->setStatus('Deleted');
  2440.         try{
  2441.             $em->persist($reserva);
  2442.             $em->flush();
  2443.             $successMessage 'La reserva ha sido actualizada.';
  2444. //            $successMessage = $this->translator->trans($event);
  2445.             $this->addFlash('mensajereservation'$successMessage);
  2446.         } catch (\Exception $e){
  2447.             $event 'An error occurred: '.$e->getMessage();
  2448.             $errorMessage $this->translator->trans($event);
  2449.             $this->addFlash('mensajereservationerror'$errorMessage);
  2450.         }
  2451.         return $this->redirectToRoute('reservations_greenpatio_index');
  2452.     }
  2453.     /**
  2454.      * @Route("/listgpprices", name="reservations_greenpatio_prices")
  2455.      */
  2456.     public function indexPricesAction(EntityManagerInterface $emRequest $request) {
  2457.         $prices $em->getRepository(ReservationLoungeProfile::class)->findBy(
  2458.             array(),
  2459.             array('id' => 'ASC')
  2460.         );
  2461.         $data = [];
  2462.         foreach ($prices as $price){
  2463.             $periodSql $em->getRepository(ReservationPeriod::class)->findOneById($price->getPeriodId());
  2464.             $price->setPeriodId($periodSql->getName());
  2465.             $loungeTemp $em->getRepository(ReservationLoungeDetails::class)->findOneById($price->getLoungeId());
  2466.             if(!is_null($loungeTemp)){ $price->setLoungeId($loungeTemp->getName()); }
  2467.             $data[] = $price;
  2468.         }
  2469.         $reserv = new ReservationLoungeProfile();
  2470.         $form $this->createReservationLoungeProfileCreateForm($reserv);
  2471.         return $this->render('MDS/GreenPatioBundle/reservations/list-reservations-gp-prices.html.twig',
  2472.             array(
  2473.                 'groups' => null,
  2474.                 'prices' => $data,
  2475.                 'form' => $form->createView()
  2476.             )
  2477.         );
  2478.     }
  2479.     /**
  2480.      * @Route("/deletegpprice/{id}", name="reservations_price_delete")
  2481.      */
  2482.     public function deletePriceAction($idEntityManagerInterface $emRequest $request)
  2483.     {
  2484.         $price $em->getRepository(ReservationLoungeProfile::class)->findOneById($id);
  2485.         try{
  2486.             $em->remove($price);
  2487.             $em->flush();
  2488.             $event 'The Item has been Deleted.';
  2489.             $successMessage $this->translator->trans($event);
  2490.             $this->addFlash('mensajereservation'$successMessage);
  2491.         } catch (\Exception $e){
  2492.             $event 'An error occurred: '.$e->getMessage();
  2493.             /* Para el usuario */
  2494.             $errorMessage $this->translator->trans($event);
  2495.             $this->addFlash('mensajereservationerror'$errorMessage);
  2496.         }
  2497.         return $this->redirectToRoute('reservations_greenpatio_prices');
  2498.     }
  2499.     /**
  2500.      * @Route("/addgpprice/",  name="reservations_greenpatio_addgpprice")
  2501.      */
  2502.     public function addReservationGpPriceAction(EntityManagerInterface $emRequest $request)
  2503.     {
  2504.         $reserv = new ReservationLoungeProfile();
  2505.         $form $this->createReservationLoungeProfileCreateForm($reserv);
  2506.         $gpPrices $em->getRepository(ReservationLoungeProfile::class)->findAll();
  2507.         return $this->render('MDS/GreenPatioBundle/reservations/add-reservations-gp-price.html.twig', array('form' => $form->createView(), 'gpPrices' => $gpPrices ));
  2508.     }
  2509.     private function createReservationLoungeProfileCreateForm(ReservationLoungeProfile $entity)
  2510.     {
  2511.         $form $this->createForm(ReservationLoungeProfileType::class, $entity, array(
  2512.             'action' => $this->generateUrl('reservations_greenpatio_price_create'),
  2513.             'method' => 'POST'
  2514.         ));
  2515.         return $form;
  2516.     }
  2517.     /**
  2518.      * @Route("/creategpprice", name="reservations_greenpatio_price_create")
  2519.      */
  2520.     public function createGpPriceAction(EntityManagerInterface $emRequest $request){
  2521.         $reservaGpPrice = new ReservationLoungeProfile();
  2522.         $form $this->createReservationLoungeProfileCreateForm($reservaGpPrice);
  2523.         $form->handleRequest($request);
  2524.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  2525.         $user_id $user_logueado->getId();
  2526.         $hoy = new \DateTime("now"NULL);
  2527.         $reservaGpPrice->setCreatedAt($hoy);
  2528.         $reservaGpPrice->setCreatedId($user_id);
  2529.         $reservaGpPrice->setUpdatedAt($hoy);
  2530.         $reservaGpPrice->setUpdatedId($user_id);
  2531.         $periodSql $em->getRepository(ReservationPeriod::class)->findOneById($form->get('periodId')->getData());
  2532.         if (!empty($periodSql)){ $descTemp $periodSql->getName(); } else { $descTemp null; }
  2533.         $reservaGpPrice->setPeriodId($reservaGpPrice->getPeriodId()->getId());
  2534.         $reservaGpPrice->setLoungeId($reservaGpPrice->getLoungeId()->getId());
  2535.         if ((!is_null($reservaGpPrice->getLoungeId())) and (!is_null($descTemp))){
  2536.             $descriptionSql $em->getRepository(ReservationLoungeDetails::class)->findOneById($form->get('loungeId')->getData());
  2537.             $description $descriptionSql->getName().' - '.$descTemp;
  2538.             $reservaGpPrice->setDescription($description);
  2539.         } else {
  2540.             $reservaGpPrice->setDescription(null);
  2541.         }
  2542.         if($form->isValid())
  2543.         {
  2544.             try{
  2545.                 $em->persist($reservaGpPrice);
  2546.                 $em->flush();
  2547.                 $event 'The Item Price has been created.';
  2548.                 $successMessage $this->translator->trans($event);
  2549.                 $this->addFlash('mensajereservation'$successMessage);
  2550.             } catch (\Exception $e){
  2551.                 $event 'An error occurred: '.$e->getMessage();
  2552.                 $errorMessage $this->translator->trans($event);
  2553.                 $this->addFlash('mensajereservationerror'$errorMessage);
  2554.             }
  2555.         } else {
  2556.             $errorMessage $this->translator->trans('Error, some fields are empty');
  2557.             $this->addFlash('mensajereservationerror'$errorMessage);
  2558.         }
  2559.         return $this->redirectToRoute('reservations_greenpatio_prices');
  2560.     }
  2561.     /**
  2562.      * @Route("/getReservationLoungeProfile", name="get_reservation_lounge_profile")
  2563.      */
  2564.     public function getReservationLoungeProfileAction(EntityManagerInterface $emRequest $request) {
  2565.         $codProfile $_POST['idprofile'];
  2566.         $salasPorPerfil $em->getRepository(ReservationLoungeProfile::class)->findBy( array( 'periodId' => $codProfile ) );
  2567.         $datos = [];
  2568.         if (!empty($salasPorPerfil)){
  2569.             foreach($salasPorPerfil as $sala){
  2570.                 $datos[] = array(
  2571.                     "id" => $sala->getId(),
  2572.                     "idlounge" => $sala->getLoungeId(),
  2573.                     "nameDescription" => $sala->getDescription(),
  2574.                     "price" => $sala->getPrice(),
  2575.                 );
  2576.             }
  2577.         }
  2578.         $return = array( 'salasPerfil' => $datos'id' => $codProfile, );
  2579.         $response = new JsonResponse($return);
  2580.         return $response;
  2581.     }
  2582.     /**
  2583.      * @Route("/getReservationPeriod", name="get_reservation_Period")
  2584.      */
  2585.     public function getReservationPeriodAction(EntityManagerInterface $emRequest $request) {
  2586.         $id $_POST['id'];
  2587.         $period $em->getRepository(ReservationPeriod::class)->findOneById($id);
  2588.         $datos = array();
  2589.         if (!empty($period)){
  2590.             $datos = array(
  2591.                 "id" => $period->getId(),
  2592.                 "hourStart" => is_null($period->getHourStart())?"":$period->getHourStart()->format('H:i'),
  2593.                 "hourEnd" => is_null($period->getHourEnd())?"":$period->getHourEnd()->format('H:i'),
  2594.             );
  2595.         }
  2596.         $return $datos;
  2597.         $response = new JsonResponse($return);
  2598.         return $response;
  2599.     }
  2600.     /**
  2601.      * @Route("/getReservationLoungePrice", name="get_reservation_lounge_price")
  2602.      */
  2603.     public function getReservationLoungePriceAction(EntityManagerInterface $emRequest $request) {
  2604.         $id $_POST['id'];
  2605.         $precio $em->getRepository(ReservationLoungeProfile::class)->findOneById($id);
  2606.         $datos = array();
  2607.         if (!empty($precio)){ $datos = array( "id" => $precio->getId(), "price" => $precio->getPrice() ); }
  2608.         $return $datos;
  2609.         $response = new JsonResponse($return);
  2610.         return $response;
  2611.     }
  2612.     /**
  2613.      * @Route("/addloungedetails/",  name="reservations_greenpatio_addloungedetails")
  2614.      */
  2615.     public function addReservationLoungeDetailsActionRequest $request)
  2616.     {
  2617.         $lounge = new ReservationLoungeDetails();
  2618.         $form $this->createReservationLoungeDetailsCreateForm($lounge);
  2619.         return $this->render('MDS/GreenPatioBundle/reservations/add-reservations-lounge-details.html.twig', array('form' => $form->createView() ));
  2620.     }
  2621.     private function createReservationLoungeDetailsCreateForm(ReservationLoungeDetails $entity)
  2622.     {
  2623.         $form $this->createForm(ReservationLoungeDetailsType::class, $entity, array(
  2624.             'action' => $this->generateUrl('reservations_greenpatio_lounge_details_create'),
  2625.             'method' => 'POST'
  2626.         ));
  2627.         return $form;
  2628.     }
  2629.     /**
  2630.      * @Route("/createloungedetails", name="reservations_greenpatio_lounge_details_create")
  2631.      */
  2632.     public function createLoungeDetailsAction(EntityManagerInterface $emRequest $request)
  2633.     {
  2634.         $lounge = new ReservationLoungeDetails();
  2635.         $form $this->createReservationLoungeDetailsCreateForm($lounge);
  2636.         $form->handleRequest($request);
  2637.         /* Obtengo usuario logueado */
  2638.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  2639.         $user_id $user_logueado->getId();
  2640.         $hoy = new \DateTime("now"NULL);
  2641.         $lounge->setCreatedAt($hoy);
  2642.         $lounge->setCreatedId($user_id);
  2643.         $lounge->setUpdatedAt($hoy);
  2644.         $lounge->setUpdatedId($user_id);
  2645.         if($form->isValid()){
  2646.             try{
  2647.                 $em->persist($lounge);
  2648.                 $em->flush();
  2649.                 $event 'The Lounge has been created.';
  2650.                 $successMessage $this->translator->trans($event);
  2651.                 $this->addFlash('mensajereservation'$successMessage);
  2652.                 $this->reordenarSalas($lounge->getRankLounge(), $lounge->getId());
  2653.             } catch (\Exception $e){
  2654.                 $event 'An error occurred: '.$e->getMessage();
  2655.                 /* Para el usuario */
  2656.                 $errorMessage $this->translator->trans($event);
  2657.                 $this->addFlash('mensajereservationerror'$errorMessage);
  2658.             }
  2659.         } else {
  2660.             $errorMessage $this->translator->trans('Error, some fields are empty');
  2661.             $this->addFlash('mensajereservationerror'$errorMessage);
  2662.         }
  2663.         return $this->redirectToRoute('reservations_greenpatio_list_lounges');
  2664.     }
  2665.     /**
  2666.      * @Route("/listloungedetails", name="reservations_greenpatio_list_lounges")
  2667.      */
  2668.     public function indexLoungesAction(EntityManagerInterface $emRequest $request) {
  2669.         $salas $em->getRepository(ReservationLoungeDetails::class)->findAll();
  2670.         $lounge = new ReservationLoungeDetails();
  2671.         $form $this->createReservationLoungeDetailsCreateForm($lounge);
  2672.         return $this->render('MDS/GreenPatioBundle/reservations/list-reservations-lounges-details.html.twig',
  2673.             array(
  2674.                 'groups' => null,
  2675.                 'salas' => $salas,
  2676.                 'form' => $form->createView()
  2677.             )
  2678.         );
  2679.     }
  2680.     /**
  2681.      * @Route("/editloungedetails/{id}", name="reservations_lounge_details")
  2682.      */
  2683.     public function editLoungeDetailsAction($idEntityManagerInterface $emRequest $request)
  2684.     {
  2685.         $lounge $em->getRepository(ReservationLoungeDetails::class)->findOneById($id);
  2686.         
  2687.         $loungeContracts $em->getRepository(DocContractModel::class)->findBy(array('companyId' => 7'modelId' => $id));
  2688.         $contractsByLanguage = [];
  2689.         foreach ($loungeContracts as $contract) {
  2690.             $contractsByLanguage[$contract->getLanguage()] = $contract;
  2691.         }
  2692.         $loungePictures $em->getRepository(ReservationLoungePicture::class)->findBy( array('loungeId' => $id'title' => null,));
  2693.         $loungeVideos $em->getRepository(ReservationLoungeVideo::class)->findByLoungeId($id);
  2694.         $loungeDescriptions $em->getRepository(ReservationLoungeDescription::class)->findByLoungeId($id);
  2695.         $loungeWebDescriptions $em->getRepository(ReservationLoungeWebDescription::class)->findByLounge($lounge);
  2696.         $descriptionsByLanguage = [];
  2697.         foreach ($loungeWebDescriptions as $description) {
  2698.             $descriptionsByLanguage[$description->getLanguage()] = $description;
  2699.         }
  2700.         /* Obtengo usuario logueado */
  2701.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  2702.         $user_id $user_logueado->getId();
  2703.         /* Gestión de eventos en Log */
  2704.         $user_lastname $user_logueado->getLastname();
  2705.         $user_name $user_logueado->getName();
  2706.         $user_email $user_logueado->getEmail();
  2707.         $user_rol $user_logueado->getRoles();
  2708.         $event_url $request->getPathInfo();
  2709.         $event_complete $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
  2710.         $hoy = new \DateTime("now"NULL);
  2711.         $form $this->createEditReservationLoungeDetailsForm($lounge$id);
  2712.         // Para evitar le duplicidad de idiomas en las descripciones
  2713.         $loungeDescriptionsPreexistentes $em->getRepository(ReservationLoungeDescription::class)->findByLoungeId($id);
  2714.         $idiomasPreexistentes = array();
  2715.         foreach ($loungeDescriptionsPreexistentes as $item){ $idiomasPreexistentes[] = $item->getLanguage(); }
  2716.         $datos_videos = array();
  2717.         foreach ($loungeVideos as $video){
  2718.             $urvideo_final '<iframe class="embed-responsive-item" src="'.$video->getVideo().'"></iframe>';
  2719.             $datos_videos[] = array(
  2720.                 'id' => $video->getId(),
  2721.                 'urlvideo' => $urvideo_final
  2722.             );
  2723.         }
  2724.         $blueprints $em->getRepository(ReservationLoungePicture::class)->findBy( array('loungeId' => $id'title' => 'Blueprint', ) );
  2725.         $pictTeatro $em->getRepository(ReservationLoungePicture::class)->findBy( array('loungeId' => $id'title' => 'Teatro', ) );
  2726.         if (sizeof($pictTeatro) == 0) {$pictTeatro null;}
  2727.         $pictCoctel $em->getRepository(ReservationLoungePicture::class)->findBy( array('loungeId' => $id'title' => 'Coctel', ) );
  2728.         if (sizeof($pictCoctel) == 0) {$pictCoctel null;}
  2729.         $pictEscuela $em->getRepository(ReservationLoungePicture::class)->findBy( array('loungeId' => $id'title' => 'Escuela', ) );
  2730.         if (sizeof($pictEscuela) == 0) {$pictEscuela null;}
  2731.         $picsMontaje = array (
  2732.             'pictTeatro' => $pictTeatro,
  2733.             'pictCoctel' => $pictCoctel,
  2734.             'pictEscuela' => $pictEscuela
  2735.         );
  2736.         if(empty($picsMontaje['pictTeatro']) and empty($picsMontaje['pictCoctel']) and empty($picsMontaje['pictEscuela'])){ $picsMontaje null; }
  2737.         $loungedimmensions $em->getRepository(ReservationLoungeDetails::class)->findOneById($id);
  2738.         return $this->render('MDS/GreenPatioBundle/reservations/edit-reservations-lounge-details.html.twig',
  2739.             array(
  2740.                 'id' => $id,
  2741.                 'hoy' => $hoy,
  2742.                 'lounge' => $lounge,
  2743.                 'loungeContracts' => $contractsByLanguage,
  2744.                 'descriptions' => $loungeDescriptions,
  2745.                 'loungeWebDesctiptions' => $descriptionsByLanguage,
  2746.                 'languagesWeb' => LanguageConstants::getAvailableLanguages(),
  2747.                 'pictures' => $loungePictures,
  2748.                 'blueprints' => $blueprints,
  2749.                 'picsMontaje' => $picsMontaje,
  2750.                 'loungedimmensions' => $loungedimmensions,
  2751.                 'videos' => $datos_videos,
  2752.                 'idiomasPreexistentes' => $idiomasPreexistentes,
  2753.                 'form' => $form->createView()
  2754.             ));
  2755.     }
  2756.     private function createEditReservationLoungeDetailsForm(ReservationLoungeDetails $entity$id)
  2757.     {
  2758.         $form $this->createForm(ReservationLoungeDetailsType::class, $entity,
  2759.             array(
  2760.                 'action' => $this->generateUrl('reservations_lounge_details_update',
  2761.                     array(
  2762.                         'id' => $id,
  2763.                         'price' => $entity
  2764.                     )
  2765.                 ), 'method' => 'PUT'));
  2766.         return $form;
  2767.     }
  2768.     /**
  2769.      * @Route("/updateloungedetails/{id}", name="reservations_lounge_details_update")
  2770.      */
  2771.     public function updateLoungeDetailsAction($idRequest $request)
  2772.     {
  2773.         $em $this->getDoctrine()->getManager();
  2774.         $lounge $em->getRepository(ReservationLoungeDetails::class)->findOneById($id);
  2775.         $lounge->setName($request->request->get('mds_greenpatiobundle_reservationloungedetails')['name']);
  2776.         $preNumber $lounge->getRankLounge();
  2777.         $postNumber $request->request->get('mds_greenpatiobundle_reservationloungedetails')['rankLounge'];
  2778.         $hoy = new \DateTime("now"NULL);
  2779.         $form $this->createEditReservationLoungeDetailsForm($lounge$id);
  2780.         $form->handleRequest($request);
  2781.         if($form->isValid())
  2782.         {
  2783.             /* Obtengo usuario logueado */
  2784.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  2785.             $user_id $user_logueado->getId();
  2786.             /* Gestión de eventos en Log */
  2787.             $user_lastname $user_logueado->getLastname();
  2788.             $user_name $user_logueado->getName();
  2789.             $user_email $user_logueado->getEmail();
  2790.             $user_rol $user_logueado->getRoles();
  2791.             $event_url $request->getPathInfo();
  2792.             $event_complete $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
  2793.             $lounge->setUpdatedId($user_id);
  2794.             $lounge->setUpdatedAt($hoy);
  2795.             try{
  2796.                 // Reordenar salas si se ha cambiado el rank number de la sala
  2797.                 if (!( $preNumber == $postNumber)){ $this->reordenarSalas($postNumber$lounge->getId()); }
  2798.                 $em->persist($lounge);
  2799.                 $em->flush();
  2800.                 $event 'The lounge has been Updated. Now';
  2801.                 $successMessage $this->translator->trans($event);
  2802.                 $this->addFlash('mensajereservation'$successMessage);
  2803.             } catch (\Exception $e){
  2804.                 $event 'An error occurred: '.$e->getMessage();
  2805.                 /* Para el usuario */
  2806.                 $errorMessage $this->translator->trans($event);
  2807.                 $this->addFlash('mensajereservationerror'$errorMessage);
  2808.             }
  2809.             /* Fin Gestión de eventos en Log */
  2810.             return $this->redirectToRoute('reservations_greenpatio_list_lounges');
  2811.         } else {
  2812.             $errorMessage $this->translator->trans('Error, some fields are empty');
  2813.             $this->addFlash('mensajereservationerror'$errorMessage);
  2814.         }
  2815.         return $this->render('MDS/GreenPatioBundle/reservations/edit-reservations-lounge-details.html.twig',
  2816.             array(
  2817.                 'id' => $lounge->getId(),
  2818.                 'lounge' => $lounge,
  2819.                 'form' => $form->createView()
  2820.             )
  2821.         );
  2822.     }
  2823.     /**
  2824.      * @Route("/deleteloungedetails/{id}", name="reservations_lounge_details_delete")
  2825.      */
  2826.     public function deleteLoungeDetailsAction($idEntityManagerInterface $emRequest $request)
  2827.     {
  2828.         $lounge $em->getRepository(ReservationLoungeDetails::class)->findOneById($id);
  2829.         try{
  2830.             $em->remove($lounge);
  2831.             $em->flush();
  2832.             // INICIO: Eliminamos los precios asociados a la sala
  2833.                 $profiles $em->getRepository(ReservationLoungeProfile::class)->findByLoungeId($id);
  2834.                 foreach ($profiles as $item){
  2835.                     $em->remove($item);
  2836.                     $em->flush();
  2837.                 }
  2838.             // FIN: Eliminamos los precios asociados a la sala
  2839.             $event 'The Reservation has been Deleted. Now';
  2840.             $successMessage $this->translator->trans($event);
  2841.             $this->addFlash('mensajereservation'$successMessage);
  2842.         } catch (\Exception $e){
  2843.             $event 'An error occurred: '.$e->getMessage();
  2844.             /* Para el usuario */
  2845.             $errorMessage $this->translator->trans($event);
  2846.             $this->addFlash('mensajereservationerror'$errorMessage);
  2847.         }
  2848.         /* Fin Gestión de eventos en Log */
  2849.         return $this->redirectToRoute('reservations_greenpatio_list_lounges');
  2850.     }
  2851.     /**
  2852.      * @Route("/deleteloungeelement/{idlounge}/{idtype}/{idelement}", name="reservations_lounge_element_delete")
  2853.      */
  2854.     public function deleteLoungeElementAction($idlounge$idtype$idelementEntityManagerInterface $emRequest $request)
  2855.     {
  2856.         switch ($idtype){
  2857.             case 1$item $em->getRepository(ReservationLoungeDescription::class)->findOneById($idelement); break;      //Descripcion
  2858.             case 2$item $em->getRepository(ReservationLoungePicture::class)->findOneById($idelement); break;      //Imagenes
  2859.             case 3$item $em->getRepository(ReservationLoungeVideo::class)->findOneById($idelement); break;      //Videos
  2860.             default: $item null; break;
  2861.         }
  2862.         try{
  2863.             $em->remove($item);
  2864.             $em->flush();
  2865.             $event 'The Item has been Deleted. Now';
  2866.             $successMessage $this->translator->trans($event);
  2867.             $this->addFlash('mensajereservation'$successMessage);
  2868.         } catch (\Exception $e){
  2869.             $event 'An error occurred: '.$e->getMessage();
  2870.             /* Para el usuario */
  2871.             $errorMessage $this->translator->trans($event);
  2872.             $this->addFlash('mensajereservationerror'$errorMessage);
  2873.         }
  2874.         /* Fin Gestión de eventos en Log */
  2875.         return $this->redirectToRoute('reservations_lounge_details', array( 'id' => $idlounge ));
  2876.     }
  2877.     /**
  2878.      *@Route("/exclamation", name="get_exclamation")
  2879.      */
  2880.     public function exclamationAction(EntityManagerInterface $emRequest $request) {
  2881.         $dateStar $request->request->get('dateStar');
  2882.         $dateEnd $request->request->get('dateEnd');
  2883.         $hourStar $request->request->get('hourStar');
  2884.         $hourEnd $request->request->get('hourEnd');
  2885.         $profileId $request->request->get('profileId');
  2886.         $mountingDate $request->request->get('mountingDate');
  2887.         $mountingHourStart $request->request->get('mountingHourStart');
  2888.         $removalDate $request->request->get('removalDate');
  2889.         $removalHourEnd $request->request->get('removalHourEnd');
  2890.         // INICIO: Si hay montaje o desmontaje  en el evento nuevo las fechas a utilizar son estas y no las del evento
  2891.         if (!empty($mountingDate)){
  2892.             $dateStar $mountingDate;
  2893.             if (!empty($mountingHourStart)){ $hourStar $mountingHourStart; }
  2894.         }
  2895.         if (!empty($removalDate)){
  2896.             $dateEnd $removalDate;
  2897.             if (!empty($removalHourEnd)){ $hourEnd $removalHourEnd; }
  2898.         }
  2899.         // FIN: Si hay montaje o desmontaje  en el evento nuevo las fechas a utilizar son estas y no las del evento
  2900.         $loungeId $em->getRepository(ReservationLoungeProfile::class)->findOneById($profileId);
  2901.         $newdateStar $dateStar.' '.$hourStar.':00';
  2902.         $newdateEnd $dateEnd .' '.$hourEnd.':00';
  2903.         $parameters = array(
  2904.             'dateStar' => $newdateStar,
  2905.             'dateEnd' => $newdateEnd,
  2906.             'idLounge' => $loungeId->getLoungeId(),
  2907.         );
  2908.         $dql 'SELECT i
  2909.                     FROM GreenPatioBundle:ReservationLounge i
  2910.                     WHERE  i.dateStart >= :dateStar
  2911.                       and i.dateStart <= :dateEnd
  2912.                       and i.idLounge = :idLounge';
  2913.         $query $em->createQuery($dql)->setParameters($parameters);
  2914.         $reservationLounge1 $query->getResult();
  2915.         $dql 'SELECT i
  2916.                     FROM GreenPatioBundle:ReservationLounge i
  2917.                     WHERE  i.dateEnd >= :dateStar
  2918.                       and i.dateEnd <= :dateEnd
  2919.                       and i.idLounge = :idLounge';
  2920.         $query $em->createQuery($dql)->setParameters($parameters);
  2921.         $reservationLounge2 $query->getResult();
  2922.         $parameters = array(
  2923.             'dateStar' => $newdateStar,
  2924.             'idLounge' => $loungeId->getLoungeId()
  2925.         );
  2926.         $dql 'SELECT i
  2927.                     FROM GreenPatioBundle:ReservationLounge i
  2928.                     WHERE  :dateStar >= i.dateStart
  2929.                       and :dateStar <= i.dateEnd
  2930.                       and i.idLounge = :idLounge';
  2931.         $query $em->createQuery($dql)->setParameters($parameters);
  2932.         $reservationLounge3 $query->getResult();
  2933.         $parameters = array(
  2934.             'dateEnd' => $newdateEnd,
  2935.             'idLounge' => $loungeId->getLoungeId(),
  2936.         );
  2937.         $dql 'SELECT i
  2938.                     FROM GreenPatioBundle:ReservationLounge i
  2939.                     WHERE  :dateEnd >= i.dateStart
  2940.                       and :dateEnd <= i.dateEnd
  2941.                       and i.idLounge = :idLounge';
  2942.         $query $em->createQuery($dql)->setParameters($parameters);
  2943.         $reservationLounge4 $query->getResult();
  2944.         // INICIO: Si hay montaje o desmontaje  en los eventos de la BD, las fechas a utilizar son estas y no las del evento
  2945.         $parameters = array(
  2946.             'dateStar' => $newdateStar,
  2947.             'dateEnd' => $newdateEnd,
  2948.             'idLounge' => $loungeId->getLoungeId(),
  2949.         );
  2950.         $dql 'SELECT i
  2951.                     FROM GreenPatioBundle:ReservationLounge i
  2952.                     WHERE  i.mountingDate >= :dateStar
  2953.                       and i.mountingDate <= :dateEnd
  2954.                       and i.idLounge = :idLounge';
  2955.         $query $em->createQuery($dql)->setParameters($parameters);
  2956.         $reservationLounge5 $query->getResult();
  2957.         // FIN: Si hay montaje o desmontaje  en los eventos de la BD, las fechas a utilizar son estas y no las del evento
  2958.         $reservationLounge array_merge($reservationLounge1,$reservationLounge2,$reservationLounge3,$reservationLounge4);
  2959.         $data = array();
  2960.         foreach ($reservationLounge as $res){
  2961.             $reservation $em->getRepository(Reservation::class)->findOneById($res->getIdReservation());
  2962.             if (!is_null($reservation->getIdProposal() )){
  2963.                 $proposal $em->getRepository(Proposal::class)->findOneById($reservation->getIdProposal());
  2964.                 $user $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  2965.                 $data[] = array(
  2966.                     'name' => 'Id Proposal',
  2967.                     'idproposal' => $proposal->getId(),
  2968.                     'title' => $proposal->getTitle(),
  2969.                     'Agent' => $user->getName().' '.$user->getLastname(),
  2970.                 );
  2971.             } else {
  2972.                 $user $em->getRepository(User::class)->findOneById($reservation->getCreatedBy());
  2973.                 $data[] = array(
  2974.                     'name' => 'Id Green Patio',
  2975.                     'idproposal' => $reservation->getId(),
  2976.                     'title' => $reservation->getTitle(),
  2977.                     'Agent' => $user->getName().' '.$user->getLastname(),
  2978.                 );
  2979.             }
  2980.         }
  2981.         $return = array( 'reservation' => $data, );
  2982.         $response = new JsonResponse($return);
  2983.         return $response;
  2984.     }
  2985.     /**
  2986.      * @Route("/addperiod/",  name="reservations_greenpatio_addperiod")
  2987.      */
  2988.     public function addReservationPeriodActionRequest $request)
  2989.     {
  2990.         $period = new ReservationPeriod();
  2991.         $form $this->createReservationperiodCreateForm($period);
  2992.         return $this->render('MDS/GreenPatioBundle/reservations/list-reservations-period.html.twig', array('form' => $form->createView() ));
  2993.     }
  2994.     private function createReservationperiodCreateForm(Reservationperiod $entity)
  2995.     {
  2996.         $form $this->createForm(ReservationPeriodType::class, $entity, array(
  2997.             'action' => $this->generateUrl('reservations_greenpatio_period_create'),
  2998.             'method' => 'POST'
  2999.         ));
  3000.         return $form;
  3001.     }
  3002.     /**
  3003.      * @Route("/createperiod", name="reservations_greenpatio_period_create")
  3004.      */
  3005.     public function createPeriodAction(EntityManagerInterface $emRequest $request)
  3006.     {
  3007.         $period = new ReservationPeriod();
  3008.         $form $this->createReservationPeriodCreateForm($period);
  3009.         $form->handleRequest($request);
  3010.         /* Obtengo usuario logueado */
  3011.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  3012.         $user_id $user_logueado->getId();
  3013.         $hoy = new \DateTime("now"NULL);
  3014.         $period->setCreatedAt($hoy);
  3015.         $period->setCreatedId($user_id);
  3016.         $period->setUpdatedAt($hoy);
  3017.         $period->setUpdatedId($user_id);
  3018.         if($form->isValid())
  3019.         {
  3020.             try{
  3021.                 $em->persist($period);
  3022.                 $em->flush();
  3023.                 $event 'The Period has been created.';
  3024.                 $successMessage $this->translator->trans($event);
  3025.                 $this->addFlash('mensajereservation'$successMessage);
  3026.             } catch (\Exception $e){
  3027.                 $event 'An error occurred: '.$e->getMessage();
  3028.                 /* Para el usuario */
  3029.                 $errorMessage $this->translator->trans($event);
  3030.                 $this->addFlash('mensajereservationerror'$errorMessage);
  3031.             }
  3032.         } else {
  3033.             $errorMessage $this->translator->trans('Error, some fields are empty');
  3034.             $this->addFlash('mensajereservationerror'$errorMessage);
  3035.         }
  3036.         return $this->redirectToRoute('reservations_greenpatio_list_period');
  3037.     }
  3038.     /**
  3039.      * @Route("/listperiod", name="reservations_greenpatio_list_period")
  3040.      */
  3041.     public function indexPeriodAction(EntityManagerInterface $emRequest $request) {
  3042.         $periods $em->getRepository(ReservationPeriod::class)->findAll();
  3043.         $period = new ReservationPeriod();
  3044.         $form $this->createReservationPeriodCreateForm($period);
  3045.         return $this->render('MDS/GreenPatioBundle/reservations/list-reservations-period.html.twig',
  3046.             array(
  3047.                 'groups' => null,
  3048.                 'form' => $form->createView(),
  3049.                 'periods' => $periods
  3050.             )
  3051.         );
  3052.     }
  3053.     /**
  3054.      * @Route("/deleteperiod/{id}", name="reservations_period_delete")
  3055.      */
  3056.     public function deletePeriodAction(EntityManagerInterface $em$idRequest $request)
  3057.     {
  3058.         $period $em->getRepository(ReservationPeriod::class)->findOneById($id);
  3059.         try{
  3060.             $em->remove($period);
  3061.             $em->flush();
  3062.             $event 'The Reservation has been Deleted. Now';
  3063.             $successMessage $this->translator->trans($event);
  3064.             $this->addFlash('mensajereservation'$successMessage);
  3065.         } catch (\Exception $e){
  3066.             $event 'An error occurred: '.$e->getMessage();
  3067.             /* Para el usuario */
  3068.             $errorMessage $this->translator->trans($event);
  3069.             $this->addFlash('mensajereservationerror'$errorMessage);
  3070.         }
  3071.         /* Fin Gestión de eventos en Log */
  3072.         return $this->redirectToRoute('reservations_greenpatio_list_period');
  3073.     }
  3074.     /**
  3075.      * @Route("/editperiod/{id}", name="reservations_edit_period")
  3076.      */
  3077.     public function editPeriodAction($idEntityManagerInterface $emRequest $request)
  3078.     {
  3079.         $period $em->getRepository(ReservationPeriod::class)->findOneById($id);
  3080.         /* Obtengo usuario logueado */
  3081.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  3082.         /* Gestión de eventos en Log */
  3083.         $user_lastname $user_logueado->getLastname();
  3084.         $user_name $user_logueado->getName();
  3085.         $user_email $user_logueado->getEmail();
  3086.         $user_rol $user_logueado->getRoles();
  3087.         $event_url $request->getPathInfo();
  3088.         $event_complete $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
  3089.         $hoy = new \DateTime("now"NULL);
  3090.         $form $this->createEditPeriodForm($period$id);
  3091.         return $this->render('MDS/GreenPatioBundle/reservations/edit-reservations-period.html.twig',
  3092.             array(
  3093.                 'id' => $id,
  3094.                 'hoy' => $hoy,
  3095.                 'period' => $period,
  3096.                 'form' => $form->createView()
  3097.             ));
  3098.     }
  3099.     private function createEditPeriodForm(ReservationPeriod $entity$id)
  3100.     {
  3101.         $form $this->createForm(ReservationPeriodType::class, $entity,
  3102.             array(
  3103.                 'action' => $this->generateUrl('reservations_period_update',
  3104.                     array(
  3105.                         'id' => $id,
  3106.                         'period' => $entity
  3107.                     )
  3108.                 ), 'method' => 'PUT'));
  3109.         return $form;
  3110.     }
  3111.     /**
  3112.      * @Route("/updateperiod/{id}", name="reservations_period_update")
  3113.      */
  3114.     public function updatePeriodAction($idEntityManagerInterface $emRequest $request)
  3115.     {
  3116.         $period $em->getRepository(ReservationPeriod::class)->findOneById($id);
  3117.         $newName $request->request->get('mds_greenpatiobundle_reservationperiod')['name'];
  3118.         $period->setName($newName);
  3119.         $hoy = new \DateTime("now"NULL);
  3120.         $form $this->createEditPeriodForm($period$id);
  3121.         $form->handleRequest($request);
  3122.         if($form->isValid())
  3123.         {
  3124.             /* Obtengo usuario logueado */
  3125.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  3126.             $user_id $user_logueado->getId();
  3127.             /* Gestión de eventos en Log */
  3128.             $user_lastname $user_logueado->getLastname();
  3129.             $user_name $user_logueado->getName();
  3130.             $user_email $user_logueado->getEmail();
  3131.             $user_rol $user_logueado->getRoles();
  3132.             $event_url $request->getPathInfo();
  3133.             $event_complete $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
  3134.             $period->setUpdatedId($user_id);
  3135.             $period->setUpdatedAt($hoy);
  3136.             try{
  3137.                 $em->persist($period);
  3138.                 $em->flush();
  3139.                 $event 'The period has been Updated. Now';
  3140.                 $successMessage $this->translator->trans($event);
  3141.                 $this->addFlash('mensajereservation'$successMessage);
  3142.             } catch (\Exception $e){
  3143.                 $event 'An error occurred: '.$e->getMessage();
  3144.                 /* Para el usuario */
  3145.                 $errorMessage $this->translator->trans($event);
  3146.                 $this->addFlash('mensajereservationerror'$errorMessage);
  3147.             }
  3148.             /* Fin Gestión de eventos en Log */
  3149.             return $this->redirectToRoute('reservations_greenpatio_list_period');
  3150.         } else {
  3151.             $errorMessage $this->translator->trans('Error, some fields are empty');
  3152.             $this->addFlash('mensajereservationerror'$errorMessage);
  3153.         }
  3154.         return $this->render('MDS/GreenPatioBundle/reservations/edit-reservations-period.html.twig',
  3155.             array(
  3156.                 'id' => $id,
  3157.                 'hoy' => $hoy,
  3158.                 'period' => $period,
  3159.                 'form' => $form->createView()
  3160.             )
  3161.         );
  3162.     }
  3163.     /**
  3164.      * @Route("/getperiodos/",  name="reservations_greenpatio_get_periods")
  3165.      */
  3166.     public function addReservationPeriodsAction(EntityManagerInterface $emRequest $request)
  3167.     {
  3168.         $periods $em->getRepository(ReservationPeriod::class)->findAll();
  3169.         $data = array();
  3170.         foreach ($periods as $items){ $data[] = array( 'id' => $items->getId(), 'name' => $items->getName(), ); }
  3171.         $return = array( 'periods' => $data, );
  3172.         $response = new JsonResponse($return);
  3173.         return $response;
  3174.     }
  3175.     /**
  3176.      * @Route("/addsimple/",  name="reservations_greenpatio_add_simple")
  3177.      */
  3178.     public function addReservationSimpleAction(EntityManagerInterface $emRequest $request)
  3179.     {
  3180.         $reserv = new Reservation();
  3181.         $form $this->createReservationCreateForm($reserv);
  3182.         $parameters = array();
  3183.         $dql 'SELECT p
  3184.                 FROM App:ClientContact p
  3185.                 ORDER BY p.name ASC ';
  3186.         $query $em->createQuery($dql)->setParameters($parameters);
  3187.         $clientsContact $query->getResult();
  3188.         return $this->render('MDS/GreenPatioBundle/reservations/add-reservations-simple.html.twig',
  3189.             array(
  3190.                 'form' => $form->createView(),
  3191.                 'clientsContact' => $clientsContact,
  3192.             ));
  3193.     }
  3194.     private function createReservationCreateForm(Reservation $entity)
  3195.     {
  3196.         $form $this->createForm(ReservationType::class, $entity, array(
  3197.             'action' => $this->generateUrl('reservations_greenpatio_create_simple'),
  3198.             'method' => 'POST'
  3199.         ));
  3200.         return $form;
  3201.     }
  3202.     /**
  3203.      * @Route("/createsimple", name="reservations_greenpatio_create_simple")
  3204.      */
  3205.     public function createSimpleAction(EntityManagerInterface $emRequest $request)
  3206.     {
  3207.         $clientContact $request->request->get('clientContact');
  3208.         $contactUnregistered $request->request->get('contactUnregistered');
  3209.         $nameContactUnregistered $request->request->get('nameContactUnregistered');
  3210.         $phoneContactUnregistered $request->request->get('phoneContactUnregistered');
  3211.         $reserva = new Reservation();
  3212.         $form $this->createReservationCreateForm($reserva);
  3213.         $form->handleRequest($request);
  3214.         /* Obtengo usuario logueado */
  3215.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  3216.         $user_id $user_logueado->getId();
  3217.         $hoy = new \DateTime("now"NULL);
  3218.         if($form->isValid())
  3219.         {
  3220.             $reserva->setUpdatedBy($user_id);
  3221.             $reserva->setUpdatedAt($hoy);
  3222.             // El proveedor de catering no es obligatorio
  3223.             if (is_null($reserva->getCateringName())){
  3224.                 $reserva->setSupplier(4765);
  3225.                 $reserva->setCateringName('HIGO & TRIGO, S.L.');        // Por defecto se desea el Catering de Higo&Trigo
  3226.             } else {
  3227.                 $reserva->setSupplier($reserva->getCateringName()->getId());
  3228.                 $reserva->setCateringName($reserva->getCateringName()->getName());
  3229.             }
  3230.             if (!empty($reserva->getClient())){
  3231.                 $reserva->setClient($reserva->getClient()->getId());
  3232.             }
  3233.             $reserva->setCreatedAt($hoy);
  3234.             $reserva->setCreatedBy($user_id);
  3235.             if(empty($reserva->getDaysBlock()) or !(is_numeric($reserva->getDaysBlock()))){
  3236.                 $reserva->setDaysBlock(7);
  3237.             }
  3238.             if(is_null($reserva->getPriority()) or empty($reserva->getPriority()) or ($reserva->getPriority() == 'Auto')){
  3239.                 $reserva->setPriority(1);
  3240.             } else {
  3241.                 // Se ha establecido una prioridad y todas las prioridades que coincidan con este evento deben ser alteradas
  3242.                 // PENDIENTE A HABLAR CON RAFA
  3243.             }
  3244.             // No hay salas, se asigna a la reserva la fecha del dia actual
  3245.             $reserva->setDateStart(new \DateTime('2078-01-01'));
  3246.             $reserva->setDateEnd(new \DateTime('2000-01-01'));
  3247.             if(!empty($clientContact)){ $reserva->setClientContact($clientContact); }
  3248.             if(!empty($contactUnregistered)){
  3249. //                if (filter_var($contactUnregistered, FILTER_VALIDATE_EMAIL)) {          // Validamos el correo electronico
  3250.                     $reserva->setContactUnregistered($contactUnregistered);
  3251. //                }
  3252.             }
  3253.             if(!empty($nameContactUnregistered)){
  3254.                 $reserva->setNameContactUnregistered($nameContactUnregistered);
  3255.             }
  3256.             if(!empty($phoneContactUnregistered)){
  3257.                 $reserva->setPhoneContactUnregistered($phoneContactUnregistered);
  3258.             }
  3259.             if(empty($reserva->getStatus())){
  3260.                 $reserva->setStatus('Iniciado');
  3261.             } else {
  3262.                 //No se debe crear un evento con estado confirmado. Salva y Rafa seran quienes confirmen los eventos
  3263.                 if(($reserva->getStatus() == 'Confirmed')){
  3264. //                    $reserva->setStatus('Cotizado');              //Ya no es necesario que Rafa o Salva confirmen
  3265.                 }
  3266.             }
  3267.             // Genera un token único utilizando la función uniqid() de PHP
  3268.             $token uniqid();
  3269.             $reserva->setToken($token);
  3270.             try{
  3271.                 $em->persist($reserva);
  3272.                 $em->flush();
  3273.                 $event 'The Reservation has been created.';
  3274.                 $successMessage $this->translator->trans($event);
  3275.                 $this->addFlash('mensajereservation'$successMessage);
  3276.             } catch (\Exception $e){
  3277.                 $event 'An error occurred: '.$e->getMessage();
  3278.                 $errorMessage $this->translator->trans($event);
  3279.                 $this->addFlash('mensajereservationerror'$errorMessage);
  3280.             }
  3281.             //Envio de correo al cliente y al agente si es un bloqueo
  3282.             if(is_null($reserva->getStatus())){
  3283.                 $reserva->setStatus('Cotizado');
  3284.                 $em->persist($reserva);
  3285.                 $em->flush();
  3286.             } else {
  3287.                 if (($reserva->getStatus() == 'Bloqueo')) {
  3288.                     if(empty($reserva->getDays())){
  3289.                         $now = new \DateTime("now");
  3290.                         $dateLimit date"Y-m-d H:i"strtotime$now->format('Y-m-d H:i') . "+".$reserva->getDaysBlock()." days" ));
  3291.                         $dateLimit = new \DateTime($dateLimit);
  3292.         
  3293.                         $reserva->setDays($dateLimit);
  3294.                     }
  3295.                     if ((!empty($reserva->getClient())) or (!empty($reserva->getClientContact())) or (!empty($reserva->getContactUnregistered()))) {
  3296.                         //Solo se envia correo de notificacion del correo si hay cliente o contacto o contacto no registrado
  3297.                         $client $em->getRepository(Client::class)->findOneById($reserva->getClient());
  3298.                         $mailAddressTo null;
  3299.                         // if (!empty($client) and (!empty($client->getEmail()))){ $mailAddressTo = $client->getEmail(); }         // Si hay cliente con correo se le envia a este
  3300.                         // if (!empty($reserva->getClientContact())){
  3301.                         //     $contacto = $em->getRepository(ClientContact::class)->findOneById($reserva->getClientContact());
  3302.                         //     if (!empty($contacto) and (!empty($contacto->getEmail()))){ $mailAddressTo = $contacto->getEmail(); }   // Si hay un contacto seleccionado tiene prioridad sobre el contacto de cliente
  3303.                         // }
  3304.                         // if (!empty($reserva->getContactUnregistered())){ $mailAddressTo = $reserva->getContactUnregistered(); }     // Si hay correo de contacto no registrado este tiene prioridad sobre todos
  3305.                         if (!empty($mailAddressTo)) {
  3306.                             $agente $em->getRepository(User::class)->findOneById($user_id);
  3307.                             $mailAddressFrom $agente->getEmail();
  3308.                             $mailSubject 'Notificación de Bloqueo - Reserva de espacio en Green Patio';
  3309.                             $mailBody 'Estimado cliente,' .
  3310.                                 '<br><br> Nos ponemos en contacto con usted para confirmarle que su reserva ha quedado registrada en Green Patio para la realización de su próximo evento.' .
  3311.                                 '<br>Le recordamos que esta reserva tiene una validez de ' $reserva->getDaysBlock() . ' días. Si pasado este tiempo no hemos recibido confirmación de vuestra parte, procederemos a la cancelación de la misma.' .
  3312.                                 '<br><br>Reserva: ' $reserva->getId() .' - '$reserva->getTitle();
  3313.                             $mailBody $mailBody '<br><br><br>Muchas gracias por su colaboración.<br><br><br>';
  3314.                             //Se envia el correo al cliente y al agente
  3315.                             $this->sendMail($mailAddressFrom$mailAddressTo$mailSubject$mailBody);
  3316.                             //Se genera el control de la alerta
  3317.                             $this->makeAlert($reserva->getId(), $reserva->getClient(), $mailAddressTo$agente->getId(), $agente->getEmail());
  3318.                         }
  3319.                     }
  3320.                 }
  3321.             }
  3322.         } else {
  3323.             $errorMessagebase $this->translator->trans('Error, some fields are empty');
  3324.             $this->addFlash('mensajetracingerror'$errorMessagebase);
  3325.             $periods $em->getRepository(ReservationPeriod::class)->findAll();
  3326.             return $this->render('MDS/GreenPatioBundle/reservations/add-reservations.html.twig',
  3327.                 array(
  3328.                     'form' => $form->createView(),
  3329.                     'periods' => $periods,
  3330.                 ));
  3331.         }
  3332.         $id $reserva->getId();
  3333.         // Sincronización con HT
  3334.         if (!empty($reserva)) {
  3335.             // Rafa indico que siempre se sincronice al abrir un expediente de GP
  3336.             if (in_array($reserva->getStatus(), [null'''Confirmed''Invoiced''Iniciado''Cotizado''Bloqueo'])) {
  3337. //            if ($reserva->getStatus() == 'Confirmed' or $reserva->getStatus() ==  'Invoiced' or $reserva->getStatus() == 'Iniciado' or $reserva->getStatus() == 'Cotizado' or $reserva->getStatus() ==  'Bloqueo') {
  3338.                 if ($reserva->getCateringName() == 'HIGO & TRIGO, S.L.') {
  3339.                     // Si no se ha creado aun el expediente de HT debemos crearlo
  3340.                     $htFile $em->getRepository(HtFile::class)->findByReservation($reserva);
  3341.                     if (empty($htFile)) { return $this->redirectToRoute('sinc_gp_ht', array('id' => $id,)); }
  3342.                 }
  3343.             }
  3344.         }
  3345.         // Sincronización con Av Express
  3346.         $cotizable $this->laReservaEsCotizable($reserva->getId());
  3347.         if ($cotizable) {
  3348.             // Rafa indico que siempre se sincronice al abrir un expediente de GP
  3349.             if (in_array($reserva->getStatus(), [null'''Confirmed''Invoiced''Iniciado''Cotizado''Bloqueo'])) {
  3350. //            if (in_array($reserva->getStatus(), ['Confirmed', 'Invoiced', 'Iniciado', 'Cotizado', 'Bloqueo'])) {
  3351.                 $AveFile $em->getRepository(AveFiles::class)->findByReservation($reserva);
  3352.                 if (empty($AveFile)) {
  3353.                     // Si no se ha creado aun el expediente de Av Express debemos crearlo
  3354.                     return $this->redirectToRoute('sinc_gp_ave', array('id' => $id,));
  3355.                 }
  3356.             }
  3357.         }
  3358.         return $this->redirectToRoute('reservations_greenpatio_edit_simple', array( 'id' => $id'token' => null ));
  3359.     }
  3360.     /**
  3361.      * @Route("/editsimple/{id}",  name="reservations_greenpatio_edit_simple")
  3362.      */
  3363.     public function editReservationSimpleItemsAction($idEntityManagerInterface $emRequest $request)
  3364.     {
  3365.         $lounges $em->getRepository(ReservationLounge::class)->findByIdReservation($id);
  3366.         $loungesSimple $em->getRepository(ReservationLoungeSimple::class)->findByIdReservation($id);
  3367.         $services $em->getRepository(ReservationService::class)->findByReservationId($id);
  3368.         $reserva $em->getRepository(Reservation::class)->findOneById($id);
  3369.         $lounge = new ReservationLounge();
  3370.         $lounge->setIdReservation($id);
  3371.         $monDesmon = new ReservationLounge();
  3372.         $monDesmon->setIdReservation($id);
  3373.         $form1 $this->createReservationCreateForm($reserva);
  3374.         $form2 $this->createReservationLoungeCreateForm($lounge);
  3375.         $form3 $this->createReservationLoungeMonDesCreateForm($monDesmon);
  3376.         $arrayLoungesByDay = []; $arrayLoungesInFile = [];
  3377.         //UPDATE GREEN
  3378.         if (empty($loungesSimple)){
  3379.             if (!empty($lounges)){
  3380.                 // INICIO: Se forma el arreglo para las salas dia a dia
  3381.                 foreach ($lounges as $item){
  3382.                     // Con un Temporal se ponen a cero las horas para que el calculo de los dias (->diff) sean exactos
  3383.                     $itemTemp $item;
  3384.                     $tempDateStart $item->getDateStart()->format('Y-m-d H:i'); // Se estaba perdiendo el valor de $item en horas y minutos
  3385.                     $tempDateEnd $item->getDateEnd()->format('Y-m-d H:i');
  3386.                     $itemTemp->setDateStart(new DateTime ($itemTemp->getDateStart()->format('Y-m-d')));
  3387.                     $itemTemp->setDateEnd(new DateTime ($itemTemp->getDateEnd()->format('Y-m-d')));
  3388.                     if ($item->getDateStart() < $item->getDateEnd()) { $i = (($itemTemp->getDateEnd()->diff($itemTemp->getDateStart()))->days) + 1; } else { $i 1; }
  3389.                     for ($indice 0$indice $i$indice++){
  3390.                         $item->setDateStart(new DateTime($tempDateStart));
  3391.                         $item->setDateEnd(new DateTime($tempDateEnd));
  3392.                         if ($item->getDateStart() < $item->getDateEnd()){
  3393.                             // Estas trabajando un registro antiguo de multiples dias
  3394.                             $dateTemp = ($item->getDateStart())->format('Ymd') + $indice;
  3395.                         } else {
  3396.                             $dateTemp = ($item->getDateStart())->format('Ymd');
  3397.                         }
  3398.                         $arrayLoungesByDay[$item->getRankQuote()][$dateTemp][] = array(
  3399.                             'id' => "0",
  3400.                             'loungeName' => $item->getLoungeName(),
  3401.                             'servicePrice' => $item->getServicePrice(),
  3402.                             'pax' => $item->getPax(),
  3403.                             'type' => $item->getType(),
  3404.                             'dateStart' => $item->getDateStart(),
  3405.                             'dateEnd' => $item->getDateEnd(),
  3406.                             'iva' => $item->getIva(),
  3407.                         );
  3408.                     }
  3409.                     ksort($arrayLoungesByDay[$item->getRankQuote()]);
  3410.                 }
  3411.             } else {
  3412.                 $arrayLoungesByDay = array();
  3413.             }
  3414.         } else {
  3415.             foreach ($loungesSimple as $item) {
  3416.                 $dateStart $item->getDateStart()->format('Ymd');
  3417.                 $arrayLoungesByDay[$item->getRankQuote()][$dateStart][] = $item;
  3418.                 ksort($arrayLoungesByDay[$item->getRankQuote()]);
  3419.                 //Creamos el arreglo para las salas en la reserva. Se deben ignorar los montajes y desmontajes
  3420.                 if (empty($item->getType())) {
  3421.                     $loungeContract $em->getRepository(DocContract::class)->findOneBy(array('modelId' => $item->getIdLounge(),  'fileId' => $id'companyId' => 7));
  3422.                     $dataContract $this->docContractService->contractReservation($id,$item->getIdLounge());
  3423.                     $arrayLoungesInFile[$item->getRankQuote()][$item->getIdLounge()] = array(
  3424.                         'rankQuote' => $item->getRankQuote(),
  3425.                         'idLounge' => $item->getIdLounge(),
  3426.                         'loungeName' => $item->getLoungeName(),
  3427.                         'loungeImportantDescription' => $item->getImportantDescription(),
  3428.                         'loungeImportantDescGeneralText' => $item->getImportantDescGeneralText(),
  3429.                         'loungeImportantDescSchedules' => $item->getImportantDescSchedules(),
  3430.                         'loungeImportantDescParking' => $item->getImportantDescParking(),
  3431.                         'loungeDocContract' => empty($loungeContract) ? ''$loungeContract->getContractualDocument(),
  3432.                         'loungeDocBookingData' => empty($loungeContract) ? ''$loungeContract->getBookingData(),
  3433.                         'loungeDocDateAt' => empty($loungeContract) ? ''$loungeContract->getDateAt(),
  3434.                         'loungeDocClientProxy' => empty($loungeContract) ? ''$loungeContract->getClientProxy(),
  3435.                         'loungeDocClientJob' => empty($loungeContract) ? ''$loungeContract->getClientJob(),
  3436.                         'loungeDocFullContract' => empty($dataContract['fullContract']) ? ''$dataContract['fullContract'],
  3437.                         'language' => $item->getLanguage(),
  3438.                     );
  3439.                 }
  3440.             }
  3441.         }
  3442.         // FIN: Se forma el arreglo para las salas dia a dia
  3443.         $numeroItems sizeof($arrayLoungesByDay);
  3444.         $data $this->CalculosTotalesEditSimple($reserva->getId());
  3445.         $client $em->getRepository(Client::class)->findOneById($reserva->getClient());
  3446.         if (!empty($client)){ $clientId $client->getId(); } else { $clientId 0; }
  3447.         $clients $em->getRepository(Client::class)->findAll();
  3448.         /* CONSULTAMOS PARA SUMAR  */
  3449.         $parameters = array( 'tags' => 'CATERING''company' => 'HIGO & TRIGO, S.L.',  );
  3450.         $dql 'SELECT p
  3451.                 FROM App\Entity\Supplier p
  3452.                 WHERE (p.tags LIKE :tags) AND (p.company <> :company) 
  3453.                 ORDER BY p.company ASC ';
  3454.         $query $em->createQuery($dql)->setParameters($parameters);
  3455.         $caterings $query->getResult();
  3456.         // Agregamos el catering de Higo & Trigo de primero
  3457.         $catHigoTrigo $em->getRepository(Supplier::class)->findOneById(4765);
  3458.         array_unshift($caterings$catHigoTrigo);
  3459.         $userCreatedBy $em->getRepository(User::class)->findOneById($reserva->getCreatedBy());
  3460.         $createdBy $userCreatedBy->getName().' '.$userCreatedBy->getLastName();
  3461.         $parameters = array();
  3462.         $dql 'SELECT p
  3463.                 FROM GreenPatioBundle:ReservationLoungeDetails p
  3464.                 ORDER BY p.rankLounge ASC ';
  3465.         $query $em->createQuery($dql)->setParameters($parameters);
  3466.         $loungesPre $query->getResult();
  3467.         $loungesNames $em->getRepository(ReservationLoungeDetails::class)->findAll();
  3468.         $listSupplier $em->getRepository(Supplier::class)->findAll();
  3469.         $em $this->getDoctrine()->getManager();
  3470.         $invoiced $em->getRepository(ReservationInvoice::class)->findByReservationId($id);
  3471.         $invoicedRec $em->getRepository(ReservationInvoiceRec::class)->findByReservationId($id);
  3472.         foreach ($invoicedRec as $item){ array_push($invoiced$item); }
  3473.         $invoicedCvr $em->getRepository(CvrReservationInvoice::class)->findByReservationId($id);
  3474.         $invoicedLine = empty($invoicedCvr) ? 'GP' 'CVR';
  3475.         foreach ($invoicedCvr as $item){ array_push($invoiced$item); }
  3476.         $invoicedCvrRec $em->getRepository(CvrReservationInvoiceRec::class)->findByReservationId($id);
  3477.         foreach ($invoicedCvrRec as $item){ array_push($invoiced$item); }
  3478.         $sumatoriaTotalNet 0$sumatoriaTotalVat 0$sumatoriaTotal 0;
  3479.         $resultados = array( 'totalNeto' => 0'vat' => 0'total' => 0, );
  3480.         foreach ($invoiced as $idArray => $item){
  3481.             $reserva $em->getRepository(Reservation::class)->findOneById($item->getReservationId());
  3482.             $invoiced[$idArray]->setNumber($reserva->getTitle());
  3483.             $client $em->getRepository(Client::class)->findOneById($reserva->getClient());
  3484.             if(!empty($client)){ $invoiced[$idArray]->setPrefix($client->getName()); } else { $invoiced[$idArray]->setPrefix(''); }
  3485.             if ($item->getType() == 'Invoice Deposit'){
  3486.                 // INICIO: Verificamos el uso de la factura de deposito dentro de una factura, en este caso se usa el valor absoluto del balance para evitar la resta doble
  3487.                 $paymentItem $em->getRepository(ReservationPaymentsClient::class)->findOneByInvoiceId($item->getId());
  3488.                 if (!empty($paymentItem)){
  3489.                     $invoiceElementItem $em->getRepository(ReservationInvoiceItems::class)->findOneByPayControlId($paymentItem->getId());
  3490.                     if (!empty($invoiceElementItem)) {
  3491.                         // Solo nos interesa evaluar las facturas y no las facturas de deposito
  3492.                         $invoiceOfItem $em->getRepository(ReservationInvoice::class)->findOneById($invoiceElementItem->getInvoiceId());
  3493.                         if (!empty($invoiceOfItem)) { if ($invoiceOfItem->getType() == 'Invoice') { $invoiced[$idArray]->setBalance(0); } }
  3494.                     }
  3495.                 }
  3496.                 // FIN: Verificamos el uso de la factura de deposito dentro de una factura, en este caso se usa el valor absoluto del balance para evitar la resta doble
  3497.                 $invoicedDepositItems $em->getRepository(ReservationInvoiceDepositItems::class)->findByControlId($item->getMaster());
  3498.                 foreach ($invoicedDepositItems as $itemDep){
  3499.                     $invoiced[$idArray]->setTotalNet($invoiced[$idArray]->getTotalNet() + $itemDep->getAmount());
  3500.                     $invoiced[$idArray]->setVat($invoiced[$idArray]->getVat() + (($itemDep->getAmount() * $itemDep->getIva())/100));
  3501.                     $invoiced[$idArray]->setTotal($invoiced[$idArray]->getTotal() + ($itemDep->getAmount() + (($itemDep->getAmount() * $itemDep->getIva())/100)));
  3502.                 }
  3503.             }
  3504.             // Valores Netos
  3505.             if ($item->getType()=='Invoice'){
  3506.                 $sumatoriaTotalNet $sumatoriaTotalNet $item->getTotalNet();
  3507.             } else {
  3508.                 if ($item->getType()=='Invoice Deposit'){
  3509.                     //Factura de deposito
  3510.                     $sumatoriaTotalNet $sumatoriaTotalNet 0;  //$item->getTotalNet();   // Las facturas de deposito no deben computar en este calculo
  3511.                 } else {
  3512.                     if ($item->getType()=='Invoice Deposit Rec'){
  3513.                         //Factura de Deposito rectificativa
  3514.                         $sumatoriaTotalNet $sumatoriaTotalNet 0;
  3515.                     } else {
  3516.                         //Factura rectificativa
  3517.                         $sumatoriaTotalNet $sumatoriaTotalNet $item->getTotalNet();     // Se han llenado de datos negativos las rectificativas, solo es necesario sumar
  3518.                     }
  3519.                 }
  3520.             }
  3521.             //Valores Iva
  3522.             if ($item->getType()=='Invoice') {
  3523.                 $sumatoriaTotalVat $sumatoriaTotalVat $item->getVat();
  3524.             } else {
  3525.                 if ($item->getType()=='Invoice Deposit'){
  3526.                     //Factura de deposito
  3527.                     $sumatoriaTotalVat $sumatoriaTotalVat 0;  //$item->getVat();  // Las facturas de deposito no deben computar en este calculo
  3528.                 } else {
  3529.                     if ($item->getType()=='Invoice Deposit Rec'){
  3530.                         //Factura de Deposito rectificativa
  3531.                         $sumatoriaTotalNet $sumatoriaTotalNet 0;
  3532.                     } else {
  3533.                         //Factura rectificativa
  3534.                         $sumatoriaTotalVat $sumatoriaTotalVat $item->getVat();      // Se han llenado de datos negativos las rectificativas, solo es necesario sumar
  3535.                     }
  3536.                 }
  3537.             }
  3538.             if (($item->getType()=='Invoice Deposit') or ($item->getType()=='Invoice Deposit Rec')) {
  3539.                 $sumatoriaTotal $sumatoriaTotal 0;                              // Las facturas de deposito o de deposito rectificativas no deben computar en este calculo
  3540.             } else {
  3541.                 $sumatoriaTotal $sumatoriaTotal $item->getTotal();
  3542.             }
  3543.             $resultados = array( 'totalNeto' => $sumatoriaTotalNet'vat' => $sumatoriaTotalVat'total' => $sumatoriaTotal, );
  3544.         }
  3545.         $paymentsAll $em->getRepository(ReservationPaymentsClient::class)->findByReservationId($id);
  3546.         // Verificamos pagos aun sin facturar
  3547.         $paymentNotIvoiced = array();
  3548.         foreach ($paymentsAll as $item){
  3549.             $isInvoiced $em->getRepository(ReservationInvoiceItems::class)->findBy(array('reservationId' => $id'payControlId' => $item->getId()));
  3550.             if (empty($isInvoiced)){ array_push($paymentNotIvoiced$item); }
  3551.         }
  3552.         //Buscamos los agentes y seleccionamos por defecto el usuario logeado
  3553.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  3554.         $user_id $user_logueado->getId();
  3555.         $parameters = array( 'clientId' => $clientId, );
  3556.         $dql 'SELECT p
  3557.                 FROM App:ClientContact p
  3558.                 WHERE p.clientId = :clientId
  3559.                 ORDER BY p.name ASC ';
  3560.         $query $em->createQuery($dql)->setParameters($parameters);
  3561.         $clientsContact $query->getResult();
  3562.         // Fecha de notificacion en caso de ser un bloqueo
  3563.         $reservationMailAlertClient $em->getRepository(ReservationMailAlertClient::class)->findOneByReservationId($id);
  3564.         $nextMailAlert null;
  3565.         if (!empty($reservationMailAlertClient)){
  3566.             if (!($reservationMailAlertClient->getAlertSended())){
  3567.                 // La proxima fecha es la de la alerta
  3568.                 $nextMailAlert $reservationMailAlertClient->getAlertDateTime();
  3569.             } else {
  3570.                 if (!($reservationMailAlertClient->getCancelSended())){
  3571.                     // La proxima fecha es la de la cancelacion (paso a cotización)
  3572.                     $nextMailAlert $reservationMailAlertClient->getCancelDateTime();
  3573.                 }
  3574.             }
  3575.         }
  3576.         $parameters = array( 'status' => 1, );
  3577.         $dql 'SELECT c
  3578.                 FROM  App\Entity\User c
  3579.                 WHERE c.status = :status
  3580.                 ORDER BY c.name ASC ';
  3581.         $query $em->createQuery($dql)->setParameters($parameters);
  3582.         $allUsersActive $query->getResult();
  3583.         //Agregamos los FreeLance
  3584.         $freeLances $em->getRepository(ExternalUser::class)->findAll();
  3585.         foreach ($freeLances as $item){
  3586.             $item->setTeam(($item->getId() * (-1)));
  3587.             $allUsersActive[] = $item;
  3588.         }
  3589.         // Buscamos todos los servicios y los separmos por facturados y no facturados
  3590.         $datax $this->benefitForReservation($id);
  3591.         // Se quitan los clientes que no son de Green Patio
  3592.         $parameters = array();
  3593.         $dql 'SELECT p
  3594.                 FROM App:Client p
  3595.                 WHERE p.isClientGreenPatio = TRUE
  3596.                 ORDER BY p.name ASC ';
  3597.         $query $em->createQuery($dql)->setParameters($parameters);
  3598.         $clients $query->getResult();
  3599.         $depositsAll $em->getRepository(ReservationDeposit::class)->findByReservationId($id);
  3600.         $confirmable $this->laReservaEsConfirmable($id);
  3601.         $cotizable $this->laReservaEsCotizable($id);
  3602.         $htFile in_array($user_logueado->getUserrol(),[9,23,24,37,47,53]) ? $em->getRepository(HtFile::class)->findOneByReservation($reserva) : null;
  3603.         $aveFile in_array($user_logueado->getUserrol(),[9,23,24,37,47,53]) ? $em->getRepository(AveFiles::class)->findOneByReservation($reserva) : null;
  3604.         if ($reserva) { $urlCotizacion "https://cotizacion.greenpatio.es/index.php?token=".$reserva->getToken(); }
  3605.         $viewContract false;
  3606.         //Generamos el arreglo de contratos
  3607.         if (in_array($reserva->getStatus(), ['Confirmed''Invoiced'])) { $viewContract true; }
  3608.         $languagesWeb LanguageConstants::getAvailableLanguages();
  3609.         return $this->render('MDS/GreenPatioBundle/reservations/edit-reservations-simple.html.twig',
  3610.             array(
  3611.                 'form' => $form1->createView(),
  3612.                 'form2' => $form2->createView(),
  3613.                 'form3' => $form3->createView(),
  3614.                 'id' => $id,
  3615.                 'clients' => $clients,
  3616.                 'clientId' => $clientId,
  3617.                 'caterings' => $caterings,
  3618.                 'loungesPre' => $loungesPre,
  3619.                 'loungesNames' => $loungesNames,
  3620.                 'arrayLoungesInFile' => $arrayLoungesInFile,
  3621.                 'facturas' => $invoiced,
  3622.                 'numeroItems' => $numeroItems,
  3623.                 'arrayLoungesByDay' => $arrayLoungesByDay,
  3624.                 'totales_global_con_iva' => $data['totales_global_con_iva'],
  3625.                 'totales_global_iva' => $data['totales_global_iva'],
  3626.                 'totales_global_neto' => $data['totales_global_neto'],
  3627.                 'totales_global_servicios_con_iva' => $data['totales_global_servicios_con_iva'],
  3628.                 'totales_global_servicios_neto' => $data['totales_global_servicios_neto'],
  3629.                 'totales_global_servicios_iva' => $data['totales_global_servicios_iva'],
  3630.                 'sumatoria_totales_global_con_iva' => $data['sumatoria_totales_global_con_iva'],
  3631.                 'sumatoria_totales_global_neto' => $data['sumatoria_totales_global_neto'],
  3632.                 'sumatoria_totales_global_iva' => $data['sumatoria_totales_global_iva'],
  3633.                 'reserva' => $reserva,
  3634.                 'createdBy' => $createdBy,
  3635.                 'arraySalas' => null,
  3636.                 'lounges' => $lounges,
  3637.                 'salasReserva' => $lounges,
  3638.                 'periods' => null,
  3639.                 'services' => $services,
  3640.                 'loungesNumbers' => sizeof($lounges),
  3641.                 'listSupplier' => $listSupplier,
  3642.                 'resultados' => $resultados,
  3643.                 'paymentsAll' => $paymentsAll,
  3644.                 'paymentNotIvoiced' => $paymentNotIvoiced,
  3645.                 'allUsersActive' => $allUsersActive,
  3646.                 'userLog' => $user_id,
  3647.                 'clientsContact' => $clientsContact,
  3648.                 'nextMailAlert' => $nextMailAlert,
  3649.                 'benefit' => $datax['benefit'],
  3650.                 'percBenefit' => $datax['percBenefit'],
  3651.                 'payedLounges' => $datax['payedLounges'],
  3652.                 'payedServices' => $datax['payedServices'],
  3653.                 'unPayedServices' => $datax['unPayedServices'],
  3654.                 'depositsAll' => $depositsAll,
  3655.                 'confirmable' => $confirmable,
  3656.                 'cotizable' => $cotizable,
  3657.                 'invoicedLine' => $invoicedLine,
  3658.                 'htFile' => $htFile,
  3659.                 'aveFile' => $aveFile,
  3660.                 'urlCotizacion' => $urlCotizacion,
  3661.                 'viewContract' => $viewContract,
  3662.                 'languagesWeb' => $languagesWeb,
  3663.             ));
  3664.     }
  3665.     private function createReservationLoungeCreateForm(ReservationLounge $entity)
  3666.     {
  3667.         $form $this->createForm(ReservationLoungeType::class, $entity, array(
  3668.             'action' => $this->generateUrl('reservations_greenpatio_create_simple_lounge',
  3669.                 array(
  3670.                     'id' => $entity->getIdReservation(),
  3671.                 )
  3672.             ),
  3673.             'method' => 'POST'
  3674.         ));
  3675.         return $form;
  3676.     }
  3677.     private function createReservationLoungeMonDesCreateForm(ReservationLounge $entity)
  3678.     {
  3679.         $form $this->createForm(ReservationLoungeType::class, $entity, array(
  3680.             'action' => $this->generateUrl('reservations_greenpatio_create_simple_lounge_mondes',
  3681.                 array(
  3682.                     'id' => $entity->getIdReservation(),
  3683.                 )
  3684.             ),
  3685.             'method' => 'POST'
  3686.         ));
  3687.         return $form;
  3688.     }
  3689.     /**
  3690.      * @Route("/contract/{id}", name="reservations_contract")
  3691.      */
  3692.     public function goContractAction($idEntityManagerInterface $emRequest $request){
  3693.         $reservationLounge $em->getRepository(ReservationLoungeSimple::class)->findByIdReservation($id);
  3694.         $arrayLounges =[];
  3695.         //Buscamos el modelo de contrato mas reciente de las salas de la reserva
  3696.         foreach ($reservationLounge as $item){ $arrayLounges[$item->getIdLounge()] = $item->getIdLounge(); }
  3697.         if (!empty($arrayLounges)) { $parameters['stringLounges'] = $arrayLounges; } else { $parameters['stringLounges'] = []; }
  3698.         $dql 'SELECT p
  3699.                 FROM App:DocContractModel p
  3700.                 WHERE p.modelId IN (:stringLounges)
  3701.                 ORDER BY p.updatedAt DESC';
  3702.         $query $em->createQuery($dql)->setParameter('stringLounges'$parameters['stringLounges']);
  3703.         $contractModel $query->getResult();
  3704.         if(!empty($contractModel)){ $loungeId $contractModel[0]->getModelId(); } else { $loungeId 0; }
  3705.         $dataContract $this->docContractService->contractReservation($id,$loungeId);
  3706.         return $this->render('MDS/GreenPatioBundle/reservations/print-contract-gp.html.twig',
  3707.             array(
  3708.                 'dataContract' => $dataContract['fullContract'],
  3709.             ));
  3710.     }
  3711.     /**
  3712.      * @Route("/updateloungegrid", name="reservations_greenpatio_updateloungegrid")
  3713.      */
  3714.     public function updateLoungeGridAction(EntityManagerInterface $emRequest $request)
  3715.     {
  3716.         $loungeGrid $request->request->get('lounge');
  3717.         $reservationGlobalLounge $request->request->get('reservation_global_lounge');
  3718.         $id $request->request->get('reservationId');     //aqui se guardara el ID de la reserva
  3719.         $reserva $em->getRepository(Reservation::class)->findOneById($id);
  3720.         // Movemos las fechas de la reserva para que tomen los valosres de las salas
  3721.         $reserva->setDateStart(new DateTime('2999-01-01'));
  3722.         $reserva->setDateEnd(new DateTime('2000-01-01'));
  3723.         $now = new DateTime('now');
  3724.         /* Obtengo usuario logueado */
  3725.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  3726.         $user_id $user_logueado->getId();
  3727.         foreach ($loungeGrid as $idreservationlounge => $loungeData) {
  3728.             foreach ($loungeData as $dia => $items) {
  3729.                 foreach ($items as $name => $item) {
  3730.                     $reservationLounge $em->getRepository(ReservationLoungeSimple::class)->findOneById($idreservationlounge);
  3731.                     if (empty($reservationLounge)) { $reservationLounge = new ReservationLoungeSimple(); }
  3732.                     // Autocompletacion HH:mm en Start
  3733.                     switch (strlen($item['dateHourMinStart'])) {
  3734.                         case 0:
  3735.                             // Vacio
  3736.                             $hourStart '00';
  3737.                             $minStart '00';
  3738.                             $hourMinStart '00:00';
  3739.                             break;
  3740.                         case 1:
  3741.                             // H  -> 0H:00
  3742.                             if (is_numeric($item['dateHourMinStart'])) {
  3743.                                 $hourStart '0' $item['dateHourMinStart'];
  3744.                                 $minStart '00';
  3745.                                 $hourMinStart $hourStart ':' $minStart;
  3746.                             } else {
  3747.                                 $hourStart '00';
  3748.                                 $minStart '00';
  3749.                                 $hourMinStart '00:00';
  3750.                             }
  3751.                             break;
  3752.                         case 2:
  3753.                             // HH  -> HH:00
  3754.                             if (is_numeric($item['dateHourMinStart'])) {
  3755.                                 $hourStart $item['dateHourMinStart'];
  3756.                                 $minStart '00';
  3757.                                 $hourMinStart $hourStart ':' $minStart;
  3758.                             } else {
  3759.                                 $hourStart '00';
  3760.                                 $minStart '00';
  3761.                                 $hourMinStart '00:00';
  3762.                             }
  3763.                             break;
  3764.                         case 3:
  3765.                             // Hmm  -> 0H:mm
  3766.                             if (is_numeric($item['dateHourMinStart'])) {
  3767.                                 $hourStart '0' substr($item['dateHourMinStart'], 01);
  3768.                                 $minStart substr($item['dateHourMinStart'], 12);
  3769.                                 $hourMinStart $hourStart ':' $minStart;
  3770.                             } else {
  3771.                                 $hourStart '00';
  3772.                                 $minStart '00';
  3773.                                 $hourMinStart '00:00';
  3774.                             }
  3775.                             break;
  3776.                         case 4:
  3777.                             // HHmm  -> HH:mm
  3778.                             if (is_numeric($item['dateHourMinStart'])) {
  3779.                                 $hourStart substr($item['dateHourMinStart'], 02);
  3780.                                 $minStart substr($item['dateHourMinStart'], 22);
  3781.                                 $hourMinStart $hourStart ':' $minStart;
  3782.                             } else {
  3783.                                 $hourStart '00';
  3784.                                 $minStart '00';
  3785.                                 $hourMinStart '00:00';
  3786.                             }
  3787.                             break;
  3788.                         case 5:
  3789.                             // HH:mm
  3790.                             if (is_numeric(substr($item['dateHourMinStart'], 02)) and (substr($item['dateHourMinStart'], 21) == ':') and is_numeric(substr($item['dateHourMinStart'], 02))) {
  3791.                                 $hourStart substr($item['dateHourMinStart'], 02);
  3792.                                 $minStart substr($item['dateHourMinStart'], 32);
  3793.                                 $hourMinStart $hourStart ':' $minStart;
  3794.                             } else {
  3795.                                 $hourStart '00';
  3796.                                 $minStart '00';
  3797.                                 $hourMinStart '00:00';
  3798.                             }
  3799.                             break;
  3800.                         default:
  3801.                             // XXXXyyy
  3802.                             $hourStart '00';
  3803.                             $minStart '00';
  3804.                             $hourMinStart '00:00';
  3805.                             break;
  3806.                     }
  3807.                     // Autocompletacion HH:mm en End
  3808.                     switch (strlen($item['dateHourMinEnd'])) {
  3809.                         case 0:
  3810.                             // Vacio
  3811.                             $hourEnd '00';
  3812.                             $minEnd '00';
  3813.                             $hourMinEnd '00:00';
  3814.                             break;
  3815.                         case 1:
  3816.                             // H  -> 0H:00
  3817.                             if (is_numeric($item['dateHourMinEnd'])) {
  3818.                                 $hourEnd '0' $item['dateHourMinEnd'];
  3819.                                 $minEnd '00';
  3820.                                 $hourMinEnd $hourEnd ':' $minEnd;
  3821.                             } else {
  3822.                                 $hourEnd '00';
  3823.                                 $minEnd '00';
  3824.                                 $hourMinEnd '00:00';
  3825.                             }
  3826.                             break;
  3827.                         case 2:
  3828.                             // HH  -> HH:00
  3829.                             if (is_numeric($item['dateHourMinEnd'])) {
  3830.                                 $hourEnd $item['dateHourMinEnd'];
  3831.                                 $minEnd '00';
  3832.                                 $hourMinEnd $hourEnd ':' $minEnd;
  3833.                             } else {
  3834.                                 $hourEnd '00';
  3835.                                 $minEnd '00';
  3836.                                 $hourMinEnd '00:00';
  3837.                             }
  3838.                             break;
  3839.                         case 3:
  3840.                             // Hmm  -> 0H:mm
  3841.                             if (is_numeric($item['dateHourMinEnd'])) {
  3842.                                 $hourEnd '0' substr($item['dateHourMinEnd'], 01);
  3843.                                 $minEnd substr($item['dateHourMinEnd'], 12);
  3844.                                 $hourMinEnd $hourEnd ':' $minEnd;
  3845.                             } else {
  3846.                                 $hourEnd '00';
  3847.                                 $minEnd '00';
  3848.                                 $hourMinEnd '00:00';
  3849.                             }
  3850.                             break;
  3851.                         case 4:
  3852.                             // HHmm  -> HH:mm
  3853.                             if (is_numeric($item['dateHourMinEnd'])) {
  3854.                                 $hourEnd substr($item['dateHourMinEnd'], 02);
  3855.                                 $minEnd substr($item['dateHourMinEnd'], 22);
  3856.                                 $hourMinEnd $hourEnd ':' $minEnd;
  3857.                             } else {
  3858.                                 $hourEnd '00';
  3859.                                 $minEnd '00';
  3860.                                 $hourMinEnd '00:00';
  3861.                             }
  3862.                             break;
  3863.                         case 5:
  3864.                             // HH:mm
  3865.                             if (is_numeric(substr($item['dateHourMinEnd'], 02)) and (substr($item['dateHourMinEnd'], 21) == ':') and is_numeric(substr($item['dateHourMinEnd'], 02))) {
  3866.                                 $hourEnd substr($item['dateHourMinEnd'], 02);
  3867.                                 $minEnd substr($item['dateHourMinEnd'], 32);
  3868.                                 $hourMinEnd $hourEnd ':' $minEnd;
  3869.                             } else {
  3870.                                 $hourEnd '00';
  3871.                                 $minEnd '00';
  3872.                                 $hourMinEnd '00:00';
  3873.                             }
  3874.                             break;
  3875.                         default:
  3876.                             // XXXXyyy
  3877.                             $hourEnd '00';
  3878.                             $minEnd '00';
  3879.                             $hourMinEnd '00:00';
  3880.                             break;
  3881.                     }
  3882.                     $dateStart $item['newDate'] . ' ' $hourMinStart;
  3883.                     $dateEnd $item['newDate'] . ' ' $hourMinEnd;
  3884. //dd($loungeData, $items, $item);
  3885. //                    $name = $item['name'];
  3886.                     $loungeDetails $em->getRepository(ReservationLoungeDetails::class)->findOneByName($name);
  3887.                     $price $item['price'];
  3888.                     $ivaNew $item['iva'];
  3889.                     $pax 0;
  3890.                     $type null;
  3891.                     if (array_key_exists('iva'$item)) {
  3892.                         if (empty($item['iva']) && !is_numeric($item['iva'])) {
  3893.                             $ivaNew 21;
  3894.                             $this->addFlash('mensajereservationerror''Revisa el IVA de la sala: '.$reservationLounge->getLoungeName());
  3895.                         } else {
  3896.                             $ivaNew $item['iva'];
  3897.                         }
  3898.                     }
  3899.                     if (isset($item['pax'])) { $pax $item['pax']; if (empty($pax)){$pax 0;} } else { $type $item['type']; }
  3900.                     $reservationLounge->setIdReservation($id);
  3901.                     if ((!empty($loungeDetails)) and (isset($reservationGlobalLounge[$loungeDetails->getId()]))){
  3902.                         $reservationLounge->setIdLounge($loungeDetails->getId());
  3903.                         //Actualizamos el Resumen Descriptivo
  3904.                         $reservationLounge->setImportantDescription($reservationGlobalLounge[$loungeDetails->getId()]['importantDescription']);
  3905.                         $reservationLounge->setImportantDescGeneralText($reservationGlobalLounge[$loungeDetails->getId()]['importantDescGeneralText']);
  3906.                         $reservationLounge->setImportantDescSchedules($reservationGlobalLounge[$loungeDetails->getId()]['importantDescSchedules']);
  3907.                         $reservationLounge->setImportantDescParking($reservationGlobalLounge[$loungeDetails->getId()]['importantDescParking']);
  3908.                     } else {
  3909.                         // No se encontro el elemento por Nombre (Se ha modificado el campo nombre de la sala, probablemente por ser una DEVOLUCION)
  3910.                         $reservationLounge->setIdLounge(0);
  3911.                     }
  3912.                     $reservationLounge->setDateStart(new DateTime($dateStart));
  3913.                     $reservationLounge->setDateEnd(new DateTime($dateEnd));
  3914.                     $reservationLounge->setType($type);
  3915.                     $reservationLounge->setPax($pax);
  3916.                     $reservationLounge->setServicePrice($price);
  3917.                     $reservationLounge->setIva($ivaNew);
  3918.                     $reservationLounge->setOpIva(1);
  3919.                     $reservationLounge->setLoungeName($name);
  3920.                     $reservationLounge->setHourStart($hourStart);
  3921.                     $reservationLounge->setMinStart($minStart);
  3922.                     $reservationLounge->setHourEnd($hourEnd);
  3923.                     $reservationLounge->setMinEnd($minEnd);
  3924.                     $reservationLounge->setLanguage($reservationGlobalLounge['language']);
  3925.                     $reservationLounge->setUpdatedBy($user_id);
  3926.                     $reservationLounge->setCreatedBy($user_id);
  3927.                     try {
  3928.                         $em->persist($reservationLounge);
  3929.                         $em->flush();
  3930. //                        $event = 'The Item has been updated.';
  3931.                         $successMessage 'The Item has been updated.';
  3932. //                        $successMessage = $this->translator->trans($event);
  3933.                         $this->addFlash('mensajereservation'$successMessage);
  3934.                     } catch (\Exception $e) {
  3935.                         $event 'An error occurred: ' $e->getMessage();
  3936.                         $errorMessage $this->translator->trans($event);
  3937.                         $this->addFlash('mensajereservationerror'$errorMessage);
  3938.                     }
  3939.                     // INICIO: Verificamos si es necesario actualizar las fechas de la reserva
  3940.                     $boolReserva false;
  3941.                     if ($reservationLounge->getDateStart() < $reserva->getDateStart()){
  3942.                         $reserva->setDateStart($reservationLounge->getDateStart());
  3943.                         $boolReserva true;
  3944.                     }
  3945.                     if ($reserva->getDateEnd() < $reservationLounge->getDateEnd()){
  3946.                         $reserva->setDateEnd($reservationLounge->getDateEnd());
  3947.                         $boolReserva true;
  3948.                     }
  3949.                     if ($boolReserva){
  3950.                         $em->persist($reserva);
  3951.                         $em->flush();
  3952.                     }
  3953.                     // FIN: Verificamos si es necesario actualizar las fechas de la reserva
  3954.                     // INICIO: Verificamos si es necesario actualizar el contrato de la reserva
  3955.                     $loungeContract $em->getRepository(DocContract::class)->findBy(array('companyId' => 7'fileId' => $id'modelId' => $reservationLounge->getIdLounge()));
  3956.                     if (empty($loungeContract)){
  3957.                         $loungeContract = new DocContract();
  3958.                         $loungeContract->setCompanyId(7);
  3959.                         $loungeContract->setModelId($reservationLounge->getIdLounge());
  3960.                         if (!empty($reserva->getClient())){ $loungeContract->setClientId($reserva->getClient()); }
  3961.                         $loungeContract->setFileId($reserva->getId());
  3962.                         $loungeContract->setCreatedId($user_id);
  3963.                         $loungeContract->setCreatedAt($now);
  3964.                     } else {
  3965.                         $loungeContract $loungeContract[0];
  3966.                     }
  3967.                     if ((isset($reservationGlobalLounge[$loungeDetails->getId()]))) {
  3968.                         $loungeContract->setContractualDocument($reservationGlobalLounge[$loungeDetails->getId()]['contract']);
  3969.                         $loungeContract->setBookingData($reservationGlobalLounge[$loungeDetails->getId()]['booking']);
  3970.                         $loungeContract->setDateAt(new DateTime($reservationGlobalLounge[$loungeDetails->getId()]['othersDateContract']));
  3971.                         $loungeContract->setClientProxy($reservationGlobalLounge[$loungeDetails->getId()]['othersClientProxy']);
  3972.                         $loungeContract->setClientJob($reservationGlobalLounge[$loungeDetails->getId()]['othersClientJob']);
  3973.                         $loungeContract->setUpdatedId($user_id);
  3974.                         $loungeContract->setUpdatedAt($now);
  3975.                     }
  3976.                     if (in_array($reserva->getStatus(), ['Confirmed''Invoiced'])) {       // Solo hacer el contrato si est confirmado o facturado
  3977.                         $em->persist($loungeContract);
  3978.                         $em->flush();
  3979.                     }
  3980.                 }
  3981.             }
  3982.         }
  3983.         return $this->redirectToRoute('reservations_greenpatio_edit_simple', array( 'id' => $id'token' => null'_fragment' => 'btn_quotes' ));
  3984.     }
  3985.     /**
  3986.      * @Route("/deleteitemservice/{idService}/{idReservation}", name="reservations_greenpatio_deleteitemservice")
  3987.      */
  3988.     public function deleteItemServiceAction($idService$idReservationEntityManagerInterface $emRequest $request)
  3989.     {
  3990.         $service $em->getRepository(ReservationService::class)->findOneById($idService);
  3991.         $em->remove($service);
  3992.         $em->flush();
  3993.         $event 'The Item has been deleted.';
  3994.         $successMessage $this->translator->trans($event);
  3995.         $this->addFlash('mensajereservation'$successMessage);
  3996.         return $this->redirectToRoute('reservations_greenpatio_edit_simple', array( 'id' => $idReservation'token' => null ));
  3997.     }
  3998.     /**
  3999.      * @Route("/updateservicegrid/{id}", name="reservations_greenpatio_updateservicegrid")
  4000.      */
  4001.     public function updateServiceGridAction($idEntityManagerInterface $emRequest $request)
  4002.     {
  4003.         $services $request->request->get('services');
  4004.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  4005.         $user_id $user_logueado->getId();
  4006.         $reserva $em->getRepository(Reservation::class)->findOneById($id);
  4007.         foreach ($services as $idService => $service) {
  4008.             $serviceOriginal $em->getRepository(ReservationService::class)->findOneById($idService);
  4009.             if (empty($serviceOriginal)){ $serviceOriginal = new ReservationService(); }
  4010.             $serviceOriginal->setSupplierId($service['supplier']);
  4011.             if ($serviceOriginal->getServiceCatId() == 15){
  4012.                 // Asistencia
  4013.                 if (array_key_exists('agent',$service)){
  4014.                     if (!empty($service['agent']) and ($service['agent'] > 0)){
  4015.                         $userx $em->getRepository("App\Entity\User")->findOneById($service['agent']);
  4016.                         $serviceOriginal->setName($userx->getName().' '.$userx->getLastName());
  4017.                         $serviceOriginal->setAssistantId($service['agent']);
  4018.                     } else {
  4019.                         //Asistencia de un FreeLance
  4020.                         if (!empty($service['agent']) and ($service['agent'] < 0)){
  4021.                             // FreeLance registrado en el sistema
  4022.                             $idUserFree = ($service['agent'] * (-1));
  4023.                             $userx $em->getRepository(ExternalUser::class)->findOneById($idUserFree);
  4024.                             $serviceOriginal->setName($userx->getName().' '.$userx->getLastName());
  4025.                             $serviceOriginal->setAssistantId($service['agent']);
  4026.                         } else {
  4027.                             $serviceOriginal->setName($service['name']);
  4028.                             $serviceOriginal->setAssistantId(null);
  4029.                         }
  4030.                     }
  4031.                 }
  4032.             } else {
  4033.                 $serviceOriginal->setName($service['name']);
  4034.             }
  4035.             $price $service['price'];
  4036.             if ($price === null) {
  4037.                 $priceToSet 0;
  4038.             } else {
  4039.                 $price str_replace('.'''$price);
  4040.                 $price str_replace(',''.'$price);
  4041.                 if (is_numeric($price)) {
  4042.                     $priceToSet $price;
  4043.                 } else {
  4044.                     $priceToSet $serviceOriginal->getPrice();
  4045.                 }
  4046.             }
  4047.             $serviceOriginal->setPrice($priceToSet);
  4048.             $serviceOriginal->setCurrency($service['currency']);
  4049.             $serviceOriginal->setUnits($service['units']);
  4050.             $serviceOriginal->setPax($service['pax']);
  4051.             $serviceOriginal->setOpCommission($service['opCommission']);
  4052.             $commission $service['commission'];
  4053.             if ($commission === null) {
  4054.                 $commissionToSet 0;
  4055.             } else {
  4056.                 $commission str_replace(',''.'$commission);
  4057.                 if (is_numeric($commission)) {
  4058.                     $commissionToSet $commission;
  4059.                 } else {
  4060.                     $commissionToSet $serviceOriginal->getCommission();
  4061.                 }
  4062.             }
  4063.             $serviceOriginal->setCommission($commissionToSet);
  4064.             $serviceOriginal->setOpOver($service['opOver']);
  4065.             $over $service['over'];
  4066.             if ($over === null) {
  4067.                 $overToSet 0;
  4068.             } else {
  4069.                 $over str_replace('.'''$over);
  4070.                 $over str_replace(',''.'$over);
  4071.                 if (is_numeric($over)) {
  4072.                     $overToSet $over;
  4073.                 } else {
  4074.                     $overToSet $serviceOriginal->getOver();
  4075.                 }
  4076.             }
  4077.             $serviceOriginal->setOver($overToSet);
  4078.             $serviceOriginal->setOpIva($service['opIva']);
  4079.             $serviceOriginal->setIva($service['iva']);
  4080.             if (array_key_exists('toinvoice',$service)){ $serviceOriginal->setToinvoice(true); } else { $serviceOriginal->setToinvoice(false); }
  4081.             if (array_key_exists('viewinfo',$service)){ $serviceOriginal->setViewInfo(true); } else { $serviceOriginal->setViewInfo(false); }
  4082.             $serviceOriginal->setDateInAt(new DateTime($service['dateInAt']. ' ' $service['start']));
  4083.             $serviceOriginal->setDateOutAt(new DateTime($service['dateOutAt']. ' ' $service['end']));
  4084.             $serviceOriginal->setUpdatedId($user_id);
  4085.             $serviceOriginal->setUpdatedAt(new DateTime('now'));
  4086.             try{
  4087.                 $em->persist($serviceOriginal);
  4088.                 $em->flush();
  4089.                 $event 'The Item has been updated.';
  4090.                 $successMessage $this->translator->trans($event);
  4091.                 $this->addFlash('mensajereservation'$successMessage);
  4092.             } catch (\Exception $e){
  4093.                 $event 'An error occurred: '.$e->getMessage();
  4094.                 $errorMessage $this->translator->trans($event);
  4095.                 $this->addFlash('mensajereservationerror'$errorMessage);
  4096.             }
  4097.             if(($serviceOriginal->getServiceCatId()==11) and ($serviceOriginal->getSupplierId()==4765)){
  4098.                 //Es un Catering de Higo&Trigo
  4099.                 $reserva->setCateringName('HIGO & TRIGO, S.L.');
  4100.                 $em->persist($reserva);
  4101.                 $em->flush();
  4102.             }
  4103.         }
  4104.         // Sincronización con HT
  4105.         if (!empty($reserva)) {
  4106.             // Rafa indico que siempre se sincronice al abrir un expediente de GP
  4107.             if (in_array($reserva->getStatus(), [null'''Confirmed''Invoiced''Iniciado''Cotizado''Bloqueo'])) {
  4108.                 if ($reserva->getCateringName() == 'HIGO & TRIGO, S.L.') {
  4109.                     // Si no se ha creado aun el expediente de HT debemos crearlo
  4110.                     $htFile $em->getRepository(HtFile::class)->findByReservation($reserva);
  4111.                     if (empty($htFile)) {
  4112.                         return $this->redirectToRoute('sinc_gp_ht', array('id' => $id,));
  4113.                     }
  4114.                 }
  4115.             }
  4116.         }
  4117.         return $this->redirectToRoute('reservations_greenpatio_edit_simple', array( 'id' => $id'token' => null'_fragment' => 'btn_srv' ));
  4118.     }
  4119.     /**
  4120.      * @Route("/addloungegeneral", name="reservations_greenpatio_add_lounge_general")
  4121.      */
  4122.     public function addLoungeGeneralAction(EntityManagerInterface $emRequest $request)
  4123.     {
  4124.         $lounge $request->request->get('lounge_price');
  4125.         $yaExisteLounge $em->getRepository(ReservationLoungeDetails::class)->findOneByName($lounge['name']);
  4126.         if (!empty($yaExisteLounge)){
  4127.             //Si ya existe la sala con ese nombre se envia a la pantalla de edicion de la sala en cuestion
  4128.             $id $yaExisteLounge->getId();
  4129.             return $this->redirectToRoute('reservations_lounge_details', array( 'id' => $id ));
  4130.         }
  4131.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  4132.         $user_id $user_logueado->getId();
  4133.         $now = new DateTime('now');
  4134.         $loungeNew = new ReservationLoungeDetails();
  4135.         $loungeNew->setName($lounge['name']);
  4136.         $loungeNew->setMeters($lounge['meters']);
  4137.         $loungeNew->setLength($lounge['length']);
  4138.         $loungeNew->setWidth($lounge['width']);
  4139.         $loungeNew->setHeight($lounge['height']);
  4140.         $loungeNew->setCapSchool($lounge['capschool']);
  4141.         $loungeNew->setCapTheater ($lounge['captheater']);
  4142.         $loungeNew->setCapCocktail($lounge['capcocktail']);
  4143.         $loungeNew->setCapBanquet ($lounge['capbanquet']);
  4144.         $loungeNew->setCapImperial($lounge['capimperial']);
  4145.         $loungeNew->setCreatedId($user_id);
  4146.         $loungeNew->setCreatedAt($now);
  4147.         $loungeNew->setUpdatedId($user_id);
  4148.         $loungeNew->setUpdatedAt($now);
  4149.         try {
  4150.             $em->persist($loungeNew);
  4151.             $em->flush();
  4152.             $event 'The Item has been created.';
  4153.             $successMessage $this->translator->trans($event);
  4154.             $this->addFlash('mensajereservation'$successMessage);
  4155.         } catch (\Exception $e) {
  4156.             $event 'An error occurred: ' $e->getMessage();
  4157.             $errorMessage $this->translator->trans($event);
  4158.             $this->addFlash('mensajereservationerror'$errorMessage);
  4159.         }
  4160.         if (!empty($loungeNew->getId())){
  4161.             // Esto pertenece a otra entidad
  4162.             $loungeNewDescription = new ReservationLoungeDescription();
  4163.             $loungeNewDescription->setLoungeId($loungeNew->getId());
  4164.             $loungeNewDescription->setLanguage($lounge['language']);
  4165.             $loungeNewDescription->setDescription($lounge['description']);
  4166.             $loungeNewDescription->setCreatedId($user_id);
  4167.             $loungeNewDescription->setCreatedAt($now);
  4168.             $loungeNewDescription->setUpdatedId($user_id);
  4169.             $loungeNewDescription->setUpdatedAt($now);
  4170.             try {
  4171.                 $em->persist($loungeNewDescription);
  4172.                 $em->flush();
  4173.                 $event 'The Item has been created.';
  4174.                 $successMessage $this->translator->trans($event);
  4175.                 $this->addFlash('mensajereservation'$successMessage);
  4176.             } catch (\Exception $e) {
  4177.                 $event 'An error occurred: ' $e->getMessage();
  4178.                 $errorMessage $this->translator->trans($event);
  4179.                 $this->addFlash('mensajereservationerror'$errorMessage);
  4180.             }
  4181.             return $this->redirectToRoute('reservations_lounge_details', array( 'id' => $loungeNew->getId() ));
  4182.         }
  4183.         return $this->redirectToRoute('reservations_greenpatio_edit_general');
  4184.     }
  4185.     /**
  4186.      * @Route("/addloungedescription/{id}", name="reservations_greenpatio_add_lounge_description")
  4187.      */
  4188.     public function addLoungeDescriptionAction($idRequest $request)
  4189.     {
  4190.         $em $this->getDoctrine()->getManager();
  4191.         /* Obtengo usuario logueado */
  4192.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  4193.         $user_id $user_logueado->getId();
  4194.         $now = new DateTime('now');
  4195.         $loungeDescriptoin $request->request->get('lounge_description');
  4196. //        $loungeDetail = $em->getRepository(ReservationLoungeDetails::class)->findOneById($id);
  4197. //        $loungeDetail->setImportantDescription($loungeDescriptoin['importantDescription']);
  4198. //
  4199. //        $em->persist($loungeDetail);
  4200. //        $em->flush();
  4201.         if (empty($loungeDescriptoin['language']) or empty($loungeDescriptoin['description'])){ return $this->redirectToRoute('reservations_lounge_details', array('id' => $id)); }
  4202.         $newLoungeDescription = new reservationLoungeDescription();
  4203.         $newLoungeDescription->setLoungeId($id);
  4204.         $newLoungeDescription->setLanguage($loungeDescriptoin['language']);
  4205.         $newLoungeDescription->setDescription($loungeDescriptoin['description']);
  4206.         $newLoungeDescription->setCreatedId($user_id);
  4207.         $newLoungeDescription->setUpdatedId($user_id);
  4208.         $newLoungeDescription->setCreatedAt($now);
  4209.         $newLoungeDescription->setUpdatedAt($now);
  4210.         try {
  4211.             $em->persist($newLoungeDescription);
  4212.             $em->flush();
  4213.             $event 'The Item has been created.';
  4214. //            $successMessage = $this->translator->trans($event);
  4215.             $successMessage 'El elemento ha sido creado.';
  4216.             $this->addFlash('mensajereservation'$successMessage);
  4217.         } catch (\Exception $e) {
  4218.             $event 'An error occurred: ' $e->getMessage();
  4219.             $errorMessage $this->translator->trans($event);
  4220.             $this->addFlash('mensajereservationerror'$errorMessage);
  4221.         }
  4222.         return $this->redirectToRoute('reservations_lounge_details', array('id' => $id));
  4223.     }
  4224.     /**
  4225.      * @Route("/addwebinfo/{id}", name="reservations_greenpatio_add_web_info")
  4226.      * Actualiza la información de la sala a presentar en la web, que esta almacenada por defecto
  4227.      * Actualiza la información del contrato
  4228.      */
  4229.     public function addLoungeWebInfoAction($idEntityManagerInterface $emRequest $request)
  4230.     {
  4231.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  4232.         $user_id $user_logueado->getId();
  4233.         $now = new \DateTimeImmutable('now');
  4234.         $lounge $em->getRepository(ReservationLoungeDetails::class)->findOneById($id);
  4235.         if (empty($lounge)) {
  4236.             $this->addFlash('mensajereservationerror''Error, no se ha encontrado la sala con ID: '.$id);
  4237.             return $this->redirectToRoute('reservations_greenpatio_edit_general');
  4238.         }
  4239.         $loungeWebDescription $request->request->get('lounge_web_description') ?? [];
  4240.         foreach ($loungeWebDescription as $key => $descriptions) {
  4241.             $loungeDetail $em->getRepository(ReservationLoungeWebDescription::class)->findOneBy(array('lounge' => $lounge'language' => $key));
  4242.             if (empty($loungeDetail)) {
  4243.                 $loungeDetail = new ReservationLoungeWebDescription();
  4244.                 $loungeDetail->setLounge($lounge);
  4245.                 $loungeDetail->setLanguage($key);
  4246.                 $loungeDetail->setCreatedId($user_logueado);
  4247.             }
  4248.             $loungeDetail->setImportantDescription($descriptions['importantDescription']);
  4249.             $loungeDetail->setImportantDescGeneralText($descriptions['importantDescGeneralText']);
  4250.             $loungeDetail->setImportantDescSchedules($descriptions['importantDescSchedules']);
  4251.             $loungeDetail->setImportantDescParking($descriptions['importantDescParking']);
  4252.             $loungeDetail->setUpdatedId($user_logueado);
  4253.             $em->persist($loungeDetail);
  4254.             
  4255.             $loungeContract $em->getRepository(DocContractModel::class)->findOneBy(array('modelId' => $id'companyId' => 7'language' => $key));
  4256.             if (empty($loungeContract)){
  4257.                 $loungeContract = new DocContractModel();
  4258.                 $loungeContract->setModelId($id);
  4259.                 $loungeContract->setLanguage($key);
  4260.                 $loungeContract->setCompanyId(7);
  4261.                 $loungeContract->setCreatedId($user_id);
  4262.             }
  4263.             $loungeContract->setContractualDocument($descriptions['contractualDocument']);
  4264.             $loungeContract->setUpdatedId($user_id);
  4265.     
  4266.             $em->persist($loungeContract);
  4267.         }
  4268.         $em->flush();
  4269.         return $this->redirectToRoute('reservations_lounge_details', array('id' => $id));
  4270.     }
  4271.     /**
  4272.      * @Route("/updatedescritiongrid/{id}", name="reservations_greenpatio_updatedescriptiongrid")
  4273.      */
  4274.     public function updateDescriptionGridAction($idRequest $request)
  4275.     {
  4276.         $descriptions $request->request->get('description');
  4277.         $em $this->getDoctrine()->getManager();
  4278.         /* Obtengo usuario logueado */
  4279.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  4280.         $user_id $user_logueado->getId();
  4281.         foreach ($descriptions as $idDesc => $description) {
  4282.             $descriptionOriginal $em->getRepository(ReservationLoungeDescription::class)->findOneById($idDesc);
  4283.             $descriptionOriginal->setLanguage($description['language']);
  4284.             $descriptionOriginal->setDescription($description['text']);
  4285.             $descriptionOriginal->setUpdatedId($user_id);
  4286.             $descriptionOriginal->setUpdatedAt(new DateTime('now'));
  4287.             try{
  4288.                 $em->persist($descriptionOriginal);
  4289.                 $em->flush();
  4290.                 $event 'The Item has been updated.';
  4291. //                $successMessage = $this->translator->trans($event);
  4292.                 $successMessage 'El elemento ha sido actualizado.';
  4293.                 $this->addFlash('mensajereservation'$successMessage);
  4294.             } catch (\Exception $e){
  4295.                 $event 'An error occurred: '.$e->getMessage();
  4296.                 $errorMessage $this->translator->trans($event);
  4297.                 $this->addFlash('mensajereservationerror'$errorMessage);
  4298.             }
  4299.         }
  4300.         return $this->redirectToRoute('reservations_lounge_details', array( 'id' => $id ));
  4301.     }
  4302.     /**
  4303.      * @Route("/addloungepicture/{id}", name="reservations_greenpatio_add_lounge_picture")
  4304.      */
  4305.     public function addLoungePictureAction($idEntityManagerInterface $emRequest $request//, LoggerInterface $logger)
  4306.     {
  4307.         /* Obtengo usuario logueado */
  4308.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  4309.         $user_id $user_logueado->getId();
  4310.         $now = new DateTime('now');
  4311.         $picturefiles $request->files->all();
  4312.         $loungeId $id;
  4313.         $imagenes $picturefiles['loungepicturegallery'];
  4314.         $data $loungeId;
  4315.         if(!empty($imagenes['image1']) || !empty($imagenes['image2']) || !empty($imagenes['image3']) || !empty($imagenes['image4']) || !empty($imagenes['image5'])){
  4316.             $num 0;
  4317.             foreach($imagenes as $img){
  4318.                 $num $num;
  4319.                 if (!is_null($img)){ $data $this->CargarImgGalleryAction($loungeId$img$num$request); } //, $logger);
  4320.             }
  4321.         } else {
  4322.             $errorMessage $this->translator->trans('Error, some fields are empty');
  4323.             $this->addFlash('mensajegalleryerror'$errorMessage);
  4324.         }
  4325.         return $this->redirectToRoute('reservations_lounge_details', array('id' => $id));
  4326.     }
  4327.     protected function CargarImgGalleryAction($loungeId$image$numRequest $request//, LoggerInterface $logger)
  4328.     {
  4329.         $gallery = new ReservationLoungePicture();
  4330.         $gallery->setLoungeId($loungeId);
  4331.         $gallery->setCreatedAt(new DateTime('now'));
  4332.         $gallery->setUpdatedAt(new DateTime('now'));
  4333.         $gallery->setTitle(null);
  4334.         if ($num == -1){$gallery->setTitle('Blueprint');}
  4335.         if ($num == 'TEATRO'){$gallery->setTitle('Teatro');}
  4336.         if ($num == 'COCTEL'){$gallery->setTitle('Coctel');}
  4337.         if ($num == 'ESCUELA'){$gallery->setTitle('Escuela');}
  4338.         $id $loungeId;
  4339.         /* Carga de imagenes */
  4340.         $calidad "90";
  4341.         $calidadpng "9";
  4342.         $imageName md5(rand() * time());
  4343.         $camino "assets/images/greenpatio/lounges/";
  4344.         $extension $image->guessExtension();
  4345.         $entrada 'si';
  4346.         $image_id $imageName.'.'.$extension;
  4347.         $image_temp $id.'-'.$imageName.'.'.$extension;
  4348.         $image->move($camino$image_temp);
  4349.         // Nombres image
  4350.         $s="small-";
  4351.         $m="medium-";
  4352.         $l="large-";
  4353.         ########################
  4354.         # Copiar imagen 300 x Altura
  4355.         ########################
  4356.         $datos getimagesize($camino.$image_temp);
  4357.         $anchura "300";
  4358.         $altura "190";
  4359.         $thumb imagecreatetruecolor($anchura,$altura);
  4360.         switch ($extension) {
  4361.             case 'jpeg':
  4362.                 $img imagecreatefromjpeg($camino.$image_temp);
  4363.                 imagecopyresampled ($thumb$img0000$anchura$altura$datos[0], $datos[1]);
  4364.                 imagejpeg($thumb,$camino.$s.$image_id$calidad);
  4365.                 break;
  4366.             case 'png':
  4367.                 $img imagecreatefrompng($camino.$image_temp);
  4368.                 imagecopyresampled ($thumb$img0000$anchura$altura$datos[0], $datos[1]);
  4369.                 imagepng($thumb,$camino.$s.$image_id$calidadpng);
  4370.                 break;
  4371.             case 'gif':
  4372.                 $img imagecreatefromgif($camino.$image_temp);
  4373.                 imagecopyresampled ($thumb$img0000$anchura$altura$datos[0], $datos[1]);
  4374.                 imagegif($thumb,$camino.$s.$image_id);
  4375.                 break;
  4376.         }
  4377.         ########################
  4378.         # Copiar imagen 600 x Altura
  4379.         ########################
  4380.         $datos2 getimagesize($camino.$image_temp);
  4381.         $anchura2="600";
  4382.         $ratio2 = ($datos2[0] / $anchura2);
  4383.         $altura2 round($datos2[1] / $ratio2);
  4384.         $thumb2 imagecreatetruecolor($anchura2,$altura2);
  4385.         switch ($extension) {
  4386.             case 'jpeg':
  4387.                 $img2 imagecreatefromjpeg($camino.$image_temp);
  4388.                 imagecopyresampled ($thumb2$img20000$anchura2$altura2$datos2[0], $datos2[1]);
  4389.                 imagejpeg($thumb2,$camino.$m.$image_id$calidad);
  4390.                 break;
  4391.             case 'png':
  4392.                 $img2 imagecreatefrompng($camino.$image_temp);
  4393.                 imagecopyresampled ($thumb2$img20000$anchura2$altura2$datos2[0], $datos2[1]);
  4394.                 imagepng($thumb2,$camino.$m.$image_id$calidadpng);
  4395.                 break;
  4396.             case 'gif':
  4397.                 $img2 imagecreatefromgif($camino.$image_temp);
  4398.                 imagecopyresampled ($thumb2$img20000$anchura2$altura2$datos2[0], $datos2[1]);
  4399.                 imagegif($thumb2,$camino.$m.$image_id);
  4400.                 break;
  4401.         }
  4402.         ########################
  4403.         # Copiar imagen 1600 x Altura
  4404.         ########################
  4405.         $datos3 getimagesize($camino.$image_temp);
  4406.         $anchura3="1600";
  4407.         $ratio3 = ($datos3[0] / $anchura3);
  4408.         $altura3 round($datos3[1] / $ratio3);
  4409.         $thumb3 imagecreatetruecolor($anchura3,$altura3);
  4410.         switch ($extension) {
  4411.             case 'jpeg':
  4412.                 $img3 imagecreatefromjpeg($camino.$image_temp);
  4413.                 imagecopyresampled ($thumb3$img30000$anchura3$altura3$datos3[0], $datos3[1]);
  4414.                 imagejpeg($thumb3,$camino.$l.$image_id$calidad);
  4415.                 break;
  4416.             case 'png':
  4417.                 $img3 imagecreatefrompng($camino.$image_temp);
  4418.                 imagecopyresampled ($thumb3$img30000$anchura3$altura3$datos3[0], $datos3[1]);
  4419.                 imagepng($thumb3,$camino.$l.$image_id$calidadpng);
  4420.                 break;
  4421.             case 'gif':
  4422.                 $img3 imagecreatefromgif($camino.$image_temp);
  4423.                 imagecopyresampled ($thumb3$img30000$anchura3$altura3$datos3[0], $datos3[1]);
  4424.                 imagegif($thumb3,$camino.$l.$image_id);
  4425.                 break;
  4426.         }
  4427.         ########################
  4428.         # borrar imagen original
  4429.         ########################
  4430.         $imagen_borrar$camino.$image_temp;
  4431.         unlink($imagen_borrar);
  4432.         $gallery->setImageSmall($s.$image_id);
  4433.         $gallery->setImageMedium($m.$image_id);
  4434.         $gallery->setImageLarge($l.$image_id);
  4435.         /* Fin Carga de imagenes */
  4436.         /* Obtengo usuario logueado */
  4437.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  4438.         $user_id $user_logueado->getId();
  4439.         $gallery->setCreatedId($user_id);
  4440.         $gallery->setUpdatedId($user_id);
  4441.         $em $this->getDoctrine()->getManager();
  4442.         /* Gestión de eventos en Log */
  4443.         $user_lastname $user_logueado->getLastname();
  4444.         $user_name $user_logueado->getName();
  4445.         $user_email $user_logueado->getEmail();
  4446.         $user_rol $user_logueado->getRoles();
  4447.         $event_url $request->getPathInfo();
  4448.         $event_complete $user_name.' '.$user_lastname.' - '.$user_email.' - '.$user_rol[0].' | '.$event_url;
  4449.         try{
  4450.             $em->persist($gallery);
  4451.             $em->flush();
  4452.             $event 'Images from this supplier have been uploaded.';
  4453.             $successMessage $this->translator->trans($event);
  4454.             $this->addFlash('mensajegallery'$successMessage);
  4455.         } catch (\Exception $e){
  4456.             $event 'An error occurred: '.$e->getMessage().' | transport';
  4457.             /* Para el usuario */
  4458.             $errorMessage $this->translator->trans($event);
  4459.             $this->addFlash('mensajegalleryerror'$errorMessage);
  4460.         }
  4461.         /* Fin Gestión de eventos en Log */
  4462.         return $id;
  4463.     }
  4464.     /**
  4465.      * @Route("/addloungevideo/{id}", name="reservations_greenpatio_add_lounge_video")
  4466.      */
  4467.     public function addLoungeVideoAction($idEntityManagerInterface $emRequest $request//, LoggerInterface $logger)
  4468.     {
  4469.         /* Obtengo usuario logueado */
  4470.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  4471.         $user_id $user_logueado->getId();
  4472.         $now = new DateTime('now');
  4473.         $urlvideo $request->request->get('loungevideo');
  4474.         $urlvideo $urlvideo['urlvideo'];
  4475.         $loungeId $id;
  4476.         if(!empty($urlvideo)){
  4477.             switch (true) {
  4478.                 case strpos($urlvideo'youtube'):
  4479.                     $patron '%^ (?:https?://)? (?:www\.)? (?: youtu\.be/ | youtube\.com (?: /embed/ | /v/ | /watch\?v= ) ) ([\w-]{10,12}) ($|&).* $%x';
  4480.                     preg_match($patron$urlvideo$parte);
  4481.                     $urvideo_final 'https://www.youtube.com/embed/'$parte[1];
  4482.                     break;
  4483.                 case strpos($urlvideo'youtu'):
  4484.                     $patron '%^ (?:https?://)? (?:www\.)? (?: youtu\.be/ | youtube\.com (?: /embed/ | /v/ | /watch\?v= ) ) ([\w-]{10,12}) ($|&).* $%x';
  4485.                     preg_match($patron$urlvideo$parte);
  4486.                     $urvideo_final 'https://www.youtube.com/embed/'$parte[1];
  4487.                     break;
  4488.                 case strpos($urlvideo'vimeo'):
  4489.                     $patron '%^https?:\/\/(?:www\.|player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|video\/|)(\d+)(?:$|\/|\?)(?:[?]?.*)$%im';
  4490.                     preg_match($patron$urlvideo$parte);
  4491.                     $urvideo_final 'https://player.vimeo.com/video/'$parte[3];
  4492.                     break;
  4493.             }
  4494.             if(!empty($urlvideo) && !empty($urvideo_final) ){
  4495.                 $video = new ReservationLoungeVideo();
  4496.                 $video->setCreatedId($user_id);
  4497.                 $video->setUpdatedId($user_id);
  4498.                 $video->setVideo($urvideo_final);
  4499.                 $video->setLoungeId($loungeId);
  4500.                 $video->setCreatedAt($now);
  4501.                 $video->setUpdatedAt($now);
  4502.                 $em->persist($video);
  4503.                 $em->flush();
  4504.             }
  4505.         }
  4506.         if (empty($urlvideo)){
  4507.             $errorMessage $this->translator->trans('Error, some fields are empty');
  4508.             $this->addFlash('mensajegalleryerror'$errorMessage);
  4509.         }
  4510.         return $this->redirectToRoute('reservations_lounge_details', array('id' => $id));
  4511.     }
  4512.     /**
  4513.      * @Route("/deleteloungevideo/{id}", name="reservations_greenpatio_delete_lounge_video")
  4514.      */
  4515.     public function deleteLoungeVideoAction($idEntityManagerInterface $emRequest $request//, LoggerInterface $logger)
  4516.     {
  4517.         $video $em->getRepository(ReservationLoungeVideo::class)->findOneById($id);
  4518.         $idLounge $video->getLoungeId();
  4519.         try{
  4520.             $em->remove($video);
  4521.             $em->flush();
  4522. //            $event = 'The Item has been deleted.';
  4523.             $successMessage 'El elemento ha sido eliminado.';
  4524. //            $successMessage = $this->translator->trans($event);
  4525.             $this->addFlash('mensajereservation'$successMessage);
  4526.         } catch (\Exception $e){
  4527.             $event 'An error occurred: '.$e->getMessage();
  4528.             $errorMessage $this->translator->trans($event);
  4529.             $this->addFlash('mensajereservationerror'$errorMessage);
  4530.         }
  4531.         return $this->redirectToRoute('reservations_lounge_details', array('id' => $idLounge));
  4532.     }
  4533.     /**
  4534.      * @Route("/addloungeblueprints/{id}", name="reservations_greenpatio_add_lounge_blueprints")
  4535.      */
  4536.     public function addLoungeBlueprintsAction($idEntityManagerInterface $emRequest $request//, LoggerInterface $logger)
  4537.     {
  4538.         /* Obtengo usuario logueado */
  4539.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  4540.         $user_id $user_logueado->getId();
  4541.         $now = new DateTime('now');
  4542.         $picturefiles $request->files->all();
  4543.         $loungeId $id;
  4544.         $imagen $picturefiles['loungepicturegalleryblueprints'];
  4545.         $data $loungeId;
  4546.         if(!empty($imagen)){
  4547.             $num = -1;
  4548.             $data $this->CargarImgGalleryAction($loungeId$imagen$num$request); //, $logger);
  4549.         } else {
  4550.             $errorMessage $this->translator->trans('Error, some fields are empty');
  4551.             $this->addFlash('mensajegalleryerror'$errorMessage);
  4552.         }
  4553.         return $this->redirectToRoute('reservations_lounge_details', array('id' => $id));
  4554.     }
  4555.    /**
  4556.      * @Route("/addpicturemounting/{id}", name="reservations_greenpatio_add_lounge_picture_mounting")
  4557.      */
  4558.     public function addLoungePictureMountingAction($idEntityManagerInterface $emRequest $request//, LoggerInterface $logger)
  4559.     {
  4560.         /* Obtengo usuario logueado */
  4561.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  4562.         $user_id $user_logueado->getId();
  4563.         $now = new DateTime('now');
  4564.         $picturefiles $request->files->all();
  4565.         $loungeId $id;
  4566.         $imagen $picturefiles['picturemounting'];
  4567.         $data $loungeId;
  4568.         if(!empty($imagen)){
  4569.             $num $request->request->get('picturemounting');
  4570.             $num $num['type'];
  4571.             $data $this->CargarImgGalleryAction($loungeId$imagen$num$request); //, $logger);
  4572.         }else{
  4573.             $errorMessage $this->translator->trans('Error, some fields are empty');
  4574.             $this->addFlash('mensajegalleryerror'$errorMessage);
  4575.         }
  4576.         return $this->redirectToRoute('reservations_lounge_details', array('id' => $id));
  4577.     }
  4578.    /**
  4579.      * @Route("/updatedimmensions/{id}", name="update_dimmensions")
  4580.      */
  4581.     public function updateDimmensionsAction($idEntityManagerInterface $emRequest $request)
  4582.     {
  4583.         $lounge $em->getRepository(ReservationLoungeDetails::class)->findOneById($id);
  4584.         $newData $request->request->get('loungedimmensions');
  4585.         $lounge->setMeters($newData['meters']);
  4586.         $lounge->setLength($newData['length']);
  4587.         $lounge->setWidth($newData['width']);
  4588.         $lounge->setHeight($newData['height']);
  4589.         $lounge->setCapSchool($newData['capSchool']);
  4590.         $lounge->setCapTheater($newData['capTheater']);
  4591.         $lounge->setCapCocktail($newData['capCocktail']);
  4592.         $lounge->setCapBanquet($newData['capBanquet']);
  4593.         $lounge->setCapImperial($newData['capImperial']);
  4594.         /* Obtengo usuario logueado */
  4595.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  4596.         $user_id $user_logueado->getId();
  4597.         $now = new DateTime('now');
  4598.         $lounge->setUpdatedId($user_id);
  4599.         $lounge->setUpdatedAt($now);
  4600.         try{
  4601.             $em->persist($lounge);
  4602.             $em->flush();
  4603.             $event 'The Note has been created succesfully.';
  4604.             $successMessage $this->translator->trans($event);
  4605.             $this->addFlash('mensaje'$successMessage);
  4606.         } catch (\Exception $e){
  4607.             $event 'An error occurred: '.$e->getMessage();
  4608.             /* Para el usuario */
  4609.             $errorMessage $this->translator->trans($event);
  4610.             $this->addFlash('mensajeerror'$errorMessage);
  4611.         }
  4612.         return $this->redirectToRoute('reservations_lounge_details', array('id' => $id));
  4613.     }
  4614.     /**
  4615.      * @Route("/addvisit", name="reservations_greenpatio_addvisit")
  4616.      */
  4617.     public function addVisitAction(EntityManagerInterface $emRequest $request)
  4618.     {
  4619.         $visitas $em->getRepository(ReservationVisit::class)->findAll();
  4620.         $listAllReservas $em->getRepository(Reservation::class)->findAll();
  4621.         $agentsGp = array();     //arreglo con los agentes de Green Patio
  4622.         $allUsers[] = $em->getRepository(User::class)->findAll();
  4623.         $agentsGp $em->getRepository(User::class)->findBy(['userrol' => [49,53]]);
  4624.         return $this->render('MDS/GreenPatioBundle/reservations/add-visit.html.twig',
  4625.             array(
  4626.                 'visitas' => $visitas,
  4627.                 'agentsGp' => $agentsGp,
  4628.                 'listAllReservas' => $listAllReservas,
  4629.             )
  4630.         );
  4631.     }
  4632.     /**
  4633.      * @Route("/createvisit", name="reservations_greenpatio_createvisit")
  4634.      */
  4635.     public function createVisitAction(EntityManagerInterface $emRequest $request)
  4636.     {
  4637.         $newRequest $request->request->get('visit');
  4638.         /* Obtengo usuario logueado */
  4639.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  4640.         $user_id $user_logueado->getId();
  4641.         if (!empty($newRequest['date']) and !empty($newRequest['time'])){ $dateStart = new DateTime ($newRequest['date']. ' '.$newRequest['time']); } else { $dateStart = new DateTime ('now'); }
  4642.         if (!empty($newRequest['time'])) {
  4643.             $hourStart substr($newRequest['time'], 02);
  4644.             $minStart substr($newRequest['time'], 32);
  4645.             $hourEnd substr($newRequest['time'],0,2) + 1;
  4646.             $minEnd substr($newRequest['time'],3,2);
  4647.         } else {
  4648.             $hourStart '12';
  4649.             $minStart '00';
  4650.             $hourEnd '13';
  4651.             $minEnd '00';
  4652.         }
  4653.         if (!empty($newRequest['agent'])) { $agent $em->getRepository(User::class)->findOneById($newRequest['agent']); } else { $agent $em->getRepository(User::class)->findOneById(82); }
  4654.         $title '';
  4655.         if (!empty($newRequest['name'])){ $title $newRequest['name']; }
  4656.         if (!empty($newRequest['idreservation'])){
  4657.             $res $em->getRepository(Reservation::class)->findOneById($newRequest['idreservation']);
  4658.             if (!empty($title)) { $title $title ' - ' $res->getTitle(); } else { $title $res->getTitle(); }
  4659.         }
  4660.         $newVisit = new ReservationVisit();
  4661.         $newVisit->setAgentId($agent->getId());
  4662.         $newVisit->setDateStart($dateStart);
  4663.         $newVisit->setDateEnd($dateStart);
  4664.         if (!empty($newRequest['time'])) {
  4665.             $newVisit->setHourStart($hourStart);
  4666.             $newVisit->setMinStart($minStart);
  4667.             $newVisit->setHourEnd($hourEnd);
  4668.             $newVisit->setMinEnd($minEnd);
  4669.         } else {
  4670.             $newVisit->setHourStart($hourStart);
  4671.             $newVisit->setMinStart($minStart);
  4672.             $newVisit->setHourEnd($hourEnd);
  4673.             $newVisit->setMinEnd($minEnd);
  4674.         }
  4675.         $newVisit->setLoungeName($title.' - '.'Visita '.$agent->getName());
  4676.         if (!empty($newRequest['idreservation'])) { $newVisit->setIdReservation($newRequest['idreservation']); } else { $newVisit->setIdReservation(null); }
  4677.         $newVisit->setType('Visit');
  4678.         $newVisit->setCreatedAt(new DateTime ('now'));
  4679.         $newVisit->setCreatedId($user_id);
  4680.         $newVisit->setUpdatedAt(new DateTime ('now'));
  4681.         $newVisit->setUpdatedId($user_id);
  4682.         $location = (!empty($newRequest['location'])) ? $newRequest['location'] : 0;
  4683.         $newVisit->setIdLounge($location);
  4684.         $em->persist($newVisit);
  4685.         $em->flush();
  4686.         return $this->redirectToRoute('reservations_greenpatio_addvisit');
  4687.     }
  4688.     /**
  4689.      * @Route("/deletevisit/{id}", name="get_reservations_deletevisit")
  4690.      */
  4691.     public function deleteVisitAction($idEntityManagerInterface $emRequest $request) {
  4692.         $visit $em->getRepository(ReservationVisit::class)->findOneById($id);
  4693.         if (!empty($visit)){
  4694.             $em->remove($visit);
  4695.             $em->flush();
  4696.         }
  4697.         return $this->redirectToRoute('reservations_greenpatio_addvisit');
  4698.     }
  4699.     /**
  4700.      * @Route("/sendconfirmationrequestmail/{id}", name="reservations_greenpatio_send_confirmation_request_mail")
  4701.      * Enviar correo a Salvador y Rafael Guerrero para que la reserva (id) pase al estado confirmado
  4702.      */
  4703.     public function sendConfirmationRequestMailAction($idEntityManagerInterface $emRequest $request){
  4704.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  4705.         $user_id $user_logueado->getId();
  4706.         $mailArrayTo = []; $mailAlert = [];
  4707.         $mailArrayTo['salvador@avexpress.tv'] = 'salvador@avexpress.tv';
  4708.         $mailArrayTo['rafael.guerrero@inout-travel.com'] = 'rafael.guerrero@inout-travel.com';
  4709.         $dataGP $this->disponibilidadGreenPatio($id);
  4710.         $dataAV $this->disponibilidadAvExpress($id);
  4711.         $dataLounges = array();
  4712.         foreach ($dataGP as $item){
  4713.             $lounges $em->getRepository(ReservationLoungeSimple::class)->findBy(array('idReservation'=>$item->getId(),'type'=>null));
  4714.             foreach ($lounges as $elem){ $dataLounges[$item->getId()][] = $elem; }
  4715.         }
  4716.         $reserva $em->getRepository(Reservation::class)->findOneById($id);
  4717.         $agente $em->getRepository(User::class)->findOneById($user_id);
  4718.         $mailAddressFrom $agente->getEmail();
  4719.         $mailSubject 'Confirmación de reserva: '.$reserva->getTitle();
  4720.         $mensajePopup '';
  4721.         $mailBody 'Estimado administrador,'.
  4722.             '<br><br>'$agente->getName().' '$agente->getLastName(). ' ha solicitado la confirmación de la reserva:'.
  4723.             '<br><br>'.$reserva->getTitle(). ' con ID: '.$reserva->getId().
  4724.             '<br>Este evento incia el día '.$reserva->getDateStart()->format('d/m/Y').' a las '.$reserva->getDateStart()->format('H:i'). ' y finaliza el día '.$reserva->getDateEnd()->format('d/m/Y').' a las '.$reserva->getDateEnd()->format('H:i').'<br><br><br>';
  4725.         if (!empty($dataGP) or !empty($dataAV)){
  4726.             if(!empty($dataGP)){
  4727.                 $mensajePopup .= 'No se puede CONFIRMAR, conflicto con:'.'<br><br>';
  4728.                 // Conflictos con otros eventos en Green Patio
  4729.                 $mailSubject '⚠️ ALERTA️ ‼️ DOBLE CONFIRMADO MISMA SALA' $mailSubject;
  4730.                 $mailBody $mailBody 'Este evento coincide con la(s) reserva(s): <br>';
  4731.                 foreach ($dataGP as $res){
  4732.                     $mailBody $mailBody 'Reserva: '.$res->getTitle().', con ID: '.$res->getId().', fecha de inicio: '.$res->getDateStart()->format('d/m/Y').' a las '.$res->getDateStart()->format('H:i').', fecha de finalización: '.$res->getDateEnd()->format('d/m/Y').' a las '.$res->getDateEnd()->format('H:i');
  4733.                     if(!empty($dataLounges[$res->getId()])){
  4734.                         $mailBody $mailBody .', Salas: ';
  4735.                         foreach ($dataLounges[$res->getId()] as $loungeItem){ $mailBody $mailBody $loungeItem->getLoungeName().', '; }
  4736.                         $mailBody $mailBody .'<br>';
  4737.                     }
  4738.                     $mensajePopup .='Reserva: '.$res->getTitle().', con ID: '.$res->getId().'<br>';
  4739.                 }
  4740.                 $mailBody $mailBody '<br><br>';
  4741.             }
  4742.             if(!empty($dataAV)){
  4743.                 // Conflictos con otros eventos de AvExpress
  4744.                 $mailBody $mailBody 'Este evento coincide en AV con el expediente(s): <br>';
  4745.                 foreach ($dataAV as $file){
  4746.                     $mailBody $mailBody 'Expediente: '.$file->getTitle().', con ID: '.$file->getId().', fecha de inicio: '.$file->getDateStart()->format('d/m/Y H:i').', fecha de finalización: '.$file->getDateEnd()->format('d/m/Y H:i').'<br>';
  4747.                 }
  4748.             }
  4749.             $mailAlert = array('mailBody' => $mailBody'mailSubject' => $mailSubject);
  4750.         }
  4751.         $mailBody $mailBody .'<br><br><a href="https://inout.mante.solutions/reservations-greenpatio/">CALENDARIO GREEN PATIO</a>';
  4752.         $mailBody $mailBody .'<br><br> <a href="https://inout.mante.solutions/reservations-greenpatio/adminconfirmres/y/'.$id.'">"SI"</a> deseo confirmar la reserva.';
  4753.         $mailBody $mailBody .'<br><br> <a href="https://inout.mante.solutions/reservations-greenpatio/adminconfirmres/n/'.$id.'">"NO"</a> deseo confirmar la reserva.';
  4754.         $mailBody $mailBody .'<br><br><br> <a href="https://inout.mante.solutions">"PARA QUE LOS ENLACES FUNCIONEN, ANTES DEBES INCIAR SESION"</a><br><br>';
  4755.         // Se envia el correo pidiendo la confirmacion
  4756.         $this->sendMailLot($mailAddressFrom$mailArrayTo$mailSubject$mailBody);
  4757.         //Alerta a Gabriela, Agente modificador del expediente y Mariale
  4758.         if (!empty($dataGP)){
  4759.             $mailArrayTo = [];
  4760.             $agentAlert $em->getRepository(User::class)->findOneById($reserva->getUpdatedBy());
  4761.             if (!empty($agentAlert) and ($agentAlert->getStatus() == 1)){ $mailArrayTo[$agentAlert->getEmail()] = $agentAlert->getEmail(); }
  4762.             $agentAlert $em->getRepository(User::class)->findOneById(82);         // Gabriela Bracho
  4763.             if (!empty($agentAlert) and ($agentAlert->getStatus() == 1)){ $mailArrayTo[$agentAlert->getEmail()] = $agentAlert->getEmail(); }
  4764.             $agentAlert $em->getRepository(User::class)->findOneById(129);         // Maria Alejandra Martinez
  4765.             if (!empty($agentAlert) and ($agentAlert->getStatus() == 1)){ $mailArrayTo[$agentAlert->getEmail()] = $agentAlert->getEmail(); }
  4766.             $this->sendMailLot($mailAddressFrom$mailArrayTo$mailSubject$mailAlert['mailBody']);
  4767.         }
  4768.         if (!empty($mensajePopup)){ $this->addFlash('mensajereservationerror'$mensajePopup); }
  4769.         // Sincronización con HT
  4770.         if (!empty($reserva)) {
  4771.             // Rafa indico que siempre se sincronice al abrir un expediente de GP
  4772.             if (in_array($reserva->getStatus(), [null'''Confirmed''Invoiced''Iniciado''Cotizado''Bloqueo'])) {
  4773.                 if ($reserva->getCateringName() == 'HIGO & TRIGO, S.L.') {
  4774.                     // Si no se ha creado aun el expediente de HT debemos crearlo
  4775.                     $htFile $em->getRepository(HtFile::class)->findByReservation($reserva);
  4776.                     if (empty($htFile)) { return $this->redirectToRoute('sinc_gp_ht', array('id' => $id,)); }
  4777.                 }
  4778.             }
  4779.         }
  4780.         // Sincronización con Av Express
  4781.         $cotizable $this->laReservaEsCotizable($reserva->getId());
  4782.         if ($cotizable) {
  4783.             $AveFile $em->getRepository(AveFiles::class)->findByReservation($reserva);
  4784.             // Rafa indico que siempre se sincronice al abrir un expediente de GP
  4785.             if (in_array($reserva->getStatus(), [null'''Confirmed''Invoiced''Iniciado''Cotizado''Bloqueo'])) {
  4786.                 if (empty($AveFile)) {
  4787.                     // Si no se ha creado aun el expediente de Av Express debemos crearlo
  4788.                     return $this->redirectToRoute('sinc_gp_ave', array('id' => $id,));
  4789.                 }
  4790.             }
  4791.         }
  4792.         return $this->redirectToRoute('reservations_greenpatio_edit_simple', array( 'id' => $id'token' => null ));
  4793.     }
  4794.     /**
  4795.      * @Route("/adminconfirmres/{op}/{id}", name="reservations_greenpatio_admin_confirm_res")
  4796.      * Confirmacion del administrador, positiva o negativa (op) de la reserva (id)
  4797.      */
  4798.     public function adminConfirmationReservationAction($op$idEntityManagerInterface $emRequest $request){
  4799.         /* Obtengo usuario logueado */
  4800.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  4801.         $user_id $user_logueado->getId();
  4802.         $reserva $em->getRepository(Reservation::class)->findOneById($id);
  4803.         $mailArrayTo = array();
  4804.         $mailArrayTo['salvador@avexpress.tv'] = 'salvador@avexpress.tv';
  4805.         $mailArrayTo['rafael.guerrero@inout-travel.com'] = 'rafael.guerrero@inout-travel.com';
  4806.         $mailArrayTo['comercial@greenpatio.es'] = 'comercial@greenpatio.es';
  4807.         $mailArrayTo['comercial2@greenpatio.es'] = 'comercial2@greenpatio.es';
  4808. //        $mailArrayTo['gustavo.ayala@develup.solutions'] = 'gustavo.ayala@develup.solutions';
  4809.         $agente $em->getRepository(User::class)->findOneById($user_id);
  4810.         $mailAddressFrom $agente->getEmail();
  4811.         $mailSubject 'Confirmación de reserva: '.$reserva->getTitle();
  4812.         switch ($op) {
  4813.             case 'y':
  4814.                 // Se va a Confirmar la reserva
  4815.                 $reserva->setStatus('Confirmed');
  4816.                 $reserva->setUpdatedBy($user_id);
  4817.                 $reserva->setUpdatedAt(new DateTime('now'));
  4818.                 $em->persist($reserva);
  4819.                 $em->flush();
  4820.                 $mailBody 'Estimado agente,'.
  4821.                     '<br><br>'$agente->getName().' '$agente->getLastName(). ' ha confirmado la reserva:'.
  4822.                     '<br><br>'.$reserva->getTitle(). ' con ID: '.$reserva->getId().
  4823.                     '<br>Este evento incia el día '.$reserva->getDateStart()->format('d/m/Y H:i'). ' y finaliza el día '.$reserva->getDateEnd()->format('d/m/Y H:i').'<br><br><br>';
  4824. //                $mailBody = $mailBody .'<br><br> <a href="http://127.0.0.1:8000/reservations-greenpatio/editsimple/'.$id.'">Ir a la reserva</a>';
  4825.                 $mailBody $mailBody .'<br><br> <a href="https://inout.mante.solutions/reservations-greenpatio/editsimple/'.$id.'">Ir a la reserva</a>';
  4826.                 break;
  4827.             case 'n':
  4828.                 // No se va a Confirmar la reserva - Pasa a un editar (para ajustar fechas etc)
  4829.                 $reserva->setStatus('Cotizado');
  4830.                 $reserva->setUpdatedBy($user_id);
  4831.                 $reserva->setUpdatedAt(new DateTime('now'));
  4832.                 $em->persist($reserva);
  4833.                 $em->flush();
  4834.                 $mailBody 'Estimado agente,'.
  4835.                     '<br><br>'$agente->getName().' '$agente->getLastName(). ' ha rechazado la confirmación de la reserva:'.
  4836.                     '<br><br>'.$reserva->getTitle(). ' con ID: '.$reserva->getId().
  4837.                     '<br>Este evento inciaba el día '.$reserva->getDateStart()->format('d/m/Y H:i'). ' y finalizaba el día '.$reserva->getDateEnd()->format('d/m/Y H:i').'<br><br><br>'.
  4838.                     '<br>POR FAVOR, PONGANSE EN CONTACTO PARA DETEMINAR UN NUEVO HORARIO<br><br><br>';
  4839. //                $mailBody = $mailBody .'<br><br> <a href="http://127.0.0.1:8000/reservations-greenpatio/editsimple/'.$id.'">Ir a la reserva</a>';
  4840.                 $mailBody $mailBody .'<br><br> <a href="http://inout.mante.solutions/reservations-greenpatio/editsimple/'.$id.'">Ir a la reserva</a>';
  4841.                 break;
  4842.             default:
  4843.                 break;
  4844.         }
  4845.         // Enviar correo al agente (envia a las 2 agentes? enviar al creador de la reserva?)
  4846.         $this->sendMailLot($mailAddressFrom$mailArrayTo$mailSubject$mailBody);
  4847.         echo 'Ha finalizado correctamente su sesión. Puede cerrar la aplicación'; exit();
  4848.     }
  4849.     /**
  4850.      * @Route("/viewcontract/{id}", name="reservations_greenpatio_view_contract")
  4851.      * Vista del contrato de la reserva (id)
  4852.      */
  4853.     public function viewContractReservationAction($idEntityManagerInterface $emRequest $request){
  4854.         // El cliente es obligatorio y no puede ser null
  4855.         // El contacto es obligatorio y no puede ser null, será el representante del cliente en el contrato
  4856.         // En el expediente solo deben estar las salas definitivas para el contrato
  4857.         $reserva $em->getRepository(Reservation::class)->findOneById($id);
  4858.         $contractOrigin $reserva->getContract();
  4859.         $dateStart $reserva->getDateStart();
  4860.         $dateEnd $reserva->getDateEnd();
  4861.         //Buscamos el representante
  4862.         $representante $reserva->getClientContact();
  4863.         $representante $em->getRepository(ClientContact::class)->findOneById($representante);
  4864.         $representanteCorreo $representante->getEmail();
  4865.         $representante $representante->getName().' '.$representante->getLastName();
  4866.         //Buscamos el cliente
  4867.         $client $reserva->getClient();
  4868.         $client $em->getRepository(Client::class)->findOneById($client);
  4869.         // La fecha de inicio y fin del evento incluyen montaje y desmontaje
  4870.         // Determinamos el primer y ultimo dia del evento y lo modificamos en la reserva sin tocar la base de datos
  4871.         $allOnlySalasReservadas $em->getRepository(ReservationLoungeSimple::class)->findBy(array('idReservation'=>$id,'type'=>null));
  4872.         if (!empty($allOnlySalasReservadas)){
  4873.             $reserva->setDateStart($allOnlySalasReservadas[0]->getDateStart());
  4874.             $reserva->setDateEnd($allOnlySalasReservadas[0]->getDateEnd());
  4875.             foreach ($allOnlySalasReservadas as $item){
  4876.                 if ($item->getDateStart() < $reserva->getDateStart()){ $reserva->setDateStart($item->getDateStart()); }
  4877.                 if ($item->getDateEnd() > $reserva->getDateEnd()){ $reserva->setDateEnd($item->getDateEnd()); }
  4878.             }
  4879.         }
  4880.         //Generamos la fecha actual
  4881.         $fechaActual = new DateTime('now');
  4882.         $mesActual $fechaActual->format('m');
  4883.         switch ($mesActual){
  4884.             case '01'$mesActual 'enero'; break;
  4885.             case '02'$mesActual 'febrero'; break;
  4886.             case '03'$mesActual 'marzo'; break;
  4887.             case '04'$mesActual 'abril'; break;
  4888.             case '05'$mesActual 'mayo'; break;
  4889.             case '06'$mesActual 'jumio'; break;
  4890.             case '07'$mesActual 'julio'; break;
  4891.             case '08'$mesActual 'agosto'; break;
  4892.             case '09'$mesActual 'septiembre'; break;
  4893.             case '10'$mesActual 'octubre'; break;
  4894.             case '11'$mesActual 'noviembre'; break;
  4895.             case '12'$mesActual 'diciembre'; break;
  4896.             default:   $mesActual ''; break;
  4897.         }
  4898.         $contract00 '';
  4899.         $contract01 '';
  4900.         $contract02 '';
  4901.         $contract03 '';
  4902.         $contract04 '';
  4903.         $contract05 '';
  4904.         //Generamos la fecha de inicio
  4905.         $fechaInicio $reserva->getDateStart()->format('m');
  4906.         switch ($fechaInicio){
  4907.             case '01'$mesInicio 'enero'; break;
  4908.             case '02'$mesInicio 'febrero'; break;
  4909.             case '03'$mesInicio 'marzo'; break;
  4910.             case '04'$mesInicio 'abril'; break;
  4911.             case '05'$mesInicio 'mayo'; break;
  4912.             case '06'$mesInicio 'jumio'; break;
  4913.             case '07'$mesInicio 'julio'; break;
  4914.             case '08'$mesInicio 'agosto'; break;
  4915.             case '09'$mesInicio 'septiembre'; break;
  4916.             case '10'$mesInicio 'octubre'; break;
  4917.             case '11'$mesInicio 'noviembre'; break;
  4918.             case '12'$mesInicio 'diciembre'; break;
  4919.             default:   $mesInicio ''; break;
  4920.         }
  4921.         $fechaInicio $reserva->getDateStart()->format('d'). ' de '.$mesInicio.' del '.$reserva->getDateStart()->format('Y').' ';
  4922.         $contract06 ='';
  4923.         $horaInicio $reserva->getDateStart()->format('H:i').' ';
  4924.         $contract07 ='';
  4925.         //Generamos la fecha de fin
  4926.         $fechaFin $reserva->getDateEnd()->format('m');
  4927.         switch ($fechaFin){
  4928.             case '01'$mesFin 'enero'; break;
  4929.             case '02'$mesFin 'febrero'; break;
  4930.             case '03'$mesFin 'marzo'; break;
  4931.             case '04'$mesFin 'abril'; break;
  4932.             case '05'$mesFin 'mayo'; break;
  4933.             case '06'$mesFin 'jumio'; break;
  4934.             case '07'$mesFin 'julio'; break;
  4935.             case '08'$mesFin 'agosto'; break;
  4936.             case '09'$mesFin 'septiembre'; break;
  4937.             case '10'$mesFin 'octubre'; break;
  4938.             case '11'$mesFin 'noviembre'; break;
  4939.             case '12'$mesFin 'diciembre'; break;
  4940.             default:   $mesFin ''; break;
  4941.         }
  4942.         if ($reserva->getDateStart()->format('ymd') != $reserva->getDateEnd()->format('ymd')){
  4943.             $fechaFin ' el día '.$reserva->getDateEnd()->format('d'). ' de '.$mesFin.' del '.$reserva->getDateEnd()->format('Y').' a las '.$reserva->getDateEnd()->format('H:i').' ';
  4944.             $contractAlfa '';
  4945.             $contract08 $fechaFin.$contractAlfa;
  4946.         } else {
  4947.             // El evento empieza y termina el mismo dia
  4948.             $horaFin ' las '.$reserva->getDateEnd()->format('H:i').' ';
  4949.             $contractAlfa '';
  4950.             $contract08 $horaFin.$contractAlfa;
  4951.         }
  4952.         // Buscamos las salas
  4953.         $allSalasReservadas $em->getRepository(ReservationLoungeSimple::class)->findByIdReservation($id);
  4954.         $arrayTextoSalas = array();
  4955.         foreach ($allSalasReservadas as $item){ $arrayTextoSalas[$item->getIdLounge()] = $item->getIdLounge(); }
  4956.         $textoSalas '';
  4957.         $logAllGreen false;       // Si se asigna el edificio completo no hay que verificar mas salas
  4958.         foreach ($arrayTextoSalas as $item){
  4959.             $sala $em->getRepository(ReservationLoungeDetails::class)->findOneById($item);
  4960.             switch ($sala->getId()){
  4961.                 case '1'$textoSalas '<b>TODO EL EDIFICIO EN EXCLUSIVA</b>'$logAllGreen true; break;
  4962.                 case '16': if (empty($textoSalas)){ $textoSalas '<b>Sala Plenaria La Imprenta, Sala Invernadero</b>'; } else { $textoSalas $textoSalas.'<b>Sala Plenaria La Imprenta, Sala Invernadero</b>'; } break;
  4963.                 case '17': if (empty($textoSalas)){ $textoSalas '<b>Sala Plenaria La Imprenta, Sala Invernadero, Sala Escenario</b>'; } else { $textoSalas $textoSalas.'<b>Sala Plenaria La Imprenta, Sala Invernadero, Sala Escenario</b>'; } break;
  4964.                 default: if (!$logAllGreen){ if (empty($textoSalas)){ $textoSalas '<b>'.$sala->getName().'</b>'; } else { $textoSalas $textoSalas.'<b>, '.$sala->getName().'</b>'; } } break;
  4965.             }
  4966.         }
  4967.         $contract09 '';
  4968.         $cierre $reserva->getDateEnd()->format('H:i').' horas del día '.$reserva->getDateEnd()->format('d').' de '.$mesFin.' del '.$reserva->getDateEnd()->format('Y');
  4969.         $contract10 ='';
  4970.         $pax $reserva->getPax();
  4971.         $contract11 '';
  4972.         $contract12 '</span></span><b><span lang="ES-TRAD" style="font-size:12.0pt"><o:p></o:p></span></b></font></p><p class="MsoListParagraph"><!--[if !supportLists]--><font face="Arial"><span lang="ES-TRAD" style="font-size:12.0pt">-<span style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 7pt; line-height: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><!--[endif]--><span class="Hyperlink1"><span lang="ES-TRAD" style="font-size:12.0pt">Salas a utilizar: </span></span><span class="Ninguno"><b><u><span lang="ES-TRAD">';
  4973.         $contract13 '</span></u></b></span><b><span lang="ES-TRAD" style="font-size:12.0pt"><o:p></o:p></span></b></font></p>';
  4974.         // Se asume que los montajes seran como maximo de dos dias
  4975.         $montaje = array(); $mesInicioMontaje ''$mesFinMontaje '';
  4976.         foreach ($allSalasReservadas as $item){
  4977.             if ($item->getType() == 'Montaje'){
  4978.                 if (empty($montaje)){
  4979.                     $montaje[0] = $item->getDateStart();
  4980.                     switch ($item->getDateStart()->format('m')){
  4981.                         case '01'$mesInicioMontaje 'enero'; break;
  4982.                         case '02'$mesInicioMontaje 'febrero'; break;
  4983.                         case '03'$mesInicioMontaje 'marzo'; break;
  4984.                         case '04'$mesInicioMontaje 'abril'; break;
  4985.                         case '05'$mesInicioMontaje 'mayo'; break;
  4986.                         case '06'$mesInicioMontaje 'jumio'; break;
  4987.                         case '07'$mesInicioMontaje 'julio'; break;
  4988.                         case '08'$mesInicioMontaje 'agosto'; break;
  4989.                         case '09'$mesInicioMontaje 'septiembre'; break;
  4990.                         case '10'$mesInicioMontaje 'octubre'; break;
  4991.                         case '11'$mesInicioMontaje 'noviembre'; break;
  4992.                         case '12'$mesInicioMontaje 'diciembre'; break;
  4993.                         default:   $mesInicioMontaje ''; break;
  4994.                     }
  4995.                 } else {
  4996.                     $montaje[1] = $item->getDateEnd();
  4997.                     switch ($item->getDateEnd()->format('m')){
  4998.                         case '01'$mesFinMontaje 'enero'; break;
  4999.                         case '02'$mesFinMontaje 'febrero'; break;
  5000.                         case '03'$mesFinMontaje 'marzo'; break;
  5001.                         case '04'$mesFinMontaje 'abril'; break;
  5002.                         case '05'$mesFinMontaje 'mayo'; break;
  5003.                         case '06'$mesFinMontaje 'jumio'; break;
  5004.                         case '07'$mesFinMontaje 'julio'; break;
  5005.                         case '08'$mesFinMontaje 'agosto'; break;
  5006.                         case '09'$mesFinMontaje 'septiembre'; break;
  5007.                         case '10'$mesFinMontaje 'octubre'; break;
  5008.                         case '11'$mesFinMontaje 'noviembre'; break;
  5009.                         case '12'$mesFinMontaje 'diciembre'; break;
  5010.                         default:   $mesFinMontaje ''; break;
  5011.                     }
  5012.                 }
  5013.             }
  5014.         }
  5015.         switch (sizeof($montaje)){
  5016.             case 1$textoMontaje $montaje[0]->format('d').' de '.$mesInicioMontaje.' del '.$montaje[0]->format('Y'); break;
  5017.             case 2:
  5018.                 if ($mesInicioMontaje == $mesFinMontaje){
  5019.                     // Dos dias de montaje en el mismo mes
  5020.                     $textoMontaje $montaje[0]->format('d').' y '.$montaje[1]->format('d'). ' de '.$mesInicioMontaje.' del '.$montaje[0]->format('Y');
  5021.                 } else {
  5022.                     // Dos dias de montaje con diferentes meses, ejemplo 31/03 y 01/04
  5023.                     $textoMontaje $montaje[0]->format('d').' de '.$mesInicioMontaje.' y '.$montaje[1]->format('d').' de '.$mesFinMontaje.' del '.$montaje[0]->format('Y');
  5024.                 }
  5025.                 break;
  5026.             default: $textoMontaje null; break;
  5027.         }
  5028.         if (!empty($textoMontaje)){
  5029.             $textoMontaje '<p class="MsoListParagraph"><!--[if !supportLists]--><font face="Arial"><span lang="ES-TRAD" style="font-size:12.0pt">-<span style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 7pt; line-height: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><!--[endif]--><span class="Hyperlink1"><span lang="ES-TRAD" style="font-size:12.0pt">MONTAJE: '.$textoMontaje.'</span></span><b><span lang="ES-TRAD" style="font-size:12.0pt"><o:p></o:p></span></b></font></p>';
  5030.         }
  5031.         // Se asume que los desmontajes seran como maximo de dos dias
  5032.         $desmontaje = array(); $mesInicioDesmontaje ''$mesFinDesmontaje '';
  5033.         foreach ($allSalasReservadas as $item){
  5034.             if ($item->getType() == 'Desmontaje'){
  5035.                 if (empty($desmontaje)){
  5036.                     $desmontaje[0] = $item->getDateStart();
  5037.                     switch ($item->getDateStart()->format('m')){
  5038.                         case '01'$mesInicioDesmontaje 'enero'; break;
  5039.                         case '02'$mesInicioDesmontaje 'febrero'; break;
  5040.                         case '03'$mesInicioDesmontaje 'marzo'; break;
  5041.                         case '04'$mesInicioDesmontaje 'abril'; break;
  5042.                         case '05'$mesInicioDesmontaje 'mayo'; break;
  5043.                         case '06'$mesInicioDesmontaje 'jumio'; break;
  5044.                         case '07'$mesInicioDesmontaje 'julio'; break;
  5045.                         case '08'$mesInicioDesmontaje 'agosto'; break;
  5046.                         case '09'$mesInicioDesmontaje 'septiembre'; break;
  5047.                         case '10'$mesInicioDesmontaje 'octubre'; break;
  5048.                         case '11'$mesInicioDesmontaje 'noviembre'; break;
  5049.                         case '12'$mesInicioDesmontaje 'diciembre'; break;
  5050.                         default:   $mesInicioDesmontaje ''; break;
  5051.                     }
  5052.                 } else {
  5053.                     $desmontaje[1] = $item->getDateEnd();
  5054.                     switch ($item->getDateEnd()->format('m')){
  5055.                         case '01'$mesFinDesmontaje 'enero'; break;
  5056.                         case '02'$mesFinDesmontaje 'febrero'; break;
  5057.                         case '03'$mesFinDesmontaje 'marzo'; break;
  5058.                         case '04'$mesFinDesmontaje 'abril'; break;
  5059.                         case '05'$mesFinDesmontaje 'mayo'; break;
  5060.                         case '06'$mesFinDesmontaje 'jumio'; break;
  5061.                         case '07'$mesFinDesmontaje 'julio'; break;
  5062.                         case '08'$mesFinDesmontaje 'agosto'; break;
  5063.                         case '09'$mesFinDesmontaje 'septiembre'; break;
  5064.                         case '10'$mesFinDesmontaje 'octubre'; break;
  5065.                         case '11'$mesFinDesmontaje 'noviembre'; break;
  5066.                         case '12'$mesFinDesmontaje 'diciembre'; break;
  5067.                         default:   $mesFinDesmontaje ''; break;
  5068.                     }
  5069.                 }
  5070.             }
  5071.         }
  5072.         switch (sizeof($desmontaje)){
  5073.             case 1$textoDesmontaje $desmontaje[0]->format('d').' de '.$mesInicioDesmontaje.' del '.$desmontaje[0]->format('Y'); break;
  5074.             case 2:
  5075.                 if ($mesInicioDesmontaje == $mesFinDesmontaje){
  5076.                     // Dos dias de montaje en el mismo mes
  5077.                     $textoDesmontaje $desmontaje[0]->format('d').' y '.$desmontaje[1]->format('d'). ' de '.$mesInicioDesmontaje.' del '.$desmontaje[0]->format('Y');
  5078.                 } else {
  5079.                     // Dos dias de montaje con diferentes meses, ejemplo 31/03 y 01/04
  5080.                     $textoDesmontaje $desmontaje[0]->format('d').' de '.$mesInicioDesmontaje.' y '.$desmontaje[1]->format('d').' de '.$mesFinDesmontaje.' del '.$desmontaje[0]->format('Y');
  5081.                 }
  5082.                 break;
  5083.             default: $textoDesmontaje 'Mismo día al finalizar el evento desde las 17 horas hasta las 00:00 horas'; break;
  5084.         }
  5085.         if (!empty($textoDesmontaje)){
  5086.             $textoDesmontaje '';
  5087.         }
  5088.         $contract14 '';
  5089.         if (empty($mesInicioMontaje)){
  5090.             switch ($dateStart->format('m')){
  5091.                 case '01'$mesInicioMontajeZ 'enero'; break;
  5092.                 case '02'$mesInicioMontajeZ 'febrero'; break;
  5093.                 case '03'$mesInicioMontajeZ 'marzo'; break;
  5094.                 case '04'$mesInicioMontajeZ 'abril'; break;
  5095.                 case '05'$mesInicioMontajeZ 'mayo'; break;
  5096.                 case '06'$mesInicioMontajeZ 'jumio'; break;
  5097.                 case '07'$mesInicioMontajeZ 'julio'; break;
  5098.                 case '08'$mesInicioMontajeZ 'agosto'; break;
  5099.                 case '09'$mesInicioMontajeZ 'septiembre'; break;
  5100.                 case '10'$mesInicioMontajeZ 'octubre'; break;
  5101.                 case '11'$mesInicioMontajeZ 'noviembre'; break;
  5102.                 case '12'$mesInicioMontajeZ 'diciembre'; break;
  5103.                 default:   $mesInicioMontajeZ ''; break;
  5104.             }
  5105.             $tiempoCedido $dateStart->format('H:i').' horas del día '.$dateStart->format('d').' de '.$mesInicioMontajeZ.' del '.$dateStart->format('Y').' hasta las ';
  5106.         } else {
  5107.             $tiempoCedido $dateStart->format('H:i').' horas del día '.$dateStart->format('d').' de '.$mesInicioMontaje.' del '.$dateStart->format('Y').' hasta las ';
  5108.         }
  5109.         if (empty($mesInicioDesmontaje)){
  5110.             switch ($dateStart->format('m')){
  5111.                 case '01'$mesInicioDesmontajeZ 'enero'; break;
  5112.                 case '02'$mesInicioDesmontajeZ 'febrero'; break;
  5113.                 case '03'$mesInicioDesmontajeZ 'marzo'; break;
  5114.                 case '04'$mesInicioDesmontajeZ 'abril'; break;
  5115.                 case '05'$mesInicioDesmontajeZ 'mayo'; break;
  5116.                 case '06'$mesInicioDesmontajeZ 'jumio'; break;
  5117.                 case '07'$mesInicioDesmontajeZ 'julio'; break;
  5118.                 case '08'$mesInicioDesmontajeZ 'agosto'; break;
  5119.                 case '09'$mesInicioDesmontajeZ 'septiembre'; break;
  5120.                 case '10'$mesInicioDesmontajeZ 'octubre'; break;
  5121.                 case '11'$mesInicioDesmontajeZ 'noviembre'; break;
  5122.                 case '12'$mesInicioDesmontajeZ 'diciembre'; break;
  5123.                 default:   $mesInicioDesmontajeZ ''; break;
  5124.             }
  5125.             $tiempoCedido $tiempoCedido $dateEnd->format('H:i').' horas del día '.$dateEnd->format('d').' de '.$mesInicioDesmontajeZ.' del '.$dateEnd->format('Y');
  5126.         } else {
  5127.             $tiempoCedido $tiempoCedido $dateEnd->format('H:i').' horas del día '.$dateEnd->format('d').' de '.$mesInicioDesmontaje.' del '.$dateEnd->format('Y');
  5128.         }
  5129.         $contract15 '';
  5130.         // 5. Normas de Seguridad
  5131.         $contract16 '';
  5132.         // 6. Coste, plazo y forma de pago
  5133.         $data $this->CalculosTotalesEditSimple($reserva->getId());
  5134.         $contract17 '';
  5135.         // 8. Reserva
  5136.         $contract18 '';
  5137.         // 9. Confidencialidad y publicidad
  5138.         // 11. Derechos de imagen y propiedad intelectual
  5139.         // 12. Prevencion de la corrupcion
  5140.         // 13. Proteccion de datos personales
  5141.         // 14. Responsabilidad
  5142.         $contract19 '';
  5143.         // 15. Comunicaciones
  5144.         $contract20 '';
  5145.         // 16. Cesión
  5146.         // 17. Nulidad Parcial
  5147.         // 18. Fuerza Mayor
  5148.         // 19. Acuerdo Completo
  5149.         $contract21 '';
  5150.         // Normas de uso
  5151.         $contract22 '';
  5152.         // Logotipo de Green Patio centrado
  5153.         $contract23 '
  5154.         <div class="col-md-4 col-xs-6" ></div><div class="col-md-4 col-xs-6" ><p class="MsoNormal" align="right" style="margin-bottom: background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;"><b><span lang="EN-US" style="font-size: 9pt;"><font face="Arial"><o:p><br></o:p></font></span></b></p><p class="MsoNormal" align="right" style="margin-bottom: 7.5pt; text-align: right; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;"><b><span lang="EN-US" style="font-size: 9pt;"><font face="Arial"><o:p><br></o:p></font></span></b></p><p class="MsoNormal" align="right" style="margin-bottom: 7.5pt; text-align: right; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVYAAAEJCAYAAADPdw+hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFxEAABcRAcom8z8AACVdSURBVHhe7d0JmFxVmTfwBBAQUWTfZJFdliTdde+t6iw2MpCJyA4BEhgFSQJ8GCCEJN3p7jp3qeqq3tNhF2ZAGRyfOAoyOmFkWAQZB0FxPkb8RPlAVhFFw2IEMtT839tvNV3Vt7qW7oRO5/97nvN03XPPPXc7973nLlU9iYiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIho3Gs2dVPcwL40CJx56fS03TWbiIhqYXzrXD/lvN+eTeQyHQ0517fvRfZWA2OJiKhqxrNezHY25BBcc0E6npMAizxfRxMRUTW8wElmOhveloCKz2GSwIpe6zpjErtoMSIiqsSiRbGPGN/+z86eGYNBVZL0XDMdiXfdwLlZixIRUSUQVBcEaWf90N5qPnV2N+SM7/yHMUduq8WJiKgc9Ex7evqmDwuqklLt8RyC7uvGWOdqcSIiKsd49rXdvdGBVZIEXde3rtHiREQ0kjbPakxn4i9JzzQqqErSoNutkxAR0UjcwLm4d1XhQ6vi1NUzXV67+uqaNXO31smIiKgUN4hfKIEzKqDmU9ibTTmvGeMcp5MREW2ZjInN7O2dfl5ra+xEzRrG+PELygVWSZ3d03PJZOwinWwYz7PO7L921nktLfUHaxYR0cSCoOqkM/HXVq2emQtSzgZj6i/XUQWMZ19SSWDtQmB1XScysLq+vaKjqyG3+tpZuXQ28TjmfYSOIiKaGBDY9vcC+yn5eqrrO7l0JpHLdiTeRwBcqkUGIbA2SVCMCqZDkwRfuW2gk4X6Fx+yHcZlM5iP3C6QefX2z8wlXesKLUJENDGk0/Epmc5Ezk998KRfgmtHZ2KD68eXZrOxnbToJATgVRKA8+VKpYHA+kGPtc2zG4xvPyj1Dn2jIAywnv371tb4oVqUiGjz5/v2UfJ11KGBNR/0kN53A/txE8SO9X3r/CAdf1fKDi0XlTIdCQRM604PARX1L/BT9nr5LYHib2vJPCXf952pujhERJu/UoE1H/gkwEpPU1JUmVJJgmh+uqivv0qS+sIy6DXr4hARbf6MsY4O0tGBNZ8GAm/0uJFSuek04L5lTAMfYBHRxCE91nKBdWMluV+b9GNdxjRur4tDRLT5W7z4kO3cwO7r6Cr/GtVYJ3nI1ebZp+uiEBFNHJ4XOyHTkXinlsv9WlP4epdnP93aWn+MLgYR0cQhv/qPIPf97r4Z4fulUYFwLJPcW0Ug/6v8tqsuAhHRxOP7Vl22I/Gr9mz591RHm+QWQNKzH21qt3fV2RMRTUxJ37pBgt7GvCUg762m2uPPyUMznS0R0cQlPUg/sB+SH1GJCoqjTXILQN6LTSZji3WWREQTX1PTzJ0RXP9zYwTXrh75n1jWXUuWJD6qsyMi2jLID7P4aeexTvnO/xg8zJI6unpm5PyU/aMuM2UPnQ0R0cRhzJE7GmOdEgTWfpo1jDHxA9PZxJj0XOW+bSYbf9CYun20+mFMKubIv37RQSKizUf426tZ5yeeb7+eao8/6Qb2t/xM9LukK1bE9m/PxB+t5BetSqVMR0OuPeM8vHJl/d5a7VCTXd9qbu9I3Ifl+W22I/GyG1iX5XKTJut4IqLxz/fjp/StnplLZ+LhS/ryS1Qd3YlXg7TjN2WO2VmLDWr1rfP9lPOWPHSKCpwjpfAXrVLO00vMkbtodYNSKdtyffuudCbxP9IrlrIShLOdiXdMwH/rQkSbEQTWE7NFP1YtQS38+b6U/ZDnWZ/XooNcz/6/CHgF01SSJGgnk9aPtZqQ3A5AL3khAvl7Ub98Ff6X15RzqhYnIhr/ogKrJHl3dSC4SqCzW93AuSzpOhdL8nznZenhFk9TLkkv1/WsF41vLWr16xdIneilPigBN5AecMT7st29M3JtKf5+ABFtRlKpxMldA//7PzJJgJVLc+k5SgDuwOdSv6daSZIAKvXIfymQoCnBO6qcJLkV4KftHxsz9UBdXCKi8S+dju+J4HlvJf+7aixTJd/mkmAu/1dLF5WIaPNhWusXdHRO/8toeqJjnSTQI/g+w6+6EtFmy/Xsr3V0b9pea6kk92KznQ3vG8+6WhePiGjzY4LYTNe335Z/Rx0V7DZV0p8QzCGo+rpoRESbL9+PnxGknfXy2lNU0NvYSf4ljLxLi6D6DSwOvxRARBNDW5t1pp9y3pMn8pvynqtc/subAug19zU1Df9iAhHRZq3VxE50A/tJeTVqpNehilP4nmpgP+UGzlPVfDNLXufKdiY2+O22Z0zjNroYREQTi3mgcRs35QTpbOLP8qMp5QKl/GJVT9+MnOfbX/d85/rOMg/CpLxc9ssDs2xHw498316qsyYimtjkv6b6KeerXmC/JYEzf/+1+D1U6dlmOxK/DwLnONe3MmGQHTJeyueT3Gbo7Z+R8wP7x7j0TxsT20FnR0S05UDAnN2ejV+IHukvpAcrAVZ6sZLks/x2gPHszkVm7x2MqZ8dpOP/T3qtQ8uEX11Ny9da7duzXfEL5XdetXoioi2XMdZBnX3TG9q8+s8ZP/aP0pPFpf9zyD9Dfg3LSzlz2zznCy1B/cEIqL2pdPwtL7BecP1Yi9duy3TxpUunfEyrIyKioYw5YHvTae+FnudumjUJl/Ztru8Y+Tx37qStOzE+nZ62eziSiIiqh95pEr1YVweJiGi0hvZYiYhoDDCwEhGNMQZWIqIxxsBKRDTGJLAaz27VQSIiGi0E1hYT2L06SEREo+UFznIE1/uMadxRs4iIaDR8P77UDeyfy//S0iwiIhoNz3NWGt/6QxDUHaBZREQ0Gl7KOdX1nWX8XVUiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiKiLUX/4kO2S7r2pV5gr/JT8dWe76w2ntVrAuc4LVKzxYvnbOe61jnGm9Zkgvqri5Pr1y8zXmy58a1T5s6dtK1OVrPcpEmTUdcZMr+k1B0xz8iE8l6q7ivGNG6vVVXEBNOOx3xMZJ0lEtYZ5adN1yoqYozzCePVtbaYqcdqVsWa00fvKevX5tUnfX/aoZq9SRgz7XiD+UZtBy+ILXf9uiXGxGZq8TGXTsf3NEHsKtl2xkzZQ7OrZsxhu2E9rsTyrohal3JJ9nkQ1H1WqxuRl66flXTrAzeov3TRothHNHvUWoL6g3Fc+65v9fspZ7Uc78bYlyzuP2Q7LUJjwfj2Sa7v3OMHzhOp9nhu1eqZuf5rZoV/e/tn5LDh16XSzsMIjHemcXDqZFXJZmM7YUc+1J6N5yRlOxORyfXtvyKgP5Fuj/9QdnytB0EuN2my61lrZV7pEeZXnLp6GmR93zEmsYtWVRHPt67vWTU9l+mIrjcqXXPdzJwJ7HatoiJB0HBA0O5gPvGXg2DqbM2uSJsfj8n26O6dnvNS9umavUmE26evxPbpSoT52O5/9ALnMazfg2iPAU6wW+vkoxYE8WMzHQ3hvBBUbunvn1NTEDGmboqfdsJ2Urwesg4p7JsA40u1A9nnfmD3aXUj8gIru/ramTnPt19b2jXlY5pdk5tuin0E653MdjY8gO38bFfPdD3OZ4Z/5bj3Us7PcKzc53l1f2MaG7fRSalaK1fW740gdn1HV+K93n7swMBej8D2ItJzHyRH/v4O4zb09M2QBvOy7zu3NaMHoNVURAPrD6XBoc4/o7G8MDw5zyO9jPm9Lju6d9UMNELnmeUrpzpaTcXCwOrH/jU8YFPO29HzG54wX1mGJ1dkj99Jq6qIbMdubB9Z/qh6o1JX7/TnsS2WaBUVkcCKaTZIcHQD67/Ry9tfR5U1EFgTCKwzcm3epg6sDgKrnKSdV4ZvC+z3IPyMdua8joM/19OHAJSy7zdm6jTZl1pNTboQlJKudb/UK8EVHYl3m4x1kI6uiu9bh7uB/fRAOylaD6wb2u6GII0gVaId6D5v1upGNBBYZ+Vcz/n9aAJr0nXmoaPynAT2zm60G9/5A5b1tx8c42GS4/4vcsylMwkcL85jy0zdPloFVUouk7GjfyuNHY3kVTdwvuP7dZ+RM1tU8rz6OBrUd2XDy9kOwfXLWlVFBgKr/UCfBPBU/PKoeQxNuDQ5O51NPNDZ3YAebuKVFlNf1e2IgcBqfU/mhx7CdVHzKJUWIWk1FXM9+yY5cFta6g+OqrNUmjt3blW9MgmsxnPelROGHCTGq7zHa1KJejlhhdP5zmmavUngBHnDQLuxj4raDkMTAsESBKfHV62eJT3Ap006doRWUxPpZSJYIKBYT+Bk9EtZDvTeVuvoak2OWmZJra0SdK2fyzbGFc8hUWUkVbrPcbJpl94kgtwrtQZWCaqyPFIPetK/9jy7FSfjHaKWq6nJPgzb5TaU3yBXrOi9/mzFiqkHalVUjtxjSfrWOtnY6YzzU68tNkNHleUF9SlMa9aYuVXdBx0aWBGgL9XssnAwZORAQHD9hUnV12t2WYWB1enX7I0mH1hxEG/Us7wEVvQ2NiD9Dpekrw7M0/o/OnpE4yGwBmh7mjUiY47cET21tQMnYvubxjTUfF8UHYhvrL5uFoKps8oEU47r6E68irb4x6VL9xzV5XUxuXpA2/6ZbONUKrGvZtdstIHV9+PnpjPxDalMPIe2srbJTDlMR40ombT+DuvwG+lE4bh7THrpOopGkvTs28PL+s6GR6WHpdkbVWFgdS7T7LLCyzjPWhdeEvl2WrPLKuqxXqPZG80HgbXyS/NaSGANb2/g0jrp2tfJ+rXjwEkm7YVapKTx0WOt/CA1Qf1xcssj7GEaJ6HZVZHeGQLrumxXw4ue58ySPATsR7TX6oeFxghOcAdJr1i2sewnza7ZaAKrXH1iWf4g0yfd2CMrVsSqurXV3Fb3N15g/WUVeq64ur1NtqOOoig4AC+V+0yZbPyPCKpVPfwYjVoD602LcGnoW3eFPZfAdjW7rIkcWDu65AGb0y33yHHJ/Fh48AX2ujbPatRikTa7wGoSuwTtzh0D94QHgmK1kq7Vj+nfN779A82a5Kft+bKvsA0fM2bsHtKMp8CKY60vvM2Xjv9/WS7Nrorx6xfISRy91rc8Lx7XbIqCnfV9uX9iXPtHmrVJ1BpYhdwPlssSTO9pVlkTPrD69o0ybIy9l59y/ksOwKA9fsdIT9I3t8Aq0NtaIfvQBPYczapYc3ra7n4q/ius83tyn1Wzsc0at0FbehZt6h30Wq/W7FEbL4G1tTV+KLb3k+1ZaY/18zW7asYcua3chuldFW7/3rE8CU0o2qAewllog/FjX9TsTWKUgfX80QXWTXePdeXKqaO+tzaSfGB1fecGzcJ+nXYkTh7runrQQ0nFu5AV+RR9cwys2IfL+hBcagmsxnNSEpiwb36qWYNc175UenTp9vj3Uqn6vTV7VMZLYPU868qB48V5p7s7tptm18R49iXhMes7747FOk1ILYF1vJdyXpfXLcbyHcFK1BpY5YsFxo09KNOhodV0KwC9u2slz5hJW42UGhsnyRm5pld7PuixDjxFjao/n2Tby/KFE1YpKrDKU2Z5R7ELAVOCpus6GR1VYHMLrC0tR+2HfXdvVy+WN6juywPyBQg/7Tzc0TU91+rHhq2rMdP3Sfr2+lWrZ2Bb2DX36oYaN4E1sK6WkxGOt2eqfR+7GNrSvGxH4n/Q3t5nYC0h6TvBwAv/zkub+mZ0rYE1uwLTedab8vBKeiCaXVY+sIYPegL7WTewv4X1/peREgLj9/MPOKolr3R1InC4gfXvWM+7ourPJ+klIWDcUu27wCIqsIqmzDE7y3zlsi2VjiNYRASTze4ea92cHgRVOWGlTKyqd5kRLC+QoNnmWetxSbuXZg+Sb9ahZ5cMe3ae/W0cD6Pq2YnxEljl9oYG1r41a6p7na8Y1ulo49q/kXdzGVhLwEHdLfdX8bemwCrTIEDdjZ32MILjRZpdkaGB1fjxRZo9IpkfGtc/SeOXd1oxXPH9y3xgDRs5krzHWC5JUMJ6zdMqqiK9YulZyfyi6h6awl6lb7/YlKn+oUKpwCqaMjN3Rv3hu8borT3R1HTErjoqNB4CaxDUVXRwGmMfhnb6lOwTX75abRp31FFltbTUHYAT5E/lSy+4lL1c7hXqqAKeZzdksvH35EsT8lmzazaObgXkA+tSzapZKjV1X5ykfiKvbDGwltCashe0oyFhg79ay6WofE8dO/svN361Meen4h2aXZF8YJWD3gTykrLzqZbA2m9oMiZ+oO/HD5WUTNYvDdLOyz1hkLBfbDVTTtKqKpIPrDI/L2X/g7xfWi51dEzfZ0lP4qNaRVXkYZL0rNCo7ai6hyaZj+lq2KOW3sRIgVVc1mTviu32M7kywd9/Xrr0gwNyPARWXNIfW7zfg3DfWweFl+/Y9wiGLtrZ6+H90cB+aaWpr+pVqzYvdoLcFkEv6zUE5amaPYzcZvLRqxv4dpN15+LFo/uu/HgJrBJQ9dbZt3tqbM95Jqj7bJCyf4fjnbcCSpHLHRyQsuPf9lvtozS7YggIH8fOejXc2YFT1TuA+cAqPTYcLH/CWVC+Rvd8PmH4eVySve4HcQka72NHIgBIALEfQrAa8TWiKPnAKg0Ml+kVfTd7NPL3WJuba/sthUqVC6yi1cTO8nHpNtBzjX9DToiSL19p/bACa9ijH7hV8gr2v3ydcnDfI+8F7Ks3g5STk3WTfdY+8K7umpaW6n6k5tZbG7dHW/qBfGsLVx8Xa3ZJbW318a7uhhewnd6VE7tm12Tc9FgDu0neP8XfN0f78MoN4gvlIZ8cj0HgfFqzqRga2z2ys4xnrdGsio1FYJV7NRKA5KCX3mg+yXBX7wwJuuF4Sa5r3Sq/uKVVVKUosE64161GCqzCde0ueUugs3d6Lula4cMsk45P+bADq7zwP3S/D+z7mTn5nQW0jz/L6z24NO+WX3TSSatiMlMPRNvcMHC7xbkbaRmGl5dKxnOuxHyfzGKbyjJqNTUZL4EVJ5azM52JN7HuOFk4n9LsmmB9rpBjE9voF83N03bXbCqGwHWdvHCNRvRstWfosQiscnBh2ttxJrxwaArkr2t/qS1lnez51ho5S3qp2D+uwHRaRVW29MAqbx/I5bfsa/x9S95tNO2JQz68wOpcH/ZYfac5at/jkvwCuU0gy62T1ARXN7elMwP3uWV+0lbLJQmq4Ynct18odT+2EuMlsEpZ49r/Gh5Dnn2LZletBT3U9kz8F9KG9PXMUf0YzoQmv0uJwPaMfBsFl91VXSKPRWCVaY0fv0CzIxkz9Vg/Zb/f2dOQazLVv78otvTAKuSHNVJp5x9kG6D8D9F7me3jcvvDvMfaNYrfQi1HXs/Cvn4D6/gGeukXygOpShOm+SV6z++gjcp7wDUZL4FVJH17hbylIm/FJN1pV2h2xdCOd0ga6zth2wmc3zcb50gdRaXg7HNWOitPpxs2BGm7tZpfWEJAfWU0gVV31IivW8lDHePZV+GycT0a6Uu+X3+MjqoYA+uANm+ajZPUqwO9RftP2G/hfcwPK7BW+wWBarie9bWwfXnOI5pVMeNZKblNEaSdn6TTtV3yjqfAKg9h0SbvDN8CStlPV/OV4GXLDv940rVXyNsS2Gfv4PPCan+FbYskZyMcWGukoctZLUjFeyt5QBS023NwZv/zNdfNyrkpp0ezK1JNYM2Te17hQwjf/jV6sZ/U7IrkA6s0TASWmnshlfogsA48KNpYqg2sos2zrpRlk9+ImKiBVd4mQED7OdbznVbfOl+zKybHBPbhn+SHn9HeWjS7KuMpsApj5m7rBnbYucAx97abspqxniM+zPL9xDGpjPNtaS8duLIJqvglOgK5rEevsBMH2hv94S9HOe+iQbWl2p1mHHRflAcdJrCmm5TzRQTTZnzuRtl35dWUTDbxkufFT9CqKlJLYG316z6DZXxDDsg2E2vS7IrkA6tMi8Z1v5t2LsLfheWSSdmXhOtf5b02rNMNAwHPXoE6FkTVXZywbpe4QWxeucY+VC2BVRjPuVoCqzw8nIiBFdvd09em1s1dU/23CqVHhp6ZJ8uY9KwHKn3fdqjxFliFnOixbe6WE4bcc8XJ49/kGEf7W+y11X8OJ6E6z4udarx4kxdYSZR9Vn5iUQIryjCo1kr+nxV6rI/LfTfZibIDpGEgiD6D9Ip8lvyw54feTjYbvwo7q+qfcJPAanz7RwPfoIpfrtll+WnnNASEd7t6Gl73UvEzNbssDaz3yD0mue0hSV7hKZfkFS806PXysr1WVRH0rm/s658xUE+l88JBjHm9ZlJ1llZTljxwDP97gOfcrFkVc10rI78iLweY/LCNZm8SaEs3y9NlnERG9aPVUdraLDtIOb+WoIgTyFdq/bZR0G3tJw++av2aq/wEJzog/y1tbrSvbglcaXXI1SEC6x9qDaxCgmumM/FF41lPhccyjvGBtyasPyKQymuPf5UvU8iXCqRtYV/dvqn/w8SEtHz5MZ9q72qwcZBfhQb1XJB23sLn97CB30lnEm9hwz+CoPZ5Yyr/oeli/f04c+KypHfVzHVuEC/726FDtZn6yzu6G9ajN/JEpT0eCazydgF6aJif/QZ6eFiP8gknkjfRkJ83fY1V3XrA2b4bgXIdtpm85hJZd3HCtn0T2/mX6OFO02rKCoJZ+6E3sQ77pOp3c+X/h/mB/Wh3z4x12M9VfeFitDDfPhzM6+SSXbPGjATBjq7puOKy/iQPZzW7auF9Sd8yXb3TsX2ce+TLHDqqIhJMsV8eRhtaJ/tJs2smy4Jgtw69zKfNTaP/Crr8jkW2u2E6ttfXcYy/4aWcv8pxjs/rccX1StK3lkkcGPqlEhojGfTU5KVio6m7u3G3ar5OWIoEOum1dt/UuNuSJdV/GyRcHmPv1V/Ff5KUM/XQdakkSfn2dntXWV6tpiLGHLljuK2K6hsphctmErtU83NsxpitRrNP5BaQ7IPRvFZUC1leWe7Rfnc9Cure/qZwnWJjUr8sp/ziVbX/GVVuJzQ1HTNw/GA/aXbNpJcq69XUZMtXk8fsVSfZ94XHeGy3JrR5HU1ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERES0kZxyyin7nHrqqcfq4DCLFy/e7qyzzpp7xhlnHKBZIZkO+SfoYEVOOumkHVDPRXPnzt1fPp922mlfRh2H6+gCKLPXmWeeOVsHZXh/lD2nsbFxG80adPrpp09FsnVwGNSzEMmSzyiXQLoM9e0YjlSod3vk1+Pj5IGcD2DaOqQpOjgIeUdhmr11cBhZZmynuA4OI8tw9tlnn6iDVZk3b95u2B5zdDCS1I8yp+tgAYzbCfv9QB0MYX/sKkkHS0KdTn57DoX8E6Rd6GABaT9Y18/pYKUmY3kuGbLvTsE8zovFYh8Jx6rzzjvvE0O3I6Y5DGUv1MFIqHM62uBuOhgJ2yiG+TWjrj3weWuZN6Ybdqxg3T6LcYfoIG3pcGB9Eg1iARrGDWgwn9fsAlIG495GSmlWCMOzke7VwbLQ+PfGfM5BfctPPvnkT59//vkfwwFwKfKWfuELXzhIiw3Cch2H+u/XQVmOAzHcjnSJZg1CWYP8VTpYAPO4CvPowsGR0OGZqGspAsDHwwJKDjKUyxpjttKsQTiozsc8foN5FARXDK/ANMfrYAHMYz/Mqx/zvRx/P6PZBVDnp5Eew8dhwbwczDuOaR/WwUhYbjk5fU0HB2F5DpbtjlSw3ZEfk2CigyWhzo5zzjnnJalfs0LIvxdp8GQ4FJZV3K2DFcE+qsN2XJnfd/h7Fur/8qJFiwoCK+o9HOlRHZT1+AzKpZC3TLMKyD7D+Hb8NaWCKwL1DEx/C5J/4okn7iWBVeaNZRjWmUD+N2WcDtKWDg3wMDSua9F4TkD6u6igIg0P4+5Hg5IgcgWywiCAz59DY/qOfK4EpneRFujgIATZo1DP1+fMmbOdZoWQNwvzvUsHQ7J8WObZmHdBQEC55SjfroODkL8MZVt1cESod1eUTUZtA9QzB/X3YfmvHBpMkCdBs1EHC2C7HYGgcBqmuQzpYs0ugPkdgLr/HR9rCawWpv0XHYykweDzSAUnRcz3s1jubh0chOU9BuOO0MGSUF+AwHMb/nZiHvtrtuR/B9NH9kqxrNLbvEMHK4JlvBbbbg8dLAn1HoJUcJJHe/oEliejgwWQ34byFyM1Y3mHndQlkMp+q2RbCJT7e9Q1VwdpS6YH3UJpWPo5g78zdfQgBL490WjuwTi5rPRlGrkcx0F4LD5XFFgx7bY4SJxSBwnqmX3CCSd8TAdDyJPAeqcODkI9MQlaOhhCucjAiry+qMtPvZ1QEMxQb8nAiuU+C/Wcib/Hocxgfag/MrDqbYU75GQhJyaU+zLKHayjB6GumgMrtuk0TPsQ6p4i6dxzz52CXuRhOnoQlsPG+DtkmXR4Dwyvxv77ZFhgCCxjA+qRXmFYJ+o/UgKUjh6EcZ0Yt0DWCetwI9ZxB80f08CKKxm5xXMNppPAeYy0QR1VQMcXBFaU3QnL0qKDg5AfQ/5SuX2Add0Hy3yzjhqEMjOxbsN6+qWgvq9i2zflt5vsC0xf9pYKTUByMKDRtumgHFTSEzyzOMDJgYhG+wAa29aSpLHioNwPDSguB5IWG5H0AEZqaKh3x+IDWBo36v+eBCfM/6NIn8aw3Cu9GqMLAhHGleqxNiN/2D0x5MWL11OWD+sWGVhlu6Cu8J4dpl2Nz+G9TeRfgemGBVbt+S3SQVmOqxCYp+rgIJSpObBiOrn8/R3SWizTWhzY8ndYkIDJmM85GHeZDMg8kfrDMUVQ17nz589/ROrD8q7F8Bp8HnaPGHkdSEvkM9YVm+C0hZo/poFVyIkJdcqtnrX4ezzm5eRPEnlY94NR931ye+lLX/rS9ih3BIYvxjQ9WiQkJ1RMPxvj5muWbI9mzGOw1y1kPijzbzpYFuazGtvtv2QZJeHzWsznJB1NWxI0nqvQCJbg70X4Kz3XC9CYfom/BZdGGljvzzdmlD0KZb6C/OOQvyYsVAFMMx/THK2DgzRYL8/3evLQMCWwrpWAi/nsgjInY/g+HV0A40v1WG9FgPhbHRyE8qcU99gwv3KBNbyNIeVQ742yfMi7EH+HBVaUlwDTItOg7EL8XSonseJ1RJnR9FjlwcqItwLyZBkxr0V6kmqN6oUKOSEgSEXeDx4K69SBeq6Sz/KwCuvWiSQ941ukXYSFiqB8TYF1KNlnSN9FT3ZfzQph/SSwPoC0u5TBcpyEJLcBik/A+yL/VmyLC/BX2ry0fRd//16LhLBOh6POq6LaQhTUcQvS2TpIWzI0Mrm/1KINbBEO1EX4ewXS8RLstFg+sP5waC8BjXc+pnsU+cMu1UuReWCaq1H3tpoVQp4cBCnpTWhWCOXlSevgww4JSmjsC4cuWx7ymlA2q4OD5CBH3dfLOmhWCHWfKAegDoZQtwRMt9StANk+OiiXqPsiT+7ReahrhmaHUO+xyJPt+BXUF25b+YvyNxQvB8oeiDoewMeqAyvqlHus9+hgWZj3ZZjmbKRL5DJYswtgeaZF9ayLYb5d2B5y5RDCvjkC69k7b968X6H+yLcgkH8qpvumDlYE+0RubRRsG6zH7TgxfEoHQ5j3oah78EFnKSh3EMoZ2Sf5/YK/sq8ujdg3JyJv2DOBKKjnVqTzdZC2VGgEl6PRRL6qg3HflEsqHcwH1h8UX36hXBvSP+tgWRKwUD6O+m7FQRmTwIYGfZ00cOlJabFBKCM9wqH1T8ZwI+pwdXgQ8q5GCnSwAPJnIX1P5iPDmP+VSN8o7rVJYEWZlhKB9XTUUfDUF1lzUP5R/C0IRCh3syynDg5C0NkN8+gdegLBOsorZBIcqw6sCID1mPa7OlgWllNeM7tbg1UkLHt4f1AHS0K5dsz7Sh0Moad7IJbpceQ3aFYBTHMSxn1dByuC7XsElvdr+Csnr62w/Bmky4vbot4KWKuDkaRNo8y1OlgA9f8txhU85JR9gzYqD1zvwbIfJe0Df7+F4fO0yCDk34Q0TwdpS4XG8ani142EBBU00v2GBhc0sK1xsO2Jj8MOfjTG3fVjxeTAlnlLgJHPxZfHeXLwYDkLehF6/6zgfVqBZZR3Moc9jMnDch4ul6zyGeX2k9e98LEggMo6l6pDlhHzKHhwIsNy8BW/+iPbqriskhODzHdwO8o20G1bNcxj2+LtU47sdyzDR3VwGKlTkg6WNH/+/J2jer2zZ8/epVT9sg3l5KKDlZosl+VYpp3kM/b9QcXbW1SyHVGHvIdasP3zpH5sm2HvIyN/R+RPlfvx8u4sPh8tD3N19CAJukM7I0RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERFuKSZP+F0vlO4rFICMJAAAAAElFTkSuQmCC" alt="" style="float: left;"></p><p class="MsoNormal" style="margin-bottom: 7.5pt; text-indent: 3pt; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;"></p></div></div></div></div><div class="col-md-4 col-xs-6" ></div>
  5155.         ';
  5156.             //Generamos el contrato
  5157.         $contract $contract00.'<b>'.' '.$client->getName().'</b>'.' '.$contract01'CIF '.$client->getIdDocument().' '.
  5158.             $contract02.'<b>'.' '.$client->getAddress().'</b>'.','.$contract03.' '.$representante.'.'.
  5159.             $contract04.$reserva->getTitle().$contract05.$fechaInicio.$contract06.$horaInicio.$contract07.
  5160.             $contract08.$textoSalas.$contract09.$cierre.$contract10.$pax.$contract11.$fechaInicio.
  5161.             $contract12.$textoSalas.$contract13.$textoMontaje.$textoDesmontaje.$contract14.$tiempoCedido.
  5162.             $contract15.$contract16.$contract17.$contract18.$contract19.$contract20.$contract21.$contract22.$contract23
  5163.         ;
  5164.         // Si no habia contracto originalmente en la reserva se actualiza
  5165.         if (empty($contractOrigin)){
  5166.             $reserva->setContract($contract);
  5167.             $em->persist($reserva);
  5168.             $em->flush();
  5169.         } else {
  5170.             $contract $contractOrigin;
  5171.         }
  5172.         return $this->render('MDS/GreenPatioBundle/reservations/view-contract-reservation.html.twig', array( 'id' => $id'contract' => $contract, ) );
  5173.     }
  5174.     /**
  5175.      * @Route("/createdeposit/{id}", name="reservations_greenpatio_createdeposit")
  5176.      */
  5177.     public function createDepositAction($idEntityManagerInterface $emRequest $request)
  5178.     {
  5179.         $newRequest $request->request->get('reservation_deposit');
  5180.         /* Obtengo usuario logueado */
  5181.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  5182.         $user_id $user_logueado->getId();
  5183.         $newDeposit = new ReservationDeposit();
  5184.         $newDeposit->setReservationId($id);
  5185.         if (empty($newRequest['date'])) { $newDeposit->setDate(new DateTime ('now')); } else { $newDeposit->setDate(new DateTime ($newRequest['date'])); }
  5186.         if (empty($newRequest['description'])) { $newDeposit->setDescription(null); } else { $newDeposit->setDescription($newRequest['description']); }
  5187.         if (empty($newRequest['amount'])) { $newDeposit->setAmount(null); } else { $newDeposit->setAmount($newRequest['amount']); }
  5188.         if (array_key_exists('isDone',$newRequest)) { $newDeposit->setIsDone(true); } else { $newDeposit->setIsDone(false); }
  5189.         $newDeposit->setCreatedAt(new DateTime ('now'));
  5190.         $newDeposit->setCreatedId($user_id);
  5191.         $newDeposit->setUpdatedAt(new DateTime ('now'));
  5192.         $newDeposit->setUpdatedId($user_id);
  5193.         $em->persist($newDeposit);
  5194.         $em->flush();
  5195.         return $this->redirectToRoute('reservations_greenpatio_edit_simple', array( 'id' => $id'token' => null'_fragment' => 'btn_dpt' ));
  5196.     }
  5197.     /**
  5198.      * @Route("/depositupdate/{id}", name="reservations_greenpatio_deposit_update")
  5199.      */
  5200.     public function depositUpdateAction($idEntityManagerInterface $emRequest $request)
  5201.     {
  5202.         $newRequest $request->request->get('reservation_deposit_isdone_pending');
  5203.         $deposito $em->getRepository(ReservationDeposit::class)->findOneById($id);
  5204.         if (array_key_exists('isDone',$newRequest)) { $deposito->setIsDone(true); } else { $deposito->setIsDone(false); }
  5205.         /* Obtengo usuario logueado */
  5206.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  5207.         $user_id $user_logueado->getId();
  5208.         $deposito->setUpdatedAt(new DateTime ('now'));
  5209.         $deposito->setUpdatedId($user_id);
  5210.         $em->persist($deposito);
  5211.         $em->flush();
  5212.         return $this->redirectToRoute('reservations_greenpatio_edit_simple', array( 'id' => $deposito->getReservationId(), 'token' => null'_fragment' => 'btn_dpt' ));
  5213.     }
  5214.     /**
  5215.      * @Route("/loadedreservations", name="reservations_greenpatio_loaded_reservations")
  5216.      */
  5217.     public function loadedReservationsAction(EntityManagerInterface $emRequest $request)
  5218.     {
  5219.         $hoy = new DateTime('now');
  5220.         $diaInicio = new DateTime($hoy->format('Y-m'). '-01');
  5221.         // Se buscan las reservas creadas desde el inicio de mes
  5222.         $parameters = array( 'diaInicio' => $diaInicio, );
  5223.         $dql 'SELECT i
  5224.                 FROM GreenPatioBundle:Reservation i
  5225.                 WHERE  i.createdAt > :diaInicio';
  5226.         $query $em->createQuery($dql)->setParameters($parameters);
  5227.         $reservas $query->getResult();
  5228.         return $this->render('MDS/GreenPatioBundle/reservations/list-loaded-reservations.html.twig', array( 'reservations' => $reservas'itemsOfSearch' => '', ) );
  5229.     }
  5230.     /**
  5231.      * @Route("/searchreservations", name="reservations_greenpatio_search_reservations")
  5232.      */
  5233.     public function searchReservationsAction(EntityManagerInterface $emRequest $request)
  5234.     {
  5235.         $searchloaded $request->request->get('searchloaded');
  5236.         $dateStart = new \DateTime($searchloaded['date_start']);
  5237.         $dateEnd = new \DateTime($searchloaded['date_end']);
  5238.         $itemsOfSearch ' Entre las fechas: '.$dateStart->format('d/m/Y').' y '.$dateEnd->format('d/m/Y');
  5239.         // Se buscan las reservas creadas en las fechas solicitadas
  5240.         $parameters = array( 'diaInicio' => $dateStart'diaFin' => $dateEnd, );
  5241.         $dql 'SELECT i
  5242.                 FROM GreenPatioBundle:Reservation i
  5243.                 WHERE  i.createdAt BETWEEN :diaInicio AND :diaFin';
  5244.         $query $em->createQuery($dql)->setParameters($parameters);
  5245.         $reservas $query->getResult();
  5246.         return $this->render('MDS/GreenPatioBundle/reservations/list-loaded-reservations.html.twig', array( 'reservations' => $reservas'itemsOfSearch' => $itemsOfSearch, ) );
  5247.     }
  5248.     /**
  5249.      * Cambia las descripciones de las reservas al idioma seleccionado
  5250.      * @Route("/changeLanguage/{id}/{idLanguage}", name="reservations_greenpatio_change_language", methods={"GET"})
  5251.      */
  5252.     public function changeLanguageAction(int $idint $idLanguageEntityManagerInterface $emSerializerInterface $serializerInterface): JsonResponse
  5253.     {
  5254.         $descriptions $em->getRepository(ReservationLoungeSimple::class)->findBy(array('idReservation' => $id));
  5255.         $idiomas = array();
  5256.         foreach ($descriptions as $description) {
  5257.             $loungeDetails $em->getRepository(ReservationLoungeDetails::class)->findOneById($description->getIdLounge());
  5258.             $idiomas[$description->getIdLounge()] = $em->getRepository(ReservationLoungeWebDescription::class)->findOneBy(array('lounge' => $loungeDetails'language' => $idLanguage));
  5259.         }
  5260.         $idiomas $serializerInterface->serialize($idiomas'json', [
  5261.             'groups' => ['reservation_lounge_web_description:read']
  5262.         ]);
  5263.         $idiomas json_decode($idiomastrue);
  5264.         return $this->json([
  5265.             'status' => JsonResponse::HTTP_OK,
  5266.             'idiomas' => $idiomas,
  5267.         ], JsonResponse::HTTP_OK);
  5268.     }
  5269.     private function sendMail($mailAddressFrom$mailAddressTo$mailSubject$mailBody){
  5270.         $em $this->getDoctrine()->getManager();
  5271.         $agent $em->getRepository(User::class)->findOneByEmail($mailAddressFrom);
  5272.         $client $em->getRepository(Client::class)->findOneByEmail($mailAddressTo);
  5273.         if (empty($client)){ $client $em->getRepository(ClientContact::class)->findOneByEmail($mailAddressTo); }     // Si el cliente era null puede ser un client contact
  5274.         if (!empty($client)){
  5275.             $replyTo = array(
  5276.                 $client->getEmail() => $client->getName(),
  5277.                 $agent->getEmail() => $agent->getName().' '$agent->getLastName(),
  5278.             );
  5279.         } else {
  5280.             // El AddressTo es un contacto no registrado
  5281.             $replyTo = array(
  5282.                 $mailAddressTo => $mailAddressTo,
  5283.                 $agent->getEmail() => $agent->getName().' '$agent->getLastName(),
  5284.             );
  5285.         }
  5286.         $agentMail $mailAddressFrom;
  5287.         $mailAgent $agentMail;
  5288.         //Se prepara el correo con los agentes a notificar
  5289.         $firmGmail $agent->getFirmGmail();
  5290.         $data = array(
  5291.             'body' => $mailBody,
  5292.             'firm' => $firmGmail,
  5293.         );
  5294.         // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  5295.         $transporter = new \Swift_SmtpTransport();
  5296.         $transporter->setHost('smtp.gmail.com')
  5297.             ->setEncryption('ssl')//ssl / tls
  5298.             ->setPort(465)// 465 / 587
  5299.             ->setUsername('desarrollo@develup.solutions')
  5300.             ->setPassword('utvh hzoi wfdo ztjs');
  5301. //            ->setPassword('MeDITeRRANeAN_Develup30102023#');
  5302.         $mailer = new \Swift_Mailer($transporter);
  5303.         $message = new \Swift_Message();
  5304.         $message->setSubject($mailSubject)
  5305.             ->setSender($agentMail)
  5306.             ->setFrom(array("desarrollo@develup.solutions" => "Green Patio"))
  5307.             ->setReplyTo($agentMail)
  5308.             ->setTo($replyTo)
  5309.             ->setBody(
  5310.                 $this->renderView(
  5311.                     'mail/structure-mail.html.twig',
  5312.                     array('data' => $data)
  5313.                 ),
  5314.                 'text/html'
  5315.             );
  5316. //        $mailer->send($message);          Rafa dijo que no queria envío de correos con el cliente ya que se haría mediante la cotización Web (04/02/2025)
  5317.         return true;
  5318.     }
  5319.     private function makeAlert($reservaId$clientId$clientMail$agentId$agentMail){
  5320.         $em $this->getDoctrine()->getManager();
  5321.         $alertaPrevia $em->getRepository(ReservationMailAlertClient::class)->findOneByReservationId($reservaId);
  5322.         $reserva $em->getRepository(Reservation::class)->findOneById($reservaId);
  5323.         $dias $reserva->getDaysBlock();
  5324.         if (empty($dias) or !(is_numeric($dias))){
  5325.             $dias 7;
  5326.         }
  5327.         $diasMenosDos $dias 2;
  5328.         /* Obtengo usuario logueado */
  5329.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  5330.         $user_id $user_logueado->getId();
  5331.         $hoy = new \DateTime("now"NULL);
  5332.         $hoyMasCinco $hoy;
  5333.         $hoyMasCinco->add(new DateInterval('P'.$diasMenosDos.'D'));                   // 5 dias despues, 48 horas antes de la cancelacion (o los especificados)
  5334.         $hoyMasCinco->add(new DateInterval("PT2H"));                                  // Ajustamos la diferencia con el reloj del servidor
  5335.         $hoy = new \DateTime("now"NULL);
  5336.         $hoyMasSiete $hoy;
  5337.         $hoyMasSiete->add(new DateInterval('P'.$dias.'D'));                           // Siete dias despues (o los especificados)
  5338.         $hoyMasSiete->add(new DateInterval("PT2H"));
  5339.         //Si no hay una alerta previa se hace la alerta
  5340.         if (empty($alertaPrevia)){
  5341.             $alerta = new ReservationMailAlertClient();
  5342.             $alerta->setReservationId($reservaId);
  5343.             $alerta->setClientId($clientId);
  5344.             $alerta->setClientMail($clientMail);
  5345.             $alerta->setAgentId($agentId);
  5346.             $alerta->setAgentMail($agentMail);
  5347.             $alerta->setAlertDateTime($hoyMasCinco);                // A los 5 dias se alerta (o los especificados)
  5348.             $alerta->setAlertSended(false);
  5349.             $alerta->setCancelDateTime($hoyMasSiete);               // A los 7 dias se cancela (o los especificados)
  5350.             $alerta->setCancelSended(false);
  5351.             $alerta->setOldReservationId(null);                     // Aqui se guardara el Id de reserva cuando se vaya a eliminar el registro (solo se pondra reservationId a 0)
  5352.             $alerta->setCreatedAt($hoy);
  5353.             $alerta->setCreatedId($user_id);
  5354.             $em->persist($alerta);
  5355.             $em->flush();
  5356.         }
  5357.         return true;
  5358.     }
  5359.     private function benefitForReservation($id){
  5360.         $em $this->getDoctrine()->getManager();
  5361.         $reserva $em->getRepository(Reservation::class)->findOneById($id);
  5362.         $lounges $em->getRepository(ReservationLoungeSimple::class)->findByIdReservation($id);
  5363.         $services $em->getRepository(ReservationService::class)->findByReservationId($id);
  5364.         $payedLounges = array(); $payedServices = array(); $unPayedServices = array();
  5365.         // Salas
  5366.         foreach ($lounges as $item){
  5367.             // Si la sala esta en ReservationInvoiceItems se encuentra facturado, en caso contraio, no lo esta o ha sido rectificado
  5368.             $loungeInvoicedItem $em->getRepository(ReservationInvoiceItems::class)->findOneByLngControlId($item->getId());
  5369.             if (!empty($loungeInvoicedItem)){ $payedLounges[] = $item; }                       // Esta facturado el Item
  5370.         }
  5371.         // Servicios
  5372.         foreach ($services as $item){
  5373.             // Si el servicio esta en ReservationInvoiceItems se encuentra facturado, en caso contraio, no lo esta o ha sido rectificado
  5374.             $serviceInvoicedItem $em->getRepository(ReservationInvoiceItems::class)->findOneBySrvControlId($item->getId());
  5375.             if (!empty($serviceInvoicedItem)){
  5376.                 // Esta facturado el Item
  5377.                 $payedServices[] = $item;
  5378.             } else {
  5379.                 // No esta facturado el Item o fue rectificado
  5380.                 $unPayedServices[] = $item;
  5381.             }
  5382.         }
  5383.         $benefit 0$payed 0;
  5384.         // Se suman los pagos
  5385.         foreach ($payedLounges as $item){
  5386.             $benefit $benefit + (float)$item->getServicePrice();
  5387.             $payed $payed + (float)$item->getServicePrice();
  5388.         }
  5389.         foreach ($payedServices as $item){
  5390.             $benefit $benefit + (float)$item->getPrice();
  5391.             $payed $payed + (float)$item->getPrice();
  5392.         }
  5393.         // Se restan los impagos
  5394.         foreach ($unPayedServices as $item){
  5395.             // Se verifica el check de toinvoice por si el servicio se facturara a futuro (Requisito de Rafa)
  5396.             if ($item->getToinvoice()){
  5397.                 $benefit += (float)$item->getPrice();
  5398.                 $payed += (float)$item->getPrice();
  5399.             } else {
  5400.                 // No esta pagado y no esta marcado "Para facturar"
  5401.                 $benefit $benefit - (float)$item->getPrice();
  5402.             }
  5403.         }
  5404.         // Porcentaje de beneficio
  5405.         $percBenefit = ($benefit 100);
  5406.         if (!($payed == 0)){ $percBenefit $percBenefit $payed; } else { $percBenefit 0; };
  5407.         return array(
  5408.             'benefit' => $benefit,
  5409.             'percBenefit' => $percBenefit,
  5410.             'payedLounges' => $payedLounges,
  5411.             'payedServices' => $payedServices,
  5412.             'unPayedServices' => $unPayedServices,
  5413.         );
  5414.     }
  5415.     private function verificarStatusInicialyFinal($id,$user_id,$estadoInicial,$estadoFinal){
  5416.         $em $this->getDoctrine()->getManager();
  5417.         $reserva $em->getRepository(Reservation::class)->findOneById($id);
  5418.         $user_logueado $em->getRepository(User::class)->findOneById($user_id);
  5419.         $newStatus 'Pendiente';
  5420.         //Este Switch ya no es necesario
  5421.         switch ($estadoInicial) {
  5422.             case 'Bloqueo':
  5423.                 // De bloqueo solo se sale si el usuario es Salvador o un Admin O si se va a Cancelar "Deleted" o "Cotizado"
  5424. //                if (($user_logueado->getRole() == 'ROLE_ADMIN') or ($user_id == 14) or $estadoFinal == 'Deleted' or $estadoFinal == 'Cotizado'){
  5425.                 if ($estadoFinal == 'Deleted' or $estadoFinal == 'Cotizado'){
  5426.                     $newStatus $estadoFinal;
  5427.                 } else {
  5428.                     // No se cambia el estado
  5429.                     $newStatus $estadoInicial;
  5430.                 }
  5431.                 break;
  5432.             case 'Pendiente':
  5433.                 // De Pendiente solo se sale si el usuario es Salvador o un Admin O si se va a Cancelar "Deleted"
  5434.                 $newStatus $estadoFinal;
  5435. //                if (($user_logueado->getRole() == 'ROLE_ADMIN') or ($user_id == 14) or $estadoFinal == 'Deleted'){
  5436.                 if ($estadoFinal == 'Deleted'){
  5437.                     $newStatus $estadoFinal;
  5438.                 } else {
  5439.                     // No se cambia el estado
  5440.                     $newStatus $estadoInicial;
  5441.                 }
  5442.                 break;
  5443.             case 'Deleted':
  5444.                 // De Cancelado solo se sale si el usuario es Salvador o un Admin O "Bloqueo" o "Pendiente"
  5445. //                if (($user_logueado->getRole() == 'ROLE_ADMIN') or ($user_id == 14) or $estadoFinal == 'Bloqueo' or $estadoFinal == 'Pendiente'or $estadoFinal == 'Cotizado'){
  5446.                 if ($estadoFinal == 'Bloqueo' or $estadoFinal == 'Pendiente'or $estadoFinal == 'Cotizado'){
  5447.                     $newStatus $estadoFinal;
  5448.                 } else {
  5449.                     // No se cambia el estado
  5450.                     $newStatus $estadoInicial;
  5451.                 }
  5452.                 break;
  5453.             case 'Cotizado':
  5454.                 $newStatus $estadoFinal;
  5455.                 // De Cotizado solo se sale si el usuario es Salvador o un Admin O a  O "Bloqueo" o "Pendiente" o "Cancelado"
  5456. //                if (($user_logueado->getRole() == 'ROLE_ADMIN') or ($user_id == 14) or $estadoFinal == 'Bloqueo' or $estadoFinal == 'Pendiente' or $estadoFinal == 'Deleted'){
  5457.                 if ($estadoFinal == 'Bloqueo' or $estadoFinal == 'Pendiente' or $estadoFinal == 'Deleted' or $estadoFinal == 'Confirmed'){
  5458.                     $newStatus $estadoFinal;
  5459.                 }
  5460.                 break;
  5461.             case 'Invoiced':
  5462.                 // De Facturado no se debe salir a menos que se rectifique
  5463.                 // Si todas las facturas del expediente se encuentran rectificadas pasamos al estado "Confirmado" sino seguimos en "Facturado"
  5464.                 $reservaInvoices $em->getRepository(ReservationInvoice::class)->findByReservationId($id);
  5465.                 $estanTodasRectificadas true;
  5466.                 foreach ($reservaInvoices as $item){
  5467.                     $reservaInvoiceRect $em->getRepository(ReservationInvoiceRec::class)->findOneByInvoiceToRec($item->getId());
  5468.                     if (empty($reservaInvoiceRect)){ $estanTodasRectificadas false; } else { $estanTodasRectificadas = ($estanTodasRectificadas and true); }
  5469.                 }
  5470.                 if ($estanTodasRectificadas){
  5471.                     $newStatus 'Confirmed';
  5472.                 } else {
  5473.                     $newStatus $estadoInicial;
  5474.                 }
  5475.                 break;
  5476.             case 'Confirmed':
  5477.                 // Se puede ir a cualquier estado
  5478.                 $newStatus $estadoFinal;
  5479.                 break;
  5480.             default:
  5481.                 // No hacer nada con el campo Status
  5482.                 $newStatus $estadoInicial;
  5483.                 break;
  5484.         }
  5485.         $newStatus $estadoFinal;
  5486.         return $newStatus;
  5487.     }
  5488.     private function disponibilidadGreenPatio($id){
  5489.         // $id Id de la reserva
  5490.         $em $this->getDoctrine()->getManager();
  5491.         $reserva $em->getRepository(Reservation::class)->findOneById($id);
  5492. //        $lounges = $em->getRepository(ReservationLoungeSimple::class)->findByIdReservation($id);
  5493.         //Buscamos salas que tengamos entre el inicio y fin del evento a confirmar
  5494.         //Sumamos un dia ya que por solicitud de Salva deseamos saber que eventos hay un dia antes y un dia despues
  5495.         $fechaInicio = new \DateTime($reserva->getDateStart()->format('Y-m-d H:i:s'));
  5496. //        $fechaInicio->sub(new \DateInterval("P1D"));
  5497.         $fechaFin = new \Datetime($reserva->getDateEnd()->format('Y-m-d H:i:s'));
  5498. //        $fechaFin->add(new \DateInterval("P1D"));
  5499.         // Los eventos que debemos verificar son los Confirmados y Facturados
  5500. //        $parameters = array(
  5501. //            'reservaId' => $id,
  5502. //            'dateStart' => $fechaInicio,
  5503. //            'dateEnd' => $fechaFin,
  5504. //            'facturado' => 'Invoiced',
  5505. //            'confirmado' => 'Confirmed',
  5506. //        );
  5507. //        $dql = 'SELECT r
  5508. //                FROM  GreenPatioBundle:Reservation r
  5509. //                INNER JOIN GreenPatioBundle:ReservationLoungeSimple l WITH r.id = l.idReservation
  5510. //                  WHERE (r.status = :facturado OR r.status = :confirmado)
  5511. //                    AND (not(r.id = :reservaId))
  5512. //                    AND ((l.dateStart >= :dateStart and l.dateStart <= :dateEnd))';
  5513. //
  5514. //        $query = $em->createQuery($dql)->setParameters($parameters);
  5515. //        $reservationInDates = $query->getResult();
  5516.         $parameters = array(
  5517.             'dateStart' => $fechaInicio,
  5518.             'dateEnd' => $fechaFin,
  5519.             'facturado' => 'Invoiced',
  5520.             'confirmado' => 'Confirmed',
  5521.         );
  5522.         $dql 'SELECT r
  5523.         FROM GreenPatioBundle:Reservation r
  5524.         INNER JOIN GreenPatioBundle:ReservationLoungeSimple l WITH r.id = l.idReservation
  5525.         WHERE (r.status = :facturado OR r.status = :confirmado) 
  5526.         AND (
  5527.             l.dateStart <= :dateEnd 
  5528.             AND l.dateEnd >= :dateStart
  5529.         )';
  5530.         $query $em->createQuery($dql)->setParameters($parameters);
  5531.         $reservationsInConflict $query->getResult();
  5532.         $arrayUso = [];
  5533.         $arrayAlert = [];
  5534.         $arrayAlertMontDesmont = [];                // Nuevo array para almacenar conflictos de montaje y desmontaje
  5535.         if (sizeof($reservationsInConflict) >1){
  5536.             foreach ($reservationsInConflict as $resConflict) {
  5537.                 $loungesConflict $em->getRepository(ReservationLoungeSimple::class)->findByIdReservation($resConflict->getId());
  5538.                 foreach ($loungesConflict as $item) {
  5539.                     $type $item->getType();                               // Puede ser NULL, "Montaje" o "Desmontaje"
  5540.                     $dateKey $item->getDateStart()->format('Ymd');
  5541.                     $loungeId $item->getIdLounge();
  5542.                     $reservationId $item->getIdReservation();
  5543.                     if (in_array($loungeId, [249])) {
  5544.                         // Plenaria, Invernadero y Escenario se consideran la misma sala
  5545.                         $arrayUso[2][$dateKey][$reservationId] = empty($type) ? 'Sala' $type;
  5546.                         $arrayUso[4][$dateKey][$reservationId] = empty($type) ? 'Sala' $type;;
  5547.                         $arrayUso[9][$dateKey][$reservationId] = empty($type) ? 'Sala' $type;;
  5548.                     } else {
  5549.                         $lngDetails $em->getRepository(ReservationLoungeDetails::class)->findOneById($loungeId);
  5550.                         if (empty($lngDetails->getCombo())) {
  5551.                             $arrayUso[$loungeId][$dateKey][$reservationId] = empty($type) ? 'Sala' $type;
  5552.                         } else {
  5553.                             $arrayComboLounges explode(","$lngDetails->getCombo());
  5554.                             foreach ($arrayComboLounges as $indLounge) {
  5555.                                 $arrayUso[$indLounge][$dateKey][$reservationId] = empty($type) ? 'Sala' $type;
  5556.                             }
  5557.                         }
  5558.                     }
  5559.                 }
  5560.             }
  5561.             foreach ($arrayUso as $idLounge => $dates) {
  5562.                 foreach ($dates as $dateKey => $reservations) {
  5563.                     // Si el ID de la reserva está presente, obtener su dato
  5564.                     $datoId = isset($reservations[$id]) ? $reservations[$id] : 0;
  5565.                     foreach ($reservations as $reservationId => $dato) {
  5566.                         if ($reservationId != $id) {
  5567.                             if ($datoId === "Sala" && $dato === "Sala") {
  5568.                                 $arrayAlert[$reservationId][] = array('dateKey' => $dateKey'idLounge' => $idLounge'reservationId' => $reservationId);
  5569.                             } elseif (($datoId === "Montaje" || $datoId === "Desmontaje") && ($dato === "Montaje" || $dato === "Desmontaje")) {
  5570.                                 $arrayAlertMontDesmont[$reservationId][] = array('dateKey' => $dateKey'idLounge' => $idLounge'reservationId' => $reservationId);
  5571.                             } elseif ($datoId === "Sala" && ($dato === "Montaje" || $dato === "Desmontaje")) {
  5572.                                 $arrayAlert[$reservationId][] = array('dateKey' => $dateKey'idLounge' => $idLounge'reservationId' => $reservationId);
  5573.                             } elseif (($datoId === "Montaje" || $datoId === "Desmontaje") && $dato === "Sala") {
  5574.                                 $arrayAlert[$reservationId][] = array('dateKey' => $dateKey'idLounge' => $idLounge'reservationId' => $reservationId);
  5575.                             }
  5576.                         }
  5577.                     }
  5578.                 }
  5579.             }
  5580.         }
  5581.         $reservationInDates = [];
  5582.         if (!empty($arrayAlert)){
  5583.             foreach ($arrayAlert as $key => $item){
  5584.                 $resvConf $em->getRepository(Reservation::class)->findOneById($key);
  5585.                 $reservationInDates[] = $resvConf;
  5586.             }
  5587.             // La reserva no puede pasar a confirmada
  5588.             $reserva->setStatus('Cotizado');
  5589.             $em->persist($reserva);
  5590.             $em->flush();
  5591.         } else {
  5592.             $mensajeWarning '<br>';
  5593.             if (!empty($arrayAlertMontDesmont)){
  5594.                 foreach ($arrayAlertMontDesmont as $key => $item){
  5595.                     $mensajeWarning .= 'Reserva ID: '$key'<br>';
  5596.                 }
  5597.                 $this->addFlash('mensajereservationerror''ADVERTENCIA, se han guardado los cambios, pero hay coincidencias en los Montajes y/o Desmontajes'$mensajeWarning);
  5598.                 $reservationInDates = [];
  5599.             }
  5600.         }
  5601.         return $reservationInDates;
  5602.     }
  5603.     private function disponibilidadAvExpress($id){
  5604.         // $id Id de la reserva de GreenPatio que vamos a confirmar
  5605.         $em $this->getDoctrine()->getManager();
  5606.         $reserva $em->getRepository(Reservation::class)->findOneById($id);
  5607.         //Sumamos un dia ya que por solicitud de Salva deseamos saber que eventos hay un dia antes y un dia despues
  5608.         $fechaInicio = new \Datetime($reserva->getDateStart()->format('Y-m-d'));
  5609.         $fechaInicio->sub(new \DateInterval("P1D"));
  5610.         $fechaFin = new \Datetime($reserva->getDateEnd()->format('Y-m-d 23:59'));
  5611.         $fechaFin->add(new \DateInterval("P1D"));
  5612.         $parameters = array( 'dateStart' => $fechaInicio'dateEnd' => $fechaFin, );
  5613.         $dql 'SELECT i
  5614.                 FROM AvexpressBundle:AveFiles i
  5615.                 WHERE (i.dateStart <= i.dateEnd) 
  5616.                   AND (
  5617.                       (i.dateStart <= :dateStart AND i.dateEnd >= :dateEnd)
  5618.                       OR (i.dateEnd = :dateStart)
  5619.                       OR (i.dateEnd > :dateStart AND i.dateEnd <= :dateEnd)
  5620.                       OR (i.dateStart = :dateStart)
  5621.                       OR (i.dateStart > :dateStart AND i.dateStart <= :dateEnd)
  5622.                       OR (i.dateStart = :dateEnd)
  5623.                   )
  5624.                 ORDER BY i.dateStart ASC';
  5625.         $query $em->createQuery($dql)->setParameters($parameters);
  5626.         $avFilesInDates $query->getResult();
  5627.         return $avFilesInDates;
  5628.     }
  5629.     private function sendMailLot($mailAddressFrom$mailArrayTo$mailSubject$mailBody){
  5630.         $em $this->getDoctrine()->getManager();
  5631.         $agent $em->getRepository(User::class)->findOneByEmail($mailAddressFrom);
  5632.         $replyTo = array();
  5633.         // Verificamos que los correos sean validos
  5634.         foreach ($mailArrayTo as $item){ if (filter_var($item,FILTER_VALIDATE_EMAIL)){ $replyTo[$item] = $item; } }
  5635.         $agentMail $mailAddressFrom;
  5636.         $mailAgent $agentMail;
  5637.         //Se prepara el correo con los agentes a notificar
  5638.         $firmGmail $agent->getFirmGmail();
  5639.         $data = array( 'body' => $mailBody'firm' => $firmGmail, );
  5640.         // EJECUTAR ENVIO DE ALERTA PARA EL AGENTE
  5641.         $transporter = new \Swift_SmtpTransport();
  5642.         $transporter->setHost('smtp.gmail.com')
  5643.             ->setEncryption('ssl')//ssl / tls
  5644.             ->setPort(465)// 465 / 587
  5645.             ->setUsername('desarrollo@develup.solutions')
  5646.             ->setPassword('utvh hzoi wfdo ztjs');
  5647. //            ->setPassword('MeDITeRRANeAN_Develup30102023#');
  5648.         $mailer = new \Swift_Mailer($transporter);
  5649.         $message = new \Swift_Message();
  5650.         $message->setSubject($mailSubject)
  5651.             ->setSender($agentMail)
  5652.             ->setFrom(array("desarrollo@develup.solutions" => "System Mante 3.0"))
  5653.             ->setReplyTo($agentMail)
  5654.             ->setTo($replyTo)
  5655.             ->setBody(
  5656.                 $this->renderView(
  5657.                     'mail/structure-mail.html.twig',
  5658.                     array('data' => $data)
  5659.                 ),
  5660.                 'text/html'
  5661.             );
  5662.         $mailer->send($message);
  5663.         return true;
  5664.     }
  5665.     private function notificacionReservasPorCotizar(){
  5666.         // Se buscan las reservas en estado "Iniciado" y se notifica a todos los
  5667.         // agentes de Green Patio, Solo se notifica 1 vez por dia
  5668.         // Solo se mantendran las alertas de los ultimos 6 meses
  5669.         $em $this->getDoctrine()->getManager();
  5670.         $alertas $em->getRepository(ReservationAlertStarted::class)->findAll();
  5671.         if (!empty($alertas)){ $ultimaAlerta end($alertas); } else { $ultimaAlerta null; }
  5672.         $alertas $em->getRepository(ReservationAlertStarted::class)->findAll();
  5673.         $agentesGreenPatio $em->getRepository(User::class)->findByUserrol(48);
  5674.         $hoy = new DateTime('now');
  5675.         $fechaLimite = new DateTime('now');
  5676.         $fechaLimite->modify('-180 day');
  5677.         if (!empty($ultimaAlerta)){ $mismaFecha $ultimaAlerta->getAlertDate()->format('Ymd') == $hoy->format('Ymd'); } else { $mismaFecha false; }
  5678.         if ($mismaFecha){
  5679.             // No se debe notificar, la ultima alerta es del dia de hoy
  5680.         } else {
  5681.             // Hay que notificar
  5682.             if (empty($agentesGreenPatio)){ return true; }
  5683.             $mailAddressFrom $agentesGreenPatio[0]->getEmail();
  5684.             $mailArrayTo = array();
  5685.             foreach ($agentesGreenPatio as $agente){
  5686.                 $mailArrayTo[$agente->getEmail()] = $agente->getEmail();
  5687.             }
  5688.             $mailSubject 'EXPENDIENTES POR COTIZAR';
  5689.             $reservasIniciado $em->getRepository(Reservation::class)->findByStatus('Iniciado');
  5690.             $mailBody null;
  5691.             foreach ($reservasIniciado as $reserva){
  5692.                 $agenteReserva $em->getRepository(User::class)->findOneById($reserva->getCreatedBy());
  5693.                 $agenteReserva $agenteReserva->getName().' '.$agenteReserva->getLastName();
  5694.                 $mailBody $mailBody'<br>Evento: '.$reserva->getId().'<br>Nombre del Evento: '.$reserva->getTitle().'<br>Agente: '.$agenteReserva.'<br>Enlace al Evento: <a href="https://inout.mante.solutions/reservations-greenpatio/editsimple/'.$reserva->getId().'">"IR AL EXPEDIENTE"</a><br><br>';
  5695.             }
  5696.             if (!empty($mailBody)){
  5697.                 $this->sendMailLot($mailAddressFrom$mailArrayTo$mailSubject$mailBody);
  5698.                 // Creamos la alerta del dia
  5699.                 $alertToday = new ReservationAlertStarted();
  5700.                 $alertToday->setAlertDate($hoy);
  5701.                 $alertToday->setMessage($mailBody);
  5702.                 $em->persist($alertToday);
  5703.                 $em->flush();
  5704.             }
  5705.         }
  5706.         // Eliminamos las alertas con mas de 6 meses de antiguedad
  5707.         foreach ($alertas as $alerta){
  5708.             if ($alerta->getAlertDate() < $fechaLimite){
  5709.                 $em->remove($alerta);
  5710.                 $em->flush();
  5711.             }
  5712.         }
  5713.         return true;
  5714.     }
  5715.     private function verificarCambioCliente$idRes ){
  5716.         // Solo se puede cambiar el cliente si no hay un documento emitido (factura, factura de deposito)
  5717.         $em $this->getDoctrine()->getManager();
  5718.         $resInv $em->getRepository(ReservationInvoice::class)->findByReservationId($idRes);
  5719.         return empty($resInv);
  5720.     }
  5721.     private function reordenarSalas$number$idLounge ){
  5722.         // number es el numero de la sala editada
  5723.         $em $this->getDoctrine()->getManager();
  5724.         $number--;
  5725.         $parameters = array( 'idLounge' => $idLounge'rankLounge' => $number, );
  5726.         $dql 'SELECT i
  5727.                 FROM GreenPatioBundle:ReservationLoungeDetails i
  5728.                 WHERE  i.rankLounge > :rankLounge AND i.id <> :idLounge';
  5729.         $query $em->createQuery($dql)->setParameters($parameters);
  5730.         $salasParaReordenar $query->getResult();
  5731.         foreach ($salasParaReordenar as $sala) {
  5732.             $sala->setRankLounge(($sala->getRankLounge() + 1));
  5733.             $em->persist($sala);
  5734.             $em->flush();
  5735.         }
  5736.         return empty($resInv);
  5737.     }
  5738.     private function laReservaEsConfirmable$id ){
  5739.         $confirmable false;
  5740.         // Una reserva se puede confirmar solo cuando tiene un deposito realizado
  5741.         $em $this->getDoctrine()->getManager();
  5742.         $depositos $em->getRepository(ReservationDeposit::class)->findBy(array('reservationId' => $id'isDone' => true));
  5743.         $depositos true;      // Rafa indica que este requisito no se usara por el momento 24/02/2025
  5744.         // Si la reserva no tiene ninguna sala asignada, no se puede pasar a confirmado
  5745.         $salas $em->getRepository(ReservationLoungeSimple::class)->findBy(array('idReservation' => $id));
  5746.         if (!empty($depositos) and !empty($salas)){ $confirmable true; }
  5747.         return $confirmable;
  5748.     }
  5749.     private function laReservaEsCotizable$id ){
  5750.         // Una reserva se puede cotizar solo cuando tiene al menos una sala agregada
  5751.         $em $this->getDoctrine()->getManager();
  5752.         $salas $em->getRepository(ReservationLoungeSimple::class)->findBy(array('idReservation' => $id));
  5753.         return true;            // Se pidio que siempre se sincronizara con Av
  5754.     }
  5755.     private function notificacionReservasPendientesDelSegundoDeposito(){
  5756.         // Se buscan las reservas con depositos y se notifica a todos los
  5757.         // agentes de Green Patio si no tienen el segundo deposito y faltan 30 días
  5758.         // o menos para el evento, Solo se notifica 1 vez por dia
  5759.         $em $this->getDoctrine()->getManager();
  5760.         $depositosHechos $em->getRepository(ReservationDeposit::class)->findByIsDone(true);
  5761.         $arrayDepositos = array();
  5762.         $arrayReservasPemdientesSegunDepositos = array();
  5763.         $today = new \Datetime('now');
  5764.         $todayPlusMonth = new \Datetime('+ 30 days');
  5765.         // Se agrupan los depositos por reservas
  5766.         foreach ($depositosHechos as $item){ $arrayDepositos[$item->getReservationId()][] = $item; }
  5767.         foreach ($arrayDepositos as $item){
  5768.             if (sizeof($item)<2){
  5769.                 // Solo nos interesan reservas con un deposito
  5770.                 $reserva $em->getRepository(Reservation::class)->findOneById($item[0]->getReservationId());
  5771.                 if ($reserva->getStatus() == 'Confirmed'){
  5772.                     // Solo nos interesan reservas confirmadas
  5773.                     if (($reserva->getDateStart() < $todayPlusMonth) and ($reserva->getDateStart()>$today)){
  5774.                      // Solo nos interesan reservas que inician en 30 dias
  5775.                         $arrayReservasPemdientesSegunDepositos[] = $reserva;
  5776.                     }
  5777.                 }
  5778.             }
  5779.         }
  5780.         $alertas $em->getRepository(ReservationAlertSecondDeposit::class)->findAll();
  5781.         if (!empty($alertas)){ $ultimaAlerta end($alertas); } else { $ultimaAlerta null; }
  5782.         $agentesGreenPatio $em->getRepository(User::class)->findByUserrol(48);
  5783.         $hoy = new DateTime('now');
  5784.         $fechaLimite = new DateTime('now');
  5785.         $fechaLimite->modify('-180 day');
  5786.         if (!empty($ultimaAlerta)){ $mismaFecha $ultimaAlerta->getAlertDate()->format('Ymd') == $hoy->format('Ymd'); } else { $mismaFecha false; }
  5787.         if ($mismaFecha){
  5788.             // No se debe notificar, la ultima alerta es del dia de hoy
  5789.         } else {
  5790.             // Hay que notificar
  5791.             if (empty($agentesGreenPatio)){ return true; }
  5792.             $mailAddressFrom $agentesGreenPatio[0]->getEmail();
  5793.             $mailArrayTo = array();
  5794.             foreach ($agentesGreenPatio as $agente){ $mailArrayTo[$agente->getEmail()] = $agente->getEmail(); }
  5795.             $mailSubject 'EXPENDIENTES CON DEPOSITOS PENDIENTES';
  5796.             $reservasIniciado $arrayReservasPemdientesSegunDepositos;
  5797.             $mailBody null;
  5798.             foreach ($reservasIniciado as $reserva){
  5799.                 $agenteReserva $em->getRepository(User::class)->findOneById($reserva->getCreatedBy());
  5800.                 $agenteReserva $agenteReserva->getName().' '.$agenteReserva->getLastName();
  5801.                 $mailBody $mailBody'<br>Evento: '.$reserva->getId().'<br>Nombre del Evento: '.$reserva->getTitle().'<br>Agente: '.$agenteReserva.'<br>Enlace al Evento: <a href="https://inout.mante.solutions/reservations-greenpatio/editsimple/'.$reserva->getId().'">"IR AL EXPEDIENTE"</a><br><br>';
  5802.             }
  5803.             if (!empty($mailBody)){
  5804.                 $this->sendMailLot($mailAddressFrom$mailArrayTo$mailSubject$mailBody);
  5805.                 // Creamos la alerta del dia
  5806.                 $alertToday = new ReservationAlertSecondDeposit();
  5807.                 $alertToday->setAlertDate($hoy);
  5808.                 $alertToday->setMessage($mailBody);
  5809.                 $em->persist($alertToday);
  5810.                 $em->flush();
  5811.             }
  5812.         }
  5813.         // Eliminamos las alertas con mas de 6 meses de antiguedad
  5814.         foreach ($alertas as $alerta){
  5815.             if ($alerta->getAlertDate() < $fechaLimite){
  5816.                 $em->remove($alerta);
  5817.                 $em->flush();
  5818.             }
  5819.         }
  5820.         return true;
  5821.     }
  5822. };