src/Controller/DescargaEventosController.php line 82

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Evento;
  4. use App\Entity\Portico;
  5. use App\Entity\RegistroCasino;
  6. use DateTime;
  7. use DateTimeZone;
  8. use Doctrine\ORM\EntityRepository;
  9. use Doctrine\ORM\Mapping\Entity;
  10. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\Form\Extension\Core\Type\DateType;
  16. use Symfony\Component\Form\Extension\Core\Type\TimeType;
  17. use Symfony\Component\Validator\Constraints\Choice;
  18. use function Doctrine\ORM\QueryBuilder;
  19. class DescargaEventosController extends AbstractController
  20. {
  21.     /**
  22.      * @Route("/descarga/eventos", name="descarga_eventos")
  23.      */
  24.     public function index()
  25.     {
  26.         $eventos $this->getDoctrine()
  27.             ->getRepository(Evento::class)
  28.             ->findAll10k();
  29.         $responseString "ID,RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, FECHA, EQUIPO, ENTRADA, AUTORIZADO\n";
  30.         foreach ($eventos as $evento) {
  31.             if ($evento->getPersona()) {
  32.                 $grupo "";
  33.                 if ($evento->getPersona()->getGrupo() != null)
  34.                     $grupo $evento->getPersona()->getGrupo()->getNombre();
  35.                 $responseString $responseString .
  36.                     $evento->getId() . "," .
  37.                     $evento->getPersona()->getRut() . "," .
  38.                     $evento->getPersona()->getNombre() . "," .
  39.                     $evento->getPersona()->getPaterno() . "," .
  40.                     $evento->getPersona()->getMaterno() . "," .
  41.                     $grupo "," .
  42.                     $evento->getFecha()->format("Y-m-d H:i:s") . "," .
  43.                     $evento->getEquipo()->getNombre() . "," .
  44.                     $evento->getEntrada() . "," .
  45.                     $evento->getAutorizado() .
  46.                     "\n";
  47.             } else {
  48.                 $responseString $responseString .
  49.                     $evento->getId() . "," .
  50.                     "0" "," .
  51.                     "0" "," .
  52.                     "0" "," .
  53.                     "0" "," .
  54.                     "0" "," .
  55.                     $evento->getFecha()->format("Y-m-d H:i:s") . "," .
  56.                     $evento->getEquipo()->getNombre() . "," .
  57.                     $evento->getEntrada() . "," .
  58.                     $evento->getAutorizado() .
  59.                     "\n";
  60.             }
  61.         }
  62.         $response = new Response();
  63.         $response->headers->set('Content-type''text/csv');
  64.         $response->headers->set('Cache-Control''private');
  65.         $response->headers->set('Content-Disposition''attachment; filename="' "Eventos.csv" '";');
  66.         $response->sendHeaders();
  67.         $response->setContent($responseString);
  68.         return $response;
  69.     }
  70.     /**
  71.      * @Route("/descarga/desde/{desde}/{hasta}", name="descarga_eventos_fecha_csv")
  72.      */
  73.     public function indexDeFecha($desde$hasta)
  74.     {
  75.         $desdereal DateTime::createFromFormat('!Y-m-d'$desde);
  76.         $hastareal DateTime::createFromFormat('!Y-m-d'$hasta);
  77.         $eventos $this->getDoctrine()
  78.             ->getRepository(Evento::class)
  79.             ->findDesdeHasta($desdereal$hastareal);
  80.         $responseString "ID,RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, FECHA, EQUIPO, ENTRADA, AUTORIZADO\n";
  81.         foreach ($eventos as $evento) {
  82.             if ($evento->getPersona()) {
  83.                 $responseString $responseString .
  84.                     $evento->getId() . "," .
  85.                     $evento->getPersona()->getRut() . "," .
  86.                     $evento->getPersona()->getNombre() . "," .
  87.                     $evento->getPersona()->getPaterno() . "," .
  88.                     $evento->getPersona()->getMaterno() . ",";
  89.                 if ($evento->getPersona()->getGrupo()) {
  90.                     $responseString $responseString $evento->getPersona()->getGrupo()->getNombre() . ",";
  91.                 } else {
  92.                     $responseString $responseString "" ",";
  93.                 }
  94.                 $responseString $responseString .
  95.                     $evento->getFecha()->format("Y-m-d H:i:s") . "," .
  96.                     $evento->getEquipo()->getNombre() . "," .
  97.                     $evento->getEntrada() . "," .
  98.                     $evento->getAutorizado() .
  99.                     "\n";
  100.             } else {
  101.                 $responseString $responseString .
  102.                     $evento->getId() . "," .
  103.                     "0" "," .
  104.                     "0" "," .
  105.                     "0" "," .
  106.                     "0" "," .
  107.                     "0" "," .
  108.                     $evento->getFecha()->format("Y-m-d H:i:s") . "," .
  109.                     $evento->getEquipo()->getNombre() . "," .
  110.                     $evento->getEntrada() . "," .
  111.                     $evento->getAutorizado() .
  112.                     "\n";
  113.             }
  114.         }
  115.         $response = new Response();
  116.         $response->headers->set('Content-type''text/csv');
  117.         $response->headers->set('Cache-Control''private');
  118.         $response->headers->set('Content-Disposition''attachment; filename="' "Eventos.csv" '";');
  119.         $response->sendHeaders();
  120.         $response->setContent($responseString);
  121.         return $response;
  122.     }
  123.     /**
  124.      * @Route("/descarga/eventos/porfecha", name="descarga_eventos_por_fecha")
  125.      */
  126.     public function byfecha(Request $request)
  127.     {
  128.         $form $this->createFormBuilder()
  129.             ->add('desde'DateType::class, [
  130.                 'widget' => 'single_text',
  131.             ])
  132.             ->add('hasta'DateType::class, [
  133.                 'widget' => 'single_text',
  134.             ])
  135.             ->getForm();
  136.         $form->handleRequest($request);
  137.         if ($form->isSubmitted() && $form->isValid()) {
  138.             $desde $form->get('desde')->getData('desde');
  139.             $hasta $form->get('hasta')->getData('hasta');
  140.             return $this->redirectToRoute('descarga_eventos_fecha_csv', array('desde' => $desde->format('Y-m-d'), 'hasta' => $hasta->format('Y-m-d')));
  141.         }
  142.         return $this->render('descarga_eventos/byfecha.html.twig', [
  143.             'form' => $form->createView()
  144.         ]);
  145.     }
  146.     /**
  147.      * @Route("ver/resumen/desde/{desde}/{hasta}" , name="ver_resumen_csv")
  148.      */
  149.     public function verresumenCsv($desde$hasta)
  150.     {
  151.         $desdereal DateTime::createFromFormat('!Y-m-d'$desde, new DateTimeZone('America/Santiago'));
  152.         $hastareal DateTime::createFromFormat('!Y-m-d'$hasta, new DateTimeZone('America/Santiago'));
  153.         $conn $this->getDoctrine()->getManager()->getConnection();
  154.         $sql '
  155.             select persona_id,p.rut, p.nombre,p.paterno,p.materno, g.nombre as grupo,
  156.        date_format(fecha, "%Y-%m-%d")                       as fecha_corregida,
  157.        max(if(evento.entrada = 0, (fecha), null))           as fecha_salida,
  158.        min(if(evento.entrada = 1, (fecha), null))           as fecha_entrada,
  159.        time_to_sec(timediff(max(if(evento.entrada = 0, (fecha), null)),
  160.                 min(if(evento.entrada = 1, (fecha), null)))) as total_diario,
  161.         sum(if(evento.entrada = 1,1,0)) as cantidad_entradas,
  162.         sum(if(evento.entrada = 0,1,0)) as cantidad_salidas,
  163.        sum(time_to_sec(if(evento.entrada=1,timediff(timestamp(date(fecha),"23:59:59"), fecha),timediff(fecha,timestamp(date(fecha),"23:59:59"))) )) as total_en_planta,
  164.        group_concat(if(evento.entrada=1,"IN ","OUT "),evento.fecha SEPARATOR "; ") as eventos
  165. from evento
  166. join persona p on p.id = evento.persona_id
  167. left join grupo g on g.id = p.grupo_id
  168. where autorizado= true and fecha > :desde and fecha < :hasta and is_jornada is not false and eliminado is not true
  169. group by persona_id, fecha_corregida
  170.             ';
  171.         $stmt $conn->prepare($sql);
  172.         $stmt->execute(['desde' => $desdereal->format('Y-m-d H:i:s'), 'hasta' => $hastareal->format('Y-m-d H:i:s')]);
  173.         $registros $stmt->fetchAllAssociative();
  174.         //dd($registros);
  175.         $responseString "RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, FECHA, ENTRADA, SALIDA, CANT_ENTRADAS, CANT_SALIDAS, TOTAL, TIEMPO EN PLANTA\n";
  176.         //foreach
  177.         foreach ($registros as $fila) {
  178.             $total_diario 0;
  179.             $total_en_planta 0;
  180.             if ($fila['total_diario'] < 0)
  181.                 $total_diario 24 $fila['total_diario'] / 3600;
  182.             else $total_diario $fila['total_diario'] / 3600;
  183.             if ($fila['total_en_planta'] < 0)
  184.                 $total_en_planta 24 $fila['total_en_planta'] / 3600;
  185.             else $total_en_planta $fila['total_en_planta'] / 3600;
  186.             if ($total_en_planta $total_diario)
  187.                 $total_en_planta $total_diario;
  188.             $responseString $responseString .
  189.                 $fila['rut'] . "," .
  190.                 $fila['nombre'] . "," .
  191.                 $fila['paterno'] . "," .
  192.                 $fila['materno'] . "," .
  193.                 $fila['grupo'] . "," .
  194.                 $fila['fecha_corregida'] . "," .
  195.                 $fila['fecha_entrada'] . "," .
  196.                 $fila['fecha_salida'] . "," .
  197.                 $fila['cantidad_entradas'] . "," .
  198.                 $fila['cantidad_salidas'] . "," .
  199.                 $total_diario "," .
  200.                 $total_en_planta "," .
  201.                 $fila['eventos'] .
  202.                 "\n";
  203.         }
  204.         $respuesta = [];
  205.         $respuesta['rows'] = $responseString;
  206.         $respuesta['registros'] = $registros;
  207.         return $respuesta;
  208.     }
  209.     /**
  210.      * @Route("descarga/resumen/desde/{desde}/{hasta}" , name="descarga_resumen_csv")
  211.      */
  212.     public function resumenCsv($desde$hasta)
  213.     {
  214.         $desdereal DateTime::createFromFormat('!Y-m-d'$desde, new DateTimeZone('America/Santiago'));
  215.         $hastareal DateTime::createFromFormat('!Y-m-d'$hasta, new DateTimeZone('America/Santiago'));
  216.         $conn $this->getDoctrine()->getManager()->getConnection();
  217.         $sql '
  218.             select persona_id,p.rut, p.nombre,p.paterno,p.materno, g.nombre as grupo,
  219.        date_format(fecha, "%Y-%m-%d")                       as fecha_corregida,
  220.        max(if(evento.entrada = 0, fecha, null))           as fecha_salida,
  221.        min(if(evento.entrada = 1, fecha, null))           as fecha_entrada,
  222.        time_to_sec(timediff(max(if(evento.entrada = 0, fecha, null)),
  223.                 min(if(evento.entrada = 1, fecha, null)))) as total_diario,
  224.         sum(if(evento.entrada = 1,1,0)) as cantidad_entradas,
  225.         sum(if(evento.entrada = 0,1,0)) as cantidad_salidas,
  226.        sum(time_to_sec(if(evento.entrada=1,timediff(timestamp(date(fecha),"23:59:59"), fecha),timediff(fecha,timestamp(date(fecha),"23:59:59"))) )) as total_en_planta,
  227.        group_concat(if(evento.entrada=1,"IN ","OUT "),evento.fecha SEPARATOR "; ") as eventos
  228. from evento
  229. join persona p on p.id = evento.persona_id
  230. left join grupo g on g.id = p.grupo_id
  231. where autorizado= true and fecha > :desde and fecha < :hasta and is_jornada is not false
  232. group by persona_id, fecha_corregida
  233.             ';
  234.         $stmt $conn->prepare($sql);
  235.         $stmt->execute(['desde' => $desdereal->format('Y-m-d H:i:s'), 'hasta' => $hastareal->format('Y-m-d H:i:s')]);
  236.         $registros $stmt->fetchAllAssociative();
  237.         //dd($registros);
  238.         $responseString "RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, FECHA, ENTRADA, SALIDA, CANT_ENTRADAS, CANT_SALIDAS, TOTAL, TIEMPO EN PLANTA, EVENTOS\n";
  239.         //foreach
  240.         foreach ($registros as $fila) {
  241.             $total_diario 0;
  242.             $total_en_planta 0;
  243.             if ($fila['total_diario'] < 0)
  244.                 $total_diario 24 $fila['total_diario'] / 3600;
  245.             else $total_diario $fila['total_diario'] / 3600;
  246.             if ($fila['total_en_planta'] < 0)
  247.                 $total_en_planta 24 $fila['total_en_planta'] / 3600;
  248.             else $total_en_planta $fila['total_en_planta'] / 3600;
  249.             if ($total_en_planta $total_diario)
  250.                 $total_en_planta $total_diario;
  251.             $responseString $responseString .
  252.                 $fila['rut'] . "," .
  253.                 $fila['nombre'] . "," .
  254.                 $fila['paterno'] . "," .
  255.                 $fila['materno'] . "," .
  256.                 $fila['grupo'] . "," .
  257.                 $fila['fecha_corregida'] . "," .
  258.                 $fila['fecha_entrada'] . "," .
  259.                 $fila['fecha_salida'] . "," .
  260.                 $fila['cantidad_entradas'] . "," .
  261.                 $fila['cantidad_salidas'] . "," .
  262.                 $total_diario "," .
  263.                 $total_en_planta "," .
  264.                 $fila['eventos'] .
  265.                 "\n";
  266.         }
  267.         $response = new Response();
  268.         $response->headers->set('Content-type''text/csv');
  269.         $response->headers->set('Cache-Control''private');
  270.         $response->headers->set('Content-Disposition''attachment; filename="' "Eventos.csv" '";');
  271.         $response->sendHeaders();
  272.         $response->setContent($responseString);
  273.         return $response;
  274.     }
  275.     /**
  276.      * @Route("descarga/resumen/porfecha", name="descarga_resumen_por_fecha")
  277.      */
  278.     public function descargaResumen(Request $request)
  279.     {
  280.         $desde_inicial = new \DateTime('now -1 day');
  281.         $hasta_inicial = new \DateTime();
  282.         $form $this->createFormBuilder()
  283.             ->add('desde'DateType::class, [
  284.                 // renders it as a single text box
  285.                 'widget' => 'single_text',
  286.                 'data' => $desde_inicial,
  287.             ])
  288.             ->add('hasta'DateType::class, [
  289.                 // renders it as a single text box
  290.                 'widget' => 'single_text',
  291.                 'data' => $hasta_inicial,
  292.             ])
  293.             ->getForm();
  294.         $form->handleRequest($request);
  295.         if ($form->isSubmitted() && $form->isValid()) {
  296.             $desde $form->get('desde')->getData('desde');
  297.             $hasta $form->get('hasta')->getData('hasta');
  298.             $respuesta $this->verresumenCsv($desde->format('Y-m-d'), $hasta->format('Y-m-d'));
  299.             return $this->render('descarga_eventos/tabla.html.twig', [
  300.                 'form' => $form->createView(),
  301.                 'desde' => $desde->format('Y-m-d'),
  302.                 'hasta' => $hasta->format('Y-m-d'),
  303.                 'rows' => $respuesta['rows'],
  304.                 'registros' => $respuesta['registros'],
  305.             ]);
  306.             //return $this->redirectToRoute('ver_resumen_csv', array('desde' => $desde->format('Y-m-d'), 'hasta' => $hasta->format('Y-m-d')));
  307.         }
  308.         $respuesta $this->verresumenCsv($desde_inicial->format('Y-m-d'), $hasta_inicial->format('Y-m-d'));
  309.         return $this->render('descarga_eventos/tabla.html.twig', [
  310.             'form' => $form->createView(),
  311.             'desde' => $desde_inicial->format('Y-m-d'),
  312.             'hasta' => $hasta_inicial->format('Y-m-d'),
  313.             'registros' => $respuesta['registros'],
  314.         ]);
  315.     }
  316.     //creado por miguel, mismo que el en planta pero con filtro de todos los opeartivos
  317.     /**
  318.      * @Route("descarga/resumenoperativototal/porfecha", name="descarga_resumenopertivototal_por_fecha")
  319.      */
  320.     public function descargaResumenoperativo2(Request $request)
  321.     {
  322.         $desde_inicial = new \DateTime('now -1 day');
  323.         $hasta_inicial = new \DateTime();
  324.         $form $this->createFormBuilder()
  325.             ->add('desde'DateType::class, [
  326.                 // renders it as a single text box
  327.                 'widget' => 'single_text',
  328.                 'data' => $desde_inicial,
  329.             ])
  330.             ->add('desde_hora'TimeType::class, [
  331.                 'widget' => 'single_text',
  332.                 'data' => \DateTime::createFromFormat('H:i''00:00'),
  333.             ])
  334.             ->add('hasta'DateType::class, [
  335.                 // renders it as a single text box
  336.                 'widget' => 'single_text',
  337.                 'data' => $hasta_inicial,
  338.             ])
  339.             ->add('hasta_hora'TimeType::class, [
  340.                 'widget' => 'single_text',
  341.                 'data' => \DateTime::createFromFormat('H:i''23:59'),
  342.             ])
  343.             ->getForm();
  344.         $form->handleRequest($request);
  345.         if ($form->isSubmitted() && $form->isValid()) {
  346.             $desde $form->get('desde')->getData('desde');
  347.             $desde_hora $form->get('desde_hora')->getData('desde_hora');
  348.             $hasta $form->get('hasta')->getData('hasta');
  349.             $hasta_hora $form->get('hasta_hora')->getData('hasta_hora');
  350.             
  351.             // Combinar fecha y hora
  352.             $desde->setTime((int)$desde_hora->format('H'), (int)$desde_hora->format('i'), 0);
  353.             $hasta->setTime((int)$hasta_hora->format('H'), (int)$hasta_hora->format('i'), 59);
  354.             
  355.             $respuesta $this->verresumenoperativoCsv($desde->format('Y-m-d H:i:s'), $hasta->format('Y-m-d H:i:s'));
  356.             return $this->render('descarga_eventos/tablareportetotal.html.twig', [
  357.                 'form' => $form->createView(),
  358.                 'desde' => $desde->format('Y-m-d H:i:s'),
  359.                 'hasta' => $hasta->format('Y-m-d H:i:s'),
  360.                 'rows' => $respuesta['rows'],
  361.                 'registros' => $respuesta['registros'],
  362.             ]);
  363.             //return $this->redirectToRoute('ver_resumen_csv', array('desde' => $desde->format('Y-m-d'), 'hasta' => $hasta->format('Y-m-d')));
  364.         }
  365.         //llamar al operativo
  366.         $desde_inicial->setTime(000);
  367.         $hasta_inicial->setTime(235959);
  368.         $respuesta $this->verresumenoperativoCsv($desde_inicial->format('Y-m-d H:i:s'), $hasta_inicial->format('Y-m-d H:i:s'));
  369.         return $this->render('descarga_eventos/tablareportetotal.html.twig', [
  370.             'form' => $form->createView(),
  371.             'desde' => $desde_inicial->format('Y-m-d H:i:s'),
  372.             'hasta' => $hasta_inicial->format('Y-m-d H:i:s'),
  373.             'registros' => $respuesta['registros'],
  374.         ]);
  375.     }
  376.     //, defaults={"name" = "World"}
  377.     /**
  378.      * @Route("ver/resumenoperativo/{portico}/desde/{desde}/{hasta}" , name="ver_resumen_csv_operativo" , defaults={"portico" = "0"})
  379.      */
  380.     public function verresumenCsvOperativo($portico$desde$hasta)
  381.     {
  382.         $desdereal DateTime::createFromFormat('!Y-m-d'$desde, new DateTimeZone('America/Santiago'));
  383.         $hastareal DateTime::createFromFormat('!Y-m-d'$hasta, new DateTimeZone('America/Santiago'));
  384.         $conn $this->getDoctrine()->getManager()->getConnection();
  385.         $sql '
  386.             select persona_id,p.rut, p.nombre,p.paterno,p.materno, g.nombre as grupo,
  387.        date_format(fecha, "%Y-%m-%d")                       as fecha_corregida,
  388.        max(if(evento.entrada = 0, (fecha), null))           as fecha_salida,
  389.        min(if(evento.entrada = 1, (fecha), null))           as fecha_entrada,
  390.        time_to_sec(timediff(max(if(evento.entrada = 0, (fecha), null)),
  391.                 min(if(evento.entrada = 1, (fecha), null)))) as total_diario,
  392.         sum(if(evento.entrada = 1,1,0)) as cantidad_entradas,
  393.         sum(if(evento.entrada = 0,1,0)) as cantidad_salidas,
  394.        sum(time_to_sec(if(evento.entrada=1,timediff(timestamp(date(fecha),"23:59:59"), fecha),timediff(fecha,timestamp(date(fecha),"23:59:59"))) )) as total_en_planta,
  395.        group_concat(if(evento.entrada=1,"IN ","OUT "),evento.fecha SEPARATOR "; ") as eventos
  396. from evento
  397. join persona p on p.id = evento.persona_id
  398. join equipo e on e.id = evento.equipo_id
  399. join portico po on po.id = e.portico_id
  400. left join grupo g on g.id = p.grupo_id
  401. where autorizado= true and fecha > :desde and fecha < :hasta and is_jornada = false and po.id = :portico
  402. group by persona_id, fecha_corregida
  403.             ';
  404.         $stmt $conn->prepare($sql);
  405.         $stmt->execute(['desde' => $desdereal->format('Y-m-d H:i:s'), 'hasta' => $hastareal->format('Y-m-d H:i:s'), 'portico' => $portico]);
  406.         $registros $stmt->fetchAllAssociative();
  407. //        dd($portico);
  408.         $responseString "RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, FECHA, ENTRADA, SALIDA, CANT_ENTRADAS, CANT_SALIDAS, TOTAL, TIEMPO EN PLANTA\n";
  409.         //foreach
  410.         foreach ($registros as $fila) {
  411.             $total_diario 0;
  412.             $total_en_planta 0;
  413.             if ($fila['total_diario'] < 0)
  414.                 $total_diario 24 $fila['total_diario'] / 3600;
  415.             else $total_diario $fila['total_diario'] / 3600;
  416.             if ($fila['total_en_planta'] < 0)
  417.                 $total_en_planta 24 $fila['total_en_planta'] / 3600;
  418.             else $total_en_planta $fila['total_en_planta'] / 3600;
  419.             if ($total_en_planta $total_diario)
  420.                 $total_en_planta $total_diario;
  421.             $responseString $responseString .
  422.                 $fila['rut'] . "," .
  423.                 $fila['nombre'] . "," .
  424.                 $fila['paterno'] . "," .
  425.                 $fila['materno'] . "," .
  426.                 $fila['grupo'] . "," .
  427.                 $fila['fecha_corregida'] . "," .
  428.                 $fila['fecha_entrada'] . "," .
  429.                 $fila['fecha_salida'] . "," .
  430.                 $fila['cantidad_entradas'] . "," .
  431.                 $fila['cantidad_salidas'] . "," .
  432.                 $total_diario "," .
  433.                 $total_en_planta "," .
  434.                 $fila['eventos'] .
  435.                 "\n";
  436.         }
  437.         $respuesta = [];
  438.         $respuesta['rows'] = $responseString;
  439.         $respuesta['registros'] = $registros;
  440.         return $respuesta;
  441.     }
  442.     /**
  443.      * @Route("descarga/resumenoperativo/{portico}/desde/{desde}/{hasta}" , name="descarga_resumen_csv_operativo", defaults={"portico" = "0"})
  444.      */
  445.     public function resumenCsvOperativo($portico$desde$hasta)
  446.     {
  447.         $desdereal DateTime::createFromFormat('!Y-m-d'$desde, new DateTimeZone('America/Santiago'));
  448.         $hastareal DateTime::createFromFormat('!Y-m-d'$hasta, new DateTimeZone('America/Santiago'));
  449.         $conn $this->getDoctrine()->getManager()->getConnection();
  450.         $sql '
  451.             select persona_id,p.rut, p.nombre,p.paterno,p.materno, g.nombre as grupo,
  452.        date_format(fecha, "%Y-%m-%d")                       as fecha_corregida,
  453.        max(if(evento.entrada = 0, fecha, null))           as fecha_salida,
  454.        min(if(evento.entrada = 1, fecha, null))           as fecha_entrada,
  455.        time_to_sec(timediff(max(if(evento.entrada = 0, fecha, null)),
  456.                 min(if(evento.entrada = 1, fecha, null)))) as total_diario,
  457.         sum(if(evento.entrada = 1,1,0)) as cantidad_entradas,
  458.         sum(if(evento.entrada = 0,1,0)) as cantidad_salidas,
  459.        sum(time_to_sec(if(evento.entrada=1,timediff(timestamp(date(fecha),"23:59:59"), fecha),timediff(fecha,timestamp(date(fecha),"23:59:59"))) )) as total_en_planta,
  460.        group_concat(if(evento.entrada=1,"IN ","OUT "),evento.fecha SEPARATOR "; ") as eventos
  461. from evento
  462. join persona p on p.id = evento.persona_id
  463. join equipo e on e.id = evento.equipo_id
  464. join portico po on po.id = e.portico_id
  465. left join grupo g on g.id = p.grupo_id
  466. where autorizado= true and fecha > :desde and fecha < :hasta and is_jornada = false and po.id = :portico
  467. group by persona_id, fecha_corregida
  468.             ';
  469.         $stmt $conn->prepare($sql);
  470.         $stmt->execute(['desde' => $desdereal->format('Y-m-d H:i:s'), 'hasta' => $hastareal->format('Y-m-d H:i:s'), 'portico' => $portico]);
  471.         $registros $stmt->fetchAllAssociative();
  472.         //dd($registros);
  473.         $responseString "RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, FECHA, ENTRADA, SALIDA, CANT_ENTRADAS, CANT_SALIDAS, TOTAL, TIEMPO EN PLANTA, EVENTOS\n";
  474.         //foreach
  475.         foreach ($registros as $fila) {
  476.             $total_diario 0;
  477.             $total_en_planta 0;
  478.             if ($fila['total_diario'] < 0)
  479.                 $total_diario 24 $fila['total_diario'] / 3600;
  480.             else $total_diario $fila['total_diario'] / 3600;
  481.             if ($fila['total_en_planta'] < 0)
  482.                 $total_en_planta 24 $fila['total_en_planta'] / 3600;
  483.             else $total_en_planta $fila['total_en_planta'] / 3600;
  484.             if ($total_en_planta $total_diario)
  485.                 $total_en_planta $total_diario;
  486.             $responseString $responseString .
  487.                 $fila['rut'] . "," .
  488.                 $fila['nombre'] . "," .
  489.                 $fila['paterno'] . "," .
  490.                 $fila['materno'] . "," .
  491.                 $fila['grupo'] . "," .
  492.                 $fila['fecha_corregida'] . "," .
  493.                 $fila['fecha_entrada'] . "," .
  494.                 $fila['fecha_salida'] . "," .
  495.                 $fila['cantidad_entradas'] . "," .
  496.                 $fila['cantidad_salidas'] . "," .
  497.                 $total_diario "," .
  498.                 $total_en_planta "," .
  499.                 $fila['eventos'] .
  500.                 "\n";
  501.         }
  502.         $response = new Response();
  503.         $response->headers->set('Content-type''text/csv');
  504.         $response->headers->set('Cache-Control''private');
  505.         $response->headers->set('Content-Disposition''attachment; filename="' "Eventos.csv" '";');
  506.         $response->sendHeaders();
  507.         $response->setContent($responseString);
  508.         return $response;
  509.     }
  510.     /**
  511.      * @Route("descarga/resumenoperativo/porfecha", name="descarga_resumen_por_fecha_operativo")
  512.      */
  513.     public function descargaResumenOperativo(Request $request)
  514.     {
  515.         $desde_inicial = new \DateTime('now -1 day');
  516.         $hasta_inicial = new \DateTime();
  517.         $form $this->createFormBuilder()
  518.             ->add('desde'DateType::class, [
  519.                 // renders it as a single text box
  520.                 'widget' => 'single_text',
  521.                 'data' => $desde_inicial,
  522.             ])
  523.             ->add('hasta'DateType::class, [
  524.                 // renders it as a single text box
  525.                 'widget' => 'single_text',
  526.                 'data' => $hasta_inicial,
  527.             ])
  528.             ->add('portico'EntityType::class, [
  529.                 'class' => Portico::class,
  530.                 'query_builder' => function (EntityRepository $repository) {
  531.                     $qb $repository->createQueryBuilder('p');
  532.                     return $qb
  533.                         ->where($qb->expr()->eq('p.operativo'1));
  534.                 }
  535.             ])
  536.             ->getForm();
  537.         $form->handleRequest($request);
  538.         if ($form->isSubmitted() && $form->isValid()) {
  539.             $desde $form->get('desde')->getData('desde');
  540.             $hasta $form->get('hasta')->getData('hasta');
  541.             $portico $form->get('portico')->getData('portico');
  542.             $respuesta $this->verresumenCsvOperativo($portico->getId(), $desde->format('Y-m-d'), $hasta->format('Y-m-d'));
  543.             return $this->render('descarga_eventos/tablaoperativo.html.twig', [
  544.                 'form' => $form->createView(),
  545.                 'portico' => $portico,
  546.                 'desde' => $desde->format('Y-m-d'),
  547.                 'hasta' => $hasta->format('Y-m-d'),
  548.                 'rows' => $respuesta['rows'],
  549.                 'registros' => $respuesta['registros'],
  550.             ]);
  551.             return $this->redirectToRoute('ver_resumen_csv', array('desde' => $desde->format('Y-m-d'), 'hasta' => $hasta->format('Y-m-d')));
  552.         }
  553.         $respuesta $this->verresumenCsvOperativo(0$desde_inicial->format('Y-m-d'), $hasta_inicial->format('Y-m-d'));
  554.         return $this->render('descarga_eventos/tablaoperativo.html.twig', [
  555.             'form' => $form->createView(),
  556.             'desde' => $desde_inicial->format('Y-m-d'),
  557.             'hasta' => $hasta_inicial->format('Y-m-d'),
  558.             'registros' => $respuesta['registros'],
  559.         ]);
  560.     }
  561.     /**
  562.      * @Route("dashboard/reporte/powerbi", name="powerbi_tiempo_en_planta")
  563.      */
  564.     public function powerbi(Request $request)
  565.     {
  566.         return $this->render('descarga_eventos/powerbi.html.twig');
  567.     }
  568.     /**
  569.      * @Route("dashboard/reporte/dashboard", name="reporte_dashboard")
  570.      */
  571.     public function dashboard(Request $request)
  572.     {
  573.         return $this->render('descarga_eventos/powerbi.html.twig');
  574.     }
  575.     /**
  576.      * @Route("descarga/resumencasino/porfecha", name="descarga_resumen_por_fecha_casino")
  577.      */
  578.     public function descargaResumenCasino(Request $request)
  579.     {
  580.         $desde_inicial = new \DateTime('now -1 day');
  581.         $hasta_inicial = new \DateTime();
  582.         $form $this->createFormBuilder()
  583.             ->add('desde'DateType::class, [
  584.                 // renders it as a single text box
  585.                 'widget' => 'single_text',
  586.                 'data' => $desde_inicial,
  587.             ])
  588.             ->add('hasta'DateType::class, [
  589.                 // renders it as a single text box
  590.                 'widget' => 'single_text',
  591.                 'data' => $hasta_inicial,
  592.             ])
  593.             ->getForm();
  594.         $form->handleRequest($request);
  595.         if ($form->isSubmitted() && $form->isValid()) {
  596.             $desde $form->get('desde')->getData('desde');
  597.             $hasta $form->get('hasta')->getData('hasta');
  598.             $respuesta $this->verresumenCsvCasino($desde->format('Y-m-d'), $hasta->format('Y-m-d'));
  599.             return $this->render('descarga_eventos/tablacasino.html.twig', [
  600.                 'form' => $form->createView(),
  601.                 'desde' => $desde->format('Y-m-d'),
  602.                 'hasta' => $hasta->format('Y-m-d'),
  603.                 'rows' => $respuesta['rows'],
  604.                 'registros' => $respuesta['registros'],
  605.             ]);
  606.             //return $this->redirectToRoute('ver_resumen_csv', array('desde' => $desde->format('Y-m-d'), 'hasta' => $hasta->format('Y-m-d')));
  607.         }
  608.         $respuesta $this->verresumenCsvCasino($desde_inicial->format('Y-m-d'), $hasta_inicial->format('Y-m-d'));
  609.         return $this->render('descarga_eventos/tablacasino.html.twig', [
  610.             'form' => $form->createView(),
  611.             'desde' => $desde_inicial->format('Y-m-d'),
  612.             'hasta' => $hasta_inicial->format('Y-m-d'),
  613.             'registros' => $respuesta['registros'],
  614.         ]);
  615.     }
  616.     /**
  617.      * @Route("descarga/resumencasino/desde/{desde}/{hasta}" , name="descarga_resumen_csv_casino")
  618.      */
  619.     public function resumenCsvCasino($desde$hasta)
  620.     {
  621.         $desdereal DateTime::createFromFormat('!Y-m-d'$desde, new DateTimeZone('America/Santiago'));
  622.         $hastareal DateTime::createFromFormat('!Y-m-d'$hasta, new DateTimeZone('America/Santiago'));
  623.         $conn $this->getDoctrine()->getManager()->getConnection();
  624.         $sql '
  625.             select persona_id,p.rut, p.nombre,p.paterno,p.materno,m.nombre as menun, g.nombre as grupo, 
  626.        date_format(created_at, "%Y-%m-%d")                       as fecha_corregida,
  627.        max(if(registro_casino.timestamp_entregado > 0, created_at, null))           as fecha_emision,
  628.        max(if(registro_casino.timestamp_consumido > 0, registro_casino.updated_at, null))           as fecha_consumo,
  629.        time_to_sec(timediff(max(if(registro_casino.created_at = 0, created_at, null)),
  630.                 min(if(registro_casino.created_at = 1, created_at, null)))) as total_diario,
  631.         sum(if(registro_casino.timestamp_entregado > 0,1,0)) as cantidad_entradas,
  632.         sum(if(registro_casino.timestamp_consumido >0,1,0)) as cantidad_salidas
  633. from registro_casino
  634. join persona p on p.id = registro_casino.persona_id
  635. left join menu m on m.id = registro_casino.menu_id
  636. left join grupo g on g.id = p.grupo_id
  637. where created_at > :desde and created_at < :hasta
  638. group by persona_id, fecha_corregida, m.id
  639.             ';
  640.         $stmt $conn->prepare($sql);
  641.         $stmt->execute(['desde' => $desdereal->format('Y-m-d H:i:s'), 'hasta' => $hastareal->format('Y-m-d H:i:s')]);
  642.         $registros $stmt->fetchAllAssociative();
  643.         //dd($registros);
  644.         $responseString "RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, MENU, FECHA, FECHA EMITIDO, FECHA CONSUMIDO, CANT_IMPRESOS1, CONSUMIDO\n";
  645.         //foreach
  646.         foreach ($registros as $fila) {
  647.             $responseString $responseString .
  648.                 $fila['rut'] . "," .
  649.                 $fila['nombre'] . "," .
  650.                 $fila['paterno'] . "," .
  651.                 $fila['materno'] . "," .
  652.                 $fila['grupo'] . "," .
  653.                 $fila['menun'] . "," .
  654.                 $fila['fecha_corregida'] . "," .
  655.                 $fila['fecha_emision'] . "," .
  656.                 $fila['fecha_consumo'] . "," .
  657.                 $fila['cantidad_entradas'] . "," .
  658.                 $fila['cantidad_salidas'] .
  659.                 "\n";
  660.         }
  661.         $response = new Response();
  662.         $response->headers->set('Content-type''text/csv');
  663.         $response->headers->set('Cache-Control''private');
  664.         $response->headers->set('Content-Disposition''attachment; filename="' "casino.csv" '";');
  665.         $response->sendHeaders();
  666.         $response->setContent($responseString);
  667.         return $response;
  668.     }
  669.     /**
  670.      * @Route("ver/resumencasino/desde/{desde}/{hasta}" , name="ver_resumen_csv_operativo")
  671.      */
  672.     public function verresumenCsvCasino($desde$hasta)
  673.     {
  674.         $desdereal DateTime::createFromFormat('!Y-m-d'$desde, new DateTimeZone('America/Santiago'));
  675.         $hastareal DateTime::createFromFormat('!Y-m-d'$hasta, new DateTimeZone('America/Santiago'));
  676.         $conn $this->getDoctrine()->getManager()->getConnection();
  677.         $sql '
  678.             select persona_id,p.rut, p.nombre,p.paterno,p.materno,m.nombre as menun, g.nombre as grupo, 
  679.        date_format(created_at, "%Y-%m-%d")                       as fecha_corregida,
  680.        max(if(registro_casino.timestamp_entregado > 0, created_at, null))           as fecha_emision,
  681.        max(if(registro_casino.timestamp_consumido > 0, registro_casino.updated_at, null))           as fecha_consumo,
  682.        time_to_sec(timediff(max(if(registro_casino.created_at = 0, created_at, null)),
  683.                 min(if(registro_casino.created_at = 1, created_at, null)))) as total_diario,
  684.         sum(if(registro_casino.timestamp_entregado > 0,1,0)) as cantidad_entradas,
  685.         sum(if(registro_casino.timestamp_consumido >0,1,0)) as cantidad_salidas
  686. from registro_casino
  687. join persona p on p.id = registro_casino.persona_id
  688. left join menu m on m.id = registro_casino.menu_id
  689. left join grupo g on g.id = p.grupo_id
  690. where created_at > :desde and created_at < :hasta
  691. group by persona_id, fecha_corregida, m.id
  692.             ';
  693.         $stmt $conn->prepare($sql);
  694.         $stmt->execute(['desde' => $desdereal->format('Y-m-d H:i:s'), 'hasta' => $hastareal->format('Y-m-d H:i:s')]);
  695.         $registros $stmt->fetchAllAssociative();
  696.         //dd($registros);
  697.         $responseString "RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, MENU, FECHA, FECHA EMITIDO, FECHA CONSUMIDO, CANT_IMPRESOS, CANT_CONSUMIDOS\n";
  698.         //foreach
  699.         foreach ($registros as $fila) {
  700.             $responseString $responseString .
  701.                 $fila['rut'] . "," .
  702.                 $fila['nombre'] . "," .
  703.                 $fila['paterno'] . "," .
  704.                 $fila['materno'] . "," .
  705.                 $fila['grupo'] . "," .
  706.                 $fila['menun'] . "," .
  707.                 $fila['fecha_corregida'] . "," .
  708.                 $fila['fecha_emision'] . "," .
  709.                 $fila['fecha_consumo'] . "," .
  710.                 $fila['cantidad_entradas'] . "," .
  711.                 $fila['cantidad_salidas'] . "," .
  712.                 "\n";
  713.         }
  714.         $respuesta = [];
  715.         $respuesta['rows'] = $responseString;
  716.         $respuesta['registros'] = $registros;
  717.         return $respuesta;
  718.     }
  719.     /**
  720.      * @Route("resumen", name="resumen")
  721.      */
  722.     public function descargaResumenOperativoTotal(Request $request)
  723.     {
  724.         $desde_inicial = new \DateTime('now -1 day');
  725.         $hasta_inicial = new \DateTime();
  726.         $respuesta $this->listadoresumen();
  727.         $matriz $this->tablaresumen();
  728.         return $this->render('descarga_eventos/tablaoperativototal.html.twig', [
  729.             'registros' => $respuesta['registros'],
  730.             'matriz' => $matriz,
  731.         ]);
  732.     }
  733.     public function verresumenCsvOperativoTotal()
  734.     {
  735.         $desdereal = new \DateTime('2022-04-26 00:00:11');
  736.         $hastareal = new \DateTime('2022-04-26 23:59:59');
  737.         //   $desdereal = DateTime::createFromFormat('!Y-m-d', $hasta_inicial, new DateTimeZone('America/Santiago'))->setTimezone(new DateTimeZone('UTC'));
  738.         //   $hastareal = DateTime::createFromFormat('!Y-m-d', $hasta_inicial, new DateTimeZone('America/Santiago'))->setTimezone(new DateTimeZone('UTC'));
  739.         $conn $this->getDoctrine()->getManager()->getConnection();
  740.         $sql '
  741.             select   po.nombre as porticonombre,
  742.                    COUNT(DISTINCT(evento.persona_id)) as cuenta,
  743.                    
  744.         sum(if((evento.entrada = 1) and (evento.persona_id ),1,0)) as ultima_entrada,
  745.        date_format(fecha, "%Y-%m-%d")                       as fecha_corregida,
  746.        max(if(evento.entrada = 0, (fecha), null))           as fecha_salida,
  747.        min(if(evento.entrada = 1, (fecha), null))           as fecha_entrada,
  748.        time_to_sec(timediff(max(if(evento.entrada = 0, (fecha), null)),
  749.                 min(if(evento.entrada = 1, (fecha), null)))) as total_diario,
  750.         sum(if(evento.entrada = 1,1,0)) as cantidad_entradas,
  751.         sum(if(evento.entrada = 0,1,0)) as cantidad_salidas,
  752.        sum(time_to_sec(if(evento.entrada=1,timediff(timestamp(date(fecha),"23:59:59"), fecha),timediff(fecha,timestamp(date(fecha),"23:59:59"))) )) as total_en_planta,
  753.        group_concat(if(evento.entrada=1,"IN ","OUT "),evento.fecha SEPARATOR "; ") as eventos
  754. from evento
  755. join persona p on p.id = evento.persona_id
  756. join equipo e on e.id = evento.equipo_id
  757. join portico po on po.id = e.portico_id
  758. left join grupo g on g.id = p.grupo_id
  759. where autorizado= true and fecha > :desde and fecha < :hasta 
  760. group by fecha_corregida, po.nombre
  761.             ';
  762.         $stmt $conn->prepare($sql);
  763.         $stmt->execute(['desde' => $desdereal->format('Y-m-d H:i:s'), 'hasta' => $hastareal->format('Y-m-d H:i:s')]);
  764.         $registros $stmt->fetchAllAssociative();
  765. //        dd($portico);
  766.         $responseString "RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, FECHA, ENTRADA, SALIDA, CANT_ENTRADAS, CANT_SALIDAS, TOTAL, TIEMPO EN PLANTA\n";
  767.         //foreach
  768.         foreach ($registros as $fila) {
  769.             $total_diario 0;
  770.             $total_en_planta 0;
  771.             if ($fila['total_diario'] < 0)
  772.                 $total_diario 24 $fila['total_diario'] / 3600;
  773.             else $total_diario $fila['total_diario'] / 3600;
  774.             if ($fila['total_en_planta'] < 0)
  775.                 $total_en_planta 24 $fila['total_en_planta'] / 3600;
  776.             else $total_en_planta $fila['total_en_planta'] / 3600;
  777.             if ($total_en_planta $total_diario)
  778.                 $total_en_planta $total_diario;
  779.             $responseString $responseString .
  780.                 $fila['fecha_corregida'] . "," .
  781.                 $fila['fecha_entrada'] . "," .
  782.                 $fila['fecha_salida'] . "," .
  783.                 $fila['cantidad_entradas'] . "," .
  784.                 $fila['cantidad_salidas'] . "," .
  785.                 $total_diario "," .
  786.                 $total_en_planta "," .
  787.                 $fila['eventos'] .
  788.                 "\n";
  789.         }
  790.         $respuesta = [];
  791.         $respuesta['rows'] = $responseString;
  792.         $respuesta['registros'] = $registros;
  793.         return $respuesta;
  794.     }
  795.     public function listadoresumen()
  796.     {
  797.         $desdereal = new \DateTime('now -1 day');
  798.         $hastareal = new \DateTime('now');
  799.         //   $desdereal = DateTime::createFromFormat('!Y-m-d', $hasta_inicial, new DateTimeZone('America/Santiago'))->setTimezone(new DateTimeZone('UTC'));
  800.         //   $hastareal = DateTime::createFromFormat('!Y-m-d', $hasta_inicial, new DateTimeZone('America/Santiago'))->setTimezone(new DateTimeZone('UTC'));
  801.         $conn $this->getDoctrine()->getManager()->getConnection();
  802.         $sql '
  803.             select persona_id,p.rut, p.nombre as persona,p.paterno as paterno ,p.materno as materno, g.nombre as grupo,
  804.         
  805.        COUNT(DISTINCT(evento.persona_id)) as cuenta,             
  806.                    
  807.        max(if(evento.entrada = 0, (po.nombre), null))           as p_salida,
  808.        max(if(evento.entrada = 1, (po.nombre), null))           as p_entrada,
  809.                    
  810.        max(if(evento.entrada = 0, (fecha), null))           as h_salida,
  811.        max(if(evento.entrada = 1, (fecha), null))           as h_entrada,
  812.                    
  813.  if(max(if(evento.entrada = 0, (po.nombre), null))  = "Peatones 1" and max(if(evento.entrada = 0, (fecha), null)) > max(if(evento.entrada = 1, (fecha), null)),
  814.       "afuera", 
  815.       if(max(if(evento.entrada = 1, (fecha), null))    <      max(if(evento.entrada = 0, (fecha), null))  ,
  816.         "en planta",
  817.         if( max(if(evento.entrada = 1, (po.nombre), null))  = "Peatones 1",
  818.            "en planta",
  819.             if(max(if(evento.entrada = 1, (po.nombre), "x")) = "x",
  820.                 "en planta",
  821.                  max(if(evento.entrada = 1, (po.nombre), null))
  822.                 )
  823.             
  824.         )                       
  825.      )
  826.  )   
  827.      
  828.      as lugar,
  829.                    
  830.                    
  831.        date_format(fecha, "%Y-%m-%d")                       as fecha_corregida,
  832.        max(if(evento.entrada = 0, (fecha), null))           as fecha_salida,
  833.        min(if(evento.entrada = 1, (fecha), null))           as fecha_entrada,
  834.        time_to_sec(timediff(max(if(evento.entrada = 0, (fecha), null)),
  835.                 min(if(evento.entrada = 1, (fecha), null)))) as total_diario,
  836.         sum(if(evento.entrada = 1,1,0)) as cantidad_entradas,
  837.         sum(if(evento.entrada = 0,1,0)) as cantidad_salidas,
  838.        sum(time_to_sec(if(evento.entrada=1,timediff(timestamp(date(fecha),"23:59:59"), fecha),timediff(fecha,timestamp(date(fecha),"23:59:59"))) )) as total_en_planta,
  839.        group_concat(if(evento.entrada=1,"IN ","OUT "),evento.fecha SEPARATOR "; ") as eventos
  840. from evento
  841. join persona p on p.id = evento.persona_id
  842. join equipo e on e.id = evento.equipo_id
  843. join portico po on po.id = e.portico_id
  844. left join grupo g on g.id = p.grupo_id
  845. where autorizado= true and fecha > :desde and fecha < :hasta  
  846. group by persona_id, fecha_corregida
  847.             ';
  848.         $stmt $conn->prepare($sql);
  849.         $stmt->execute(['desde' => $desdereal->format('Y-m-d H:i:s'), 'hasta' => $hastareal->format('Y-m-d H:i:s')]);
  850.         $registros $stmt->fetchAllAssociative();
  851. //        dd($portico);
  852.         $responseString "RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, FECHA, ENTRADA, SALIDA, CANT_ENTRADAS, CANT_SALIDAS, TOTAL, TIEMPO EN PLANTA\n";
  853.         //foreach
  854.         foreach ($registros as $fila) {
  855.             $total_diario 0;
  856.             $total_en_planta 0;
  857.             if ($fila['total_diario'] < 0)
  858.                 $total_diario 24 $fila['total_diario'] / 3600;
  859.             else $total_diario $fila['total_diario'] / 3600;
  860.             if ($fila['total_en_planta'] < 0)
  861.                 $total_en_planta 24 $fila['total_en_planta'] / 3600;
  862.             else $total_en_planta $fila['total_en_planta'] / 3600;
  863.             if ($total_en_planta $total_diario)
  864.                 $total_en_planta $total_diario;
  865.             $responseString $responseString .
  866.                 $fila['fecha_corregida'] . "," .
  867.                 $fila['fecha_entrada'] . "," .
  868.                 $fila['fecha_salida'] . "," .
  869.                 $fila['cantidad_entradas'] . "," .
  870.                 $fila['cantidad_salidas'] . "," .
  871.                 $total_diario "," .
  872.                 $total_en_planta "," .
  873.                 $fila['eventos'] .
  874.                 "\n";
  875.         }
  876.         $respuesta = [];
  877.         $respuesta['rows'] = $responseString;
  878.         $respuesta['registros'] = $registros;
  879.         return $respuesta;
  880.     }
  881.     public function tablaresumen()
  882.     {
  883.         $desdereal = new \DateTime('now -1 day');
  884.         $hastareal = new \DateTime('now');
  885.         //   $desdereal = DateTime::createFromFormat('!Y-m-d', $hasta_inicial, new DateTimeZone('America/Santiago'))->setTimezone(new DateTimeZone('UTC'));
  886.         //   $hastareal = DateTime::createFromFormat('!Y-m-d', $hasta_inicial, new DateTimeZone('America/Santiago'))->setTimezone(new DateTimeZone('UTC'));
  887.         $conn $this->getDoctrine()->getManager()->getConnection();
  888.         $sql '
  889.             select persona_id,p.rut, p.nombre as persona,p.paterno as paterno ,p.materno as materno, g.nombre as grupo,
  890.         
  891.        COUNT(DISTINCT(evento.persona_id)) as cuenta,             
  892.                    
  893.        max(if(evento.entrada = 0, (po.nombre), null))           as p_salida,
  894.        max(if(evento.entrada = 1, (po.nombre), null))           as p_entrada,
  895.                    
  896.        max(if(evento.entrada = 0, (fecha), null))           as h_salida,
  897.        max(if(evento.entrada = 1, (fecha), null))           as h_entrada,
  898.                    
  899. if(max(if(evento.entrada = 0, (po.nombre), null))  = "Peatones 1" and max(if(evento.entrada = 0, (fecha), null)) > max(if(evento.entrada = 1, (fecha), null)),
  900.       "afuera", 
  901.       if(max(if(evento.entrada = 1, (fecha), null))    <      max(if(evento.entrada = 0, (fecha), null))  ,
  902.         "en planta",
  903.         if( max(if(evento.entrada = 1, (po.nombre), null))  = "Peatones 1",
  904.            "en planta",
  905.             if(max(if(evento.entrada = 1, (po.nombre), "x")) = "x",
  906.                 "en planta",
  907.                  max(if(evento.entrada = 1, (po.nombre), null))
  908.                 )
  909.             
  910.         )                       
  911.      )
  912.  )  
  913.      
  914.      as lugar,
  915.                    
  916.                    
  917.        date_format(fecha, "%Y-%m-%d")                       as fecha_corregida,
  918.        max(if(evento.entrada = 0, (fecha), null))           as fecha_salida,
  919.        min(if(evento.entrada = 1, (fecha), null))           as fecha_entrada,
  920.        time_to_sec(timediff(max(if(evento.entrada = 0, (fecha), null)),
  921.                 min(if(evento.entrada = 1, (fecha), null)))) as total_diario,
  922.         sum(if(evento.entrada = 1,1,0)) as cantidad_entradas,
  923.         sum(if(evento.entrada = 0,1,0)) as cantidad_salidas,
  924.        sum(time_to_sec(if(evento.entrada=1,timediff(timestamp(date(fecha),"23:59:59"), fecha),timediff(fecha,timestamp(date(fecha),"23:59:59"))) )) as total_en_planta,
  925.        group_concat(if(evento.entrada=1,"IN ","OUT "),evento.fecha SEPARATOR "; ") as eventos
  926. from evento
  927. join persona p on p.id = evento.persona_id
  928. join equipo e on e.id = evento.equipo_id
  929. join portico po on po.id = e.portico_id
  930. left join grupo g on g.id = p.grupo_id
  931. where autorizado= true and fecha > :desde and fecha < :hasta  
  932. group by persona_id, fecha_corregida
  933.             ';
  934.         $stmt $conn->prepare($sql);
  935.         $stmt->execute(['desde' => $desdereal->format('Y-m-d H:i:s'), 'hasta' => $hastareal->format('Y-m-d H:i:s')]);
  936.         $registros $stmt->fetchAllAssociative();
  937. //        dd($portico);
  938.         $responseString "RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, FECHA, ENTRADA, SALIDA, CANT_ENTRADAS, CANT_SALIDAS, TOTAL, TIEMPO EN PLANTA\n";
  939.         //foreach
  940.         foreach ($registros as $fila) {
  941.             $total_diario 0;
  942.             $total_en_planta 0;
  943.             if ($fila['total_diario'] < 0)
  944.                 $total_diario 24 $fila['total_diario'] / 3600;
  945.             else $total_diario $fila['total_diario'] / 3600;
  946.             if ($fila['total_en_planta'] < 0)
  947.                 $total_en_planta 24 $fila['total_en_planta'] / 3600;
  948.             else $total_en_planta $fila['total_en_planta'] / 3600;
  949.             if ($total_en_planta $total_diario)
  950.                 $total_en_planta $total_diario;
  951.             $responseString $responseString .
  952.                 $fila['fecha_corregida'] . "," .
  953.                 $fila['fecha_entrada'] . "," .
  954.                 $fila['fecha_salida'] . "," .
  955.                 $fila['cantidad_entradas'] . "," .
  956.                 $fila['cantidad_salidas'] . "," .
  957.                 $total_diario "," .
  958.                 $total_en_planta "," .
  959.                 $fila['eventos'] .
  960.                 "\n";
  961.         }
  962.         $respuesta = [];
  963.         $respuesta['rows'] = $responseString;
  964.         $respuesta['registros'] = $registros;
  965.         $matriz = array( ) ;
  966.         foreach($respuesta['registros'] as $registro){
  967.             $matriz[$registro["grupo"]] = ;
  968.         }
  969.         $i=1;
  970.         foreach($respuesta['registros'] as $registro){
  971.             $matriz2[$registro["grupo"]]["nombre"] = $registro["grupo"] ;
  972.             $matriz2[$registro["grupo"]]["total"] = ;
  973.             $matriz2[$registro["grupo"]]["en_planta"] = ;
  974.             $matriz2[$registro["grupo"]]["afuera"] = ;
  975.             $matriz2[$registro["grupo"]]["cerezas"] = ;
  976.             $matriz2[$registro["grupo"]]["carozos"] = ;
  977.             $matriz2[$registro["grupo"]]["frigorifico"] = ;
  978.             $matriz2[$registro["grupo"]]["bodega"] = ;
  979.         $i++;
  980.         }
  981.         foreach($respuesta['registros'] as $registro){
  982.             $matriz2[$registro["grupo"]]["total"] = $matriz2[$registro["grupo"]]["total"] + ;
  983.             if($registro["lugar"]=="en planta"){
  984.                 $matriz2[$registro["grupo"]]["en_planta"] = $matriz2[$registro["grupo"]]["en_planta"] + ;
  985.             }
  986.             if($registro["lugar"]=="afuera"){
  987.                 $matriz2[$registro["grupo"]]["afuera"] = $matriz2[$registro["grupo"]]["afuera"] + ;
  988.             }
  989.             if($registro["lugar"]=="cerezas"){
  990.                 $matriz2[$registro["grupo"]]["cerezas"] = $matriz2[$registro["grupo"]]["cerezas"] + ;
  991.             }
  992.             if($registro["lugar"]=="carozos"){
  993.                 $matriz2[$registro["grupo"]]["carozos"] = $matriz2[$registro["grupo"]]["carozos"] + ;
  994.             }
  995.             if($registro["lugar"]=="frigorifico"){
  996.                 $matriz2[$registro["grupo"]]["frigorifico"] = $matriz2[$registro["grupo"]]["frigorifico"] + ;
  997.             }
  998.             if($registro["lugar"]=="bodega"){
  999.                 $matriz2[$registro["grupo"]]["bodega"] = $matriz2[$registro["grupo"]]["bodega"] + ;
  1000.             }
  1001.         }
  1002.         return $matriz2;
  1003.     }
  1004.     /**
  1005.      * @Route("ver/resumenopertivo/desde/{desde}/{hasta}" , name="ver_resumenoperativo_csv")
  1006.      */
  1007.     public function verresumenoperativoCsv($desde$hasta)
  1008.     {
  1009.         $desdereal DateTime::createFromFormat('!Y-m-d H:i:s'$desde, new DateTimeZone('America/Santiago'));
  1010.         $hastareal DateTime::createFromFormat('!Y-m-d H:i:s'$hasta, new DateTimeZone('America/Santiago'));
  1011.         $conn $this->getDoctrine()->getManager()->getConnection();
  1012.         $sql '
  1013.             select persona_id,p.rut, p.nombre,p.paterno,p.materno, g.nombre as grupo,
  1014.        date_format(fecha, "%Y-%m-%d")                       as fecha_corregida,
  1015.         max(if(evento.entrada = 0, (fecha), null))           as fecha_salida,
  1016.         min(if(evento.entrada = 1, (fecha), null))           as fecha_entrada,
  1017.         
  1018.         time_to_sec(timediff(max(if(evento.entrada = 0 and po.operativo = 0, (fecha), null)),
  1019.         
  1020.         min(if(evento.entrada = 1 and po.operativo = 0, (fecha), null)))) as total_diario_acceso,
  1021.                    
  1022.                    
  1023.        time_to_sec(timediff(max(if(evento.entrada = 0 and po.operativo = 1, (fecha), null)),
  1024.         
  1025.         min(if(evento.entrada = 1 and po.operativo = 1, (fecha), null)))) as total_diario_operativo,
  1026.                    
  1027.         sum(if(evento.entrada = 1 and po.operativo = 1,1,0)) as cantidad_entradas_operativas,
  1028.         sum(if(evento.entrada = 0 and po.operativo = 1,1,0)) as cantidad_salidas_operativas,
  1029.                    
  1030.         sum(if(evento.entrada = 1 and po.operativo = 0,1,0)) as cantidad_entradas_acceso,
  1031.         sum(if(evento.entrada = 0 and po.operativo = 0,1,0)) as cantidad_salidas_acceso,
  1032.                    
  1033.         sum(
  1034.             if( po.operativo = 0,
  1035.                 time_to_sec(
  1036.                 if(evento.entrada=1 and po.operativo = 0,
  1037.                     timediff(
  1038.                         timestamp(date(fecha),"23:59:59"), 
  1039.                         fecha),
  1040.                     timediff(
  1041.                         fecha,
  1042.                         timestamp(date(fecha),"23:59:59"))
  1043.                     ) 
  1044.                 ),
  1045.                 0
  1046.                 
  1047.             )
  1048.             ) as total_en_planta_acceso,
  1049.                    
  1050.         sum(
  1051.             if(po.operativo = 1,
  1052.                 time_to_sec(
  1053.                 if(evento.entrada=1 and po.operativo = 1,
  1054.                     timediff(timestamp(date(fecha),"23:59:59"), fecha),
  1055.                     timediff(fecha,timestamp(date(fecha),"23:59:59"))) 
  1056.                 ),
  1057.                 0)
  1058.             ) as total_en_planta_operativo,
  1059.        
  1060.         group_concat(if(evento.entrada=1,"IN ","OUT "),evento.fecha SEPARATOR "; ") as eventos,
  1061.         group_concat(if(evento.entrada=1,"E","S"),po.operativo SEPARATOR ";") as eventos2
  1062.             
  1063. from evento
  1064. join persona p on p.id = evento.persona_id
  1065. join equipo e on e.id = evento.equipo_id
  1066. join portico po on po.id = e.portico_id
  1067.     
  1068. left join grupo g on g.id = p.grupo_id
  1069. where fecha > :desde and fecha < :hasta and  eliminado is not true 
  1070. group by persona_id, fecha_corregida
  1071.             ';
  1072.         $stmt $conn->prepare($sql);
  1073.         $stmt->execute(['desde' => $desdereal->format('Y-m-d H:i:s'), 'hasta' => $hastareal->format('Y-m-d H:i:s')]);
  1074.         $registros $stmt->fetchAllAssociative();
  1075.         //dd($registros);
  1076.         $responseString "RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, FECHA, ENTRADA, SALIDA, CANT_ENTRADAS, CANT_SALIDAS, TOTAL, TIEMPO EN PLANTA\n";
  1077.         //foreach
  1078.         foreach ($registros as $fila) {
  1079.             $total_diario 0;
  1080.             $total_en_planta 0;
  1081.             if ($fila['total_diario_acceso'] < 0)
  1082.                 $total_diario 24 $fila['total_diario_acceso'] / 3600;
  1083.             else $total_diario $fila['total_diario_acceso'] / 3600;
  1084.             if ($fila['total_diario_operativo'] < 0)
  1085.                 $total_diario 24 $fila['total_diario_operativo'] / 3600;
  1086.             else $total_diario $fila['total_diario_operativo'] / 3600;
  1087.             if ($fila['total_en_planta_operativo'] < 0)
  1088.                 $total_en_planta 24 $fila['total_en_planta_operativo'] / 3600;
  1089.             else $total_en_planta $fila['total_en_planta_operativo'] / 3600;
  1090.             if ($fila['total_en_planta_acceso'] < 0)
  1091.                 $total_en_planta 24 $fila['total_en_planta_acceso'] / 3600;
  1092.             else $total_en_planta $fila['total_en_planta_acceso'] / 3600;
  1093.             if ($total_en_planta $total_diario)
  1094.                 $total_en_planta $total_diario;
  1095.             // Validar si existen marcas de entrada y salida
  1096.             $fecha_entrada $fila['fecha_entrada'] ?? '';
  1097.             $fecha_salida $fila['fecha_salida'] ?? '';
  1098.             $responseString $responseString .
  1099.                 $fila['rut'] . "," .
  1100.                 $fila['nombre'] . "," .
  1101.                 $fila['paterno'] . "," .
  1102.                 $fila['materno'] . "," .
  1103.                 $fila['grupo'] . "," .
  1104.                 $fila['fecha_corregida'] . "," .
  1105.                 $fecha_entrada "," .
  1106.                 $fecha_salida "," .
  1107.                 $fila['cantidad_entradas_acceso'] . "," .
  1108.                 $fila['cantidad_salidas_acceso'] . "," .
  1109.                 $fila['cantidad_entradas_operativas'] . "," .
  1110.                 $fila['cantidad_salidas_operativas'] . "," .
  1111.                 $fila['total_en_planta_acceso'] . "," .
  1112.                 $fila['total_en_planta_operativo'] . "," .
  1113.                 $fila['total_diario_acceso'] . "," .
  1114.                 $fila['total_diario_operativo'] . "," .
  1115.                 $total_diario "," .
  1116.                 $fila['eventos'] .
  1117.                 $fila['eventos2'] .
  1118.                 "\n";
  1119.         }
  1120.         $respuesta = [];
  1121.         $respuesta['rows'] = $responseString;
  1122.         $respuesta['registros'] = $registros;
  1123.         return $respuesta;
  1124.     }
  1125.     /**
  1126.      * @Route("descarga/resumen/porfechatotal", name="descarga_resumen_por_fecha_total")
  1127.      */
  1128.     public function descargaResumentotal(Request $request)
  1129.     {
  1130.         $desde_inicial = new \DateTime('now -1 day');
  1131.         $hasta_inicial = new \DateTime();
  1132.         $form $this->createFormBuilder()
  1133.             ->add('desde'DateType::class, [
  1134.                 // renders it as a single text box
  1135.                 'widget' => 'single_text',
  1136.                 'data' => $desde_inicial,
  1137.             ])
  1138.             ->add('hasta'DateType::class, [
  1139.                 // renders it as a single text box
  1140.                 'widget' => 'single_text',
  1141.                 'data' => $hasta_inicial,
  1142.             ])
  1143.             ->getForm();
  1144.         $form->handleRequest($request);
  1145.         if ($form->isSubmitted() && $form->isValid()) {
  1146.             $desde $form->get('desde')->getData('desde');
  1147.             $hasta $form->get('hasta')->getData('hasta');
  1148.             $respuesta $this->verresumenCsv($desde->format('Y-m-d'), $hasta->format('Y-m-d'));
  1149.             return $this->render('descarga_eventos/reporte_total.html.twig', [
  1150.                 'form' => $form->createView(),
  1151.                 'desde' => $desde->format('Y-m-d'),
  1152.                 'hasta' => $hasta->format('Y-m-d'),
  1153.                 'rows' => $respuesta['rows'],
  1154.                 'registros' => $respuesta['registros'],
  1155.             ]);
  1156.             //return $this->redirectToRoute('ver_resumen_csv', array('desde' => $desde->format('Y-m-d'), 'hasta' => $hasta->format('Y-m-d')));
  1157.         }
  1158.         $respuesta $this->verresumenCsv($desde_inicial->format('Y-m-d'), $hasta_inicial->format('Y-m-d'));
  1159.         return $this->render('descarga_eventos/reporte_total.html.twig', [
  1160.             'form' => $form->createView(),
  1161.             'desde' => $desde_inicial->format('Y-m-d'),
  1162.             'hasta' => $hasta_inicial->format('Y-m-d'),
  1163.             'registros' => $respuesta['registros'],
  1164.         ]);
  1165.     }
  1166. }