<?php
namespace App\Controller;
use App\Entity\Evento;
use App\Entity\Portico;
use App\Entity\RegistroCasino;
use DateTime;
use DateTimeZone;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Mapping\Entity;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\TimeType;
use Symfony\Component\Validator\Constraints\Choice;
use function Doctrine\ORM\QueryBuilder;
class DescargaEventosController extends AbstractController
{
/**
* @Route("/descarga/eventos", name="descarga_eventos")
*/
public function index()
{
$eventos = $this->getDoctrine()
->getRepository(Evento::class)
->findAll10k();
$responseString = "ID,RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, FECHA, EQUIPO, ENTRADA, AUTORIZADO\n";
foreach ($eventos as $evento) {
if ($evento->getPersona()) {
$grupo = "";
if ($evento->getPersona()->getGrupo() != null)
$grupo = $evento->getPersona()->getGrupo()->getNombre();
$responseString = $responseString .
$evento->getId() . "," .
$evento->getPersona()->getRut() . "," .
$evento->getPersona()->getNombre() . "," .
$evento->getPersona()->getPaterno() . "," .
$evento->getPersona()->getMaterno() . "," .
$grupo . "," .
$evento->getFecha()->format("Y-m-d H:i:s") . "," .
$evento->getEquipo()->getNombre() . "," .
$evento->getEntrada() . "," .
$evento->getAutorizado() .
"\n";
} else {
$responseString = $responseString .
$evento->getId() . "," .
"0" . "," .
"0" . "," .
"0" . "," .
"0" . "," .
"0" . "," .
$evento->getFecha()->format("Y-m-d H:i:s") . "," .
$evento->getEquipo()->getNombre() . "," .
$evento->getEntrada() . "," .
$evento->getAutorizado() .
"\n";
}
}
$response = new Response();
$response->headers->set('Content-type', 'text/csv');
$response->headers->set('Cache-Control', 'private');
$response->headers->set('Content-Disposition', 'attachment; filename="' . "Eventos.csv" . '";');
$response->sendHeaders();
$response->setContent($responseString);
return $response;
}
/**
* @Route("/descarga/desde/{desde}/{hasta}", name="descarga_eventos_fecha_csv")
*/
public function indexDeFecha($desde, $hasta)
{
$desdereal = DateTime::createFromFormat('!Y-m-d', $desde);
$hastareal = DateTime::createFromFormat('!Y-m-d', $hasta);
$eventos = $this->getDoctrine()
->getRepository(Evento::class)
->findDesdeHasta($desdereal, $hastareal);
$responseString = "ID,RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, FECHA, EQUIPO, ENTRADA, AUTORIZADO\n";
foreach ($eventos as $evento) {
if ($evento->getPersona()) {
$responseString = $responseString .
$evento->getId() . "," .
$evento->getPersona()->getRut() . "," .
$evento->getPersona()->getNombre() . "," .
$evento->getPersona()->getPaterno() . "," .
$evento->getPersona()->getMaterno() . ",";
if ($evento->getPersona()->getGrupo()) {
$responseString = $responseString . $evento->getPersona()->getGrupo()->getNombre() . ",";
} else {
$responseString = $responseString . "" . ",";
}
$responseString = $responseString .
$evento->getFecha()->format("Y-m-d H:i:s") . "," .
$evento->getEquipo()->getNombre() . "," .
$evento->getEntrada() . "," .
$evento->getAutorizado() .
"\n";
} else {
$responseString = $responseString .
$evento->getId() . "," .
"0" . "," .
"0" . "," .
"0" . "," .
"0" . "," .
"0" . "," .
$evento->getFecha()->format("Y-m-d H:i:s") . "," .
$evento->getEquipo()->getNombre() . "," .
$evento->getEntrada() . "," .
$evento->getAutorizado() .
"\n";
}
}
$response = new Response();
$response->headers->set('Content-type', 'text/csv');
$response->headers->set('Cache-Control', 'private');
$response->headers->set('Content-Disposition', 'attachment; filename="' . "Eventos.csv" . '";');
$response->sendHeaders();
$response->setContent($responseString);
return $response;
}
/**
* @Route("/descarga/eventos/porfecha", name="descarga_eventos_por_fecha")
*/
public function byfecha(Request $request)
{
$form = $this->createFormBuilder()
->add('desde', DateType::class, [
'widget' => 'single_text',
])
->add('hasta', DateType::class, [
'widget' => 'single_text',
])
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$desde = $form->get('desde')->getData('desde');
$hasta = $form->get('hasta')->getData('hasta');
return $this->redirectToRoute('descarga_eventos_fecha_csv', array('desde' => $desde->format('Y-m-d'), 'hasta' => $hasta->format('Y-m-d')));
}
return $this->render('descarga_eventos/byfecha.html.twig', [
'form' => $form->createView()
]);
}
/**
* @Route("ver/resumen/desde/{desde}/{hasta}" , name="ver_resumen_csv")
*/
public function verresumenCsv($desde, $hasta)
{
$desdereal = DateTime::createFromFormat('!Y-m-d', $desde, new DateTimeZone('America/Santiago'));
$hastareal = DateTime::createFromFormat('!Y-m-d', $hasta, new DateTimeZone('America/Santiago'));
$conn = $this->getDoctrine()->getManager()->getConnection();
$sql = '
select persona_id,p.rut, p.nombre,p.paterno,p.materno, g.nombre as grupo,
date_format(fecha, "%Y-%m-%d") as fecha_corregida,
max(if(evento.entrada = 0, (fecha), null)) as fecha_salida,
min(if(evento.entrada = 1, (fecha), null)) as fecha_entrada,
time_to_sec(timediff(max(if(evento.entrada = 0, (fecha), null)),
min(if(evento.entrada = 1, (fecha), null)))) as total_diario,
sum(if(evento.entrada = 1,1,0)) as cantidad_entradas,
sum(if(evento.entrada = 0,1,0)) as cantidad_salidas,
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,
group_concat(if(evento.entrada=1,"IN ","OUT "),evento.fecha SEPARATOR "; ") as eventos
from evento
join persona p on p.id = evento.persona_id
left join grupo g on g.id = p.grupo_id
where autorizado= true and fecha > :desde and fecha < :hasta and is_jornada is not false and eliminado is not true
group by persona_id, fecha_corregida
';
$stmt = $conn->prepare($sql);
$stmt->execute(['desde' => $desdereal->format('Y-m-d H:i:s'), 'hasta' => $hastareal->format('Y-m-d H:i:s')]);
$registros = $stmt->fetchAllAssociative();
//dd($registros);
$responseString = "RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, FECHA, ENTRADA, SALIDA, CANT_ENTRADAS, CANT_SALIDAS, TOTAL, TIEMPO EN PLANTA\n";
//foreach
foreach ($registros as $fila) {
$total_diario = 0;
$total_en_planta = 0;
if ($fila['total_diario'] < 0)
$total_diario = 24 + $fila['total_diario'] / 3600;
else $total_diario = $fila['total_diario'] / 3600;
if ($fila['total_en_planta'] < 0)
$total_en_planta = 24 + $fila['total_en_planta'] / 3600;
else $total_en_planta = $fila['total_en_planta'] / 3600;
if ($total_en_planta > $total_diario)
$total_en_planta = $total_diario;
$responseString = $responseString .
$fila['rut'] . "," .
$fila['nombre'] . "," .
$fila['paterno'] . "," .
$fila['materno'] . "," .
$fila['grupo'] . "," .
$fila['fecha_corregida'] . "," .
$fila['fecha_entrada'] . "," .
$fila['fecha_salida'] . "," .
$fila['cantidad_entradas'] . "," .
$fila['cantidad_salidas'] . "," .
$total_diario . "," .
$total_en_planta . "," .
$fila['eventos'] .
"\n";
}
$respuesta = [];
$respuesta['rows'] = $responseString;
$respuesta['registros'] = $registros;
return $respuesta;
}
/**
* @Route("descarga/resumen/desde/{desde}/{hasta}" , name="descarga_resumen_csv")
*/
public function resumenCsv($desde, $hasta)
{
$desdereal = DateTime::createFromFormat('!Y-m-d', $desde, new DateTimeZone('America/Santiago'));
$hastareal = DateTime::createFromFormat('!Y-m-d', $hasta, new DateTimeZone('America/Santiago'));
$conn = $this->getDoctrine()->getManager()->getConnection();
$sql = '
select persona_id,p.rut, p.nombre,p.paterno,p.materno, g.nombre as grupo,
date_format(fecha, "%Y-%m-%d") as fecha_corregida,
max(if(evento.entrada = 0, fecha, null)) as fecha_salida,
min(if(evento.entrada = 1, fecha, null)) as fecha_entrada,
time_to_sec(timediff(max(if(evento.entrada = 0, fecha, null)),
min(if(evento.entrada = 1, fecha, null)))) as total_diario,
sum(if(evento.entrada = 1,1,0)) as cantidad_entradas,
sum(if(evento.entrada = 0,1,0)) as cantidad_salidas,
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,
group_concat(if(evento.entrada=1,"IN ","OUT "),evento.fecha SEPARATOR "; ") as eventos
from evento
join persona p on p.id = evento.persona_id
left join grupo g on g.id = p.grupo_id
where autorizado= true and fecha > :desde and fecha < :hasta and is_jornada is not false
group by persona_id, fecha_corregida
';
$stmt = $conn->prepare($sql);
$stmt->execute(['desde' => $desdereal->format('Y-m-d H:i:s'), 'hasta' => $hastareal->format('Y-m-d H:i:s')]);
$registros = $stmt->fetchAllAssociative();
//dd($registros);
$responseString = "RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, FECHA, ENTRADA, SALIDA, CANT_ENTRADAS, CANT_SALIDAS, TOTAL, TIEMPO EN PLANTA, EVENTOS\n";
//foreach
foreach ($registros as $fila) {
$total_diario = 0;
$total_en_planta = 0;
if ($fila['total_diario'] < 0)
$total_diario = 24 + $fila['total_diario'] / 3600;
else $total_diario = $fila['total_diario'] / 3600;
if ($fila['total_en_planta'] < 0)
$total_en_planta = 24 + $fila['total_en_planta'] / 3600;
else $total_en_planta = $fila['total_en_planta'] / 3600;
if ($total_en_planta > $total_diario)
$total_en_planta = $total_diario;
$responseString = $responseString .
$fila['rut'] . "," .
$fila['nombre'] . "," .
$fila['paterno'] . "," .
$fila['materno'] . "," .
$fila['grupo'] . "," .
$fila['fecha_corregida'] . "," .
$fila['fecha_entrada'] . "," .
$fila['fecha_salida'] . "," .
$fila['cantidad_entradas'] . "," .
$fila['cantidad_salidas'] . "," .
$total_diario . "," .
$total_en_planta . "," .
$fila['eventos'] .
"\n";
}
$response = new Response();
$response->headers->set('Content-type', 'text/csv');
$response->headers->set('Cache-Control', 'private');
$response->headers->set('Content-Disposition', 'attachment; filename="' . "Eventos.csv" . '";');
$response->sendHeaders();
$response->setContent($responseString);
return $response;
}
/**
* @Route("descarga/resumen/porfecha", name="descarga_resumen_por_fecha")
*/
public function descargaResumen(Request $request)
{
$desde_inicial = new \DateTime('now -1 day');
$hasta_inicial = new \DateTime();
$form = $this->createFormBuilder()
->add('desde', DateType::class, [
// renders it as a single text box
'widget' => 'single_text',
'data' => $desde_inicial,
])
->add('hasta', DateType::class, [
// renders it as a single text box
'widget' => 'single_text',
'data' => $hasta_inicial,
])
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$desde = $form->get('desde')->getData('desde');
$hasta = $form->get('hasta')->getData('hasta');
$respuesta = $this->verresumenCsv($desde->format('Y-m-d'), $hasta->format('Y-m-d'));
return $this->render('descarga_eventos/tabla.html.twig', [
'form' => $form->createView(),
'desde' => $desde->format('Y-m-d'),
'hasta' => $hasta->format('Y-m-d'),
'rows' => $respuesta['rows'],
'registros' => $respuesta['registros'],
]);
//return $this->redirectToRoute('ver_resumen_csv', array('desde' => $desde->format('Y-m-d'), 'hasta' => $hasta->format('Y-m-d')));
}
$respuesta = $this->verresumenCsv($desde_inicial->format('Y-m-d'), $hasta_inicial->format('Y-m-d'));
return $this->render('descarga_eventos/tabla.html.twig', [
'form' => $form->createView(),
'desde' => $desde_inicial->format('Y-m-d'),
'hasta' => $hasta_inicial->format('Y-m-d'),
'registros' => $respuesta['registros'],
]);
}
//creado por miguel, mismo que el en planta pero con filtro de todos los opeartivos
/**
* @Route("descarga/resumenoperativototal/porfecha", name="descarga_resumenopertivototal_por_fecha")
*/
public function descargaResumenoperativo2(Request $request)
{
$desde_inicial = new \DateTime('now -1 day');
$hasta_inicial = new \DateTime();
$form = $this->createFormBuilder()
->add('desde', DateType::class, [
// renders it as a single text box
'widget' => 'single_text',
'data' => $desde_inicial,
])
->add('desde_hora', TimeType::class, [
'widget' => 'single_text',
'data' => \DateTime::createFromFormat('H:i', '00:00'),
])
->add('hasta', DateType::class, [
// renders it as a single text box
'widget' => 'single_text',
'data' => $hasta_inicial,
])
->add('hasta_hora', TimeType::class, [
'widget' => 'single_text',
'data' => \DateTime::createFromFormat('H:i', '23:59'),
])
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$desde = $form->get('desde')->getData('desde');
$desde_hora = $form->get('desde_hora')->getData('desde_hora');
$hasta = $form->get('hasta')->getData('hasta');
$hasta_hora = $form->get('hasta_hora')->getData('hasta_hora');
// Combinar fecha y hora
$desde->setTime((int)$desde_hora->format('H'), (int)$desde_hora->format('i'), 0);
$hasta->setTime((int)$hasta_hora->format('H'), (int)$hasta_hora->format('i'), 59);
$respuesta = $this->verresumenoperativoCsv($desde->format('Y-m-d H:i:s'), $hasta->format('Y-m-d H:i:s'));
return $this->render('descarga_eventos/tablareportetotal.html.twig', [
'form' => $form->createView(),
'desde' => $desde->format('Y-m-d H:i:s'),
'hasta' => $hasta->format('Y-m-d H:i:s'),
'rows' => $respuesta['rows'],
'registros' => $respuesta['registros'],
]);
//return $this->redirectToRoute('ver_resumen_csv', array('desde' => $desde->format('Y-m-d'), 'hasta' => $hasta->format('Y-m-d')));
}
//llamar al operativo
$desde_inicial->setTime(0, 0, 0);
$hasta_inicial->setTime(23, 59, 59);
$respuesta = $this->verresumenoperativoCsv($desde_inicial->format('Y-m-d H:i:s'), $hasta_inicial->format('Y-m-d H:i:s'));
return $this->render('descarga_eventos/tablareportetotal.html.twig', [
'form' => $form->createView(),
'desde' => $desde_inicial->format('Y-m-d H:i:s'),
'hasta' => $hasta_inicial->format('Y-m-d H:i:s'),
'registros' => $respuesta['registros'],
]);
}
//, defaults={"name" = "World"}
/**
* @Route("ver/resumenoperativo/{portico}/desde/{desde}/{hasta}" , name="ver_resumen_csv_operativo" , defaults={"portico" = "0"})
*/
public function verresumenCsvOperativo($portico, $desde, $hasta)
{
$desdereal = DateTime::createFromFormat('!Y-m-d', $desde, new DateTimeZone('America/Santiago'));
$hastareal = DateTime::createFromFormat('!Y-m-d', $hasta, new DateTimeZone('America/Santiago'));
$conn = $this->getDoctrine()->getManager()->getConnection();
$sql = '
select persona_id,p.rut, p.nombre,p.paterno,p.materno, g.nombre as grupo,
date_format(fecha, "%Y-%m-%d") as fecha_corregida,
max(if(evento.entrada = 0, (fecha), null)) as fecha_salida,
min(if(evento.entrada = 1, (fecha), null)) as fecha_entrada,
time_to_sec(timediff(max(if(evento.entrada = 0, (fecha), null)),
min(if(evento.entrada = 1, (fecha), null)))) as total_diario,
sum(if(evento.entrada = 1,1,0)) as cantidad_entradas,
sum(if(evento.entrada = 0,1,0)) as cantidad_salidas,
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,
group_concat(if(evento.entrada=1,"IN ","OUT "),evento.fecha SEPARATOR "; ") as eventos
from evento
join persona p on p.id = evento.persona_id
join equipo e on e.id = evento.equipo_id
join portico po on po.id = e.portico_id
left join grupo g on g.id = p.grupo_id
where autorizado= true and fecha > :desde and fecha < :hasta and is_jornada = false and po.id = :portico
group by persona_id, fecha_corregida
';
$stmt = $conn->prepare($sql);
$stmt->execute(['desde' => $desdereal->format('Y-m-d H:i:s'), 'hasta' => $hastareal->format('Y-m-d H:i:s'), 'portico' => $portico]);
$registros = $stmt->fetchAllAssociative();
// dd($portico);
$responseString = "RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, FECHA, ENTRADA, SALIDA, CANT_ENTRADAS, CANT_SALIDAS, TOTAL, TIEMPO EN PLANTA\n";
//foreach
foreach ($registros as $fila) {
$total_diario = 0;
$total_en_planta = 0;
if ($fila['total_diario'] < 0)
$total_diario = 24 + $fila['total_diario'] / 3600;
else $total_diario = $fila['total_diario'] / 3600;
if ($fila['total_en_planta'] < 0)
$total_en_planta = 24 + $fila['total_en_planta'] / 3600;
else $total_en_planta = $fila['total_en_planta'] / 3600;
if ($total_en_planta > $total_diario)
$total_en_planta = $total_diario;
$responseString = $responseString .
$fila['rut'] . "," .
$fila['nombre'] . "," .
$fila['paterno'] . "," .
$fila['materno'] . "," .
$fila['grupo'] . "," .
$fila['fecha_corregida'] . "," .
$fila['fecha_entrada'] . "," .
$fila['fecha_salida'] . "," .
$fila['cantidad_entradas'] . "," .
$fila['cantidad_salidas'] . "," .
$total_diario . "," .
$total_en_planta . "," .
$fila['eventos'] .
"\n";
}
$respuesta = [];
$respuesta['rows'] = $responseString;
$respuesta['registros'] = $registros;
return $respuesta;
}
/**
* @Route("descarga/resumenoperativo/{portico}/desde/{desde}/{hasta}" , name="descarga_resumen_csv_operativo", defaults={"portico" = "0"})
*/
public function resumenCsvOperativo($portico, $desde, $hasta)
{
$desdereal = DateTime::createFromFormat('!Y-m-d', $desde, new DateTimeZone('America/Santiago'));
$hastareal = DateTime::createFromFormat('!Y-m-d', $hasta, new DateTimeZone('America/Santiago'));
$conn = $this->getDoctrine()->getManager()->getConnection();
$sql = '
select persona_id,p.rut, p.nombre,p.paterno,p.materno, g.nombre as grupo,
date_format(fecha, "%Y-%m-%d") as fecha_corregida,
max(if(evento.entrada = 0, fecha, null)) as fecha_salida,
min(if(evento.entrada = 1, fecha, null)) as fecha_entrada,
time_to_sec(timediff(max(if(evento.entrada = 0, fecha, null)),
min(if(evento.entrada = 1, fecha, null)))) as total_diario,
sum(if(evento.entrada = 1,1,0)) as cantidad_entradas,
sum(if(evento.entrada = 0,1,0)) as cantidad_salidas,
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,
group_concat(if(evento.entrada=1,"IN ","OUT "),evento.fecha SEPARATOR "; ") as eventos
from evento
join persona p on p.id = evento.persona_id
join equipo e on e.id = evento.equipo_id
join portico po on po.id = e.portico_id
left join grupo g on g.id = p.grupo_id
where autorizado= true and fecha > :desde and fecha < :hasta and is_jornada = false and po.id = :portico
group by persona_id, fecha_corregida
';
$stmt = $conn->prepare($sql);
$stmt->execute(['desde' => $desdereal->format('Y-m-d H:i:s'), 'hasta' => $hastareal->format('Y-m-d H:i:s'), 'portico' => $portico]);
$registros = $stmt->fetchAllAssociative();
//dd($registros);
$responseString = "RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, FECHA, ENTRADA, SALIDA, CANT_ENTRADAS, CANT_SALIDAS, TOTAL, TIEMPO EN PLANTA, EVENTOS\n";
//foreach
foreach ($registros as $fila) {
$total_diario = 0;
$total_en_planta = 0;
if ($fila['total_diario'] < 0)
$total_diario = 24 + $fila['total_diario'] / 3600;
else $total_diario = $fila['total_diario'] / 3600;
if ($fila['total_en_planta'] < 0)
$total_en_planta = 24 + $fila['total_en_planta'] / 3600;
else $total_en_planta = $fila['total_en_planta'] / 3600;
if ($total_en_planta > $total_diario)
$total_en_planta = $total_diario;
$responseString = $responseString .
$fila['rut'] . "," .
$fila['nombre'] . "," .
$fila['paterno'] . "," .
$fila['materno'] . "," .
$fila['grupo'] . "," .
$fila['fecha_corregida'] . "," .
$fila['fecha_entrada'] . "," .
$fila['fecha_salida'] . "," .
$fila['cantidad_entradas'] . "," .
$fila['cantidad_salidas'] . "," .
$total_diario . "," .
$total_en_planta . "," .
$fila['eventos'] .
"\n";
}
$response = new Response();
$response->headers->set('Content-type', 'text/csv');
$response->headers->set('Cache-Control', 'private');
$response->headers->set('Content-Disposition', 'attachment; filename="' . "Eventos.csv" . '";');
$response->sendHeaders();
$response->setContent($responseString);
return $response;
}
/**
* @Route("descarga/resumenoperativo/porfecha", name="descarga_resumen_por_fecha_operativo")
*/
public function descargaResumenOperativo(Request $request)
{
$desde_inicial = new \DateTime('now -1 day');
$hasta_inicial = new \DateTime();
$form = $this->createFormBuilder()
->add('desde', DateType::class, [
// renders it as a single text box
'widget' => 'single_text',
'data' => $desde_inicial,
])
->add('hasta', DateType::class, [
// renders it as a single text box
'widget' => 'single_text',
'data' => $hasta_inicial,
])
->add('portico', EntityType::class, [
'class' => Portico::class,
'query_builder' => function (EntityRepository $repository) {
$qb = $repository->createQueryBuilder('p');
return $qb
->where($qb->expr()->eq('p.operativo', 1));
}
])
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$desde = $form->get('desde')->getData('desde');
$hasta = $form->get('hasta')->getData('hasta');
$portico = $form->get('portico')->getData('portico');
$respuesta = $this->verresumenCsvOperativo($portico->getId(), $desde->format('Y-m-d'), $hasta->format('Y-m-d'));
return $this->render('descarga_eventos/tablaoperativo.html.twig', [
'form' => $form->createView(),
'portico' => $portico,
'desde' => $desde->format('Y-m-d'),
'hasta' => $hasta->format('Y-m-d'),
'rows' => $respuesta['rows'],
'registros' => $respuesta['registros'],
]);
return $this->redirectToRoute('ver_resumen_csv', array('desde' => $desde->format('Y-m-d'), 'hasta' => $hasta->format('Y-m-d')));
}
$respuesta = $this->verresumenCsvOperativo(0, $desde_inicial->format('Y-m-d'), $hasta_inicial->format('Y-m-d'));
return $this->render('descarga_eventos/tablaoperativo.html.twig', [
'form' => $form->createView(),
'desde' => $desde_inicial->format('Y-m-d'),
'hasta' => $hasta_inicial->format('Y-m-d'),
'registros' => $respuesta['registros'],
]);
}
/**
* @Route("dashboard/reporte/powerbi", name="powerbi_tiempo_en_planta")
*/
public function powerbi(Request $request)
{
return $this->render('descarga_eventos/powerbi.html.twig');
}
/**
* @Route("dashboard/reporte/dashboard", name="reporte_dashboard")
*/
public function dashboard(Request $request)
{
return $this->render('descarga_eventos/powerbi.html.twig');
}
/**
* @Route("descarga/resumencasino/porfecha", name="descarga_resumen_por_fecha_casino")
*/
public function descargaResumenCasino(Request $request)
{
$desde_inicial = new \DateTime('now -1 day');
$hasta_inicial = new \DateTime();
$form = $this->createFormBuilder()
->add('desde', DateType::class, [
// renders it as a single text box
'widget' => 'single_text',
'data' => $desde_inicial,
])
->add('hasta', DateType::class, [
// renders it as a single text box
'widget' => 'single_text',
'data' => $hasta_inicial,
])
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$desde = $form->get('desde')->getData('desde');
$hasta = $form->get('hasta')->getData('hasta');
$respuesta = $this->verresumenCsvCasino($desde->format('Y-m-d'), $hasta->format('Y-m-d'));
return $this->render('descarga_eventos/tablacasino.html.twig', [
'form' => $form->createView(),
'desde' => $desde->format('Y-m-d'),
'hasta' => $hasta->format('Y-m-d'),
'rows' => $respuesta['rows'],
'registros' => $respuesta['registros'],
]);
//return $this->redirectToRoute('ver_resumen_csv', array('desde' => $desde->format('Y-m-d'), 'hasta' => $hasta->format('Y-m-d')));
}
$respuesta = $this->verresumenCsvCasino($desde_inicial->format('Y-m-d'), $hasta_inicial->format('Y-m-d'));
return $this->render('descarga_eventos/tablacasino.html.twig', [
'form' => $form->createView(),
'desde' => $desde_inicial->format('Y-m-d'),
'hasta' => $hasta_inicial->format('Y-m-d'),
'registros' => $respuesta['registros'],
]);
}
/**
* @Route("descarga/resumencasino/desde/{desde}/{hasta}" , name="descarga_resumen_csv_casino")
*/
public function resumenCsvCasino($desde, $hasta)
{
$desdereal = DateTime::createFromFormat('!Y-m-d', $desde, new DateTimeZone('America/Santiago'));
$hastareal = DateTime::createFromFormat('!Y-m-d', $hasta, new DateTimeZone('America/Santiago'));
$conn = $this->getDoctrine()->getManager()->getConnection();
$sql = '
select persona_id,p.rut, p.nombre,p.paterno,p.materno,m.nombre as menun, g.nombre as grupo,
date_format(created_at, "%Y-%m-%d") as fecha_corregida,
max(if(registro_casino.timestamp_entregado > 0, created_at, null)) as fecha_emision,
max(if(registro_casino.timestamp_consumido > 0, registro_casino.updated_at, null)) as fecha_consumo,
time_to_sec(timediff(max(if(registro_casino.created_at = 0, created_at, null)),
min(if(registro_casino.created_at = 1, created_at, null)))) as total_diario,
sum(if(registro_casino.timestamp_entregado > 0,1,0)) as cantidad_entradas,
sum(if(registro_casino.timestamp_consumido >0,1,0)) as cantidad_salidas
from registro_casino
join persona p on p.id = registro_casino.persona_id
left join menu m on m.id = registro_casino.menu_id
left join grupo g on g.id = p.grupo_id
where created_at > :desde and created_at < :hasta
group by persona_id, fecha_corregida, m.id
';
$stmt = $conn->prepare($sql);
$stmt->execute(['desde' => $desdereal->format('Y-m-d H:i:s'), 'hasta' => $hastareal->format('Y-m-d H:i:s')]);
$registros = $stmt->fetchAllAssociative();
//dd($registros);
$responseString = "RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, MENU, FECHA, FECHA EMITIDO, FECHA CONSUMIDO, CANT_IMPRESOS1, CONSUMIDO\n";
//foreach
foreach ($registros as $fila) {
$responseString = $responseString .
$fila['rut'] . "," .
$fila['nombre'] . "," .
$fila['paterno'] . "," .
$fila['materno'] . "," .
$fila['grupo'] . "," .
$fila['menun'] . "," .
$fila['fecha_corregida'] . "," .
$fila['fecha_emision'] . "," .
$fila['fecha_consumo'] . "," .
$fila['cantidad_entradas'] . "," .
$fila['cantidad_salidas'] .
"\n";
}
$response = new Response();
$response->headers->set('Content-type', 'text/csv');
$response->headers->set('Cache-Control', 'private');
$response->headers->set('Content-Disposition', 'attachment; filename="' . "casino.csv" . '";');
$response->sendHeaders();
$response->setContent($responseString);
return $response;
}
/**
* @Route("ver/resumencasino/desde/{desde}/{hasta}" , name="ver_resumen_csv_operativo")
*/
public function verresumenCsvCasino($desde, $hasta)
{
$desdereal = DateTime::createFromFormat('!Y-m-d', $desde, new DateTimeZone('America/Santiago'));
$hastareal = DateTime::createFromFormat('!Y-m-d', $hasta, new DateTimeZone('America/Santiago'));
$conn = $this->getDoctrine()->getManager()->getConnection();
$sql = '
select persona_id,p.rut, p.nombre,p.paterno,p.materno,m.nombre as menun, g.nombre as grupo,
date_format(created_at, "%Y-%m-%d") as fecha_corregida,
max(if(registro_casino.timestamp_entregado > 0, created_at, null)) as fecha_emision,
max(if(registro_casino.timestamp_consumido > 0, registro_casino.updated_at, null)) as fecha_consumo,
time_to_sec(timediff(max(if(registro_casino.created_at = 0, created_at, null)),
min(if(registro_casino.created_at = 1, created_at, null)))) as total_diario,
sum(if(registro_casino.timestamp_entregado > 0,1,0)) as cantidad_entradas,
sum(if(registro_casino.timestamp_consumido >0,1,0)) as cantidad_salidas
from registro_casino
join persona p on p.id = registro_casino.persona_id
left join menu m on m.id = registro_casino.menu_id
left join grupo g on g.id = p.grupo_id
where created_at > :desde and created_at < :hasta
group by persona_id, fecha_corregida, m.id
';
$stmt = $conn->prepare($sql);
$stmt->execute(['desde' => $desdereal->format('Y-m-d H:i:s'), 'hasta' => $hastareal->format('Y-m-d H:i:s')]);
$registros = $stmt->fetchAllAssociative();
//dd($registros);
$responseString = "RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, MENU, FECHA, FECHA EMITIDO, FECHA CONSUMIDO, CANT_IMPRESOS, CANT_CONSUMIDOS\n";
//foreach
foreach ($registros as $fila) {
$responseString = $responseString .
$fila['rut'] . "," .
$fila['nombre'] . "," .
$fila['paterno'] . "," .
$fila['materno'] . "," .
$fila['grupo'] . "," .
$fila['menun'] . "," .
$fila['fecha_corregida'] . "," .
$fila['fecha_emision'] . "," .
$fila['fecha_consumo'] . "," .
$fila['cantidad_entradas'] . "," .
$fila['cantidad_salidas'] . "," .
"\n";
}
$respuesta = [];
$respuesta['rows'] = $responseString;
$respuesta['registros'] = $registros;
return $respuesta;
}
/**
* @Route("resumen", name="resumen")
*/
public function descargaResumenOperativoTotal(Request $request)
{
$desde_inicial = new \DateTime('now -1 day');
$hasta_inicial = new \DateTime();
$respuesta = $this->listadoresumen();
$matriz = $this->tablaresumen();
return $this->render('descarga_eventos/tablaoperativototal.html.twig', [
'registros' => $respuesta['registros'],
'matriz' => $matriz,
]);
}
public function verresumenCsvOperativoTotal()
{
$desdereal = new \DateTime('2022-04-26 00:00:11');
$hastareal = new \DateTime('2022-04-26 23:59:59');
// $desdereal = DateTime::createFromFormat('!Y-m-d', $hasta_inicial, new DateTimeZone('America/Santiago'))->setTimezone(new DateTimeZone('UTC'));
// $hastareal = DateTime::createFromFormat('!Y-m-d', $hasta_inicial, new DateTimeZone('America/Santiago'))->setTimezone(new DateTimeZone('UTC'));
$conn = $this->getDoctrine()->getManager()->getConnection();
$sql = '
select po.nombre as porticonombre,
COUNT(DISTINCT(evento.persona_id)) as cuenta,
sum(if((evento.entrada = 1) and (evento.persona_id ),1,0)) as ultima_entrada,
date_format(fecha, "%Y-%m-%d") as fecha_corregida,
max(if(evento.entrada = 0, (fecha), null)) as fecha_salida,
min(if(evento.entrada = 1, (fecha), null)) as fecha_entrada,
time_to_sec(timediff(max(if(evento.entrada = 0, (fecha), null)),
min(if(evento.entrada = 1, (fecha), null)))) as total_diario,
sum(if(evento.entrada = 1,1,0)) as cantidad_entradas,
sum(if(evento.entrada = 0,1,0)) as cantidad_salidas,
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,
group_concat(if(evento.entrada=1,"IN ","OUT "),evento.fecha SEPARATOR "; ") as eventos
from evento
join persona p on p.id = evento.persona_id
join equipo e on e.id = evento.equipo_id
join portico po on po.id = e.portico_id
left join grupo g on g.id = p.grupo_id
where autorizado= true and fecha > :desde and fecha < :hasta
group by fecha_corregida, po.nombre
';
$stmt = $conn->prepare($sql);
$stmt->execute(['desde' => $desdereal->format('Y-m-d H:i:s'), 'hasta' => $hastareal->format('Y-m-d H:i:s')]);
$registros = $stmt->fetchAllAssociative();
// dd($portico);
$responseString = "RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, FECHA, ENTRADA, SALIDA, CANT_ENTRADAS, CANT_SALIDAS, TOTAL, TIEMPO EN PLANTA\n";
//foreach
foreach ($registros as $fila) {
$total_diario = 0;
$total_en_planta = 0;
if ($fila['total_diario'] < 0)
$total_diario = 24 + $fila['total_diario'] / 3600;
else $total_diario = $fila['total_diario'] / 3600;
if ($fila['total_en_planta'] < 0)
$total_en_planta = 24 + $fila['total_en_planta'] / 3600;
else $total_en_planta = $fila['total_en_planta'] / 3600;
if ($total_en_planta > $total_diario)
$total_en_planta = $total_diario;
$responseString = $responseString .
$fila['fecha_corregida'] . "," .
$fila['fecha_entrada'] . "," .
$fila['fecha_salida'] . "," .
$fila['cantidad_entradas'] . "," .
$fila['cantidad_salidas'] . "," .
$total_diario . "," .
$total_en_planta . "," .
$fila['eventos'] .
"\n";
}
$respuesta = [];
$respuesta['rows'] = $responseString;
$respuesta['registros'] = $registros;
return $respuesta;
}
public function listadoresumen()
{
$desdereal = new \DateTime('now -1 day');
$hastareal = new \DateTime('now');
// $desdereal = DateTime::createFromFormat('!Y-m-d', $hasta_inicial, new DateTimeZone('America/Santiago'))->setTimezone(new DateTimeZone('UTC'));
// $hastareal = DateTime::createFromFormat('!Y-m-d', $hasta_inicial, new DateTimeZone('America/Santiago'))->setTimezone(new DateTimeZone('UTC'));
$conn = $this->getDoctrine()->getManager()->getConnection();
$sql = '
select persona_id,p.rut, p.nombre as persona,p.paterno as paterno ,p.materno as materno, g.nombre as grupo,
COUNT(DISTINCT(evento.persona_id)) as cuenta,
max(if(evento.entrada = 0, (po.nombre), null)) as p_salida,
max(if(evento.entrada = 1, (po.nombre), null)) as p_entrada,
max(if(evento.entrada = 0, (fecha), null)) as h_salida,
max(if(evento.entrada = 1, (fecha), null)) as h_entrada,
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)),
"afuera",
if(max(if(evento.entrada = 1, (fecha), null)) < max(if(evento.entrada = 0, (fecha), null)) ,
"en planta",
if( max(if(evento.entrada = 1, (po.nombre), null)) = "Peatones 1",
"en planta",
if(max(if(evento.entrada = 1, (po.nombre), "x")) = "x",
"en planta",
max(if(evento.entrada = 1, (po.nombre), null))
)
)
)
)
as lugar,
date_format(fecha, "%Y-%m-%d") as fecha_corregida,
max(if(evento.entrada = 0, (fecha), null)) as fecha_salida,
min(if(evento.entrada = 1, (fecha), null)) as fecha_entrada,
time_to_sec(timediff(max(if(evento.entrada = 0, (fecha), null)),
min(if(evento.entrada = 1, (fecha), null)))) as total_diario,
sum(if(evento.entrada = 1,1,0)) as cantidad_entradas,
sum(if(evento.entrada = 0,1,0)) as cantidad_salidas,
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,
group_concat(if(evento.entrada=1,"IN ","OUT "),evento.fecha SEPARATOR "; ") as eventos
from evento
join persona p on p.id = evento.persona_id
join equipo e on e.id = evento.equipo_id
join portico po on po.id = e.portico_id
left join grupo g on g.id = p.grupo_id
where autorizado= true and fecha > :desde and fecha < :hasta
group by persona_id, fecha_corregida
';
$stmt = $conn->prepare($sql);
$stmt->execute(['desde' => $desdereal->format('Y-m-d H:i:s'), 'hasta' => $hastareal->format('Y-m-d H:i:s')]);
$registros = $stmt->fetchAllAssociative();
// dd($portico);
$responseString = "RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, FECHA, ENTRADA, SALIDA, CANT_ENTRADAS, CANT_SALIDAS, TOTAL, TIEMPO EN PLANTA\n";
//foreach
foreach ($registros as $fila) {
$total_diario = 0;
$total_en_planta = 0;
if ($fila['total_diario'] < 0)
$total_diario = 24 + $fila['total_diario'] / 3600;
else $total_diario = $fila['total_diario'] / 3600;
if ($fila['total_en_planta'] < 0)
$total_en_planta = 24 + $fila['total_en_planta'] / 3600;
else $total_en_planta = $fila['total_en_planta'] / 3600;
if ($total_en_planta > $total_diario)
$total_en_planta = $total_diario;
$responseString = $responseString .
$fila['fecha_corregida'] . "," .
$fila['fecha_entrada'] . "," .
$fila['fecha_salida'] . "," .
$fila['cantidad_entradas'] . "," .
$fila['cantidad_salidas'] . "," .
$total_diario . "," .
$total_en_planta . "," .
$fila['eventos'] .
"\n";
}
$respuesta = [];
$respuesta['rows'] = $responseString;
$respuesta['registros'] = $registros;
return $respuesta;
}
public function tablaresumen()
{
$desdereal = new \DateTime('now -1 day');
$hastareal = new \DateTime('now');
// $desdereal = DateTime::createFromFormat('!Y-m-d', $hasta_inicial, new DateTimeZone('America/Santiago'))->setTimezone(new DateTimeZone('UTC'));
// $hastareal = DateTime::createFromFormat('!Y-m-d', $hasta_inicial, new DateTimeZone('America/Santiago'))->setTimezone(new DateTimeZone('UTC'));
$conn = $this->getDoctrine()->getManager()->getConnection();
$sql = '
select persona_id,p.rut, p.nombre as persona,p.paterno as paterno ,p.materno as materno, g.nombre as grupo,
COUNT(DISTINCT(evento.persona_id)) as cuenta,
max(if(evento.entrada = 0, (po.nombre), null)) as p_salida,
max(if(evento.entrada = 1, (po.nombre), null)) as p_entrada,
max(if(evento.entrada = 0, (fecha), null)) as h_salida,
max(if(evento.entrada = 1, (fecha), null)) as h_entrada,
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)),
"afuera",
if(max(if(evento.entrada = 1, (fecha), null)) < max(if(evento.entrada = 0, (fecha), null)) ,
"en planta",
if( max(if(evento.entrada = 1, (po.nombre), null)) = "Peatones 1",
"en planta",
if(max(if(evento.entrada = 1, (po.nombre), "x")) = "x",
"en planta",
max(if(evento.entrada = 1, (po.nombre), null))
)
)
)
)
as lugar,
date_format(fecha, "%Y-%m-%d") as fecha_corregida,
max(if(evento.entrada = 0, (fecha), null)) as fecha_salida,
min(if(evento.entrada = 1, (fecha), null)) as fecha_entrada,
time_to_sec(timediff(max(if(evento.entrada = 0, (fecha), null)),
min(if(evento.entrada = 1, (fecha), null)))) as total_diario,
sum(if(evento.entrada = 1,1,0)) as cantidad_entradas,
sum(if(evento.entrada = 0,1,0)) as cantidad_salidas,
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,
group_concat(if(evento.entrada=1,"IN ","OUT "),evento.fecha SEPARATOR "; ") as eventos
from evento
join persona p on p.id = evento.persona_id
join equipo e on e.id = evento.equipo_id
join portico po on po.id = e.portico_id
left join grupo g on g.id = p.grupo_id
where autorizado= true and fecha > :desde and fecha < :hasta
group by persona_id, fecha_corregida
';
$stmt = $conn->prepare($sql);
$stmt->execute(['desde' => $desdereal->format('Y-m-d H:i:s'), 'hasta' => $hastareal->format('Y-m-d H:i:s')]);
$registros = $stmt->fetchAllAssociative();
// dd($portico);
$responseString = "RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, FECHA, ENTRADA, SALIDA, CANT_ENTRADAS, CANT_SALIDAS, TOTAL, TIEMPO EN PLANTA\n";
//foreach
foreach ($registros as $fila) {
$total_diario = 0;
$total_en_planta = 0;
if ($fila['total_diario'] < 0)
$total_diario = 24 + $fila['total_diario'] / 3600;
else $total_diario = $fila['total_diario'] / 3600;
if ($fila['total_en_planta'] < 0)
$total_en_planta = 24 + $fila['total_en_planta'] / 3600;
else $total_en_planta = $fila['total_en_planta'] / 3600;
if ($total_en_planta > $total_diario)
$total_en_planta = $total_diario;
$responseString = $responseString .
$fila['fecha_corregida'] . "," .
$fila['fecha_entrada'] . "," .
$fila['fecha_salida'] . "," .
$fila['cantidad_entradas'] . "," .
$fila['cantidad_salidas'] . "," .
$total_diario . "," .
$total_en_planta . "," .
$fila['eventos'] .
"\n";
}
$respuesta = [];
$respuesta['rows'] = $responseString;
$respuesta['registros'] = $registros;
$matriz = array( ) ;
foreach($respuesta['registros'] as $registro){
$matriz[$registro["grupo"]] = 0 ;
}
$i=1;
foreach($respuesta['registros'] as $registro){
$matriz2[$registro["grupo"]]["nombre"] = $registro["grupo"] ;
$matriz2[$registro["grupo"]]["total"] = 0 ;
$matriz2[$registro["grupo"]]["en_planta"] = 0 ;
$matriz2[$registro["grupo"]]["afuera"] = 0 ;
$matriz2[$registro["grupo"]]["cerezas"] = 0 ;
$matriz2[$registro["grupo"]]["carozos"] = 0 ;
$matriz2[$registro["grupo"]]["frigorifico"] = 0 ;
$matriz2[$registro["grupo"]]["bodega"] = 0 ;
$i++;
}
foreach($respuesta['registros'] as $registro){
$matriz2[$registro["grupo"]]["total"] = $matriz2[$registro["grupo"]]["total"] + 1 ;
if($registro["lugar"]=="en planta"){
$matriz2[$registro["grupo"]]["en_planta"] = $matriz2[$registro["grupo"]]["en_planta"] + 1 ;
}
if($registro["lugar"]=="afuera"){
$matriz2[$registro["grupo"]]["afuera"] = $matriz2[$registro["grupo"]]["afuera"] + 1 ;
}
if($registro["lugar"]=="cerezas"){
$matriz2[$registro["grupo"]]["cerezas"] = $matriz2[$registro["grupo"]]["cerezas"] + 1 ;
}
if($registro["lugar"]=="carozos"){
$matriz2[$registro["grupo"]]["carozos"] = $matriz2[$registro["grupo"]]["carozos"] + 1 ;
}
if($registro["lugar"]=="frigorifico"){
$matriz2[$registro["grupo"]]["frigorifico"] = $matriz2[$registro["grupo"]]["frigorifico"] + 1 ;
}
if($registro["lugar"]=="bodega"){
$matriz2[$registro["grupo"]]["bodega"] = $matriz2[$registro["grupo"]]["bodega"] + 1 ;
}
}
return $matriz2;
}
/**
* @Route("ver/resumenopertivo/desde/{desde}/{hasta}" , name="ver_resumenoperativo_csv")
*/
public function verresumenoperativoCsv($desde, $hasta)
{
$desdereal = DateTime::createFromFormat('!Y-m-d H:i:s', $desde, new DateTimeZone('America/Santiago'));
$hastareal = DateTime::createFromFormat('!Y-m-d H:i:s', $hasta, new DateTimeZone('America/Santiago'));
$conn = $this->getDoctrine()->getManager()->getConnection();
$sql = '
select persona_id,p.rut, p.nombre,p.paterno,p.materno, g.nombre as grupo,
date_format(fecha, "%Y-%m-%d") as fecha_corregida,
max(if(evento.entrada = 0, (fecha), null)) as fecha_salida,
min(if(evento.entrada = 1, (fecha), null)) as fecha_entrada,
time_to_sec(timediff(max(if(evento.entrada = 0 and po.operativo = 0, (fecha), null)),
min(if(evento.entrada = 1 and po.operativo = 0, (fecha), null)))) as total_diario_acceso,
time_to_sec(timediff(max(if(evento.entrada = 0 and po.operativo = 1, (fecha), null)),
min(if(evento.entrada = 1 and po.operativo = 1, (fecha), null)))) as total_diario_operativo,
sum(if(evento.entrada = 1 and po.operativo = 1,1,0)) as cantidad_entradas_operativas,
sum(if(evento.entrada = 0 and po.operativo = 1,1,0)) as cantidad_salidas_operativas,
sum(if(evento.entrada = 1 and po.operativo = 0,1,0)) as cantidad_entradas_acceso,
sum(if(evento.entrada = 0 and po.operativo = 0,1,0)) as cantidad_salidas_acceso,
sum(
if( po.operativo = 0,
time_to_sec(
if(evento.entrada=1 and po.operativo = 0,
timediff(
timestamp(date(fecha),"23:59:59"),
fecha),
timediff(
fecha,
timestamp(date(fecha),"23:59:59"))
)
),
0
)
) as total_en_planta_acceso,
sum(
if(po.operativo = 1,
time_to_sec(
if(evento.entrada=1 and po.operativo = 1,
timediff(timestamp(date(fecha),"23:59:59"), fecha),
timediff(fecha,timestamp(date(fecha),"23:59:59")))
),
0)
) as total_en_planta_operativo,
group_concat(if(evento.entrada=1,"IN ","OUT "),evento.fecha SEPARATOR "; ") as eventos,
group_concat(if(evento.entrada=1,"E","S"),po.operativo SEPARATOR ";") as eventos2
from evento
join persona p on p.id = evento.persona_id
join equipo e on e.id = evento.equipo_id
join portico po on po.id = e.portico_id
left join grupo g on g.id = p.grupo_id
where fecha > :desde and fecha < :hasta and eliminado is not true
group by persona_id, fecha_corregida
';
$stmt = $conn->prepare($sql);
$stmt->execute(['desde' => $desdereal->format('Y-m-d H:i:s'), 'hasta' => $hastareal->format('Y-m-d H:i:s')]);
$registros = $stmt->fetchAllAssociative();
//dd($registros);
$responseString = "RUT,NOMBRE,APELLIDO PATERNO, APELLIDO MATERNO, GRUPO, FECHA, ENTRADA, SALIDA, CANT_ENTRADAS, CANT_SALIDAS, TOTAL, TIEMPO EN PLANTA\n";
//foreach
foreach ($registros as $fila) {
$total_diario = 0;
$total_en_planta = 0;
if ($fila['total_diario_acceso'] < 0)
$total_diario = 24 + $fila['total_diario_acceso'] / 3600;
else $total_diario = $fila['total_diario_acceso'] / 3600;
if ($fila['total_diario_operativo'] < 0)
$total_diario = 24 + $fila['total_diario_operativo'] / 3600;
else $total_diario = $fila['total_diario_operativo'] / 3600;
if ($fila['total_en_planta_operativo'] < 0)
$total_en_planta = 24 + $fila['total_en_planta_operativo'] / 3600;
else $total_en_planta = $fila['total_en_planta_operativo'] / 3600;
if ($fila['total_en_planta_acceso'] < 0)
$total_en_planta = 24 + $fila['total_en_planta_acceso'] / 3600;
else $total_en_planta = $fila['total_en_planta_acceso'] / 3600;
if ($total_en_planta > $total_diario)
$total_en_planta = $total_diario;
// Validar si existen marcas de entrada y salida
$fecha_entrada = $fila['fecha_entrada'] ?? '';
$fecha_salida = $fila['fecha_salida'] ?? '';
$responseString = $responseString .
$fila['rut'] . "," .
$fila['nombre'] . "," .
$fila['paterno'] . "," .
$fila['materno'] . "," .
$fila['grupo'] . "," .
$fila['fecha_corregida'] . "," .
$fecha_entrada . "," .
$fecha_salida . "," .
$fila['cantidad_entradas_acceso'] . "," .
$fila['cantidad_salidas_acceso'] . "," .
$fila['cantidad_entradas_operativas'] . "," .
$fila['cantidad_salidas_operativas'] . "," .
$fila['total_en_planta_acceso'] . "," .
$fila['total_en_planta_operativo'] . "," .
$fila['total_diario_acceso'] . "," .
$fila['total_diario_operativo'] . "," .
$total_diario . "," .
$fila['eventos'] .
$fila['eventos2'] .
"\n";
}
$respuesta = [];
$respuesta['rows'] = $responseString;
$respuesta['registros'] = $registros;
return $respuesta;
}
/**
* @Route("descarga/resumen/porfechatotal", name="descarga_resumen_por_fecha_total")
*/
public function descargaResumentotal(Request $request)
{
$desde_inicial = new \DateTime('now -1 day');
$hasta_inicial = new \DateTime();
$form = $this->createFormBuilder()
->add('desde', DateType::class, [
// renders it as a single text box
'widget' => 'single_text',
'data' => $desde_inicial,
])
->add('hasta', DateType::class, [
// renders it as a single text box
'widget' => 'single_text',
'data' => $hasta_inicial,
])
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$desde = $form->get('desde')->getData('desde');
$hasta = $form->get('hasta')->getData('hasta');
$respuesta = $this->verresumenCsv($desde->format('Y-m-d'), $hasta->format('Y-m-d'));
return $this->render('descarga_eventos/reporte_total.html.twig', [
'form' => $form->createView(),
'desde' => $desde->format('Y-m-d'),
'hasta' => $hasta->format('Y-m-d'),
'rows' => $respuesta['rows'],
'registros' => $respuesta['registros'],
]);
//return $this->redirectToRoute('ver_resumen_csv', array('desde' => $desde->format('Y-m-d'), 'hasta' => $hasta->format('Y-m-d')));
}
$respuesta = $this->verresumenCsv($desde_inicial->format('Y-m-d'), $hasta_inicial->format('Y-m-d'));
return $this->render('descarga_eventos/reporte_total.html.twig', [
'form' => $form->createView(),
'desde' => $desde_inicial->format('Y-m-d'),
'hasta' => $hasta_inicial->format('Y-m-d'),
'registros' => $respuesta['registros'],
]);
}
}