src/Controller/ApiController.php line 158

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Equipo;
  4. use App\Entity\Evento;
  5. use App\Entity\Grupo;
  6. use App\Entity\Grupomenu;
  7. use App\Entity\GrupomenuMenu;
  8. use App\Entity\Justificacion;
  9. use App\Entity\Menu;
  10. use App\Entity\Persona;
  11. use App\Entity\RegistroCasino;
  12. use App\Repository\PuertaRepository;
  13. use DateTimeZone;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\Form\Extension\DataCollector\Proxy\ResolvedTypeFactoryDataCollectorProxy;
  16. use Symfony\Component\HttpFoundation\JsonResponse;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\Response;
  19. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. use App\Repository\PersonaRepository;
  22. use ZipArchive;
  23. class ApiController extends AbstractController
  24. {
  25.     /**
  26.      * @Route("/api/personas/{serial}/{timestamp}", name="api_get_personas")
  27.      */
  28.     public function getAll($serial$timestampPersonaRepository $personaRepository): JsonResponse
  29.     {
  30.         $personas $personaRepository->findByTimestamp($timestamp);
  31.         $data = [];
  32.         foreach ($personas as $persona) {
  33.             $data[] = [
  34.                 'rut' => $persona->getRut(),
  35.                 'dv' => $persona->getDv(),
  36.                 'activo' => $persona->getActivo(),
  37.                 'updatedat' => $persona->getUpdatedAt()->getTimestamp(),
  38.                 'pin' => $persona->getPin(),
  39.             ];
  40.         }
  41.         return new JsonResponse($dataResponse::HTTP_OK);
  42.     }
  43.     /**
  44.      * @Route("/api/personasfoto/{ip}/{timestamp}", name="api_get_foto_personas")
  45.      */
  46.     public function getAllFoto($ip$timestampPersonaRepository $personaRepository): JsonResponse
  47.     {
  48.         $personas $personaRepository->findByTimestamp($timestamp);
  49.         $data = [];
  50.         foreach ($personas as $persona) {
  51.             if ($ip == 'control') {
  52.                 $porticos $persona->getPorticos();
  53.                 $array_porticos = [];
  54.                 foreach ($porticos as $portico) {
  55.                     $array_porticos[] = $portico->getNombre();
  56.                 }
  57.                 if (in_array('cerezas'$array_porticos)) {
  58.                     $data[] = [
  59.                         'rut' => $persona->getRut(),
  60.                         'dv' => $persona->getDv(),
  61.                         'activo' => $persona->getActivo(),
  62.                         'updatedat' => $persona->getUpdatedAt()->getTimestamp(),
  63.                         'foto' => $persona->getFoto(),
  64.                         'nombre' => $persona->getFullName(),
  65.                     ];
  66.                 }
  67.             } else {
  68.                 $data[] = [
  69.                     'rut' => $persona->getRut(),
  70.                     'dv' => $persona->getDv(),
  71.                     'activo' => $persona->getActivo(),
  72.                     'updatedat' => $persona->getUpdatedAt()->getTimestamp(),
  73.                     'foto' => $persona->getFoto(),
  74.                     'nombre' => $persona->getFullName(),
  75.                 ];
  76.             }
  77.         }
  78.         return new JsonResponse($dataResponse::HTTP_OK);
  79.     }
  80.     /**
  81.      * @Route("/api/puertas/{serial}/{timestamp}", name="api_get_personas_en_puerta")
  82.      */
  83.     public function getAllPuerta($serial$timestampPersonaRepository $personaRepositoryPuertaRepository $puertaRepository): JsonResponse
  84.     {
  85.         $puerta $puertaRepository->findOneBySerial($serial);
  86.         $personas $puerta->getPersonasAutorizadas();
  87.         $data = [];
  88.         foreach ($personas as $persona) {
  89.             if ($persona->getPin() != "" && $persona->getActivo()) {
  90.                 $data[] = [
  91.                     'rut' => $persona->getRut(),
  92.                     'dv' => $persona->getDv(),
  93.                     'activo' => $persona->getActivo(),
  94.                     'updatedat' => $persona->getUpdatedAt()->getTimestamp(),
  95.                     'pin' => $persona->getPin(),
  96.                 ];
  97.             }
  98.         }
  99.         return new JsonResponse($dataResponse::HTTP_OK);
  100.     }
  101.     /**
  102.      * @Route("/api/eventos/{serial}", methods={"POST"})
  103.      */
  104.     public function newEventos($serialRequest $request)
  105.     {
  106.         $entityManager $this->getDoctrine()->getManager();
  107.         $data json_decode($request->getContent(), true);
  108.         $equipo $this->getDoctrine()->getRepository(Equipo::class)->findOneBySerial($serial);
  109.         $control 0;
  110.         foreach ($data as $row) {
  111.             $persona $this->getDoctrine()->getRepository(Persona::class)->findOneByRut($row[1]);
  112.             $evento = new Evento();
  113.             if ($persona)
  114.                 $evento->setPersona($persona);
  115.             if ($equipo)
  116.                 $evento->setEquipo($equipo);
  117.             $evento->setFecha(\DateTime::createFromFormat("Y-m-d H:i:s.u"$row[2]));
  118.             $evento->setEntrada($row[4]);
  119.             $evento->setAutorizado($row[5]);
  120.             $evento->setQr($row[3]);
  121.             $evento->setIdInterno($row[0]);
  122.             $entityManager->persist($evento);
  123.             $control $row[0];
  124.         }
  125.         $entityManager->flush();
  126.         return new JsonResponse($controlResponse::HTTP_OK);
  127.     }
  128.     /**
  129.      * @Route("/api/eventos_realtime/{ip}", methods={"POST"})
  130.      */
  131.     public function newEventosRealtime($ipRequest $request)
  132.     {
  133.         $entityManager $this->getDoctrine()->getManager();
  134.         $data json_decode($request->getContent(), true);
  135.         $equipo $this->getDoctrine()->getRepository(Equipo::class)->findOneByIp($ip);
  136.         $control 0;
  137.         $rut $request->request->get('rut'null);
  138.         $timestamp $request->request->get('timestamp'null);
  139.         $persona $this->getDoctrine()->getRepository(Persona::class)->findOneByRut($rut);
  140.         $evento = new Evento();
  141.         if ($persona)
  142.             $evento->setPersona($persona);
  143.         if ($equipo)
  144.             $evento->setEquipo($equipo);
  145.         $datetime = new \DateTime();
  146.         $datetime->setTimestamp($timestamp);
  147.         $evento->setFecha($datetime);
  148.         //evaluar entrada
  149.         $evento->setEntrada(0);
  150.         $evento->setAutorizado(1);
  151.         $evento->setQr($rut);
  152.         $evento->setIdInterno($rut);
  153.         $entityManager->persist($evento);
  154.         $entityManager->flush();
  155.         $control $evento->getId();
  156.         $nombre_completo $persona->getFullName();
  157.         //return new JsonResponse($control, Response::HTTP_OK);
  158.         return new JsonResponse(['evento' => $control'nombre_completo' => $nombre_completo'rut'=> $persona->getRut().'-'.$persona->getDv()], Response::HTTP_OK);
  159.     }
  160.     public function enviarBnovus($evento)
  161.     {
  162.         $persona $evento->getPersona();
  163.         $equipo $evento->getEquipo();
  164.         if ($persona && $equipo) {
  165.             //bnovus:conseguir token
  166.             $curl curl_init();
  167.             curl_setopt_array($curl, array(
  168.                 CURLOPT_URL => 'https://webapiagenteasistencia.bnovus.cl/v1/Login',
  169.                 CURLOPT_RETURNTRANSFER => true,
  170.                 CURLOPT_ENCODING => '',
  171.                 CURLOPT_MAXREDIRS => 10,
  172.                 CURLOPT_TIMEOUT => 0,
  173.                 CURLOPT_FOLLOWLOCATION => true,
  174.                 CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  175.                 CURLOPT_CUSTOMREQUEST => 'POST',
  176.                 CURLOPT_POSTFIELDS => '{
  177.                                           "semilla": "22D6A56B-DEEA-4E1E-91BB-56E4345E1B4D",
  178.                                           "servidorNombre": "SRV-PRUEBAS",
  179.                                           "servidorIP": "192.168.1.100",
  180.                                           "servidorDirectorio": "C:\\\\Pruebas",
  181.                                           "estado": 1
  182.                                         }',
  183.                 CURLOPT_HTTPHEADER => array(
  184.                     'Content-Type: application/json'
  185.                 ),
  186.             ));
  187.             $response curl_exec($curl);
  188.             curl_close($curl);
  189.             $json json_decode($responsetrue);
  190.             //bnovus:hacer marca
  191.             $curl curl_init();
  192.             //tipoMovimiento: 0=Entrada, 1=Salida, 255=Indeterminado
  193.             $params = ['dispositivoCodigo' => $equipo->getNombreBnovus(),
  194.                 'identificador' => $persona->getRut() . $persona->getDv(),
  195.                 'fechaMarcaje' => date_format($evento->getFecha(), 'Y-m-d\TH:i:s'),
  196.                 'tipoMovimiento' => $equipo->getSentido(),
  197.                 'modoIdentificacion' => 15
  198.             ];
  199.             curl_setopt_array($curl, array(
  200.                 CURLOPT_URL => 'https://webapiagenteasistencia.bnovus.cl/v1/Marcaje',
  201.                 CURLOPT_RETURNTRANSFER => true,
  202.                 CURLOPT_ENCODING => '',
  203.                 CURLOPT_MAXREDIRS => 10,
  204.                 CURLOPT_TIMEOUT => 0,
  205.                 CURLOPT_FOLLOWLOCATION => true,
  206.                 CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  207.                 CURLOPT_CUSTOMREQUEST => 'POST',
  208.                 CURLOPT_POSTFIELDS => json_encode(array($params)),
  209.                 CURLOPT_HTTPHEADER => array(
  210.                     'Authorization: Bearer ' $json['token'],
  211.                     'Content-Type: application/json'
  212.                 ),
  213.             ));
  214.             $response curl_exec($curl);
  215.             echo json_encode(array($params));
  216.             curl_close($curl);
  217.             return $response;
  218.         }
  219.     }
  220.     /**
  221.      * @Route("/api/eventos_ip/{ip}", methods={"POST"})
  222.      */
  223.     public function newEventosIP($ipRequest $request)
  224.     {
  225.         $bnovus true;
  226.         $entityManager $this->getDoctrine()->getManager();
  227.         $data json_decode($request->getContent(), true);
  228.         $equipo $this->getDoctrine()->getRepository(Equipo::class)->findOneByIp($ip);
  229.         $control 0;
  230.         foreach ($data as $row) {
  231.             $persona $this->getDoctrine()->getRepository(Persona::class)->findOneByRut($row[1]);
  232.             $evento = new Evento();
  233.             if ($persona)
  234.             {
  235.                 $evento->setPersona($persona);
  236.                 if($persona->getTurno()!=NULL){
  237.                     $evento->setTurno($persona->getTurno());
  238.                 }
  239.                 if($persona->getGrupo()!=NULL){
  240.                     $evento->setGrupo($persona->getGrupo());
  241.                 }
  242.             }
  243.             if ($equipo)
  244.                 $evento->setEquipo($equipo);
  245.             $evento->setFecha(\DateTime::createFromFormat("Y-m-d H:i:s.u"$row[2], new DateTimeZone('America/Santiago')));
  246.             if ($equipo->getSentido() == 0)
  247.                 $evento->setEntrada(true);
  248.             elseif ($equipo->getSentido() == 1)
  249.                 $evento->setEntrada(false);
  250.             else
  251.                 $evento->setEntrada($row[4]);
  252.             $evento->setAutorizado($row[5]);
  253.             $evento->setQr($row[1]);
  254.             $evento->setIdInterno($row[0]);
  255.             $evento->setIsJornada(!$equipo->getPortico()->getOperativo());
  256.             $entityManager->persist($evento);
  257.             if ($persona)
  258.             {
  259.                 $persona->setUltimoEvento($evento);
  260.                 $persona->setUltimoEventoFecha($evento->getFecha());
  261.             }
  262.             $control $row[0];
  263.             $entityManager->flush();
  264.             //evento, equipo, persona
  265.             /*
  266.             try {
  267.                 $respuesta = $this->enviarBnovus($evento, $persona);
  268.                 $fechaactual = new \DateTime('now');
  269.                 $evento->setFechaBnovus($fechaactual);
  270.                 $evento->setRespuestaBnovus($respuesta);
  271.                 $entityManager->persist($evento);
  272.                 $entityManager->flush();
  273.             } catch (\Throwable $th) {
  274.                 //throw $th;
  275.             }
  276.             */
  277.         }
  278.         return new JsonResponse($controlResponse::HTTP_OK);
  279.     }
  280.     /**
  281.      * @Route("/api/newvisita", name="api_visitas")
  282.      */
  283.     public function newVisita(Request $request)
  284.     {
  285.         $entityManager $this->getDoctrine()->getManager();
  286.         $rut $request->request->get('rut');
  287.         $dv $request->request->get('dv');
  288.         $grupo_visita $this->getDoctrine()->getRepository(Grupo::class)->findOneBy(['visitas' => true]);
  289.         $persona = new Persona();
  290.         $persona->setRut($rut);
  291.         $persona->setDv($dv);
  292.         $persona->setActivo(true);
  293.         $persona->setGrupo($grupo_visita);
  294.         $entityManager->persist($persona);
  295.         $entityManager->flush();
  296.         exec("mosquitto_pub -h localhost -t acceso -m 'update'");
  297.         $qr "QRTOTEM+https://portal.sidiv.registrocivil.cl/docstatus?RUN=" $persona->getRut() . "-" $persona->getDv() . "&type";
  298.         return new JsonResponse(['qr' => $qr], Response::HTTP_OK);
  299.     }
  300.     /**
  301.      * @Route("/api/justificacion", name="api_justificacion")
  302.      */
  303.     public function justificacion(Request $request)
  304.     {
  305.         $entityManager $this->getDoctrine()->getManager();
  306.         $rut $request->request->get('rut');
  307.         $motivo $request->request->get('motivo');
  308.         $persona $this->getDoctrine()->getRepository(Persona::class)->findOneByRut($rut);
  309.         if ($persona) {
  310.             if ($persona->getActivo() == true) {
  311.                 $justificacion = new Justificacion();
  312.                 $justificacion->setPersona($persona);
  313.                 $justificacion->setMotivo($motivo);
  314.                 $justificacion->setCreatedAt(new \DateTime());
  315.                 $entityManager->persist($justificacion);
  316.                 $entityManager->flush();
  317.                 $qr "QRTOTEM+https://portal.sidiv.registrocivil.cl/docstatus?RUN=" $persona->getRut() . "-" $persona->getDv() . "&type";
  318.                 return new JsonResponse(['qr' => $qr'nombre_completo' => $persona->__toString(), 'grupo' => $persona->getGrupo()->getNombre()], Response::HTTP_OK);
  319.             } else
  320.                 return new JsonResponse(['error' => 'error'], Response::HTTP_OK);
  321.         } else
  322.             throw new NotFoundHttpException('Sorry not existing!');
  323.     }
  324.     /**
  325.      * @Route("/api/registro_casino", name="api_registro_casino")
  326.      */
  327.     public function registroCasino(Request $request): JsonResponse
  328.     {
  329.         $em $this->getDoctrine()->getManager();
  330.         $autorizado false;
  331.         $ahora = new \DateTime();
  332.         $rut $request->request->get('rut'null);
  333.         $timestampEntregado $request->request->get('timestamp'null);
  334.         $timestampConsumido $request->request->get('timestampConsumido'null);
  335.         if (empty($rut) || empty($timestampEntregado)) {
  336.             return new JsonResponse(["Faltan parametros"], Response::HTTP_BAD_REQUEST);
  337.         }
  338.         $persona $em->getRepository(Persona::class)->findOneBy(["rut" => $rut]);
  339.         $gruposmenu $this->getDoctrine()->getRepository(GrupomenuMenu::class)->findBy(array('grupomenu' => $persona->getGrupomenu()));
  340.         $diasemana date_format($ahora'N');
  341.         //dd($gruposmenu);
  342.         foreach ($gruposmenu as $grupomenu) {
  343.             //validamos día de semana
  344.             if (in_array($diasemana$grupomenu->getMenu()->getDiasSemana())) {
  345.                 //ahora + horas
  346.                 $horainicio strtotime(date_format($grupomenu->getMenu()->getHorarioInicio(), 'G:i:s')) ;
  347.                 $horafin strtotime(date_format($grupomenu->getMenu()->getHorarioFin(), 'G:i:s')) ;
  348.                 $horaactual $timestampEntregado 3600*3;
  349.                 if($horaactual $horainicio$horaactual=$horaactual+24*3600;
  350.                 //dd($horainicio,$horaactual,$horafin);
  351.                 //dentro de la hora?
  352.                 if ($horaactual $horafin && $horaactual $horainicio) {
  353.                     $autorizado true;
  354.                     $menuId $grupomenu->getMenu()->getId();
  355.                 }
  356.             }
  357.         }
  358.         if ($autorizado == false) {
  359.             return new JsonResponse(["No permitido en horario" strtotime(date_format($ahora'G:i:s'))], Response::HTTP_NOT_FOUND);
  360.         }
  361.         $menu $em->getRepository(Menu::class)->find($menuId);
  362.         //$registro = $this->getDoctrine()->getRepository(RegistroCasino::class)->findBy(array('menu' => $menu, 'persona' => $persona->getId()), array('id' => 'DESC'));
  363.         $registro $this->getDoctrine()->getRepository(RegistroCasino::class)->findDelDia($menu,$persona);
  364.         if ($registro) {
  365.             if ($registro[0]->getTimestampConsumido() != null) {
  366.                 return new JsonResponse(["Almuerzo ya consumido"], Response::HTTP_NOT_FOUND);
  367.             }
  368.         }
  369.         $qr 'RUT)' $persona->getRut() . '>MENU)' $menuId;
  370.         $nombre_completo $persona->getFullName();
  371.         if (!$persona) {
  372.             return new JsonResponse(["No existe persona"], Response::HTTP_NOT_FOUND);
  373.         }
  374.         if (!$menu) {
  375.             return new JsonResponse(["No existe menu"], Response::HTTP_NOT_FOUND);
  376.         }
  377.         $registroCasino $em->getRepository(RegistroCasino::class)->findOneBy(["persona" => $persona"timestampEntregado" => $timestampEntregado]);
  378.         if (!$registroCasino) {
  379.             $registroCasino = new RegistroCasino();
  380.             $registroCasino->setPersona($persona);
  381.             $registroCasino->setTimestampEntregado($timestampEntregado);
  382.             $registroCasino->setMenu($menu);
  383.         }
  384.         if ($timestampConsumido) {
  385.             $registroCasino->setTimestampConsumido($timestampConsumido);
  386.         }
  387.         $em->persist($registroCasino);
  388.         $em->flush();
  389.         return new JsonResponse(['qr' => $qr'nombre_completo' => $nombre_completo'menu' => $menu->getNombre(), 'rut'=> $persona->getRut().'-'.$persona->getDv()], Response::HTTP_OK);
  390.     }
  391.     /**
  392.      * @Route("/api/registro_casino2", name="api_registro_casino2")
  393.      */
  394.     public function registroCasino2(Request $request): JsonResponse
  395.     {
  396.         $em $this->getDoctrine()->getManager();
  397.         $autorizado false;
  398.         $ahora = new \DateTime();
  399.         $rut $request->request->get('rut'null);
  400.         $timestampEntregado $request->request->get('timestamp'null);
  401.         $timestampConsumido $request->request->get('timestampConsumido'null);
  402.         if (empty($rut) || empty($timestampEntregado)) {
  403.             return new JsonResponse(["Faltan parametros"], Response::HTTP_BAD_REQUEST);
  404.         }
  405.         $persona $em->getRepository(Persona::class)->findOneBy(["rut" => $rut]);
  406.         $gruposmenu $this->getDoctrine()->getRepository(GrupomenuMenu::class)->findBy(array('grupomenu' => $persona->getGrupomenu()));
  407.         $diasemana date_format($ahora'N');
  408.         //dd($gruposmenu);
  409.         foreach ($gruposmenu as $grupomenu) {
  410.             //validamos día de semana
  411.             if (in_array($diasemana$grupomenu->getMenu()->getDiasSemana())) {
  412.                 //ahora + horas
  413.                 $horainicio strtotime(date_format($grupomenu->getMenu()->getHorarioInicio(), 'G:i:s')) ;
  414.                 $horafin strtotime(date_format($grupomenu->getMenu()->getHorarioFin(), 'G:i:s')) ;
  415.                 $horaactual $timestampEntregado 3600*3;
  416.                 //dd($horainicio,$horaactual,$horafin);
  417.                 //dentro de la hora?
  418.                 if ($horaactual $horafin && $horaactual $horainicio) {
  419.                     $autorizado true;
  420.                     $menuId $grupomenu->getMenu()->getId();
  421.                 }
  422.             }
  423.         }
  424.         if ($autorizado == false) {
  425.             return new JsonResponse(["No permitido en horario" strtotime(date_format($ahora'G:i:s'))], Response::HTTP_NOT_FOUND);
  426.         }
  427.         $menu $em->getRepository(Menu::class)->find($menuId);
  428.         //$registro = $this->getDoctrine()->getRepository(RegistroCasino::class)->findBy(array('menu' => $menu, 'persona' => $persona->getId()), array('id' => 'DESC'));
  429.         $registro $this->getDoctrine()->getRepository(RegistroCasino::class)->findDelDia($menu,$persona);
  430.         if ($registro) {
  431.             if ($registro[0]->getTimestampConsumido() != null) {
  432.                 return new JsonResponse(["Almuerzo ya consumido"], Response::HTTP_NOT_FOUND);
  433.             }
  434.         }
  435.         $qr 'RUT)' $persona->getRut() . '>MENU)' $menuId;
  436.         $nombre_completo $persona->getFullName();
  437.         if (!$persona) {
  438.             return new JsonResponse(["No existe persona"], Response::HTTP_NOT_FOUND);
  439.         }
  440.         if (!$menu) {
  441.             return new JsonResponse(["No existe menu"], Response::HTTP_NOT_FOUND);
  442.         }
  443.         $registroCasino $em->getRepository(RegistroCasino::class)->findOneBy(["persona" => $persona"timestampEntregado" => $timestampEntregado]);
  444.         if (!$registroCasino) {
  445.             $registroCasino = new RegistroCasino();
  446.             $registroCasino->setPersona($persona);
  447.             $registroCasino->setTimestampEntregado($timestampEntregado);
  448.             $registroCasino->setMenu($menu);
  449.         }
  450.         if ($timestampConsumido) {
  451.             $registroCasino->setTimestampConsumido($timestampConsumido);
  452.         }
  453.         $em->persist($registroCasino);
  454.         $em->flush();
  455.         return new JsonResponse(['qr' => $qr'nombre_completo' => $nombre_completo'menu' => $menu->getNombre(), 'rut'=> $persona->getRut().'-'.$persona->getDv()], Response::HTTP_OK);
  456.     }
  457.     /**
  458.      * @Route("/api/get_menu", name="api_get_menu")
  459.      */
  460.     public function getMenu()
  461.     {
  462.         $em $this->getDoctrine()->getManager();
  463.         $gruposMenu $em->getRepository(Grupomenu::class)->findAll();
  464.         $grupoMenuArray = [];
  465.         $menusArray = [];
  466.         foreach ($gruposMenu as $grupoMenu) {
  467.             $menusGrupoMenuArray = [];
  468.             /** @var GrupomenuMenu $grupomenuMenu */
  469.             foreach ($grupoMenu->getGruposmenuMenu() as $grupomenuMenu) {
  470.                 $menusGrupoMenuArray[] = $grupomenuMenu->getMenu()->getId();
  471.             }
  472.             $grupoMenuArray[] = [
  473.                 "id" => $grupoMenu->getId(),
  474.                 "nombre" => $grupoMenu->getNombre(),
  475.                 "menus" => $menusGrupoMenuArray
  476.             ];
  477.         }
  478.         $menus $em->getRepository(Menu::class)->findAll();
  479.         foreach ($menus as $menu) {
  480.             $menusArray[] = [
  481.                 "id" => $menu->getId(),
  482.                 "nombre" => $menu->getNombre(),
  483.                 "horarioInicio" => $menu->getHorarioInicio(),
  484.                 "horarioFin" => $menu->getHorarioFin(),
  485.                 "diasSemana" => $menu->getDiasSemana()
  486.             ];
  487.         }
  488.         return new JsonResponse(["gruposMenu" => $grupoMenuArray"menus" => $menusArray]);
  489.     }
  490.     /**
  491.      * @Route("/api/comprimir_foto_usuario/{grupo}/{timestamp}", methods={"GET"})
  492.      */
  493.     public function comprimirFotoUsuario($grupo$timestampRequest $requestPersonaRepository $personaRepository)
  494.     {
  495.         $personas $personaRepository->findByFotoTimestamp($timestamp);
  496.         $zip = new ZipArchive();
  497.         $path $this->getParameter('kernel.project_dir') . '/public/' $this->getParameter("app.path.foto_persona") . '/';
  498.         if ($zip->open("foto_usuario_{$grupo}.zip"ZipArchive::CREATE) === true) {
  499.             foreach ($personas as $persona) {
  500.                 $zip->addFile($path $persona->getFoto(), $persona->getFoto());
  501.             }
  502.             $zip->close();
  503.         }
  504.         return new JsonResponse("foto_usuario_{$grupo}.zip");
  505.     }
  506. }