src/Controller/EventosController.php line 140

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Estilistas;
  4. use App\Entity\Preferencias;
  5. use App\Entity\Clientes;
  6. use App\Entity\Eventos;
  7. use App\Entity\BookingDeleted;
  8. use App\Entity\Servicios;
  9. use App\Entity\SoldProducts;
  10. use App\Entity\Productos;
  11. use App\Entity\WaitingList;
  12. use App\Entity\GiftCard;
  13. use App\Entity\Activity;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use Symfony\Component\HttpFoundation\JsonResponse;
  16. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  17. use Symfony\Component\HttpFoundation\Response;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\Routing\Annotation\Route;
  20. use Symfony\Component\DomCrawler\Crawler;
  21. use Symfony\Component\Asset\Package;
  22. use Symfony\Component\Asset\VersionStrategy\EmptyVersionStrategy;
  23. class EventosController extends AbstractController
  24. {
  25.     /**
  26.      * @Route("/noIndex", name="user")
  27.      */
  28.     public function noIndex(): Response
  29.     {
  30.         return $this->render('security/login.html.twig', [
  31.             'controller_name' => 'UserController',
  32.             'error'=>'error'
  33.         ]);
  34.     }
  35.     public function getLanguage()
  36.     {
  37.       $language "es";
  38.       if (isset($_COOKIE['lang']))
  39.       {
  40.         $language $_COOKIE['lang'];
  41.       }
  42.       $package = new Package(new EmptyVersionStrategy());
  43.       $urlLang $package->getUrl('language/'.$language.'.json');
  44.       $lang json_decode(file_get_contents($urlLang));
  45.   
  46.       return $lang;
  47.     }
  48.       /**
  49.        * @Route("/calendar", name="calendar") //INICIO O INDEX
  50.        */
  51.       public function index(Request $requestEntityManagerInterface $em): Response
  52.       {
  53.         if($this->checkCompany($em)){
  54.           $this->redirectToRoute('app_logout');
  55.           return $this->redirectToRoute('app_login', ['msg'=>1]);
  56.         }else{
  57.           $user $this->getUser();
  58.           $views 1;
  59.           $dataStylist = [];
  60.           if (method_exists($user'getCompany')) { $company $user->getCompany()->getId(); }
  61.           else { $company $user->getId(); }
  62.           $preference $em->getRepository(Preferencias::class)->findOneBy(['company'=>$company]);
  63.           if($preference){
  64.             $language $preference->getLanguage();
  65.             $calendarStart $preference->getStartTime();
  66.             $calendarEnd $preference->getEndTime();
  67.             $timer $preference->getTimer();
  68.             $logo $preference->getLogo();
  69.             $notify $preference->isNotify();
  70.           }else{
  71.             $language self::getLanguage();
  72.             $calendarStart '08:00';
  73.             $calendarEnd '20:00';
  74.             $timer '30';
  75.             $logo null;
  76.             $notify true;
  77.           }
  78.           if (method_exists($user'isNotify')) { $notify $user->isNotify(); }
  79.           $admin false;
  80.           if (in_array("ROLE_ADMIN"$user->getRoles())) { $admin true; }
  81.   
  82.           $estilistas $em->getRepository(Estilistas::class)->findBy(['showed'=>true'company'=>$company]);
  83.           // $waitingList = $em->getRepository(WaitingList::class)->findBy(['company'=>$company]);
  84.           if ($estilistas) {
  85.             foreach ($estilistas as $stylist) {
  86.               $avatar 'avatarUser.png';
  87.               if ($stylist->getFotoPerfil()) 
  88.               {
  89.                 $avatar $company.'/'.$stylist->getFotoPerfil();
  90.               }
  91.               $dataStylist[] = [
  92.                 'id'      => $stylist->getId(),
  93.                 'enabled' => $stylist->getEnabled(),
  94.                 'nombre'  => $stylist->getNombre(),
  95.                 'foto'    => $avatar
  96.               ];
  97.             }
  98.           }
  99.   
  100.           if (isset($_COOKIE['lang']))
  101.           {
  102.             $language $_COOKIE['lang'];
  103.           }
  104.           else {
  105.             setcookie('lang'$language);
  106.           }
  107.           if ($request->request->get('views')) {
  108.             $views $request->request->get('views');
  109.           }
  110.           return $this->render('eventos/index.html.twig', [
  111.             // 'locale'=>$locale,
  112.             'views'       => $views,
  113.             'dataStylist' => $dataStylist,
  114.             'estilistas'  => $estilistas,
  115.             'userLang'    => $language,
  116.             'companyId'   => $company,
  117.             'logo'        => $logo,
  118.             'notify'      => $notify,
  119.             'admin'       => $admin,
  120.             'calStart'    => $calendarStart,
  121.             'calEnd'      => $calendarEnd,
  122.             'timer'       => $timer,
  123.             // "waitingList" => count($waitingList),
  124.             'lang'        => json_decode(file_get_contents('language/'.$language.'.json'))
  125.           ]);
  126.         }
  127.       }
  128.     /**
  129.      * @Route("/eventos", name="eventos", options={"expose"=true}) //MUESTRA EVENTOS EXISTENTES
  130.      */
  131.     public function eventos(Request $requestEntityManagerInterface $em)
  132.     {
  133.       if ($content $request->request->all()) 
  134.       {
  135.         $workerId $content['idWorker'];
  136.         $events=[];
  137.         $eventss=[];
  138.         $Sevents = [];
  139.         $eventos $em->getRepository(Eventos::class)->findBy(['estilistas'=>$workerId]);
  140.         foreach ($eventos as $evento)
  141.         {
  142.           if ($evento->getTotal() == 0
  143.           {
  144.             $totalToShow "";
  145.           }
  146.           else
  147.           {
  148.             $totalToShow $evento->getTotal()." €";
  149.           }
  150.           $clientId $evento->getClientes() ? $evento->getClientes()->getId() : 'deleted';
  151.           $events[]=[
  152.           'id'            => $evento->getId(),
  153.           'start'         => $evento->getStart()->format('Y-m-d H:i:s'),
  154.           'end'           => $evento->getEnd()->format('Y-m-d H:i:s'),
  155.           'color'         => $evento->getColor(),
  156.           'textColor'     => $evento->getTextColor(),
  157.           'total'         => $evento->getTotal(),
  158.           'comentario'    => $evento->getComentario(),
  159.           'id_cliente'    => $clientId,
  160.           'id_servicio'   => $evento->getServicios(),
  161.           'payment'       => $evento->getPayment(),
  162.           'id_producto'   => $evento->getSoldProducts(),
  163.           'id_estilista'  => $evento->getEstilistas()->getId(),
  164.           'madeBy'        => $evento->getMadeBy(),
  165.           'title'         => $evento->getKunde()."\n".$evento->getDescripcion()."\n".$totalToShow,
  166.           'principal'     => true,
  167.           'client'        => $evento->getKunde()
  168.           ];
  169.           
  170.           $color1 '#51AEF0';
  171.           $color2 '#51AEF1';//312f2f
  172.           if (!is_null($evento->getPayment())) {
  173.             // $color1 ='#1c7430';
  174.             $color2 '#4abe66';//'#0d3516';
  175.           }
  176.           if (!is_null($evento->getSStart())) {
  177.             $events[] =[ //linea de union
  178.                   'start' => $evento->getEnd()->format('Y-m-d H:i:s'),
  179.                   'end'   => $evento->getSStart()->format('Y-m-d H:i:s'),
  180.                   'color' => $color1,
  181.                   ];
  182.                 $events[] =[ // segundo tiempo
  183.                   'id'        => $evento->getId().'-2',
  184.                   'start'     => $evento->getSStart()->format('Y-m-d H:i:s'),
  185.                   'end'       => $evento->getSEnd()->format('Y-m-d H:i:s'),
  186.                   'color'     => $color2,
  187.                   'textColor' => '#000000',
  188.                   'title'     => $evento->getKunde(),
  189.                   'principal' => false
  190.                 ];
  191.           }
  192.         }
  193.         $response = new JsonResponse($events);
  194.         $response->headers->set('Content-Type''application/json');
  195.         return $response;
  196.       }
  197.     }
  198.     /**
  199.      * @Route("/event_click", name="eventClick", options={"expose"=true}) //MUETRA EL EVENTO CLICADO
  200.      */
  201.     public function eventClick(Request $requestEntityManagerInterface $em)
  202.     {
  203.       if ($request->isXmlHttpRequest())
  204.       {
  205.         $id $request->request->get('id');
  206.         // $objEvento = $resultado->objEvento;
  207.          $evento $em->getRepository(Eventos::class)->findOneBy(['id'=>$id]);
  208.          if (!is_null($evento))
  209.          {
  210.            $service "";
  211.            $servicios1 explode("-"$evento->getServicios());
  212.            $servicios2 explode(" / "$servicios1[1]);
  213.            $services = [];
  214.            for ($i=0$i <count($servicios2) ; $i++) //PRECIO DE CADA SERVICIOS SEGUN TAMAÑO DE PELO
  215.            {
  216.              $precio=0;
  217.              $totalProducts 0;
  218.              $listaProductos null;
  219.              $service $em->getRepository(Servicios::class)->findOneBy(['id'=>$servicios2[$i]]);
  220.              if (!is_null($service))
  221.              {
  222.                if ($servicios1[0] == "k") { $precio $service->getPCorto();}
  223.                elseif ($servicios1[0] == "m") { $precio $service->getPMedio();}
  224.                elseif ($servicios1[0] == "l") { $precio $service->getPLargo();}
  225.                $services[] = [
  226.                  'servId'     => $service->getId(),
  227.                  'servNombre' => $service->getServicio(),
  228.                  'servPrecio' => $precio,
  229.                  'servTime'   => $service->getTiempo()->format('H:i')
  230.                ];
  231.              }
  232.            }
  233.            if (!is_null($evento->getSoldProducts())) 
  234.            {
  235.               $productosVendidos $evento->getSoldProducts();
  236.               $totalProducts $productosVendidos->getTotal();
  237.               $prodquant $productosVendidos->getProductosId();
  238.               foreach ($prodquant as $prod
  239.               {
  240.                 $prodSplit explode('-'$prod);
  241.                 $prodId $prodSplit[0];
  242.                 $prodQuatity $prodSplit[1];
  243.                 $productos $em->getRepository(Productos::class)->findOneBy(['id'=>$prodId]);
  244.                 $totalPrice $productos->getPrecioVp() * $prodQuatity;
  245.                 $listaProductos[] = [
  246.                   'name'      => $productos->getNombre(),
  247.                   'quantity'  => $prodQuatity,
  248.                   'uniPrice'  => number_format($productos->getPrecioVp(), 2),
  249.                   'price'     => number_format($totalPrice2)
  250.                 ];
  251.               }
  252.            }
  253.           $sStart null;
  254.           $sEnd null;
  255.           if (!is_null($evento->getSStart())) {
  256.             $sStart $evento->getSStart()->format('Y-m-d H:i:s');
  257.             $sEnd $evento->getSEnd()->format('Y-m-d H:i:s');
  258.           }
  259.           $card $evento->getCard() ? $evento->getCard() : 0;
  260.           $cash $evento->getCash() ? $evento->getCash() : 0;
  261.           $giftCard $evento->getGiftCard() ? $evento->getGiftCard() : 0;
  262.           $madeAt '';
  263.           if ($evento->getMadeAt()) {
  264.             $madeAt $evento->getMadeAt()->format('d/m/y');
  265.           }
  266.           if ($evento->getClientes()) {
  267.             $clientId $evento->getClientes()->getId();
  268.             $clientName $evento->getClientes()->getNombre();
  269.             $clientPhone $evento->getClientes()->getTelefono();
  270.             $clientEmail $evento->getClientes()->getEmail();
  271.           }else{
  272.             $clientId 'deleted';
  273.             $clientName $evento->getKunde();
  274.             $clientPhone '';
  275.             $clientEmail '';
  276.           }
  277.           $clientId $evento->getClientes() ? $evento->getClientes()->getId() : 'deleted';
  278.           $respuesta=[
  279.           'id'               => $evento->getId(),
  280.           'id_cliente'       => $clientId,
  281.           'id_estilista'     => $evento->getEstilistas()->getId(),
  282.           'estilista'        => $evento->getEstilistas()->getNombre(),
  283.           'cliente'          => $clientName,
  284.           'telefono'         => $clientPhone,
  285.           'email'            => $clientEmail,
  286.           'start'            => $evento->getStart()->format('Y-m-d H:i:s'),
  287.           'end'              => $evento->getEnd()->format('Y-m-d H:i:s'),
  288.           'sStart'           => $sStart,
  289.           'sEnd'             => $sEnd,
  290.           'color'            => $evento->getColor(),
  291.           'textColor'        => $evento->getTextColor(),
  292.           'total'            => number_format($evento->getTotal(), 2),
  293.           'comentario'       => $evento->getComentario(),
  294.           'id_servicio'      => $evento->getServicios(),
  295.           'payment'          => $evento->getPayment(),
  296.           'card'             => $card,
  297.           'cash'             => $cash,
  298.           'giftCard'         => $giftCard,
  299.           "servicios"        => $services,
  300.           'id_productos'     => $totalProducts,
  301.           'detalleProductos' => $listaProductos,
  302.           'preference'       => $evento->getPreference(),
  303.           'madeAt'           => $madeAt
  304.           // 'title'=>$evento->getClientes()->getNombre()."\n".$service."\n".$evento->getTotal()." €"
  305.           ];
  306.           $response = new JsonResponse($respuestaResponse::HTTP_OK);
  307.          }
  308.          else
  309.          {
  310.            $jsonResponse = [
  311.              'error' => 'No event found'
  312.            ];
  313.            $response = new JsonResponse($jsonResponseResponse::HTTP_NOT_FOUND);
  314.          }
  315.       }
  316.       else
  317.       {
  318.         $jsonResponse = [
  319.           'error' => 'Bad request'
  320.         ];
  321.         $response = new JsonResponse($jsonResponseResponse::HTTP_BAD_REQUEST);
  322.       }
  323.       return $response;
  324.     }
  325.     /**
  326.      * @Route("/registro_evento", name="registroEvento", options={"expose"=true}) //REGISTRO DE UN NUEVO EVENTO
  327.      */
  328.     public function registroEvento(Request $requestEntityManagerInterface $em)
  329.     {
  330.       if ($request->isXmlHttpRequest())
  331.       {
  332.         $user $this->getUser();
  333.         if (method_exists($user'getCompany')) { $company$user->getCompany(); }
  334.         else{ $company $user; } 
  335.         $content $request->request->get('obj');
  336.         $now = new \DateTime('Europe/London');
  337.         $resultado json_decode($content);
  338.         $objEvento $resultado->objEvento;
  339.         // $accion = $resultado->accion;
  340.         // localizamos al cliente si existe, si no, lo creamos
  341.         $cliente $em->getRepository(Clientes::class)->findOneBy(['id'=>$objEvento->id_cliente]);
  342.         if (!is_null($cliente))
  343.         {
  344.           $clienteId $cliente;
  345.         }
  346.         else
  347.         {
  348.           $client = new Clientes();
  349.           $client->setNombre($objEvento->txtNombreCliente);
  350.           $client->setTelefono($objEvento->txtTelefonoCliente);
  351.           $client->setEmail($objEvento->txtEmailCliente);
  352.           $client->setCompany($company);
  353.           $client->setCreatedAt($now);
  354.           $em->persist($client);
  355.           $em->flush();
  356.           $clienteId $client;
  357.         }
  358.         //localizamos al empleado
  359.         $estilista $em->getRepository(Estilistas::class)->findOneBy(['id'=>$objEvento->id_estilista]);
  360.         if (is_null($estilista))
  361.         {
  362.           $estilistaId 1;
  363.         }
  364.         else
  365.         {
  366.           $estilistaId $estilista;
  367.         }
  368.         $descripcion "";
  369.         $realPrice 0;
  370.         $hours = new \DateTime('0000-00-00 00:00:00');
  371.         $serv1 explode("-"$objEvento->id_servicio);
  372.         $serv2 explode(" / "$serv1[1]);
  373.         for ($i=0$i <count($serv2)-$i++)
  374.         {
  375.           $serv $em->getRepository(Servicios::class)->findOneBy(['id'=>$serv2[$i]]);
  376.           if ($serv1[0] == 'k') {$pricing $serv->getPCorto();}
  377.           elseif ($serv1[0] == 'm') {$pricing $serv->getPMedio();}
  378.           elseif ($serv1[0] == 'l') {$pricing $serv->getPLargo();}
  379.           $descripcion .= $serv->getServicio()." / ";
  380.           $hour $serv->getTiempo()->format('H');
  381.           $min $serv->getTiempo()->format('i');
  382.           $hours->modify('+'.$hour.' hours');
  383.           $hours->modify('+'.$min.' minutes');
  384.           $rest '';
  385.           $realPrice $realPrice $pricing;
  386.         }
  387.         // $startFact = 0;
  388.         // $lastFact = $em->getRepository(Eventos::class)->lastEvent();
  389.         // if (!empty($lastFact->getInvoice()))
  390.         // {
  391.         //   $fact = $lastFact->getInvoice();
  392.         //   $nextFact = explode('-', $fact);
  393.         //   $newFact = $now->format('YmdH').'-'.($nextFact[1] + 1).'-'.$estilistaId->getId();
  394.         // }
  395.         // else
  396.         // {
  397.         //   $newFact = $now->format('ymd').'-'.$startFact.'-'.$estilistaId->getId();
  398.         // }
  399.         
  400.         // if ($clienteId == 2412 ||
  401.         //     $clienteId == 2414 ||
  402.         //     $clienteId == 2416 ||
  403.         //     $clienteId == 2418) 
  404.         // {
  405.         //   $preference = $em->getRepository(Preferencias::class)->findOneBy(['company'=>]);
  406.         //   $tStart = ;
  407.         //   $tEnd = ;
  408.         // }
  409.         // else
  410.         // {
  411.         //   $tStart = new \DateTime($objEvento->start);
  412.         //   $tEnd = new \DateTime($objEvento->end);  
  413.         // }
  414.         $sStart null;
  415.         $sEnd null;
  416.         if (!is_null($objEvento->sStart)) 
  417.         {
  418.           $sStart = new \DateTime($objEvento->sStart);
  419.           $sEnd = new \dateTime($objEvento->sEnd);
  420.         }
  421.         $startTime = new \DateTime($objEvento->start);
  422.         $endTime = new \DateTime($objEvento->end);
  423.         if ($objEvento->id_servicio != "k-0 /" ) { //es un servicio real
  424.           $endTime = new \DateTime($objEvento->start);
  425.           $hora $hours->format('H');
  426.           $minutos $hours->format('i');
  427.           $endTime->modify('+'.$hora.' hours');
  428.           $endTime->modify('+'.$minutos.' minutes');
  429.         }
  430.         else{ // botones alternativos
  431.           $preference $em->getRepository(Preferencias::class)->findOneBy(['company'=>$company->getId()]);
  432.           if ($preference) {
  433.             if ($objEvento->txtNombreCliente != "REST") {
  434.               $prime $startTime->format('Y-m-d');
  435.               $secu $endTime->format('Y-m-d');
  436.               $startTime = new \DateTime($prime.' '.$preference->getStartTime());
  437.               $endTime = new \DateTime($secu.' '.$preference->getEndTime()); 
  438.             }
  439.           }
  440.         }
  441.         $priceModify '';
  442.         if ($objEvento->total != $realPrice) {
  443.           $priceModify 'and total modified from '.$realPrice.' to '.$objEvento->total;
  444.         }
  445.         $mader $em->getRepository(Estilistas::class)->findOneBy(['id'=>$objEvento->madeBy]);
  446.         $evento = new Eventos();
  447.         $evento->setClientes($clienteId);
  448.         $evento->setEstilistas($estilistaId);
  449.         $evento->setStart($startTime);
  450.         $evento->setEnd($endTime);
  451.         $evento->setSStart($sStart);
  452.         $evento->setSEnd($sEnd);
  453.         $evento->setColor($objEvento->color);
  454.         $evento->setTextColor($objEvento->textColor);
  455.         $evento->setTotal($objEvento->total);
  456.         $evento->setComentario($objEvento->comentario);
  457.         $evento->setServicios($objEvento->id_servicio);
  458.         $evento->setKunde($clienteId->getNombre());
  459.         $evento->setDescripcion($descripcion);
  460.         $evento->setInvoice('');
  461.         $evento->setMadeBy($mader);
  462.         $evento->setMadeAt($now);
  463.         $evento->setPreference($objEvento->preference);    
  464.         
  465.         $em->persist($evento);
  466.         // $product = new SoldProducts();
  467.         // $product->setEstilistas($estilistaId);
  468.         // $product->setClientes($clienteId);
  469.         // $product->setNumeroFac();
  470.         // $product->setIdProductos();
  471.         // $product->setTotal($objEvento->totalProducto);
  472.         // $product->setPaymentMethod();
  473.         // $em->persist($product);
  474.         // $em->flush();
  475.         // $evento->setInvoice($now->format('ymd').'-'.$evento->getId());
  476.         $em->flush();
  477.         if ($evento->getId()) 
  478.         {
  479.           $waitingList $em->getRepository(WaitingList::class)->findOneBy(['cliente'=>$clienteId->getId()]);
  480.           if ($waitingList
  481.           {
  482.             $em->remove($waitingList);
  483.             $em->flush();
  484.           }
  485.           $activity = new Activity();
  486.           $activity->setCompany($company);
  487.           $activity->setEvent($evento->getId());
  488.           $activity->setAction('made');
  489.           $activity->setMadeBy($mader->getId());
  490.           $activity->setDate($now);
  491.           $activity->setDescription('new event '.$priceModify);
  492.           $em->persist($activity);
  493.           $em->flush();
  494.         }
  495.         $response = new JsonResponse(['msg'=> 'success''comp' => $company->getId()], Response::HTTP_OK);
  496.       }
  497.       else
  498.       {
  499.         $jsonResponse = [
  500.           'error' => 'Bad request'
  501.         ];
  502.         $response = new JsonResponse($jsonResponseResponse::HTTP_BAD_REQUEST);
  503.       }
  504.       return $response;
  505.     }
  506.     /**
  507.      * @Route("/modificar_evento", name="modificarEvento", options={"expose"=true}) //REGISTRO DE UN NUEVO EVENTO
  508.      */
  509.     public function modificarEvento(Request $requestEntityManagerInterface $em)
  510.     {
  511.       if ($request->isXmlHttpRequest())
  512.       {
  513.         $user $this->getUser();
  514.         if (method_exists($user'getCompany')) { $company$user->getCompany(); }
  515.         else{ $company $user; } 
  516.         $now = new \DateTime('Europe/London');
  517.         $content $request->request->get('obj');
  518.         $resultado json_decode($contenttrue);
  519.         $objEvento $resultado['objEvento'];
  520.         $evento $em->getRepository(Eventos::class)->findOneBy(['id'=>$objEvento['id']]);
  521.         $mader $em->getRepository(Estilistas::class)->findOneBy(['id'=>$objEvento['madeBy']]);
  522.         $activity =[];
  523.         
  524.         if (!is_null($evento))
  525.         {
  526.           if (!isset($objEvento['color'])) //drop - Reise
  527.           {
  528.             $fecha explode(" "$objEvento['start']);
  529.             if ($objEvento['principal'] == 'true'
  530.             {
  531.               if ($evento->getStart()->format('Y-m-d H:i:s') != $objEvento['start']) {
  532.                 $activity[]= 'Modified start time from '.$evento->getStart()->format('Y-m-d H:i:s').' to '.$objEvento['start'];
  533.               }
  534.               $evento->setStart(new \DateTime($objEvento['start']));
  535.               if ($evento->getEnd()->format('Y-m-d H:i:s') != $objEvento['end']) {
  536.                 $activity[]= 'Modified end time from '.$evento->getEnd()->format('Y-m-d H:i:s').' to '.$objEvento['end'];
  537.               }
  538.               $evento->setEnd(new \DateTime($objEvento['end']));
  539.               if (!is_null($evento->getSStart())) 
  540.               {
  541.                 $evento->setSstart(new \DateTime($fecha[0].' '.$evento->getSStart()->format('H:i:s')));  
  542.                 $evento->setSEnd(new \DateTime($fecha[0].' '.$evento->getSEnd()->format('H:i:s')));  
  543.               }
  544.             }
  545.             else 
  546.             {
  547.               if ($evento->getSStart()->format('Y-m-d H:i:s') != $objEvento['start']) {
  548.                 $activity[]= 'Modified second time from '.$evento->getSStart()->format('Y-m-d H:i:s').' to '.$objEvento['start'];
  549.               }
  550.               $evento->setSStart(new \DateTime($objEvento['start']));
  551.               $evento->setSEnd(new \DateTime($objEvento['end']));  
  552.               $evento->setStart(new \DateTime($fecha[0].' '.$evento->getStart()->format('H.i:s')));  
  553.               $evento->setEnd(new \DateTime($fecha[0].' '.$evento->getEnd()->format('H.i:s'))); 
  554.             }
  555.             $em->persist($evento);
  556.             $em->flush();
  557.           }
  558.           else
  559.           {
  560.             $descripcion "";
  561.             $realPrice 0;
  562.             $serv1 explode("-"$objEvento['id_servicio']);
  563.             $serv2 explode(" / "$serv1[1]);
  564.             for ($i=0$i <count($serv2)-$i++)
  565.             {
  566.               $serv $em->getRepository(Servicios::class)->findOneBy(['id'=>$serv2[$i]]);
  567.               if ($serv1[0] == 'k') {$pricing $serv->getPCorto();}
  568.               elseif ($serv1[0] == 'm') {$pricing $serv->getPMedio();}
  569.               elseif ($serv1[0] == 'l') {$pricing $serv->getPLargo();}
  570.               $descripcion .= $serv->getServicio()." / ";
  571.               $realPrice $realPrice $pricing;
  572.             }
  573.             if ($evento->getDescripcion() != $descripcion) {
  574.               $activity[]= 'Modified service from '.$evento->getDescripcion().' to '.$descripcion;
  575.             }
  576.             $cliente $em->getRepository(Clientes::class)->findOneBy(['id'=>$objEvento['id_cliente']]);
  577.             if (is_null($cliente))
  578.             {
  579.                 $cliente = new Clientes();
  580.                 $cliente->setNombre($objEvento['txtNombreCliente']);
  581.                 $cliente->setTelefono($objEvento['txtTelefonoCliente']);
  582.                 $cliente->setEmail($objEvento['txtEmailCliente']);
  583.                 $cliente->setCompany($company);
  584.                 $cliente->setCreatedAt($now);
  585.                 $em->persist($cliente);
  586.                 $em->flush();
  587.                 $activity[]= 'New unregistered customer added, and modified from '.$evento->getKunde().' to '.$objEvento['txtNombreCliente'];
  588.             }
  589.             else{
  590.               if ($evento->getClientes()->getId() != $cliente->getId()) {
  591.                 $activity[] = 'Customer modified from '.$evento->getKunde().' to '.$cliente->getNombre();
  592.               }
  593.             }
  594.             if (!is_null($objEvento['sStart'])) 
  595.             {
  596.               $objEvento['sStart'] = new \DateTime($objEvento['sStart']); 
  597.               $objEvento['sEnd'] = new \DateTime($objEvento['sEnd']); 
  598.             }
  599.             $estilista $em->getRepository(Estilistas::class)->findOneBy(['id'=>$objEvento['id_estilista']]);
  600.             $evento->setClientes($cliente);
  601.             if ($evento->getEstilistas() != $estilista) {
  602.               $activity[] = 'Stylist modified from '.$evento->getEstilistas().' to '.$estilista;
  603.               $evento->setEstilistas($estilista);
  604.             }
  605.             $evento->setStart(new \DateTime($objEvento['start']));
  606.             $evento->setEnd(new \DateTime($objEvento['end']));
  607.             $evento->setSStart($objEvento['sStart']);
  608.             $evento->setSEnd($objEvento['sEnd']);
  609.             if ($realPrice != $objEvento['total'] && $evento->getTotal() != $objEvento['total']) {
  610.               $activity[] = 'Total amount modified from '.$realPrice.' to '.$objEvento['total'];
  611.             }
  612.             $evento->setTotal($objEvento['total']);
  613.             if ($evento->getComentario() != $objEvento['comentario']) {
  614.               $activity[] = 'Comment modified from '.$evento->getComentario().' to '.$objEvento['comentario'];
  615.               $evento->setComentario($objEvento['comentario']);
  616.             }
  617.             $evento->setServicios($objEvento['id_servicio']);
  618.             $evento->setKunde($cliente->getNombre());
  619.             if ($evento->getPreference() != $objEvento['preference']) {
  620.               $activity[] = 'Modified preferred stylist';
  621.               $evento->setPreference($objEvento['preference']);
  622.             }
  623.             $evento->setDescripcion($descripcion);
  624.             if ($evento->getColor() !== "#1c7430")
  625.             {
  626.               $evento->setColor($objEvento['color']);
  627.               $evento->setTextColor($objEvento['textColor']);
  628.             }
  629.             // $evento->setProductos($objEvento->id_productos);
  630.             $em->persist($evento);
  631.             $em->flush();
  632.           }
  633.           if (count($activity) > 0) {
  634.             foreach ($activity as $action) {
  635.               $actividad = new Activity();
  636.               $actividad->setCompany($company);
  637.               $actividad->setEvent($evento->getId());
  638.               $actividad->setAction('modify');
  639.               $actividad->setMadeBy($mader->getId());
  640.               $actividad->setDate($now);
  641.               $actividad->setDescription($action);
  642.               $em->persist($actividad);
  643.               $em->flush();
  644.             }
  645.           }
  646.           $response = new JsonResponse(['mgs'=>'success''comp'=> $company->getId()], Response::HTTP_OK);
  647.         }
  648.         else
  649.         {
  650.           $jsonResponse = [
  651.             'error' => 'No event found'
  652.           ];
  653.           $response = new JsonResponse($objEventoResponse::HTTP_NOT_FOUND);
  654.         }
  655.       }
  656.       else
  657.       {
  658.         $jsonResponse = [
  659.           'error' => 'Bad request'
  660.         ];
  661.         $response = new JsonResponse($jsonResponseResponse::HTTP_BAD_REQUEST);
  662.       }
  663.       return $response;
  664.     }
  665.     /**
  666.      * @Route("/pagar_evento", name="pagarEvento",options={"expose"=true}) //REGISTRO DE UN NUEVO EVENTO
  667.      */
  668.     public function pagarEvento(Request $requestEntityManagerInterface $em)
  669.     {
  670.       $idSoldProducts null;
  671.       if ($request->isXmlHttpRequest())
  672.       {
  673.         $user $this->getUser();
  674.         if (method_exists($user'getCompany')) { $company$user->getCompany(); }
  675.         else{ $company $user; } 
  676.         $content $request->request->get('obj');
  677.         $resultado json_decode($content);
  678.         $idProducts $resultado->idProduct;
  679.         $objEvento $resultado->objEvento;
  680.         $mader $em->getRepository(Estilistas::class)->findOneBy(['id'=>$objEvento->madeBy]);
  681.         $now = new \DateTime('Europe/London');
  682.         // if (!is_null($objEvento->idSoldProducts) || !empty($objEvento->idSoldProducts))
  683.         // {
  684.         $idSoldProducts $em->getRepository(SoldProducts::class)->findOneBy(['id'=>$idProducts]);
  685.         // }
  686.         $evento $em->getRepository(Eventos::class)->findOneBy(['id'=>$objEvento->id]);
  687.         if (!is_null($evento))
  688.         {
  689.           if ($objEvento->formaPago == ""
  690.           {
  691.             if ($objEvento->giftCardUsed != ""
  692.             {
  693.               $evento->setPayment(4);
  694.               $giftcard $em->getRepository(GiftCard::class)->findOneBy(['id'=>$objEvento->giftCardUsed]);
  695.               if ($giftcard
  696.               {
  697.                 $total $objEvento->precioProd $objEvento->precioServ;
  698.                 // $total = $evento->getTotal();
  699.                 $totalGC $giftcard->getTotal();
  700.                 $resto $total $totalGC;
  701.                 if ($resto 
  702.                 {
  703.                   $forCash $resto;
  704.                   $em->remove($giftcard);
  705.                   $em->flush();
  706.                   $evento->setGiftCard($totalGC);
  707.                   if ($objEvento->txtCard != "") { $evento->setCard($objEvento->txtCard); $forCash $resto $objEvento->txtCard; }
  708.                   if ($objEvento->txtCash != "") { $evento->setCash($objEvento->txtCash); } 
  709.                 }
  710.                 else
  711.                 {
  712.                   $giftcard->setTotal($resto *-1);
  713.                   $evento->setGiftCard($totalGC - ($resto *-1));
  714.                 }
  715.               }
  716.             }
  717.             else
  718.             {
  719.               $evento->setPayment(3);
  720.               if ($objEvento->txtCard != "") { $evento->setCard($objEvento->txtCard); $forCash $evento->getTotal() - $objEvento->txtCard; }
  721.               if ($objEvento->txtCash != "") { $evento->setCash($objEvento->txtCash); }
  722.             }  
  723.           }
  724.           else
  725.           {
  726.             $evento->setPayment($objEvento->formaPago);
  727.           }
  728.           $evento->setColor('#1c7430');
  729.           $evento->setTextColor('#000000');
  730.           $evento->setSoldProducts($idSoldProducts);
  731.           $evento->setServicios($objEvento->id_servicio);
  732.           $em->persist($evento);
  733.           $actividad = new Activity();
  734.           $actividad->setCompany($company);
  735.           $actividad->setEvent($evento->getId());
  736.           $actividad->setAction('pay');
  737.           $actividad->setMadeBy($mader->getId());
  738.           $actividad->setDate($now);
  739.           $actividad->setDescription('Billed booking');
  740.           $em->persist($actividad);
  741.           $em->flush();
  742.           
  743.         }
  744.         $response = new JsonResponse(['msg'=> 'success''comp' => $company->getId()], Response::HTTP_OK);
  745.       }
  746.       else
  747.       {
  748.         $jsonResponse = [
  749.           'error' => 'Bad request'
  750.         ];
  751.         $response = new JsonResponse($jsonResponseResponse::HTTP_BAD_REQUEST);
  752.       }
  753.       return $response;
  754.     }
  755.     /**
  756.      * @Route("/eliminar_evento", name="eliminarEvento", options={"expose"=true}) //REGISTRO DE UN NUEVO EVENTO
  757.      */
  758.     public function eliminarEvento(Request $requestEntityManagerInterface $em)
  759.     {
  760.       if ($request->isXmlHttpRequest())
  761.       {
  762.         $user $this->getUser();
  763.         if (method_exists($user'getCompany')) { $company$user->getCompany(); }
  764.         else{ $company $user; } 
  765.         $now = new \Datetime('Europe/London');
  766.         $content $request->request->get('obj');
  767.         $resultado json_decode($content);
  768.         $objEvento $resultado->objEvento;
  769.         $evento $em->getRepository(Eventos::class)->findOneBy(['id'=>$objEvento->id]);
  770.         $stylist $em->getRepository(Estilistas::class)->findOneBy(['id'=>$objEvento->madeBy]);
  771.         if (!is_null($evento))
  772.         {
  773.           if ($evento->getClientes()) {
  774.             $eventDeleted = new BookingDeleted();
  775.             $eventDeleted->setClientes($evento->getClientes());
  776.             $eventDeleted->setEstilistas($evento->getEStilistas());
  777.             $eventDeleted->setSoldProducts($evento->getSoldProducts());
  778.             $eventDeleted->setKunde($evento->getKunde());
  779.             $eventDeleted->setStart($evento->getStart());
  780.             $eventDeleted->setEnd($evento->getEnd());
  781.             $eventDeleted->setSStart($evento->getSStart());
  782.             $eventDeleted->setSEnd($evento->getSEnd());
  783.             $eventDeleted->setColor($evento->getColor());
  784.             $eventDeleted->setTextColor($evento->getTextColor());
  785.             $eventDeleted->setTotal($evento->getTotal());
  786.             $eventDeleted->setComentario($evento->getComentario());
  787.             $eventDeleted->setDescripcion($evento->getDescripcion());
  788.             $eventDeleted->setServicios($evento->getServicios());
  789.             $eventDeleted->setInvoice($evento->getInvoice());
  790.             $eventDeleted->setPreference($evento->getPreference());
  791.             if ($evento->getPayment()) {
  792.               $eventDeleted->setPayment($evento->getPayment());
  793.             }
  794.             $eventDeleted->setCash($evento->getCash());
  795.             $eventDeleted->setCard($evento->getCard());
  796.             $eventDeleted->setGiftCard($evento->getGiftCard());
  797.             $eventDeleted->setMadeBy($evento->getMadeBy());
  798.             $eventDeleted->setDeletedBy($stylist);
  799.             $eventDeleted->setDeletedAt($now);
  800.             $eventDeleted->setCompany($company);
  801.             $em->persist($eventDeleted);
  802.           }
  803.           $em->remove($evento);
  804.           $em->flush();
  805.           $response = new JsonResponse(['mgs'=>'Event deleted''comp' => $company->getId()], Response::HTTP_OK);
  806.         }
  807.         else
  808.         {
  809.           $jsonResponse = [
  810.             'error' => 'No event found'
  811.           ];
  812.           $response = new JsonResponse($jsonResponseResponse::HTTP_NOT_FOUND);
  813.         }
  814.       }
  815.       else
  816.       {
  817.         $jsonResponse = [
  818.           'error' => 'Bad request'
  819.         ];
  820.         $response = new JsonResponse($jsonResponseResponse::HTTP_BAD_REQUEST);
  821.       }
  822.       return $response;
  823.     }
  824.     /**
  825.      * @Route("/autocomplet", name="autocomplet", options={"expose"=true})
  826.      */
  827.     public function autocomplet(Request $requestEntityManagerInterface $em)
  828.     {
  829.       if ($request->isXmlHttpRequest())
  830.       {
  831.         $user $this->getUser();
  832.         if (method_exists($user'getCompany')) { $company$user->getCompany()->getId(); }
  833.         else{ $company $user->getId(); } 
  834.         $content $request->request->get('name');
  835.         
  836.         $clientes $em->getRepository(Clientes::class)->findBy(['company'=>$company]);
  837.         $responseBody=[];
  838.         foreach ($clientes as $cliente)
  839.         {
  840.           // $pos = strstr($cliente->getNombre(), $inicioNombre); DEVUELVE A PARTIR DE LA LETRA INTRODUCIDA
  841.           if(is_numeric($content))
  842.           {
  843.             $pos strpos($cliente->getTelefono(), $content);
  844.             if ($pos !== false)
  845.             {
  846.               $createdAt '--/--/--';
  847.               if ($cliente->getCreatedAt()) {
  848.                 $createdAt $cliente->getCreatedAt()->format('d/m/Y');
  849.               }
  850.               $responseBody[] = [
  851.                 '1'         => $pos,
  852.                 'id'        => $cliente->getId(),
  853.                 'nombre'    => $cliente->getNombre(),
  854.                 'telefono'  => $cliente->getTelefono(),
  855.                 'email'     => $cliente->getEmail(),
  856.                 'createdAt' => $createdAt
  857.               ];
  858.             }
  859.           }
  860.           else
  861.           {
  862.             // if ($pos1 = strpos($content, 'å'))
  863.             // {
  864.             //   str_replace("å", "Å", $content);
  865.             // }
  866.             // if ($pos2 = strpos($content, 'æ'))
  867.             // {
  868.             //   str_replace("æ", "Æ", $content);
  869.             // }
  870.             // if ($pos3 = strpos($content, 'ø'))
  871.             // {
  872.             //   str_replace("ø", "Ø", $content);
  873.             // }
  874.             $pos stripos($cliente->getNombre(), $content); // DEVUELVE LA POSICIÓN DE LA LETRA INTRODUCIDA
  875.             if ($pos !== false)
  876.             {
  877.               $createdAt '--/--/--';
  878.               if ($cliente->getCreatedAt()) {
  879.                 $createdAt $cliente->getCreatedAt()->format('d/m/Y');
  880.               }
  881.               $responseBody[] = [
  882.                 '1'=>$pos,
  883.                 'id'=>$cliente->getId(),
  884.                 'nombre'=>$cliente->getNombre(),
  885.                 'telefono'=>$cliente->getTelefono(),
  886.                 'email'=>$cliente->getEmail(),
  887.                 'createdAt' => $createdAt
  888.               ];
  889.             }
  890.           }
  891.         }
  892.         $response = new JsonResponse($responseBody);
  893.       }
  894.       else
  895.       {
  896.         $jsonResponse = [
  897.           'error'=> "Bad request"
  898.         ];
  899.         $response = new JsonResponse($jsonResponse);
  900.       }
  901.       return $response;
  902.     }
  903.     /**
  904.      * @Route("/worker_list", name="workerList", options={"expose"=true})
  905.      */
  906.     public function workerList(Request $requestEntityManagerInterface $em)
  907.     {
  908.       if ($request->isXmlHttpRequest()) 
  909.       {
  910.         $user $this->getUser();
  911.         if (method_exists($user'getCompany')) { $company$user->getCompany()->getId(); }
  912.         else{ $company $user->getId(); } 
  913.         $workers $em->getRepository(Estilistas::class)->findBy(['company'=>$company]);
  914.         foreach ($workers as $worker)
  915.         {
  916.           if ( $worker->getEnabled() == true
  917.           {
  918.             if ($worker->getId() != $request->query->get('worker')) {
  919.               $lista[] =[
  920.                 'id'=>$worker->getId(),
  921.                 'nombre'=>$worker->getNombre()
  922.               ];
  923.             }
  924.           }
  925.         }
  926.         return new JsonResponse($lista);
  927.       }
  928.       else
  929.       {
  930.         throw new Exception("Error Processing Request"1);
  931.       }
  932.     }
  933.     /**
  934.      * @Route("/dropIn", name="dropIn", options={"expose"=true}) //BLOQUEA LOS IMPUTS DEL CLIENTE DEJANDO DROPIN COMO DEFENIDO
  935.      */
  936.     public function dropIn(Request $requestEntityManagerInterface $em)
  937.     {
  938.       if ($request->isXmlHttpRequest())
  939.       {
  940.         $content $request->request->get('id');
  941.         $dropIn $em->getRepository(Clientes::class)->findOneBy(['nombre'=>$content]);
  942.         $jsonResponse = [
  943.           'id'=>$dropIn->getId(),
  944.           'nombre'=>$dropIn->getNombre(),
  945.           'telefono'=>$dropIn->getTelefono(),
  946.           'email'=>$dropIn->getEmail()
  947.         ];
  948.         $response = new JsonResponse($jsonResponse);
  949.       }
  950.       return $response;
  951.     }
  952.     /**
  953.      * @Route("/eliminar_serv_de_lista", name="eliminarServDeLista", options={"expose"=true})
  954.      */
  955.     public function eliminarServDeLista(Request $requestEntityManagerInterface $em)
  956.     {
  957.       if ($request->isXmlHttpRequest())
  958.       {
  959.         $content $request->request->all(); 
  960.         $serv $content['serv'];
  961.         $size $content['size'];
  962.         $precio 0;
  963.         $newTotal 0;
  964.         $list = [];
  965.         // $splited = explode("&", $content);
  966.         if (!empty($serv))
  967.         {
  968.           // $ids = explode(",", $serv);
  969.           for ($i=0$i <count($serv)-$i++)
  970.           {
  971.             $service $em->getRepository(Servicios::class)->findOneBy(['id'=>$serv[$i]]);
  972.             if ($size === "k") { $precio $service->getPCorto(); }
  973.             if ($size === "m") { $precio $service->getPMedio(); }
  974.             if ($size === "l") { $precio $service->getPLargo(); }
  975.             $newTotal +=$precio;
  976.             $list[] = [
  977.               'id'=>$service->getId(),
  978.               'para'=>$service->getPara(),
  979.               'servicio'=>$service->getServicio(),
  980.               'tamanio'=>$size,
  981.               'precio'=>$precio,
  982.               'tiempo'=>$service->getTiempo()->format('H:i')
  983.             ];
  984.           }
  985.           $response = new JsonResponse(['list'=>$list'total'=>$newTotal]);
  986.         }
  987.         else
  988.         {
  989.           $response = new JsonResponse(["list"=>'No data']);
  990.         }
  991.       }
  992.       else
  993.       {
  994.         $response = new JsonResponse(["error"=>'Bad request']);
  995.       }
  996.       return $response;
  997.     }
  998.     /**
  999.      * @Route("/delete_s_t", name="deleteST", options={"expose"=true})
  1000.      */
  1001.     public function deleteST(Request $requestEntityManagerInterface $em)
  1002.     {
  1003.       if ($request->isXmlHttpRequest()) {
  1004.         $lang self::getLanguage();
  1005.         $idEvent $request->request->get('id');
  1006.         $evento $em->getRepository(Eventos::class)->findOneBy(['id'=>$idEvent]);
  1007.         if (!is_null($evento)) {
  1008.           $evento->setSStart(null);
  1009.           $evento->setSEnd(null);
  1010.           $em->flush();
  1011.           $response true;
  1012.         }
  1013.         else{
  1014.           $response false;
  1015.         }
  1016.         return new JsonResponse(['response'=>$response'lang'=>$lang]);
  1017.       }
  1018.       else{
  1019.         throw new Exception("Error Processing Request"1);
  1020.       }
  1021.     }
  1022.     /**
  1023.      * @Route("/check_admin_pass", name="checkAdminPass", options={"expose"=true})
  1024.      */
  1025.     public function checkAdminPass(Request $requestEntityManagerInterface $em)
  1026.     {
  1027.       if ($request->isXmlHttpRequest()) {
  1028.         $response null;
  1029.         $password $request->request->get('pass');
  1030.         $pass hash('sha256'$password); 
  1031.         $admin $em->getRepository(Estilistas::class)->findOneBy(['code'=>$pass]);
  1032.         if ($admin) {
  1033.           if (in_array("ROLE_ADMIN"$admin->getRoles())) 
  1034.           {
  1035.             $response true;
  1036.           }
  1037.           else{
  1038.             $response false;
  1039.           }
  1040.         }
  1041.         return new JsonResponse(['response'=>$response]);
  1042.       }
  1043.       else{
  1044.         throw new Exception("Error Processing Request"1);
  1045.       }
  1046.     }
  1047.     /**
  1048.      * @Route("/change_size_service", name="changeSizeService", options={"expose"=true})
  1049.      */
  1050.     public function changeSizeService(Request $requestEntityManagerInterface $em)
  1051.     {
  1052.       if ($request->isXmlHttpRequest()) {
  1053.         $content $request->request->all();
  1054.         $size $content['newSize'];
  1055.         $newTotal 0;
  1056.         for ($i=0$i <count($content['servId']) -$i++) 
  1057.         {
  1058.           $service $em->getRepository(Servicios::class)->findOneBy(['id'=>$content['servId'][$i]]);
  1059.           if ($size === "k") { $precio $service->getPCorto(); }
  1060.           if ($size === "m") { $precio $service->getPMedio(); }
  1061.           if ($size === "l") { $precio $service->getPLargo(); }
  1062.           $newTotal +=$precio;
  1063.           $servicios[]=[
  1064.             'id'=>$service->getId(),
  1065.             'para'=>$service->getPara(),
  1066.             'servicio'=>$service->getServicio(),
  1067.             'tamanio'=>$size,
  1068.             'precio'=>$precio,
  1069.             'tiempo'=>$service->getTiempo()->format('H:i')
  1070.           ];
  1071.         }
  1072.         return new JsonResponse(['list'=>$servicios'total'=>$newTotal]);
  1073.       }
  1074.       else{
  1075.         throw new Exception("Error Processing Request"1);
  1076.       }
  1077.     }
  1078.     /**
  1079.      * @Route("/if_kunde_exist", name="ifKundeExist", options={"expose"=true})
  1080.      */
  1081.     public function ifKundeExist(Request $requestEntityManagerInterface $em)
  1082.     {
  1083.       if ($request->isXmlHttpRequest()) {
  1084.         $language "es";
  1085.         if (isset($_COOKIE['lang']))
  1086.         {
  1087.           $language $_COOKIE['lang'];
  1088.         }
  1089.         $package = new Package(new EmptyVersionStrategy());
  1090.         $urlLang $package->getUrl('language/'.$language.'.json');
  1091.         $lang json_decode(file_get_contents($urlLang));
  1092.   
  1093.         if ($content $request->getContent())
  1094.         {
  1095.   
  1096.           $clientes $em->getRepository(Clientes::class)->findAll();
  1097.           foreach ($clientes as $cliente)
  1098.           {
  1099.             if ($cliente->getNombre() === $content)
  1100.             {
  1101.               return new JsonResponse(['verify'=>true'lang'=>$lang]);
  1102.               break;
  1103.             }
  1104.           }
  1105.           return new JsonResponse(['verify'=>false'lang'=>$lang]);
  1106.         }
  1107.         return new JsonResponse(['verify'=>false'lang'=>$lang]);
  1108.       }
  1109.       // asset json del idioma
  1110.     }
  1111.     /**
  1112.      * @Route("/change_stylit_booking", name="changeStylistBooking", options={"expose"=true})
  1113.      */
  1114.     public function changeStylistBooking(Request $requestEntityManagerInterface $em)
  1115.     {
  1116.       $response $this->redirectToRoute('app_logout');
  1117.       if ($request->isXmlHttpRequest()) {
  1118.         if ($content $request->request->all())
  1119.         {
  1120.           $newStylist $em->getREpository(Estilistas::class)->findOneBy(['id'=>$content['newStylist']]);
  1121.           $booking $em->getRepository(Eventos::class)->findOneBy(['id'=>$content['eventoId']]);
  1122.           if ($booking) {
  1123.             if ($newStylist) {
  1124.               $booking->setEstilistas($newStylist);
  1125.               $em->flush();
  1126.               $response = new JsonResponse(['verify'=>true]);
  1127.             }else{
  1128.             $response = new JsonResponse(['verify'=>false'msg'=>'Stylist not found']);
  1129.             }
  1130.           }else{
  1131.             $response = new JsonResponse(['verify'=>false'msg'=>'Booking not found']);
  1132.           }
  1133.         }else{
  1134.           $response = new JsonResponse(['verify'=>false'msg'=>'Bad request']);
  1135.         }
  1136.       }
  1137.       return $response;
  1138.     }
  1139.     /**
  1140.      * @Route("/info_booking", name="infoBooking", options={"expose"=true})
  1141.      */
  1142.     public function infoBooking(Request $requestEntityManagerInterface $em)
  1143.     {
  1144.       if($request->isXmlHttpRequest())
  1145.       {
  1146.         $lang self::getLanguage();
  1147.         $event $request->request->get('event');
  1148.         $user $this->getUser();
  1149.         if (method_exists($user'getCompany')) { $company$user->getCompany()->getId(); }
  1150.         else{ $company $user->getId(); } 
  1151.         $result=[];
  1152.         $activity $em->getRepository(Activity::class)->findBy(['company'=>$company'event'=>$event], ['id'=>'DESC']);
  1153.         if ($activity) {
  1154.           foreach ($activity as $log) {
  1155.             $madeBy $em->getRepository(Estilistas::class)->findOneBy(['id'=>$log->getMadeBy()]);
  1156.             $result[]=[
  1157.               'madeBy'      => $madeBy->getNombre().' '.$madeBy->getApellidos(),
  1158.               'action'      => $log->getAction(),
  1159.               'date'        => $log->getDate()->format('d-M-Y'),
  1160.               'description'  => $log->getDescription()
  1161.             ];
  1162.           }
  1163.         }
  1164.         return new JsonResponse(['result'=>$result'lang'=>$lang]);
  1165.       }else{
  1166.         return $this.redirectToRoute('logout');
  1167.       }
  1168.     }
  1169.     /**
  1170.      * @Route("/rebooking", name="rebooking", options={"expose"=true})
  1171.      */
  1172.     public function rebooking(Request $requestEntityManagerInterface $em)
  1173.     {
  1174.       if($request->isXmlHttpRequest())
  1175.       {
  1176.         $user $this->getUser();
  1177.         if (method_exists($user'getCompany')) { $company$user->getCompany()->getId(); }
  1178.         else{ $company $user->getId(); } 
  1179.         $result = [];
  1180.         // $data = explode(",", $request->getContent());
  1181.         $currentWeek $request->request->get('semana');//$data[0];
  1182.         $totalHoras $request->request->get('horas');//$data[1];
  1183.         $now = new \DateTime();
  1184.         $week $now->format('W');
  1185.   
  1186.         if ($currentWeek != ""
  1187.         {
  1188.           $year $now->format('Y');
  1189.           if ($currentWeek 52
  1190.           {
  1191.             $currentWeek 1;
  1192.             $year intval($year) +1;  
  1193.           }
  1194.           if ($currentWeek 1
  1195.           {
  1196.             $currentWeek 52;
  1197.             $year intval($year) -1;  
  1198.   
  1199.           }
  1200.           // $moth= clone $now->format('m');
  1201.           $date date_isodate_set($now$year$currentWeek);
  1202.           $fecha $date->format('Y-m-d');
  1203.           $now = new \DateTime($fecha);
  1204.           $week $now->format('W'); 
  1205.         }
  1206.         
  1207.         $workers $em->getRepository(Estilistas::class)->findBy(['enabled'=> true'showed'=>true'company'=>$company]);
  1208.         foreach ($workers as $worker//FOR WORKER
  1209.         {
  1210.           $timeTable $worker->getTimeTable();
  1211.           // $timeTable = explode(",", $worker->getTimeTable());
  1212.           // $timeTableStart = $timeTable[0];
  1213.           // $timeTableEnd = $timeTable[1];
  1214.           $from = clone $now->modify('Monday this week');
  1215.           $to = clone $now->modify('Sunday this week');
  1216.           $dateFrom $from;
  1217.           $dateTo $to;
  1218.           $from->modify('-1 days');
  1219.   
  1220.           $vistos=[];
  1221.           for ($d=0$d $d++) //BUCLE DE DIAS
  1222.           
  1223.             $dia $d 1;
  1224.             if ($dia == 7) { $dia=0; }
  1225.             $existTime1 false;
  1226.             $laHora = [];
  1227.             $elDia = [];
  1228.             $fechaDeTurno = [];
  1229.             $diaDeTurno = clone $from->modify('+1 days');
  1230.             $desde $diaDeTurno->format('Y-m-d 00:00:00');
  1231.             $hasta $diaDeTurno->format('Y-m-d 23:59:59');
  1232.             
  1233.             $usedTime $em->getRepository(Eventos::class)->findEvents($desde$hasta$worker->getId());
  1234.             $horaInicio explode(":"$timeTable[$dia]['start']);
  1235.             $horafin explode(":"$timeTable[$dia]['end']);
  1236.             for ($h=$horaInicio[0]; $h <= $horafin[0]; $h++) //BUCLE DE HORAS
  1237.             {
  1238.               $diaEnCurso $diaDeTurno->format('d-M-Y');
  1239.               for ($m=1$m <= $m++) //BUCLE DE MINUTOS 
  1240.               {
  1241.                 if ($m == 1) {$min "00";}
  1242.                 if ($m == 2) {$min "30";}
  1243.                 $hour intval($h.$min);
  1244.   
  1245.                 $checkTime str_replace(":"""$timeTable[$dia]['end']);
  1246.                 if ((intval($checkTime) -100) < $hour) { break; }
  1247.   
  1248.                 if (count($usedTime) <= 0// NO HAY BOOKINGS DE ESTE WORKER, SE INSERTAN TODAS LAS HORAS 
  1249.                 {
  1250.                   $existTime1 true;
  1251.                   $elDia[] = $diaDeTurno->format('d-M-Y');
  1252.                   $fechaDeTurno[] = $diaDeTurno->format('Y-m-d '.$h.':'.$min);
  1253.                   $laHora[] = $diaDeTurno->format($h.':'.$min);
  1254.                 }
  1255.                 else
  1256.                 {
  1257.                   $existTime2 false;
  1258.                   $diasPedientes"";
  1259.                   $horasPendientes ""
  1260.                   for ($b=0$b count($usedTime) ; $b++) //BUCLE DE BOOKINGS
  1261.                   
  1262.                     
  1263.                     $horaStart intval($usedTime[$b]['start']->format('Hi'));
  1264.                     $horaEnd intval($usedTime[$b]['end']->format('Hi'));
  1265.     
  1266.                     if (in_range($hour$horaStart$horaEnd)) 
  1267.                     {
  1268.                       $existTime2 false;
  1269.                       break ;
  1270.                     }
  1271.                     else
  1272.                     {
  1273.     
  1274.                       if (!in_array($worker->getId().$usedTime[$b]['start']->format('Y-m-d '.$h.':'.$min.':00'), $vistos)) 
  1275.                       {
  1276.                         $vistos[]=$worker->getId().$usedTime[$b]['start']->format('Y-m-d '.$h.':'.$min.':00');                  
  1277.                         if ($h == 9// SI ES LA PRIMERA HORA
  1278.                         {
  1279.                           $next $b;
  1280.                           $fechaAcomparar $usedTime[$b]['start']->format('Y-m-d '.$h.':'.$min.':00');
  1281.                           $horaInicial= new \DateTime($fechaAcomparar);
  1282.                           $totalTimeServ $horaInicial->diff($usedTime[$next]['start']);
  1283.                           $totalTimeServ $totalTimeServ->format("%h.%i");
  1284.                           $totalHoras str_replace(":""."$totalHoras);
  1285.                           if (floatval($totalHoras) <= floatval($totalTimeServ))
  1286.                           {
  1287.                             $existTime1 true;
  1288.                             $elDia[] = $usedTime[$b]['start']->format('d-M-Y');
  1289.                             $fechaDeTurno[] = $diaDeTurno->format('Y-m-d '.$h.':'.$min);
  1290.                             $laHora[] = $usedTime[$b]['start']->format($h.':'.$min);
  1291.                             break;
  1292.                           }
  1293.                         }
  1294.                         else //($b == 0) // SI ES EL PRIMER BOOKING
  1295.                         {
  1296.                           if (($b+1) != count($usedTime) && ($b+1) < count($usedTime)) // SI HAY SIGUIENTE BOOKING
  1297.                           //NO HACER INSERCIÓN AQUÍ SOLO RECOGER EL INTERVALO DE TIEMPO
  1298.                             $next $b+1;
  1299.                             $totalTimeServ $usedTime[$b]['end']->diff($usedTime[$next]['start']);
  1300.                             $totalTimeServ $totalTimeServ->format("%h.%i");
  1301.                             $totalHoras str_replace(":""."$totalHoras);
  1302.                             if (floatval($totalHoras) <= floatval($totalTimeServ)) //COMPARAMOS HORA REQUERIA CON HORA DISPONIBLE
  1303.                             {
  1304.                               $existTime2 true;
  1305.                               $diasPedientes $usedTime[$b]['start']->format('d-M-Y');
  1306.                               $fechaDeTurno[] = $diaDeTurno->format('Y-m-d '.$h.':'.$min);
  1307.                               $horasPendientes $usedTime[$b]['start']->format($h.':'.$min);
  1308.                             }
  1309.                             else
  1310.                             { // SE ELIMINA DE VISTOS SI NO HAY INTERVALO, PARA QUE VUELVA A ENTRAR
  1311.                               $clave array_search($worker->getId().$usedTime[$b]['start']->format('Y-m-d '.$h.':'.$min.':00'), $vistos);
  1312.                               unset($vistos[$clave]);
  1313.                             }
  1314.                           }
  1315.                           else // ES EL ULTIMO BOOKING
  1316.                           {
  1317.                             $horaFinal $usedTime[$b]['end']->format('Y-m-d '.$timeTable[$dia]['end'].':00');
  1318.                             $endOfTime = new \DateTime($horaFinal);
  1319.                             $lastTimeAble $usedTime[$b]['end']->diff($endOfTime);
  1320.                             $totalTimeServ $lastTimeAble->format("%h.%i");
  1321.                             $totalHoras str_replace(":""."$totalHoras);
  1322.                             if (floatval($totalHoras) <= floatval($totalTimeServ)) 
  1323.                             {
  1324.                               $existTime1 true;
  1325.                               $elDia[] = $usedTime[$b]['start']->format('d-M-Y');
  1326.                               $fechaDeTurno[] = $diaDeTurno->format('Y-m-d '.$h.':'.$min);
  1327.                               $laHora[] = $usedTime[$b]['start']->format($h.':'.$min);
  1328.                               break;
  1329.                             }
  1330.                           }
  1331.                         }                  
  1332.                         // else
  1333.                         // {
  1334.                         //   $existTime1 = true;
  1335.                         //   $elDia[] = $usedTime[$b]['start']->format('d-M-Y');
  1336.                         //   $laHora[] = $usedTime[$b]['start']->format($h.':'.$min);
  1337.                         // }
  1338.                       
  1339.                     }
  1340.                   }//for bookings
  1341.                   if ($existTime2
  1342.                   {
  1343.                     $existTime1 true;
  1344.                     $elDia[] = $diasPedientes;
  1345.                     $laHora[] = $horasPendientes;
  1346.                   }
  1347.                 }
  1348.                 
  1349.               } //for minutos
  1350.             }//for horas
  1351.             if ($worker->getFotoPerfil()) {
  1352.               $fotoPerfil $company.'/'.$worker->getFotoPerfil();
  1353.             }
  1354.             else{
  1355.               $fotoPerfil 'avatarUser.png';
  1356.             }
  1357.             
  1358.             if ($existTime1
  1359.             {
  1360.               for ($w=0$w <count($elDia) ; $w++) 
  1361.               { 
  1362.                 $result[$worker->getNombre().','.$fotoPerfil][$elDia[$w]][]= [$laHora[$w], $fechaDeTurno[$w], $worker->getId(), $totalHoras];
  1363.               }
  1364.             }
  1365.             else 
  1366.             {
  1367.               $result[$worker->getNombre().','.$fotoPerfil][$diaEnCurso][]= 'no data';
  1368.             }
  1369.           }//for dias
  1370.   
  1371.         }//form worker
  1372.         
  1373.         $response = new JsonResponse([$result$week]);
  1374.         return $response;
  1375.       }
  1376.     }
  1377.     
  1378.   private function checkCompany($em){
  1379.     $user $this->getUser();
  1380.     if (!$user) {
  1381.       return $this->redirecToRuote('app_logout');
  1382.     }else{
  1383.       $now = new \DateTime();
  1384.       if (method_exists($user'getEnabled')){
  1385.         if ($now $user->getCompany()->getAbono() && $user->getCompany()->getAbono() != null) {
  1386.           $user->getCompany()->setStatus(0);
  1387.           $em->flush();
  1388.           return true;
  1389.         }else {
  1390.           return false;
  1391.         }  
  1392.       }else{
  1393.         if ($now $user->getAbono()) {
  1394.           $user->setStatus(0);
  1395.           $em->flush();
  1396.           return true;    
  1397.         }else{
  1398.           return false;
  1399.         }
  1400.       }
  1401.     }  
  1402.   }    
  1403.     
  1404. }
  1405.     
  1406.   function in_range($num$start$end)
  1407.   {
  1408.     if( $num $end AND $num >= $start ) return true;
  1409.     return false;
  1410.   }
  1411. // namespace App\Controller;
  1412. // use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  1413. // use Symfony\Component\HttpFoundation\Response;
  1414. // use Symfony\Component\Routing\Annotation\Route;
  1415. // class EventosController extends AbstractController
  1416. // {
  1417. //     #[Route('/eventos', name: 'app_eventos')]
  1418. //     public function index(): Response
  1419. //     {
  1420. //         return $this->render('eventos/index.html.twig', [
  1421. //             'controller_name' => 'EventosController',
  1422. //         ]);
  1423. //     }
  1424. // }