<?php
namespace App\Controller;
use App\Repository\InventarioRepository;
use App\Repository\UnidadRepository;
use App\Entity\CatComponentes;
use DateInterval;
use App\Entity\Unidad;
use App\Entity\Usuario;
use App\Service\DocumentoPDF;
use App\Service\SelloDigital;
use App\Service\DocumentoPDF1;
use App\Repository\RedRepository;
use App\Repository\OtroRepository;
use Doctrine\ORM\EntityRepository;
use App\Repository\EquipoRepository;
use App\Repository\ImpresoraRepository;
use App\Repository\SolicitudRepository;
use App\Repository\UbicacionRepository;
use App\Repository\UsuarioRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
use DateTime;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
#[Route('/reporte')]
class ReporteController extends AbstractController
{
#[Route('/refaccion-asignacion-pdf', name: 'app_refaccion_asignacion_pdf', methods: ['POST'])]
public function refaccionAsignacionPDF(InventarioRepository $inventarioRepository, UnidadRepository $unidadRepository, Request $request, SelloDigital $sello): Response
{
ini_set('memory_limit', '5120M');
ini_set('max_execution_time', 0);
ini_set('output_buffering', 0);
date_default_timezone_set('America/Mexico_City');
setlocale(LC_ALL, 'es_MX');
$refaccionId = $request->request->get('refaccionId'); // Obtener el ID de la refacción desde la solicitud
// Obtener datos de la refacción específica
$inventario = $inventarioRepository->find($refaccionId);
if (!$inventario) {
throw $this->createNotFoundException('Refacción no encontrada.');
}
// Obtener la unidad de origen utilizando el idUni
$unidadOrigen = $unidadRepository->find($inventario->getUnidadOrigen());
$nombreUnidadOrigen = $unidadOrigen ? $unidadOrigen->getNombre() : 'Unidad no encontrada';
$procedencia = $unidadRepository->find($inventario->getProcedencia());
$nombreUnidadProcedencia = $procedencia ? $procedencia->getNombre() : 'Unidad no encontrada';
$tiposComponente = [
1 => 'CPU',
2 => 'Placa base',
3 => 'RAM',
4 => 'HDD',
5 => 'SSD',
6 => 'NVMe',
7 => 'GPU',
8 => 'Tarjeta de sonido',
9 => 'Tarjeta de red',
10 => 'PSU',
11 => 'Teclado',
12 => 'Ratón',
13 => 'Monitor',
14 => 'Puertos USB',
15 => 'Webcams',
16 => 'Adaptadores Wi-Fi',
];
$tipoComponente = $tiposComponente[$inventario->getIdComponente()] ?? 'Tipo no encontrado';
$fecha = date('d-m-Y');
// Declaración de la instancia de TCPDF
$pdf = new DocumentoPDF1();
$pdf->setPrintFooter(false);
$pdf->SetCreator('Conalep Estado de México');
$pdf->SetAuthor('SIGMEC');
$pdf->SetTitle('Reporte');
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
$pdf->AddPage('P', 'JIS_B4');
$pdf->SetY(70);
$pdf->setFontSubsetting(true);
// Renderizado del contenido del PDF con los datos de la refacción
$html = <<<EOD
<style>
.header { text-align: center; }
.content { font-size: 12px; }
.footer { text-align: center; font-size: 10px; margin-top: 10px; text-align: left; }
.table-header { background-color: #f0f0f0; }
.table-body { text-align: center; font-size: 8px; }
</style>
<div class="content">
<p style="text-align: right;">Cuautitlán Izcalli, México; {$fecha}</p>
<p style="text-align: right;">Unidad de Innovación y Tecnologías de la Información</p>
<p style="text-align: right;"><strong>Asunto: Transferencia de refacciones</strong></p>
<p style="text-align: right;"><strong>Asunto: Asignación de equipo de cómputo</strong></p>
<p><strong>{$this->getUser()->getNombreCompleto()}</strong></p>
<p><strong>{$this->getUser()->getArea()}</strong></p>
<p><strong>P R E S E N T E</strong></p>
<p>Por medio del presente se le hace entrega de la siguiente refacción:</p>
<table width="100%" cellpadding="2" border="0.1">
<thead class="table-header">
<tr>
<th>Tipo</th>
<th>Marca</th>
<th>Modelo</th>
<th>Serie</th>
<th>Descripción</th>
<th>Procedencia</th>
<th>Unidad de Origen</th>
</tr>
</thead>
<tbody class="table-body">
<tr>
<td>{$tipoComponente}</td>
<td>{$inventario->getMarca()}</td>
<td>{$inventario->getModelo()}</td>
<td>{$inventario->getSerie()}</td>
<td>{$inventario->getDescripcion()}</td>
<td>{$nombreUnidadProcedencia}</td>
<td>{$nombreUnidadOrigen}</td>
</tr>
</tbody>
</table>
<p>Entrega ___________________</p>
<p>Recibe ___________________</p>
<p>Sin más por el momento aprovecho la oportunidad para enviarle un cordial saludo.</p>
<div class="footer">
<p><strong>A T E N T A M E N T E</strong></p>
<p>GREGORIO JUAN BERNAL SOLÍS<br>
JEFE DE PROYECTO DE LA UNIDAD DE<br>
INNOVACIÓN Y TECNOLOGÍAS DE LA INFORMACIÓN</p>
<p>c.c.p – Beatriz Marlet Torres Perea</p>
<p>G.J.B.S.</p>
</div>
</div>
EOD;
$pdf->writeHTML($html, true, 0, true, 0);
// Enviar el PDF como respuesta para descarga
$pdf->Output('reporte.pdf', 'D');
return new Response(); // Este return evita un error, el PDF se envía directamente al navegador
}
#[Route('/equipo-resguardo-pdf', name: 'app_resguardo_equipo_pdf', methods: ['POST'])]
public function equipoResguardoPDF(EquipoRepository $equipoRepository, UsuarioRepository $usuarioRepository, Request $request, SelloDigital $sello)
{
ini_set('memory_limit', '5120M');
ini_set('max_execution_time', 0);
ini_set('output_buffering', 0);
date_default_timezone_set('America/Mexico_City');
setlocale(LC_ALL, 'es_MX');
// Obtener el ID del equipo del request
$idEqu = $request->request->get('idEqu');
// Obtener los datos del equipo desde la base de datos
$equipo = $equipoRepository->find($idEqu);
if (!$equipo) {
throw $this->createNotFoundException('El equipo no se encontró.');
}
/** @var Usuario $user */
$user = $this->getUser();
//$equipo->getUsuario()->getNombre()
$user_equipo = $equipo->getUsuario();
$user_gestor = $usuarioRepository->findGestorByUnidad($user_equipo->getUnidad()->getIdUni());
$responsable_unidad = mb_strtoupper($user_equipo->getUnidad()->getDirector(), 'UTF-8');
$cargo_del_responsable = "" ;
$text_plantel = "";
$id_uni = $user_equipo->getUnidad()->getIdUni();
$nombre_plantel = $user_equipo->getUnidad()->getNombre();
$nombre_plantel_mayus = mb_strtoupper($nombre_plantel, 'UTF-8');
if ($id_uni == "3155280") { // Id de Dirección General
$cargo_del_responsable = ($user_equipo->getUnidad()->getSexo() == "M" ? "JEFA" : "JEFE") . " DE LA UNIDAD DE INNOVACIÓN Y <br>TECNOLOGÍAS DE LA INFORMACIÓN <br>";
$text_plantel = $nombre_plantel;
} elseif ($id_uni == "3157010") { // Id del CAST
$cargo_del_responsable = "DIRECTOR" . ($user_equipo->getUnidad()->getSexo() == "M" ? "A" : "") . " DEL {$nombre_plantel_mayus} <br>";
$text_plantel = $nombre_plantel;
} else {
$cargo_del_responsable = "DIRECTOR" . ($user_equipo->getUnidad()->getSexo() == "M" ? "A" : "") . " DEL PLANTEL {$nombre_plantel_mayus} <br>";
$text_plantel = "Plantel {$nombre_plantel}";
}
$fecha = date('d-m-Y');
$pdf = new DocumentoPDF();
// Definimos la utilización de tipografías
$pdf->setFontSubsetting(true);
// Declaración de la instancia de TCPDF con el encabezado personalizado
$pdf = new DocumentoPDF1();
$pdf->unidad = "Unidad Administrativa"; // Ajusta esto según sea necesario
$pdf->codigo = '15-528-PO-15-F18';
$pdf->revision = '02';
$pdf->faprobacion = '30/10/2022';
$pdf->fecha = $fecha;
$pdf->formato = '';
$pdf->nombre = '';
$pdf->usuarioa = $user_equipo->getNombreCompleto();
$pdf->areaa = $user_equipo->getArea();
$pdf->presente = 'Presente';
$pdf->mensaje1 = 'Por medio del presente se le hace entrega del equipo de cómputo descrito a continuación.';
$pdf->mensaje2 = 'Es importante mencionar que el presente equipo, le es asignado para poder llevar a cabo el cumplimiento de sus actividades laborales.';
$pdf->mensaje3 = 'Lo que lo compromete a hacer un buen uso del mismo, no instalar software ilegal y a no modificar o alterar la configuración del mismo.';
$pdf->mensaje4 = 'Sin más por el momento aprovecho la oportunidad para enviarle un cordial saludo.<br><br><br>';
$pdf->atentamente1 = $responsable_unidad. '<br>'.$cargo_del_responsable;
$pdf->cpp = $user_equipo->getUnidad()->getIdUni() != "3155280" ? 'c.c.p – Beatriz Marlet Torres Perea': ' ';
//$pdf->gjbs = 'G.J.B.S.';
$pdf->gjbs = strtoupper($user_gestor->getNombre()[0])."." . (strpos($user_gestor->getNombre(), ' ') !== false ? strtoupper($user_gestor->getNombre()[strpos($user_gestor->getNombre(), ' ') + 1])."." : '') . strtoupper($user_gestor->getPapellido()[0])."." . (!empty($user_gestor->getSapellido()) ? strtoupper($user_gestor->getSapellido()[0])."." : '');
$pdf->setPrintFooter(false);
// Obtenemos los datos del documento
/*$cadenaOriginal = $pdf->formato . '||';
$cadenaOriginal .= (empty($unidadId)) ? "Todas las Unidades administrativas" : $pdf->unidad;
$cadenaOriginal .= '||' . $user_equipo->getNombre() . ' ' . $user_equipo->getPapellido() . '||' . $user_equipo->getCorreo() . '||' . $user_equipo->getRol()->getNombre();
$cadenaOriginal .= '||' . $fecha;
$cadena64 = $sello->generar($cadenaOriginal);*/
// Información del documento
$pdf->SetCreator('Conalep Estado de México');
$pdf->SetAuthor('SIGMEC');
$pdf->SetTitle('Reporte');
// Definimos los saltos de página como automáticos
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
// Nueva página con sus respectivas características
$pdf->AddPage('P', 'JIS_B4');
$pdf->SetY(55);
// Generamos el contenido a mostrar
ob_start();
$html = <<<EOD
<div class="content">
<p style="text-align: right;"> {$user_equipo->getUnidad()->getMunicipio()}, México; {$fecha}</p>
<p style="text-align: right;">{$text_plantel}</p>
<p style="text-align: right;"><strong>Asunto: Asignación de equipo de cómputo</strong></p>
<p style="text-align: left;"><strong>Resguardatario: </strong> {$equipo->getUsuario()->getNombre()} {$equipo->getUsuario()->getPapellido()} {$equipo->getUsuario()->getSapellido()}</p>
<p style="text-align: left;"><strong>Ubicación del equipo: </strong> {$equipo->getUbicacion()}</p>
<p><strong>P R E S E N T E</strong></p>
<p>{$pdf->mensaje1}</p>
<table width="100%" cellpadding="2" border="0.1" align="center">
<thead>
<tr>
<td colspan="4" style="text-align: center;"><b>CPU</b></td>
</tr>
<tr class="table-header">
<td style="text-align: center;">Marbete</td>
<td style="text-align: center;">Marca</td>
<td style="text-align: center;">Modelo</td>
<td style="text-align: center;">Serie</td>
</tr>
</thead>
<tbody class="table-body">
<tr>
<td>{$equipo->getMarbete()}</td>
<td>{$equipo->getMarca()}</td>
<td>{$equipo->getModelo()}</td>
<td>{$equipo->getSerie()}</td>
</tr>
</tbody>
</table>
<p></p>
<table class="spaced-table" width="100%" cellpadding="2" border="0.1">
<thead>
<tr>
<td colspan="4" style="text-align: center;"><b>Monitor</b></td>
<td colspan="3" style="text-align: center;"><b>Teclado</b></td>
<td colspan="3" style="text-align: center;"><b>Mouse</b></td>
</tr>
<tr class="table-header">
<td style="text-align: center;">Marbete</td>
<td style="text-align: center;">Marca</td>
<td style="text-align: center;">Modelo</td>
<td style="text-align: center;">Serie</td>
<td style="text-align: center;">Marca</td>
<td style="text-align: center;">Modelo</td>
<td style="text-align: center;">Serie</td>
<td style="text-align: center;">Marca</td>
<td style="text-align: center;">Modelo</td>
<td style="text-align: center;">Serie</td>
</tr>
</thead>
<tbody class="table-body">
<tr>
<td>{$equipo->getMonitorMarbete()}</td>
<td>{$equipo->getMonitorMarca()}</td>
<td>{$equipo->getMonitorModelo()}</td>
<td>{$equipo->getMonitorSerie()}</td>
<td>{$equipo->getTecladoMarca()}</td>
<td>{$equipo->getTecladoModelo()}</td>
<td>{$equipo->getTecladoSerie()}</td>
<td>{$equipo->getMouseMarca()}</td>
<td>{$equipo->getMouseModelo()}</td>
<td>{$equipo->getMouseSerie()}</td>
</tr>
</tbody>
</table>
<p>{$pdf->mensaje2}</p>
<p>{$pdf->mensaje3}</p>
<p>{$pdf->mensaje4}</p>
<div class="footer">
<p><strong>A T E N T A M E N T E</strong></p>
<p>{$pdf->atentamente1}</p>
<p>{$pdf->cpp}</p>
<p>{$pdf->gjbs}</p>
</div>
<p></p>
<div class="direccion">
<p>{$user_equipo->getUnidad()->getCalle()}, {$user_equipo->getUnidad()->getColonia()}, {$user_equipo->getUnidad()->getMunicipio()}, Estado de México. C.P. {$user_equipo->getUnidad()->getCP()}.< /p>
<p>Tel(s): {$user_equipo->getUnidad()->getTelefono()} Email: {$user_equipo->getUnidad()->getCorreo()}< /p>
</div>
<div >
</div>
</div>
<style>
.header { text-align: center; }
.content { font-size: 12px; }
.footer { text-align: center; font-size: 10px; margin-top: 10px; text-align: left; }
.table-body { text-align: center; font-size: 8px; }
.spaced-table {margin-bottom: 2px;}
.direccion { text-align: center; font-size: 10px; }
</style>
EOD;
ob_end_clean();
$pdf->writeHTML($html, true, 0, true, 0);
// Respuesta del PDF para visualización del usuario
$pdf->Output('reporte.pdf', 'I');
return new Response(); // No es necesario renderizar una vista aquí, ya que estamos generando el PDF
}
#[Route('/otro-resguardo-pdf', name: 'app_resguardo_otro_pdf', methods: ['POST'])]
public function otroResguardoPDF(EquipoRepository $equipoRepository, Request $request, SelloDigital $sello/*, int $equipoId*/)
{
ini_set('memory_limit', '5120M');
ini_set('max_execution_time', 0);
ini_set('output_buffering', 0);
date_default_timezone_set('America/Mexico_City');
setlocale(LC_ALL, 'es_MX');
// Obtenemos los datos de la petición
/** @var Usuario $user */
$user = $this->getUser();
$unidadId = $request->request->get('unidad_filtro');
$fecha = date('d-m-Y');
/*$equipo = $equipoRepository->findOneBy(['idEquipo' => 1]);
echo "**Equipo:** {$equipo->getMarca()} {$equipo->getModelo()}\n";
echo "**Serie:** {$equipo->getSerie()}\n";
echo "**Estatus:** {$equipo->getEstatus()}\n";
echo "**Marbete:** {$equipo->getMarbete()}\n";
echo "**Procesador:** {$equipo->getProcesador()}\n";
echo "**RAM:** {$equipo->getRam()}\n";
echo "**SSD:** {$equipo->getSsd()}\n";
echo "**HDD:** {$equipo->getHdd()}\n";
echo "**EMHV:** {$equipo->getEmhv()}\n";
echo "**Ubicación:** {$equipo->getUbicacion()}\n";
echo "**Usuario:** {$equipo->getUsuario()}\n";*/
$equipos = [
[
'estatus' => 'Activo',
'marbete' => '1234567890',
'marca' => 'Dell',
'modelo' => 'OptiPlex 3090',
'serie' => '123456789ABC',
'procesador' => 'Intel Core i5-12345',
'ssd' => '256 GB',
'hdd' => '1 TB',
'ram' => '16 GB',
'emhv' => 'No aplica',
'ubicacion' => 'Edificio A, Nivel 3',
'usuario' => 'Juan Pérez López'
],
// Add more sample data as needed
];
// Declaración de la instancia de TCPDF con el encabezado personalizado
$pdf = new DocumentoPDF1();
if (empty($unidadId)) {
$pdf->unidad = "Todas las Unidades administrativas";
} else {
$uni = $this->getDoctrine()->getRepository(Unidad::class)->findOneBy(['idUni' => $unidadId]);
$pdf->unidad = $uni->getNombre();
}
$pdf->codigo = '15-528-PO-15-F18';
$pdf->revision = '02';
$pdf->faprobacion = '30/10/2022';
$pdf->fecha = $fecha;
$pdf->formato = '';
$pdf->nombre = '';
$pdf->usuarioa = $user->getNombreCompleto();
$pdf->areaa = $user->getArea();
$pdf->presente = 'Presente';
$pdf->mensaje1 = 'Por medio del presente se le hace entrega del equipo de cómputo descrito a continuación.';
$pdf->mensaje2 = 'Es importante mencionar que el presente equipo, le es asignado para poder llevar a cabo el cumplimiento de sus actividades laborales.';
$pdf->mensaje3 = 'Lo que lo compromete a hacer un buen uso del mismo, no instalar software ilegal y a no modificar o alterar la configuración del mismo.';
$pdf->mensaje4 = 'Sin más por el momento aprovecho la oportunidad para enviarle un cordial saludo.<br><br><br>';
$pdf->atentamente = ' A T E N T A M E N T E';
$pdf->atentamente1 = ' GREGORIO JUAN BERNAL SOLÍS<br>
JEFE DE PROYECTO DE LA UNIDAD DE<br>
INNOVACIÓN Y TECNOLOGÍAS DE LA INFORMACIÓN';
$pdf->cpp = 'c.c.p – Beatriz Marlet Torres Perea';
$pdf->gjbs = 'G.J.B.S.';
$pdf->setPrintFooter(false);
// Obtenemos los datos del documento
$cadenaOriginal = $pdf->formato . '||';
$cadenaOriginal .= (empty($unidadId)) ? "Todas las Unidades administrativas" : $pdf->unidad;
$cadenaOriginal .= '||' . $user->getNombre() . ' ' . $user->getPapellido() . '||' . $user->getCorreo() . '||' . $user->getRol()->getNombre();
$cadenaOriginal .= '||' . $fecha;
$cadena64 = $sello->generar($cadenaOriginal);
// Información del documento
$pdf->SetCreator('Conalep Estado de México');
$pdf->SetAuthor('SIGMEC');
$pdf->SetTitle('Reporte');
// Definimos los saltos de página como automáticos
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
// Nueva página con sus respectivas características
$pdf->AddPage('P', 'JIS_B4');
$pdf->SetY(70);
// Definimos la utilización de tipografías
$pdf->setFontSubsetting(true);
// Generamos el contenido a mostrar
ob_start();
$html = <<<EOD
<style>
.header { text-align: center; }
.content { font-size: 12px; }
.footer { text-align: center; font-size: 10px; margin-top: 10px; text-align: left; }
.table-body { text-align: center; font-size: 8px; }
</style>
<div class="content">
<p style="text-align: right;">Cuautitlán Izcalli, México; {$fecha}</p>
<p style="text-align: right;">Unidad de Innovación y Tecnologías de la Información</p>
<p style="text-align: right;"><strong>Asunto: Asignación de equipo de cómputo</strong></p>
<p><strong>{$user->getNombreCompleto()}</strong></p>
<p><strong>{$user->getArea()}</strong></p>
<p><strong>P R E S E N T E</strong></p>
<p>{$pdf->mensaje1}</p>
<table width="100%" cellpadding="2" border="0.1">
<thead>
<tr class="table-header">
<td>#</td>
<td>Estatus</td>
<td>Marbete</td>
<td>Marca</td>
<td>Modelo</td>
<td>Serie</td>
<td>Procesador</td>
<td>SSD</td>
<td>HDD</td>
<td>RAM</td>
<td>EMHV</td>
<td>Ubicación</td>
<td>Usuario</td>
</tr>
</thead>
<tbody class="table-body">
EOD;
$pdf->setMargins(10, 30);
$n = 1;
// **Iterate through the sample data and generate table rows**
foreach ($equipos as $equipo) {
$html .= <<<EOD
<tr>
<td>{$n}</td>
<td>{$equipo['estatus']}</td>
<td>{$equipo['marbete']}</td>
<td>{$equipo['marca']}</td>
<td>{$equipo['modelo']}</td>
<td>{$equipo['serie']}</td>
<td>{$equipo['procesador']}</td>
<td>{$equipo['ssd']}</td>
<td>{$equipo['hdd']}</td>
<td>{$equipo['ram']}</td>
<td>{$equipo['emhv']}</td>
<td>{$equipo['ubicacion']}</td>
<td>{$equipo['usuario']}</td>
</tr>
EOD;
$n++;
}
$html .= <<<EOD
</tbody>
</table>
<p>{$pdf->mensaje2}</p>
<p>{$pdf->mensaje3}</p>
<p>{$pdf->mensaje4}</p>
<div class="footer">
<p><strong>A T E N T A M E N T E</strong></p>
<p>{$pdf->atentamente1}</p>
<p>{$pdf->cpp}</p>
<p>{$pdf->gjbs}</p>
</div>
</div>
EOD;
ob_end_clean();
$pdf->writeHTML($html, true, 0, true, 0);
// Respuesta del PDF para visualización del usuario
$pdf->Output('reporte.pdf', 'I');
return $this->render('reporte/equipo_resguardo_pdf.html.twig');
}
#[Route('/equipo-excel', name: 'app_reporte_equipo_excel', methods: ['POST'])]
public function equipoExcel(EquipoRepository $equipoRepository, Request $request): Response
{
ini_set('memory_limit', '5120M');
ini_set('max_execution_time', 0);
ini_set('output_buffering', 0);
# Obtenemos los datos de la petición
/** @var Usuario $user */
$user = $this->getUser();
$parameters = $request->request->get('unidad_filtro');
$unidad = (array_key_exists('unidad', $request->request->all()['unidad_filtro'])) ? $parameters['unidad'] : $user->getUnidad();
$equipos = [];
# Validar si la unidad está vacía
if ($user->getRol()->getIdRol() >2 && empty($unidad)) {
throw new \InvalidArgumentException('Debe seleccionar una unidad administrativa.');
}
$equipos = $equipoRepository->equipoUnidad($unidad);
# Definir el nombre temporal del archivo
$filePath = 'equipo.xlsx';
# Se definen las cabeceras del archivo
$cabecera = WriterEntityFactory::createRowFromArray([
'No.',
'Estatus',
'Marbete',
'Descripción',
'Marca',
'Modelo',
'Serie',
'Procesador',
'CPU velocidad',
'Núcleos',
'SSD',
'HDD',
'RAM',
'MAC',
'IP',
'EMHV',
'Monitor marbete',
'Monitor marca',
'Monitor modelo',
'Monitor serie',
'Monitor tipo',
'Monitor pulgadas',
'Teclado marca',
'Teclado modelo',
'Teclado serie',
'Mouse marca',
'Mouse modelo',
'Mouse serie',
'Uso',
'Función',
'Descripción de la función',
'Unidad',
'Ubicación',
'Usuario'
]);
# Se crea el arreglo con los datos del cuerpo del documento
$data = [];
$n = 1;
foreach ($equipos as $equipo) {
$u = '';
if ($equipo->getUsuario()) {
$u = $equipo->getUsuario()->getNombre() . ' ' . $equipo->getUsuario()->getPapellido();
}else{
$u = 'Sin usuario';
}
$usuario = $u;
$ubicacion = $equipo->getUbicacion()->getArea();
$unidad = $equipo->getUnidad()->getNombre();
$ssd = "";
if ($equipo->getSsd() > 0 || $equipo->getSsd() != "") {
$ssd = $equipo->getSsd() . ' Gb';
}
$uso = match ($equipo->getUso()) {
"1" => "Educativo",
"2" => "Docente",
"3" => "Administrativo",
default => ""
};
$funcion = match ($equipo->getFuncion()) {
"1" => "Escritorio",
"2" => "Servidor",
default => ""
};
$estatus = match ($equipo->getEstatus()) {
"1" => "En operación",
"2" => "Descompuesto",
"3" => "Sin instalar",
"4" => "En proceso de baja",
"5" => "Baja",
default => ""
};
$emhv = match ($equipo->isEmhv()) {
true => "Cumple",
false => "No cumple",
default => ""
};
$data[] = WriterEntityFactory::createRowFromArray([
$n,
$estatus,
$equipo->getMarbete(),
$equipo->getDescripcion(),
$equipo->getMarca(),
$equipo->getModelo(),
$equipo->getSerie(),
$equipo->getProcesador(),
$equipo->getCpuVelocidad(),
$equipo->getNucleos(),
$ssd,
$equipo->getHhd(),
$equipo->getRam(),
$equipo->getMac(),
$equipo->getIp(),
$emhv,
$equipo->getMonitorMarbete(),
$equipo->getMonitorMarca(),
$equipo->getMonitorModelo(),
$equipo->getMonitorSerie(),
$equipo->getMonitorTipo(),
$equipo->getMonitorPulgadas(),
$equipo->getTecladoMarca(),
$equipo->getTecladoModelo(),
$equipo->getTecladoSerie(),
$equipo->getMouseMarca(),
$equipo->getMouseModelo(),
$equipo->getMouseSerie(),
$uso,
$funcion,
$equipo->getFuncionDescripcion(),
$unidad,
$ubicacion,
$usuario
]);
$n++;
}
# Se crea el documento en formato CSV
$writer = WriterEntityFactory::createXLSXWriter();
$writer
->openToFile($filePath)
->addRow($cabecera)
->addRows($data)
->close()
;
$response = new BinaryFileResponse($filePath);
$response->setContentDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
'equipo' . '_' . date('Y-m-d') . '.xlsx'
);
$response->deleteFileAfterSend(true);
return $response;
}
#[Route('/equipo-pdf', name: 'app_reporte_equipo_pdf', methods: ['POST'])]
public function equipoPDF(EquipoRepository $equipoRepository, Request $request, SelloDigital $sello)
{
ini_set('memory_limit', '5120M');
ini_set('max_execution_time', 0);
ini_set('output_buffering', 0);
date_default_timezone_set('America/Mexico_City');
setlocale(LC_ALL, 'es_MX');
# Obtenemos los datos de la petición
/** @var Usuario $user */
$user = $this->getUser();
$parameters = $request->request->get('unidad_filtro');
$unidad = (array_key_exists('unidad', $request->request->all()['unidad_filtro'])) ? $parameters['unidad'] : $user->getUnidad();
$fecha = date('d-m-Y H:i');
# Declaración de la instancia de TCPDF con el encabezado personalizado
$pdf = new DocumentoPDF();
if (empty($unidad)) {
$pdf->unidad = "Todas las Unidades administrativas";
} else {
$uni = $this->getDoctrine()->getRepository(Unidad::class)->findOneBy(['idUni' => $unidad]);
$pdf->unidad = $uni->getNombre();
}
$pdf->codigo = '15-528-PO-15-F18';
$pdf->revision = '02';
$pdf->faprobacion = '30/10/2022';
$pdf->fecha = $fecha;
$pdf->formato = 'FORMATO CE-1';
$pdf->nombre = 'CONTROL DE EQUIPO DE CÓMPUTO';
$pdf->setPrintFooter(false);
# Obtenemos los datos del documento
$equipos = $equipoRepository->equipoUnidad($unidad, 1);
$cadenaOriginal = $pdf->formato . '||';
$cadenaOriginal .= (empty($unidad)) ? "Todas las Unidades administrativas" : $pdf->unidad;
$cadenaOriginal .= '||' . $user->getNombre() . ' ' . $user->getPapellido() . '||' . $user->getCorreo() . '||' . $user->getRol()->getNombre();
$cadenaOriginal .= '||' . $fecha;
$cadena64 = $sello->generar($cadenaOriginal);
# Información del documento
$pdf->SetCreator('Conalep Estado de México');
$pdf->SetAuthor('SIGMEC');
$pdf->SetTitle('Reporte');
# Definimos los saltos de página como automáticos
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
#Nueva página con sus respectivas características
$pdf->AddPage('L', 'JIS_B4');
$pdf->SetY(50);
# Definimos la utilización de tipigrafías
$pdf->setFontSubsetting(true);
### Generamos el contenido a mostrar ###
ob_start();
$html = <<<EOD
<table cellpadding="2" border="0.1">
<thead>
<tr style="text-align: center; background-color: #e4e4e4; font-size: 9px">
<td rowspan="2" style="width: 2%">#</td>
<td rowspan="2">Estatus</td>
<td colspan="9">CPU</td>
<td colspan="6">Monitor</td>
<td colspan="3">Teclado</td>
<td colspan="3">Mouse</td>
<td rowspan="2">Uso</td>
<td rowspan="2" style="font-size: 7.5px">Función</td>
<td rowspan="2" style="font-size: 7px">Ubicación</td>
<td rowspan="2" style="font-size: 7.5px">Usuario</td>
</tr>
<tr style="text-align: center; background-color: #e4e4e4; font-size: 7px">
<td>Marbete</td>
<td>Marca</td>
<td>Modelo</td>
<td>Serie</td>
<td style="font-size: 6px">Procesador</td>
<td>SSD</td>
<td>HDD</td>
<td>RAM</td>
<td>EMHV</td>
<td>Marbete</td>
<td>Marca</td>
<td>Modelo</td>
<td>Serie</td>
<td>Tipo</td>
<td>Pulgadas</td>
<td>Marca</td>
<td>Modelo</td>
<td>Serie</td>
<td>Marca</td>
<td>Modelo</td>
<td>Serie</td>
</tr>
</thead>
<tbody>
EOD;
$pdf->setMargins(10, 50);
$n = 1;
foreach ($equipos as $equipo) {
$u = '';
if ($equipo->getUsuario()) {
$u = $equipo->getUsuario()->getNombre() . ' ' . $equipo->getUsuario()->getPapellido();
}else{
$u = 'Sin usuario';
}
$usuario = $u;
$ubicacion = $equipo->getUbicacion()->getArea();
$uso = match ($equipo->getUso()) {
"1" => "Educativo",
"2" => "Docente",
"3" => "Administrativo",
default => ""
};
$funcion = match ($equipo->getFuncion()) {
"1" => "Escritorio",
"2" => "Servidor",
default => ""
};
$estatus = match ($equipo->getEstatus()) {
"1" => "En operación",
"2" => "Descompuesto",
"3" => "Sin instalar",
"4" => "En proceso de baja",
"5" => "Baja",
default => ""
};
$emhv = match ($equipo->isEmhv()) {
true => "Si",
false => "No",
default => ""
};
$html .= <<<EOD
<tr style="font-size: 7px" nobr="true">
<td style="width: 2%">{$n}</td>
<td>{$estatus}</td>
<td>{$equipo->getMarbete()}</td>
<td>{$equipo->getMarca()}</td>
<td>{$equipo->getModelo()}</td>
<td>{$equipo->getSerie()}</td>
<td>{$equipo->getProcesador()}</td>
<td>{$equipo->getSsd()}</td>
<td>{$equipo->getHhd()}</td>
<td>{$equipo->getRam()}</td>
<td>{$emhv}</td>
<td>{$equipo->getMonitorMarbete()}</td>
<td>{$equipo->getMonitorMarca()}</td>
<td>{$equipo->getMonitorModelo()}</td>
<td>{$equipo->getMonitorSerie()}</td>
<td>{$equipo->getMonitorTipo()}</td>
<td>{$equipo->getMonitorPulgadas()}</td>
<td>{$equipo->getTecladoMarca()}</td>
<td>{$equipo->getTecladoModelo()}</td>
<td>{$equipo->getTecladoSerie()}</td>
<td>{$equipo->getMouseMarca()}</td>
<td>{$equipo->getMouseModelo()}</td>
<td>{$equipo->getMouseSerie()}</td>
<td>{$uso}</td>
<td style="font-size: 6px">{$funcion}</td>
<td style="font-size: 6px">{$ubicacion}</td>
<td style="font-size: 6px">{$usuario}</td>
</tr>
EOD;
$n++;
}
$html .= <<<EOD
</tbody>
</table>
EOD;
# Declaramos una nueva tipografía para el pie de página del contenido
$pdf->SetFont('freesans', '', 10, '', true);
# $pdf->write2DBarcode($cadenaOriginal, 'QRCODE,H', false, false, 20, 20, $styleQR, 'N')
$qr = new \TCPDF2DBarcode($cadenaOriginal, 'QRCODE,M');
$imgdata = $qr->getBarcodePngData(2.5, 2.5, array(0, 0, 0));
file_put_contents('img/sistema/qr.png', $imgdata);
$html .=
<<<EOD
<br>
<br>
<br>
<table width="100%" cellpadding="5" border="0">
<tbody>
<tr>
<td style="width: 30%; font-size: 11px"><strong>GENERÓ: </strong></td>
<td style="width: 30%"><strong>Usuario: </strong>{$user->getNombre()} {$user->getPapellido()}</td>
<td style="width: 30%"><strong>Correo: </strong>{$user->getCorreo()}</td>
<td style="width: 9%" rowspan="2"><img src="img/sistema/qr.png" alt="QRCODE" /></td>
</tr>
<tr>
<td colspan="2" style="width: 75%">{$cadena64}</td>
<td style="width: 13%"><img src="img/sistema/logo.png" alt="LOGO"></td>
</tr>
</tbody>
</table>
EOD;
# Imprimimos el contenido como HTML
$pdf->writeHTMLCell($w = 0, $h = 0, $x = '', $y = '', $html, $border = 0, $ln = 1, $fill = 0, $reseth = true, $align = '', $autopadding = true);
ob_end_clean();
# ---------------------------------------------------------
# Mostramos el resultado en pantalla
$pdf->Output($pdf->formato . date('Ymd') . '.pdf', 'D');
}
#[Route('/impresora-excel', name: 'app_reporte_impresora_excel', methods: ['POST'])]
public function impresoraExcel(ImpresoraRepository $impresoraRepository, Request $request): Response
{
ini_set('memory_limit', '5120M');
ini_set('max_execution_time', 0);
ini_set('output_buffering', 0);
# Obtenemos los datos de la petición
/** @var Usuario $user */
$user = $this->getUser();
$parameters = $request->request->get('unidad_filtro');
$unidad = (array_key_exists('unidad', $request->request->all()['unidad_filtro'])) ? $parameters['unidad'] : $user->getUnidad();
# Validar si la unidad está vacía
if ($user->getRol()->getIdRol() >2 && empty($unidad)) {
throw new \InvalidArgumentException('Debe seleccionar una unidad administrativa.');
}
$impresoras = $impresoraRepository->impresoraUnidad($unidad);
# Definir el nombre temporal del archivo
$filePath = 'impresora.xlsx';
# Se definen las cabeceras del archivo
$cabecera = WriterEntityFactory::createRowFromArray([
'No.',
'Estatus',
'Marbete',
'Descripción',
'Marca',
'Modelo',
'Serie',
'Tipo',
'Uso',
'MAC',
'IP',
'Unidad',
'Ubicación',
'Usuario'
]);
# Se crea el arreglo con los datos del cuerpo del documento
$data = [];
$n = 1;
foreach ($impresoras as $impresora) {
$u = ($impresora->getUsuario()) ? $impresora->getUsuario()->getNombre() . ' ' . $impresora->getUsuario()->getPapellido() : 'Sin usuario';
$usuario = $u;
$ubicacion = $impresora->getUbicacion()->getArea();
$unidad = $impresora->getUnidad()->getNombre();
$tipo = match ($impresora->getTipo()) {
"0" => "Laser",
"1" => "Matriz",
"2" => "Tinta",
default => ""
};
$uso = match ($impresora->getUso()) {
"1" => "Educativo",
"2" => "Docente",
"3" => "Administrativo",
default => ""
};
$estatus = match ($impresora->getEstatus()) {
"1" => "En operación",
"2" => "Descompuesto",
"3" => "Sin instalar",
"4" => "En proceso de baja",
"5" => "Baja",
default => ""
};
$data[] = WriterEntityFactory::createRowFromArray([
$n,
$estatus,
$impresora->getMarbete(),
$impresora->getMarca(),
$impresora->getModelo(),
$impresora->getSerie(),
$tipo,
$uso,
$impresora->getMac(),
$impresora->getIp(),
$unidad,
$ubicacion,
$usuario
]);
$n++;
}
# Se crea el documento en formato CSV
$writer = WriterEntityFactory::createXLSXWriter();
$writer
->openToFile($filePath)
->addRow($cabecera)
->addRows($data)
->close();
$response = new BinaryFileResponse($filePath);
$response->setContentDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
'impresora' . '_' . date('Y-m-d') . '.xlsx'
);
$response->deleteFileAfterSend(true);
return $response;
}
#[Route('/impresora-pdf', name: 'app_reporte_impresora_pdf', methods: ['POST'])]
public function impresoraPDF(ImpresoraRepository $impresoraRepository, Request $request, SelloDigital $sello)
{
ini_set('memory_limit', '5120M');
ini_set('max_execution_time', 0);
ini_set('output_buffering', 0);
date_default_timezone_set('America/Mexico_City');
setlocale(LC_ALL, 'es_MX');
# Obtenemos los datos de la petición
/** @var Usuario $user */
$user = $this->getUser();
$parameters = $request->request->get('unidad_filtro');
$unidad = (array_key_exists('unidad', $request->request->all()['unidad_filtro'])) ? $parameters['unidad'] : $user->getUnidad();
$fecha = date('d-m-Y H:i');
# Declaración de la instancia de TCPDF con el encabezado personalizado
$pdf = new DocumentoPDF();
if (empty($unidad)) {
$pdf->unidad = "Todas las Unidades administrativas";
} else {
$uni = $this->getDoctrine()->getRepository(Unidad::class)->findOneBy(['idUni' => $unidad]);
$pdf->unidad = $uni->getNombre();
}
$pdf->codigo = '15-528-PO-15-F18';
$pdf->revision = '02';
$pdf->faprobacion = '30/10/2022';
$pdf->fecha = $fecha;
$pdf->formato = 'FORMATO CE-2';
$pdf->nombre = 'CONTROL DE IMPRESORAS';
$pdf->setPrintFooter(false);
# Obtenemos los datos del documento
$impresoras = $impresoraRepository->impresoraUnidad($unidad, 1);
$cadenaOriginal = $pdf->formato . '||';
$cadenaOriginal .= (empty($unidad)) ? "Todas las Unidades administrativas" : $pdf->unidad;
$cadenaOriginal .= '||' . $user->getNombre() . ' ' . $user->getPapellido() . '||' . $user->getCorreo() . '||' . $user->getRol()->getNombre();
$cadenaOriginal .= '||' . $fecha;
$cadena64 = $sello->generar($cadenaOriginal);
# Información del documento
$pdf->SetCreator('Conalep Estado de México');
$pdf->SetAuthor('SIGMEC');
$pdf->SetTitle('Reporte');
# Definimos los saltos de página como automáticos
#$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
#Nueva página con sus respectivas características
$pdf->AddPage('L', 'LEGAL');
$pdf->SetY(50);
# Definimos la utilización de tipigrafías
$pdf->setFontSubsetting(true);
### Generamos el contenido a mostrar ###
ob_start();
$html = <<<EOD
<table cellpadding="2" border="0.1" width="100%">
<thead>
<tr style="text-align: center; background-color: #e4e4e4; font-size: 11px">
<td style="width: 5%">No.</td>
<td>Estatus</td>
<td>Marbete</td>
<td>Marca</td>
<td>Modelo</td>
<td>Serie</td>
<td>Tipo</td>
<td>Uso</td>
<td>Ubicación</td>
<td>Usuario</td>
</tr>
</thead>
<tbody>
EOD;
$pdf->setMargins(10, 50);
$n = 1;
foreach ($impresoras as $impresora) {
$u = ($impresora->getUsuario()) ? $impresora->getUsuario()->getNombre() . ' ' . $impresora->getUsuario()->getPapellido() : 'Sin usuario';
$usuario = $u;
$ubicacion = $impresora->getUbicacion()->getArea();
$tipo = match ($impresora->getTipo()) {
'0' => '<span>Laser</span>',
'1' => '<span>Matriz</span>',
'2' => '<span>Tinta</span>',
default => ""
};
$uso = match ($impresora->getUso()) {
"1" => "Educativo",
"2" => "Docente",
"3" => "Administrativo",
default => ""
};
$estatus = match ($impresora->getEstatus()) {
"1" => "En operación",
"2" => "Descompuesto",
"3" => "Sin instalar",
"4" => "En proceso de baja",
"5" => "Baja",
default => ""
};
$html .= <<<EOD
<tr style="font-size: 10px" nobr="true">
<td style="width: 5%">{$n}</td>
<td>{$estatus}</td>
<td>{$impresora->getMarbete()}</td>
<td>{$impresora->getMarca()}</td>
<td>{$impresora->getModelo()}</td>
<td>{$impresora->getSerie()}</td>
<td>{$tipo}</td>
<td>{$uso}</td>
<td>{$ubicacion}</td>
<td>{$usuario}</td>
</tr>
EOD;
$n++;
}
$html .= <<<EOD
</tbody>
</table>
EOD;
# Declaramos una nueva tipografía para el pie de página del contenido
$pdf->SetFont('freesans', '', 10, '', true);
# $pdf->write2DBarcode($cadenaOriginal, 'QRCODE,H', false, false, 20, 20, $styleQR, 'N')
$qr = new \TCPDF2DBarcode($cadenaOriginal, 'QRCODE,M');
$imgdata = $qr->getBarcodePngData(2.5, 2.5, array(0, 0, 0));
file_put_contents('img/sistema/qr.png', $imgdata);
$html .= <<<EOD
<br>
<br>
<br>
<table width="100%" cellpadding="5" border="0">
<tbody>
<tr>
<td style="width: 30%; font-size: 11px"><strong>GENERÓ: </strong></td>
<td style="width: 30%"><strong>Usuario: </strong>{$user->getNombre()} {$user->getPapellido()}</td>
<td style="width: 30%"><strong>Correo: </strong>{$user->getCorreo()}</td>
<td style="width: 9%" rowspan="2"><img src="img/sistema/qr.png" alt="QRCODE" /></td>
</tr>
<tr>
<td colspan="2" style="width: 75%">{$cadena64}</td>
<td style="width: 13%"><img src="img/sistema/logo.png" alt="LOGO"></td>
</tr>
</tbody>
</table>
EOD;
# Imprimimos el contenido como HTML
$pdf->writeHTMLCell($w = 0, $h = 0, $x = '', $y = '', $html, $border = 0, $ln = 1, $fill = 0, $reseth = true, $align = '', $autopadding = true);
ob_end_clean();
# ---------------------------------------------------------
# Mostramos el resultado en pantalla
$pdf->Output($pdf->formato . date('Ymd') . '.pdf', 'D');
}
#[Route('/otro-excel', name: 'app_reporte_otro_excel', methods: ['POST'])]
public function otroExcel(OtroRepository $otroRepository, Request $request): Response
{
ini_set('memory_limit', '5120M');
ini_set('max_execution_time', 0);
ini_set('output_buffering', 0);
# Obtenemos los datos de la petición
/** @var Usuario $user */
$user = $this->getUser();
$parameters = $request->request->get('unidad_filtro');
$unidad = (array_key_exists('unidad', $request->request->all()['unidad_filtro'])) ? $parameters['unidad'] : $user->getUnidad();
# Validar si la unidad está vacía
if ($user->getRol()->getIdRol() >2 && empty($unidad)) {
throw new \InvalidArgumentException('Debe seleccionar una unidad administrativa.');
}
# Obtenemos los datos del documento
$otros = $otroRepository->otroUnidad($unidad);
# Definir el nombre temporal del archivo
$filePath = 'otro.xlsx';
# Se definen las cabeceras del archivo
$cabecera = WriterEntityFactory::createRowFromArray([
'No.',
'Estatus',
'Marbete',
'Descripción',
'Marca',
'Modelo',
'Serie',
'Uso',
'MAC',
'IP',
'Unidad',
'Ubicación',
'Usuario'
]);
# Se crea el arreglo con los datos del cuerpo del documento
$data = [];
$n = 1;
foreach ($otros as $otro) {
$u = ($otro->getUsuario()) ? $otro->getUsuario()->getNombre() . ' ' . $otro->getUsuario()->getPapellido() : 'Sin usuario';
$usuario = $u;
$ubicacion = $otro->getUbicacion()->getArea();
$unidad = $otro->getUnidad()->getNombre();
$uso = match ($otro->getUso()) {
"1" => "Educativo",
"2" => "Docente",
"3" => "Administrativo",
default => ""
};
$estatus = match ($otro->getEstatus()) {
"1" => "En operación",
"2" => "Descompuesto",
"3" => "Sin instalar",
"4" => "En proceso de baja",
"5" => "Baja",
default => ""
};
$data[] = WriterEntityFactory::createRowFromArray([
$n,
$estatus,
$otro->getMarbete(),
$otro->getDescripcion(),
$otro->getMarca(),
$otro->getModelo(),
$otro->getSerie(),
$uso,
$otro->getMac(),
$otro->getIp(),
$unidad,
$ubicacion,
$usuario
]);
$n++;
}
# Se crea el documento en formato CSV
$writer = WriterEntityFactory::createXLSXWriter();
$writer
->openToFile($filePath)
->addRow($cabecera)
->addRows($data)
->close();
$response = new BinaryFileResponse($filePath);
$response->setContentDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
'otro' . '_' . date('Y-m-d') . '.xlsx'
);
$response->deleteFileAfterSend(true);
return $response;
}
#[Route('/otro-pdf', name: 'app_reporte_otro_pdf', methods: ['POST'])]
public function otroPDF(OtroRepository $otroRepository, Request $request, SelloDigital $sello)
{
ini_set('memory_limit', '5120M');
ini_set('max_execution_time', 0);
ini_set('output_buffering', 0);
date_default_timezone_set('America/Mexico_City');
setlocale(LC_ALL, 'es_MX');
# Obtenemos los datos de la petición
/** @var Usuario $user */
$user = $this->getUser();
$parameters = $request->request->get('unidad_filtro');
$unidad = (array_key_exists('unidad', $request->request->all()['unidad_filtro'])) ? $parameters['unidad'] : $user->getUnidad();
$fecha = date('d-m-Y H:i');
# Declaración de la instancia de TCPDF con el encabezado personalizado
$pdf = new DocumentoPDF();
if (empty($unidad)) {
$pdf->unidad = "Todas las Unidades administrativas";
} else {
$uni = $this->getDoctrine()->getRepository(Unidad::class)->findOneBy(['idUni' => $unidad]);
$pdf->unidad = $uni->getNombre();
}
$pdf->codigo = '15-528-PO-15-F18';
$pdf->revision = '02';
$pdf->faprobacion = '30/10/2022';
$pdf->fecha = $fecha;
$pdf->formato = 'FORMATO CE-3';
$pdf->nombre = 'CONTROL DE OTROS BIENES INFORMÁTICOS';
$pdf->setPrintFooter(false);
# Obtenemos los datos del documento
$otros = $otroRepository->otroUnidad($unidad, 1);
$cadenaOriginal = $pdf->formato . '||';
$cadenaOriginal .= (empty($unidad)) ? "Todas las Unidades administrativas" : $pdf->unidad;
$cadenaOriginal .= '||' . $user->getNombre() . ' ' . $user->getPapellido() . '||' . $user->getCorreo() . '||' . $user->getRol()->getNombre();
$cadenaOriginal .= '||' . $fecha;
$cadena64 = $sello->generar($cadenaOriginal);
# Información del documento
$pdf->SetCreator('Conalep Estado de México');
$pdf->SetAuthor('SIGMEC');
$pdf->SetTitle('Reporte');
# Definimos los saltos de página como automáticos
#$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
#Nueva página con sus respectivas características
$pdf->AddPage('L', 'LEGAL');
$pdf->SetY(50);
# Definimos la utilización de tipigrafías
$pdf->setFontSubsetting(true);
### Generamos el contenido a mostrar ###
ob_start();
$html = <<<EOD
<table cellpadding="2" border="0.1">
<thead>
<tr style="text-align: center; background-color: #e4e4e4; font-size: 11px">
<td style="width: 5%">No.</td>
<td>Estatus</td>
<td>Marbete</td>
<td>Descripción</td>
<td>Marca</td>
<td>Modelo</td>
<td>Serie</td>
<td>Uso</td>
<td>Ubicación</td>
<td>Usuario</td>
</tr>
</thead>
<tbody>
EOD;
$pdf->setMargins(10, 50);
$n = 1;
foreach ($otros as $otro) {
$u = ($otro->getUsuario()) ? $otro->getUsuario()->getNombre() . ' ' . $otro->getUsuario()->getPapellido() : 'Sin usuario';
$usuario = $u;
$ubicacion = $otro->getUbicacion()->getArea();
$uso = match ($otro->getUso()) {
"1" => "Educativo",
"2" => "Docente",
"3" => "Administrativo",
default => ""
};
$estatus = match ($otro->getEstatus()) {
"1" => "En operación",
"2" => "Descompuesto",
"3" => "Sin instalar",
"4" => "En proceso de baja",
"5" => "Baja",
default => ""
};
$html .= <<<EOD
<tr style="font-size: 10px" nobr="true">
<td style="width: 5%">{$n}</td>
<td>{$estatus}</td>
<td>{$otro->getMarbete()}</td>
<td>{$otro->getDescripcion()}</td>
<td>{$otro->getMarca()}</td>
<td>{$otro->getModelo()}</td>
<td>{$otro->getSerie()}</td>
<td>{$uso}</td>
<td>{$ubicacion}</td>
<td>{$usuario}</td>
</tr>
EOD;
$n++;
}
$html .= <<<EOD
</tbody>
</table>
EOD;
# Declaramos una nueva tipografía para el pie de página del contenido
$pdf->SetFont('freesans', '', 10, '', true);
# $pdf->write2DBarcode($cadenaOriginal, 'QRCODE,H', false, false, 20, 20, $styleQR, 'N')
$qr = new \TCPDF2DBarcode($cadenaOriginal, 'QRCODE,M');
$imgdata = $qr->getBarcodePngData(2.5, 2.5, array(0, 0, 0));
file_put_contents('img/sistema/qr.png', $imgdata);
$html .= <<<EOD
<br>
<br>
<br>
<table width="100%" cellpadding="5" border="0">
<tbody>
<tr>
<td style="width: 30%; font-size: 11px"><strong>GENERÓ: </strong></td>
<td style="width: 30%"><strong>Usuario: </strong>{$user->getNombre()} {$user->getPapellido()}</td>
<td style="width: 30%"><strong>Correo: </strong>{$user->getCorreo()}</td>
<td style="width: 9%" rowspan="2"><img src="img/sistema/qr.png" alt="QRCODE" /></td>
</tr>
<tr>
<td colspan="2" style="width: 75%">{$cadena64}</td>
<td style="width: 13%"><img src="img/sistema/logo.png" alt="LOGO"></td>
</tr>
</tbody>
</table>
EOD;
# Imprimimos el contenido como HTML
$pdf->writeHTMLCell($w = 0, $h = 0, $x = '', $y = '', $html, $border = 0, $ln = 1, $fill = 0, $reseth = true, $align = '', $autopadding = true);
ob_end_clean();
# ---------------------------------------------------------
# Mostramos el resultado en pantalla
$pdf->Output($pdf->formato . date('Ymd') . '.pdf', 'D');
}
#[Route('/red-excel', name: 'app_reporte_red_excel', methods: ['POST'])]
public function redExcel(RedRepository $redRepository, Request $request): Response
{
ini_set('memory_limit', '5120M');
ini_set('max_execution_time', 0);
ini_set('output_buffering', 0);
# Obtenemos los datos de la petición
/** @var Usuario $user */
$user = $this->getUser();
$parameters = $request->request->get('unidad_filtro');
$unidad = (array_key_exists('unidad', $request->request->all()['unidad_filtro'])) ? $parameters['unidad'] : $user->getUnidad();
if ($user->getRol()->getIdRol() >2 && empty($unidad)) {
throw new \InvalidArgumentException('Debe seleccionar una unidad administrativa.');
}
# Obtenemos los datos del documento
$redes = $redRepository->redUnidad($unidad);
# Definir el nombre temporal del archivo
$filePath = 'red.xlsx';
# Se definen las cabeceras del archivo
$cabecera = WriterEntityFactory::createRowFromArray([
'No.',
'Estatus',
'Marbete (opcional)',
'Descripción',
'Marca',
'Modelo',
'Serie',
'Velocidad',
'Puertos',
'Uso',
'MAC',
'IP',
'Unidad',
'Ubicación',
'Usuario'
]);
# Se crea el arreglo con los datos del cuerpo del documento
$data = [];
$n = 1;
foreach ($redes as $red) {
$u = ($red->getUsuario()) ? $red->getUsuario()->getNombre() . ' ' . $red->getUsuario()->getPapellido() : 'Sin usuario';
$usuario = $u;
$ubicacion = $red->getUbicacion()->getArea();
$unidad = $red->getUnidad()->getNombre();
$uso = match ($red->getUso()) {
"1" => "Educativo",
"2" => "Docente",
"3" => "Administrativo",
default => ""
};
$estatus = match ($red->getEstatus()) {
"1" => "En operación",
"2" => "Descompuesto",
"3" => "Sin instalar",
"4" => "En proceso de baja",
"5" => "Baja",
default => ""
};
$data[] = WriterEntityFactory::createRowFromArray([
$n,
$estatus,
$red->getMarbete(),
$red->getDescripcion(),
$red->getMarca(),
$red->getModelo(),
$red->getSerie(),
$red->getVelocidad(),
$red->getPuertos(),
$uso,
$red->getMac(),
$red->getIp(),
$unidad,
$ubicacion,
$usuario
]);
$n++;
}
# Se crea el documento en formato CSV
$writer = WriterEntityFactory::createXLSXWriter();
$writer
->openToFile($filePath)
->addRow($cabecera)
->addRows($data)
->close();
$response = new BinaryFileResponse($filePath);
$response->setContentDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
'red' . '_' . date('Y-m-d') . '.xlsx'
);
$response->deleteFileAfterSend(true);
return $response;
}
#[Route('/red-pdf', name: 'app_reporte_red_pdf', methods: ['POST'])]
public function redPDF(RedRepository $redRepository, Request $request, SelloDigital $sello)
{
ini_set('memory_limit', '5120M');
ini_set('max_execution_time', 0);
ini_set('output_buffering', 0);
date_default_timezone_set('America/Mexico_City');
setlocale(LC_ALL, 'es_MX');
# Obtenemos los datos de la petición
/** @var Usuario $user */
$user = $this->getUser();
$parameters = $request->request->get('unidad_filtro');
$unidad = (array_key_exists('unidad', $request->request->all()['unidad_filtro'])) ? $parameters['unidad'] : $user->getUnidad();
$fecha = date('d-m-Y H:i');
# Declaración de la instancia de TCPDF con el encabezado personalizado
$pdf = new DocumentoPDF();
if (empty($unidad)) {
$pdf->unidad = "Todas las Unidades administrativas";
} else {
$uni = $this->getDoctrine()->getRepository(Unidad::class)->findOneBy(['idUni' => $unidad]);
$pdf->unidad = $uni->getNombre();
}
$pdf->codigo = '15-528-PO-15-F18';
$pdf->revision = '02';
$pdf->faprobacion = '30/10/2022';
$pdf->fecha = $fecha;
$pdf->formato = 'FORMATO CE-4';
$pdf->nombre = 'CONTROL DE ACTIVOS DE COMUNICACIÓN';
$pdf->setPrintFooter(false);
# Obtenemos los datos del documento
$redes = $redRepository->redUnidad($unidad, 1);
$cadenaOriginal = $pdf->formato . '||';
$cadenaOriginal .= (empty($unidad)) ? "Todas las Unidades administrativas" : $pdf->unidad;
$cadenaOriginal .= '||' . $user->getNombre() . ' ' . $user->getPapellido() . '||' . $user->getCorreo() . '||' . $user->getRol()->getNombre();
$cadenaOriginal .= '||' . $fecha;
$cadena64 = $sello->generar($cadenaOriginal);
# Información del documento
$pdf->SetCreator('Conalep Estado de México');
$pdf->SetAuthor('SIGMEC');
$pdf->SetTitle('Reporte');
# Definimos los saltos de página como automáticos
#$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
#Nueva página con sus respectivas características
$pdf->AddPage('L', 'LEGAL');
$pdf->SetY(50);
# Definimos la utilización de tipigrafías
$pdf->setFontSubsetting(true);
### Generamos el contenido a mostrar ###
ob_start();
$html = <<<EOD
<table cellpadding="2" border="0.1">
<thead>
<tr style="text-align: center; background-color: #e4e4e4; font-size: 11px">
<td style="width: 5%">No.</td>
<td>Estatus</td>
<td>Marbete (opcional)</td>
<td>Descripción</td>
<td>Marca</td>
<td>Modelo</td>
<td>Serie</td>
<td>Velocidad</td>
<td>Puertos</td>
<td>Uso</td>
<td>Ubicación</td>
<td>Usuario</td>
</tr>
</thead>
<tbody>
EOD;
$pdf->setMargins(10,50);
$n = 1;
foreach ($redes as $red) {
$u = ($red->getUsuario()) ? $red->getUsuario()->getNombre() . ' ' . $red->getUsuario()->getPapellido() : 'Sin usuario';
$usuario = $u;
$ubicacion = $red->getUbicacion()->getArea();
$uso = match ($red->getUso()) {
"1" => "Educativo",
"2" => "Docente",
"3" => "Administrativo",
default => ""
};
$estatus = match ($red->getEstatus()) {
"1" => "En operación",
"2" => "Descompuesto",
"3" => "Sin instalar",
"4" => "En proceso de baja",
"5" => "Baja",
default => ""
};
$html .= <<<EOD
<tr style="font-size: 10px" nobr="true">
<td style="width: 5%">{$n}</td>
<td>{$estatus}</td>
<td>{$red->getMarbete()}</td>
<td>{$red->getDescripcion()}</td>
<td>{$red->getMarca()}</td>
<td>{$red->getModelo()}</td>
<td>{$red->getSerie()}</td>
<td>{$red->getVelocidad()}</td>
<td>{$red->getPuertos()}</td>
<td>{$uso}</td>
<td>{$ubicacion}</td>
<td>{$usuario}</td>
</tr>
EOD;
$n++;
}
$html .= <<<EOD
</tbody>
</table>
EOD;
# Declaramos una nueva tipografía para el pie de página del contenido
$pdf->SetFont('freesans', '', 10, '', true);
# $pdf->write2DBarcode($cadenaOriginal, 'QRCODE,H', false, false, 20, 20, $styleQR, 'N')
$qr = new \TCPDF2DBarcode($cadenaOriginal, 'QRCODE,M');
$imgdata = $qr->getBarcodePngData(2.5, 2.5, array(0, 0, 0));
file_put_contents('img/sistema/qr.png', $imgdata);
$html .= <<<EOD
<br>
<br>
<br>
<table width="100%" cellpadding="5" border="0">
<tbody>
<tr>
<td style="width: 30%; font-size: 11px"><strong>GENERÓ: </strong></td>
<td style="width: 30%"><strong>Usuario: </strong>{$user->getNombre()} {$user->getPapellido()}</td>
<td style="width: 30%"><strong>Correo: </strong>{$user->getCorreo()}</td>
<td style="width: 9%" rowspan="2"><img src="img/sistema/qr.png" alt="QRCODE" /></td>
</tr>
<tr>
<td colspan="2" style="width: 75%">{$cadena64}</td>
<td style="width: 13%"><img src="img/sistema/logo.png" alt="LOGO"></td>
</tr>
</tbody>
</table>
EOD;
# Imprimimos el contenido como HTML
$pdf->writeHTMLCell($w = 0, $h = 0, $x = '', $y = '', $html, $border = 0, $ln = 1, $fill = 0, $reseth = true, $align = '', $autopadding = true);
ob_end_clean();
# ---------------------------------------------------------
# Mostramos el resultado en pantalla
$pdf->Output($pdf->formato . date('Ymd') . '.pdf', 'I');
}
#[Route('/pamp-excel', name: 'app_reporte_pamp_excel', methods: ['POST'])]
public function pampExcel(SolicitudRepository $solRep, Request $request): Response
{
ini_set('memory_limit', '5120M');
ini_set('max_execution_time', 0);
ini_set('output_buffering', 0);
# Obtenemos los datos de la petición
/** @var Usuario $user */
$user = $this->getUser();
$parameters = $request->request->get('pamp_filtro');
$unidad = (array_key_exists('unidad', $request->request->all()['pamp_filtro'])) ? $parameters['unidad'] : $user->getUnidad()->getIdUni();
$finicio = $parameters['anio'] . '-01-01';
$ffin = $parameters['anio'] . '-12-31';
# Obtenemos los datos del documento
$solicitudes = $solRep->registroTipoEquipoUsuario(null, 4, $unidad, $finicio, $ffin);
# Definir el nombre temporal del archivo
$filePath = 'pamp.xlsx';
# Se definen las cabeceras del archivo
$cabecera = WriterEntityFactory::createRowFromArray([
'No.',
'Solicitud',
'Periodo',
'Tipo equipo',
'Marbete',
'Marca',
'Modelo',
'Serie',
'Descripción',
'Unidad adminstrativa',
'Ubicación',
'Trabajo a realizar',
'Fecha registro',
'Fecha atención',
'Fecha de finalización',
'Servicio realizado',
'Refacciones',
'Resguardatario',
'Correo resguardatario',
'Gestor',
'Correo gestor',
'Estatus'
]);
# Se crea el arreglo con los datos del cuerpo del documento
$data = [];
$n = 1;
foreach ($solicitudes as $solicitud) {
if ($solicitud['tipo_mantenimiento'] == 'MP') {
$estatus = match ($solicitud['estatus']) {
"1" => "Pendiente",
"2" => "En Proceso",
"3" => "Atendido",
"4" => "Evaluado",
default => ""
};
$data[] = WriterEntityFactory::createRowFromArray([
$n,
$solicitud['id_sol'],
$solicitud['periodo'],
$solicitud['tipo_equipo'],
$solicitud['marbete'],
$solicitud['marca'],
$solicitud['modelo'],
$solicitud['serie'],
$solicitud['descripcion'],
$solicitud['nunidad'],
$solicitud['nubicacion'],
$solicitud['falla'],
$solicitud['fregistro'],
$solicitud['fatencion'],
$solicitud['ffin'],
$solicitud['srealizado'],
$solicitud['refacciones'],
$solicitud['unombre'] . ' ' . $solicitud['uapellido'],
$solicitud['ucorreo'],
$solicitud['gnombre'] . ' ' . $solicitud['gapellido'],
$solicitud['gcorreo'],
$estatus,
]);
$n++;
}
}
# Se crea el documento en formato CSV
$writer = WriterEntityFactory::createXLSXWriter();
$writer
->openToFile($filePath)
->addRow($cabecera)
->addRows($data)
->close();
$response = new BinaryFileResponse($filePath);
$response->setContentDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
'pamp' . '_' . date('Y-m-d') . '.xlsx'
);
$response->deleteFileAfterSend(true);
return $response;
}
#[Route('/pamp-pdf', name: 'app_reporte_pamp_pdf', methods: ['POST'])]
public function pampPDF(SolicitudRepository $solRep, Request $request, SelloDigital $sello)
{
ini_set('memory_limit', '5120M');
ini_set('max_execution_time', 0);
ini_set('output_buffering', 0);
date_default_timezone_set('America/Mexico_City');
setlocale(LC_ALL, 'es_MX');
# Se obtiene el nivel de acceso
$perfil = $request->getSession()->get('perfil');
$nivel = $perfil[9]["nivel"];
# Obtenemos los datos de la petición
/** @var Usuario $user */
$user = $this->getUser();
$parameters = $request->request->get('pamp_filtro');
if (empty($parameters)) {
$uni = "";
$year = date('Y');
} else {
$uni = (array_key_exists('unidad', $request->request->all()['pamp_filtro'])) ? $parameters['unidad'] : $user->getUnidad()->getIdUni();
$year = $parameters['anio'];
}
$periodo = date('d-m-Y H:i');
# Declaración de la instancia de TCPDF con el encabezado personalizado
$pdf = new DocumentoPDF();
if (empty($uni)) {
$pdf->unidad = "Todas las Unidades administrativas";
} else {
$unidad = $this->getDoctrine()->getRepository(Unidad::class)->findOneBy(['idUni' => $uni]);
$pdf->unidad = $unidad->getNombre();
}
$pdf->codigo = '15-528-PO-15-F18';
$pdf->revision = '02';
$pdf->faprobacion = '30/10/2022';
$pdf->fecha = $year; #$periodo
$pdf->formato = 'Diagrama de Gantt';
$pdf->nombre = 'Programa Anual de Mantenimiento Preventivo';
$pdf->setPrintFooter(false);
# Obtenemos los datos del documento
if ($nivel == 2) {
$solicitud = $solRep->findByAnioUnidad($year, $uni);
$conteo = $solRep->countByUnidad($uni);
} else {
$solicitud = $solRep->findByAnioUnidad($year, $user->getUnidad()->getIdUni());
$conteo = $solRep->countByUnidad($user->getUnidad()->getIdUni());
}
$cadenaOriginal = $pdf->formato . '||';
$cadenaOriginal .= (empty($unidad)) ? "Todas las Unidades administrativas" : $pdf->unidad;
$cadenaOriginal .= '||' . $user->getNombre() . ' ' . $user->getPapellido() . '||' . $user->getCorreo() . '||' . $user->getRol()->getNombre();
$cadenaOriginal .= '||' . $pdf->fecha;
$cadena64 = $sello->generar($cadenaOriginal);
# Información del documento
$pdf->SetCreator('Conalep Estado de México');
$pdf->SetAuthor('SIGMEC');
$pdf->SetTitle('Programa Anual de Mantenimiento Preventivo');
# Definimos los saltos de página como automáticos
#$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
#Nueva página con sus respectivas características
$pdf->AddPage('L', 'LEGAL');
$pdf->SetY(50);
# Definimos la utilización de tipigrafías
$pdf->setFontSubsetting(true);
# Obtiene datos de avance y equipos con mp
$n = 0;
$atendido = 0;
$avance = 0;
$marbetes = [];
foreach ($solicitud as $s) {
if ($s["estatus"] == "4") {
$atendido = $atendido + 1;
}
if ($s["tipo_equipo"] == "Cómputo") {
if (!in_array($s["marbete"], $marbetes)) {
$marbetes[] = $s["marbete"];
}
}
$n++;
}
if ($atendido > 0 and $n > 0) {
$avance = floor(($atendido / $n) * 100);
}
$ecmp = count($marbetes);
### Generamos el contenido a mostrar ###
ob_start();
$html = <<<EOD
<table cellpadding="2" border="0">
<tbody>
<tr>
<td colspan="8"><strong>Unidad administrativa</strong>: {$pdf->unidad}</td>
</tr>
<tr>
<td style="text-align: center">{$conteo["impresora"]}</td>
<td style="text-align: center">{$conteo["red"]}</td>
<td style="text-align: center">{$conteo["otro"]}</td>
<td style="text-align: center">{$conteo["equipo"]}</td>
<td style="text-align: center">{$conteo["emhv"]}</td>
<td style="text-align: center">{$ecmp}</td>
<td style="text-align: center">{$conteo["indice"]}%</td>
<td style="text-align: center">{$avance}%</td>
</tr>
<tr>
<td style="text-align: center"><strong>IMPRESORAS</strong></td>
<td style="text-align: center"><strong>RED</strong></td>
<td style="text-align: center"><strong>OTRO</strong></td>
<td style="text-align: center"><strong>CÓMPUTO</strong></td>
<td style="text-align: center"><strong>EMHV</strong></td>
<td style="text-align: center"><strong>EQ. COMPUTO/MP</strong></td>
<td style="text-align: center"><strong>ÍNDICE DE EMHV</strong></td>
<td style="text-align: center"><strong>AVANCE ATENCIÓN</strong></td>
</tr>
</tbody>
</table>
<br><br>
EOD;
$html .= <<<EOD
<table cellpadding="2" border="0.1">
<thead>
<tr style="text-align: center; background-color: #e4e4e4; font-size: 10px">
<th width="8.5mm">#</th>
<th width="27mm">Marbete</th>
<th width="45mm">Equipo</th>
<th width="125mm">Trabajo a realizar</th>
<th width="8mm"></th>
<th width="10mm">Ene</th>
<th width="10mm">Feb</th>
<th width="10mm">Mar</th>
<th width="10mm">Abr</th>
<th width="10mm">May</th>
<th width="10mm">Jun</th>
<th width="10mm">Jul</th>
<th width="10mm">Ago</th>
<th width="10mm">Sep</th>
<th width="10mm">Oct</th>
<th width="10mm">Nov</th>
<th width="10mm">Dic</th>
</tr>
</thead>
<tbody>
EOD;
$pdf->setMargins(10, 50);
$n = 1;
foreach ($solicitud as $i) {
$mesP = date('m', strtotime($i['fatencion']));
$diaP = date('d', strtotime($i['fatencion']));
if (empty($i['fevaluacion'])) {
$mesR = "00";
$diaR = "00";
} else {
$mesR = date('m', strtotime($i['fevaluacion']));
$diaR = date('d', strtotime($i['fevaluacion']));
}
if ($mesP == "01") {
$mesP01 = 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
$diaP01 = $diaP;
} else {
$mesP01 = '';
$diaP01 = '';
}
if ($mesP == "02") {
$mesP02 = 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
$diaP02 = $diaP;
} else {
$mesP02 = '';
$diaP02 = '';
}
if ($mesP == "03") {
$mesP03 = 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
$diaP03 = $diaP;
} else {
$mesP03 = '';
$diaP03 = '';
}
if ($mesP == "04") {
$mesP04 = 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
$diaP04 = $diaP;
} else {
$mesP04 = '';
$diaP04 = '';
}
if ($mesP == "05") {
$mesP05 = 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
$diaP05 = $diaP;
} else {
$mesP05 = '';
$diaP05 = '';
}
if ($mesP == "06") {
$mesP06 = 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
$diaP06 = $diaP;
} else {
$mesP06 = '';
$diaP06 = '';
}
if ($mesP == "07") {
$mesP07 = 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
$diaP07 = $diaP;
} else {
$mesP07 = '';
$diaP07 = '';
}
if ($mesP == "08") {
$mesP08 = 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
$diaP08 = $diaP;
} else {
$mesP08 = '';
$diaP08 = '';
}
if ($mesP == "09") {
$mesP09 = 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
$diaP09 = $diaP;
} else {
$mesP09 = '';
$diaP09 = '';
}
if ($mesP == "10") {
$mesP10 = 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
$diaP10 = $diaP;
} else {
$mesP10 = '';
$diaP10 = '';
}
if ($mesP == "11") {
$mesP11 = 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
$diaP11 = $diaP;
} else {
$mesP11 = '';
$diaP11 = '';
}
if ($mesP == "12") {
$mesP12 = 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
$diaP12 = $diaP;
} else {
$mesP12 = '';
$diaP12 = '';
}
if ($mesR == "01") {
$mesR01 = 'style="background-color: #dce79b; text-align: center; color: #333333;"';
$diaR01 = $diaR;
} else {
$mesR01 = '';
$diaR01 = '';
}
if ($mesR == "02") {
$mesR02 = 'style="background-color: #dce79b; text-align: center; color: #333333;"';
$diaR02 = $diaR;
} else {
$mesR02 = '';
$diaR02 = '';
}
if ($mesR == "03") {
$mesR03 = 'style="background-color: #dce79b; text-align: center; color: #333333;"';
$diaR03 = $diaR;
} else {
$mesR03 = '';
$diaR03 = '';
}
if ($mesR == "04") {
$mesR04 = 'style="background-color: #dce79b; text-align: center; color: #333333;"';
$diaR04 = $diaR;
} else {
$mesR04 = '';
$diaR04 = '';
}
if ($mesR == "05") {
$mesR05 = 'style="background-color: #dce79b; text-align: center; color: #333333;"';
$diaR05 = $diaR;
} else {
$mesR05 = '';
$diaR05 = '';
}
if ($mesR == "06") {
$mesR06 = 'style="background-color: #dce79b; text-align: center; color: #333333;"';
$diaR06 = $diaR;
} else {
$mesR06 = '';
$diaR06 = '';
}
if ($mesR == "07") {
$mesR07 = 'style="background-color: #dce79b; text-align: center; color: #333333;"';
$diaR07 = $diaR;
} else {
$mesR07 = '';
$diaR07 = '';
}
if ($mesR == "08") {
$mesR08 = 'style="background-color: #dce79b; text-align: center; color: #333333;"';
$diaR08 = $diaR;
} else {
$mesR08 = '';
$diaR08 = '';
}
if ($mesR == "09") {
$mesR09 = 'style="background-color: #dce79b; text-align: center; color: #333333;"';
$diaR09 = $diaR;
} else {
$mesR09 = '';
$diaR09 = '';
}
if ($mesR == "10") {
$mesR10 = 'style="background-color: #dce79b; text-align: center; color: #333333;"';
$diaR10 = $diaR;
} else {
$mesR10 = '';
$diaR10 = '';
}
if ($mesR == "11") {
$mesR11 = 'style="background-color: #dce79b; text-align: center; color: #333333;"';
$diaR11 = $diaR;
} else {
$mesR11 = '';
$diaR11 = '';
}
if ($mesR == "12") {
$mesR12 = 'style="background-color: #dce79b; text-align: center; color: #333333;"';
$diaR12 = $diaR;
} else {
$mesR12 = '';
$diaR12 = '';
}
$html .= <<<EOD
<tr style="font-size: 9px">
<td width="8.5mm" rowspan="2" align="center">$n</td>
<td width="27mm" rowspan="2">{$i["marbete"]}</td>
<td width="45mm" rowspan="2">{$i["tipo_equipo"]}</td>
<td width="125mm" rowspan="2">{$i["falla"]}</td>
<td width="8mm">P</td>
<td width="10mm" {$mesP01}>{$diaP01}</td>
<td width="10mm" {$mesP02}>{$diaP02}</td>
<td width="10mm" {$mesP03}>{$diaP03}</td>
<td width="10mm" {$mesP04}>{$diaP04}</td>
<td width="10mm" {$mesP05}>{$diaP05}</td>
<td width="10mm" {$mesP06}>{$diaP06}</td>
<td width="10mm" {$mesP07}>{$diaP07}</td>
<td width="10mm" {$mesP08}>{$diaP08}</td>
<td width="10mm" {$mesP09}>{$diaP09}</td>
<td width="10mm" {$mesP10}>{$diaP10}</td>
<td width="10mm" {$mesP11}>{$diaP11}</td>
<td width="10mm" {$mesP12}>{$diaP12}</td>
</tr>
<tr style="font-size: 9px">
<td width="8mm">R</td>
<td width="10mm" {$mesR01}>{$diaR01}</td>
<td width="10mm" {$mesR02}>{$diaR02}</td>
<td width="10mm" {$mesR03}>{$diaR03}</td>
<td width="10mm" {$mesR04}>{$diaR04}</td>
<td width="10mm" {$mesR05}>{$diaR05}</td>
<td width="10mm" {$mesR06}>{$diaR06}</td>
<td width="10mm" {$mesR07}>{$diaR07}</td>
<td width="10mm" {$mesR08}>{$diaR08}</td>
<td width="10mm" {$mesR09}>{$diaR09}</td>
<td width="10mm" {$mesR10}>{$diaR10}</td>
<td width="10mm" {$mesR11}>{$diaR11}</td>
<td width="10mm" {$mesR12}>{$diaR12}</td>
</tr>
EOD;
$n++;
}
$html .= <<<EOD
</tbody>
</table>
EOD;
# Declaramos una nueva tipografía para el pie de página del contenido
$pdf->SetFont('freesans', '', 10, '', true);
# $pdf->write2DBarcode($cadenaOriginal, 'QRCODE,H', false, false, 20, 20, $styleQR, 'N')
$qr = new \TCPDF2DBarcode($cadenaOriginal, 'QRCODE,M');
$imgdata = $qr->getBarcodePngData(2.5, 2.5, array(0, 0, 0));
file_put_contents('img/sistema/qr.png', $imgdata);
$html .= <<<EOD
<br>
<br>
<br>
<table width="100%" cellpadding="5" border="0">
<tbody>
<tr>
<td style="width: 30%; font-size: 11px"><strong>GENERÓ: </strong></td>
<td style="width: 30%"><strong>Usuario: </strong>{$user->getNombre()} {$user->getPapellido()}</td>
<td style="width: 30%"><strong>Correo: </strong>{$user->getCorreo()}</td>
<td style="width: 9%" rowspan="2"><img src="img/sistema/qr.png" alt="QRCODE" /></td>
</tr>
<tr>
<td colspan="2" style="width: 75%">{$cadena64}</td>
<td style="width: 13%"><img src="img/sistema/logo.png" alt="LOGO"></td>
</tr>
</tbody>
</table>
EOD;
# Imprimimos el contenido como HTML
$pdf->writeHTMLCell($w = 0, $h = 0, $x = '', $y = '', $html, $border = 0, $ln = 1, $fill = 0, $reseth = true, $align = '', $autopadding = true);
ob_end_clean();
# ---------------------------------------------------------
# Mostramos el resultado en pantalla
$pdf->Output($pdf->formato . date('Ymd') . '.pdf', 'D');
}
#[Route('/ubicacion-excel', name: 'app_reporte_ubicacion_excel', methods: ['POST'])]
public function ubicacionExcel(UbicacionRepository $ubicacionRepository, Request $request): Response
{
ini_set('memory_limit', '5120M');
ini_set('max_execution_time', 0);
ini_set('output_buffering', 0);
# Obtenemos los datos de la petición
/** @var Usuario $user */
$user = $this->getUser();
$ubicaciones = [];
if($user->getRol()->getIdRol() <= 2){
$ubicaciones = $ubicacionRepository->ubicaUnidad();
}else{
$ubicaciones = $ubicacionRepository->ubicaUnidad($user->getUnidad());
}
# Obtenemos los datos del documento
# Definir el nombre temporal del archivo
$filePath = 'otro.xlsx';
# Se definen las cabeceras del archivo
$cabecera = WriterEntityFactory::createRowFromArray([
'ID.',
'Ubicación',
'Unidad',
'Estatus'
]);
# Se crea el arreglo con los datos del cuerpo del documento
$data = [];
$n = 1;
foreach ($ubicaciones as $ubicacion) {
/*$usuario = $ubicacion->getUsuario()->getNombre() . ' ' . $ubicacion->getUsuario()->getPapellido();
$ubicacion1 = $ubicacion->getUbicacion()->getArea();*/
$unidad = $ubicacion->getUnidad()->getNombre();
/*$activo = match ($ubicacion->getActivo()) {
"1" => 'Activo',
"0" => 'Inactivo',
default => ""
};*/
if ($ubicacion->getActivo() == 1) {
$activo = "Activo";
} else {
$activo = "Inactivo";
}
$data[] = WriterEntityFactory::createRowFromArray([
$ubicacion->getIdUbi(),
$ubicacion->getArea(),
$unidad,
$activo
//$ubicacion->getActivo()
//$usuario,
]);
$n++;
}
# Se crea el documento en formato CSV
$writer = WriterEntityFactory::createXLSXWriter();
$writer
->openToFile($filePath)
->addRow($cabecera)
->addRows($data)
->close();
$response = new BinaryFileResponse($filePath);
$response->setContentDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
'Ubicaciónes- ' . '_' . date('Y-m-d') . '.xlsx'
);
$response->deleteFileAfterSend(true);
return $response;
}
#[Route('/componentes', name: 'app_bitacora_index', methods: ['GET', 'POST'])]
public function componentes(Request $request, EntityManagerInterface $entityManager): Response
{
$movimientos = '';
$form = $this->createFormBuilder()
->add('componente', EntityType::class, [
'class' => CatComponentes::class,
'attr' => ['class' => 'form-control'],
'placeholder' => 'Todo',
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('cc')
->orderBy('cc.tipo', 'ASC');
}
])
->add('unidad', EntityType::class, [
'class' => Unidad::class,
'attr' => ['class' => 'form-control'],
'placeholder' => 'Todo',
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('u')
->orderBy('u.nombre', 'ASC');
}
])
->add('finicio', DateType::class,[
'label' => 'Desde',
'attr' => ['class' => 'form-control', 'class' => 'js-datepicker'],
'widget' => 'single_text',
'format' => 'yyyy-MM-dd',
'data' => new \DateTime(date('Y') . '-01-01'),
])
->add('ffinal', DateType::class, [
'label' => 'Hasta',
'attr' => ['class' => 'form-control', 'class' => 'js-datepicker'],
'widget' => 'single_text',
'format' => 'yyyy-MM-dd',
'data' => new \DateTime()
])
->getForm();
$form->handleRequest($request);
if ($request->isMethod('POST') && $form->isSubmitted() && $form->isValid()) {
$conn = $entityManager->getConnection();
if ($form->get('componente')->getData() != '' && $form->get('unidad')->getData() != '' && $form->get('finicio')->getData() != '' && $form->get('ffinal')->getData() != '') {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento, bm.observacion AS bm_observacion, u.u_nombre, d.d_unidad, s.id_sol AS s_solicitud, s.tipo_equipo AS s_tipo_equipo, s.id_equipo AS s_id_equipo, s.ubicacion AS s_ubicacion, s.usuario AS s_usuario, s.gestor AS s_gestor, s.periodo AS s_periodo, s.tipo_mantenimiento AS s_tipo_mantenimiento, s.falla AS s_falla, s.srealizado AS s_srealizado, s.fregistro AS s_fregistro, s.fatencion AS s_fatencion,
s.ffin AS s_ffin, s.fevaluacion AS s_fevaluacion, s.refacciones AS s_refacciones, s.estatus AS s_estatus, s.unidad AS s_unidad, cc.cc_tipo, cc.cc_descripcion, i.i_marca, i.i_modelo, i.i_serie, eq.marbete AS equipo_marbete, eq.descripcion AS equipo_descripcion, eq.marca AS equipo_marca, eq.modelo AS equipo_modelo, eq.serie AS equipo_serie, us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
WHERE cc.id_componente = :tipo AND bm.id_uni = :id_uni AND bm.fecha_mov BETWEEN :finicio AND :ffinal;
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('tipo', $form->get('componente')->getData()->getTipo());
$stmt->bindValue('id_uni', $form->get('unidad')->getData()->getIdUni());
$stmt->bindValue('finicio', $form->get('finicio')->getData()->format('Y-m-d H:i:s'));
$stmt->bindValue('ffinal', $form->get('ffinal')->getData()->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'));
} elseif ($form->get('componente')->getData() != '' && $form->get('unidad')->getData() != '' && $form->get('finicio')->getData() == '' && $form->get('ffinal')->getData() != '') {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento, bm.observacion AS bm_observacion, u.u_nombre, d.d_unidad, s.id_sol AS s_solicitud, s.tipo_equipo AS s_tipo_equipo, s.id_equipo AS s_id_equipo, s.ubicacion AS s_ubicacion, s.usuario AS s_usuario, s.gestor AS s_gestor, s.periodo AS s_periodo, s.tipo_mantenimiento AS s_tipo_mantenimiento, s.falla AS s_falla, s.srealizado AS s_srealizado, s.fregistro AS s_fregistro, s.fatencion AS s_fatencion,
s.ffin AS s_ffin, s.fevaluacion AS s_fevaluacion, s.refacciones AS s_refacciones, s.estatus AS s_estatus, s.unidad AS s_unidad, cc.cc_tipo, cc.cc_descripcion, i.i_marca, i.i_modelo, i.i_serie, eq.marbete AS equipo_marbete, eq.descripcion AS equipo_descripcion, eq.marca AS equipo_marca, eq.modelo AS equipo_modelo, eq.serie AS equipo_serie, us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
WHERE cc_tipo = :tipo AND bm.id_uni = :id_uni AND bm.fecha_mov <= :ffinal
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('tipo', $form->get('componente')->getData()->getTipo());
$stmt->bindValue('id_uni', $form->get('unidad')->getData()->getIdUni());
$stmt->bindValue('ffinal', $form->get('ffinal')->getData()->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'));
} elseif ($form->get('componente')->getData() != '' && $form->get('unidad')->getData() != '' && $form->get('finicio')->getData() == '' && $form->get('ffinal')->getData() == '') {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento, bm.observacion AS bm_observacion, u.u_nombre, d.d_unidad, s.id_sol AS s_solicitud, s.tipo_equipo AS s_tipo_equipo, s.id_equipo AS s_id_equipo, s.ubicacion AS s_ubicacion, s.usuario AS s_usuario, s.gestor AS s_gestor, s.periodo AS s_periodo, s.tipo_mantenimiento AS s_tipo_mantenimiento, s.falla AS s_falla, s.srealizado AS s_srealizado, s.fregistro AS s_fregistro, s.fatencion AS s_fatencion,
s.ffin AS s_ffin, s.fevaluacion AS s_fevaluacion, s.refacciones AS s_refacciones, s.estatus AS s_estatus, s.unidad AS s_unidad, cc.cc_tipo, cc.cc_descripcion, i.i_marca, i.i_modelo, i.i_serie, eq.marbete AS equipo_marbete, eq.descripcion AS equipo_descripcion, eq.marca AS equipo_marca, eq.modelo AS equipo_modelo, eq.serie AS equipo_serie, us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
WHERE cc_tipo = :tipo AND bm.id_uni = :id_uni
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('id_uni', $form->get('unidad')->getData()->getIdUni());
$stmt->bindValue('tipo', $form->get('componente')->getData()->getTipo());
} elseif ($form->get('componente')->getData() != '' && $form->get('unidad')->getData() == '' && $form->get('finicio')->getData() != '' && $form->get('ffinal')->getData() != '') {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento, bm.observacion AS bm_observacion, u.u_nombre, d.d_unidad, s.id_sol AS s_solicitud, s.tipo_equipo AS s_tipo_equipo, s.id_equipo AS s_id_equipo, s.ubicacion AS s_ubicacion, s.usuario AS s_usuario, s.gestor AS s_gestor, s.periodo AS s_periodo, s.tipo_mantenimiento AS s_tipo_mantenimiento, s.falla AS s_falla, s.srealizado AS s_srealizado, s.fregistro AS s_fregistro, s.fatencion AS s_fatencion,
s.ffin AS s_ffin, s.fevaluacion AS s_fevaluacion, s.refacciones AS s_refacciones, s.estatus AS s_estatus, s.unidad AS s_unidad, cc.cc_tipo, cc.cc_descripcion, i.i_marca, i.i_modelo, i.i_serie, eq.marbete AS equipo_marbete, eq.descripcion AS equipo_descripcion, eq.marca AS equipo_marca, eq.modelo AS equipo_modelo, eq.serie AS equipo_serie, us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
WHERE cc_tipo = :tipo AND bm.fecha_mov BETWEEN :finicio AND :ffinal
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('tipo', $form->get('componente')->getData()->getTipo());
$stmt->bindValue('finicio', $form->get('finicio')->getData()->format('Y-m-d'));
$stmt->bindValue('ffinal', $form->get('ffinal')->getData()->add(new \DateInterval('P1D'))->format('Y-m-d'));
} elseif ($form->get('componente')->getData() != '' && $form->get('unidad')->getData() == '' && $form->get('finicio')->getData() == '' && $form->get('ffinal')->getData() != '') {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento, bm.observacion AS bm_observacion, u.u_nombre, d.d_unidad, s.id_sol AS s_solicitud, s.tipo_equipo AS s_tipo_equipo, s.id_equipo AS s_id_equipo, s.ubicacion AS s_ubicacion, s.usuario AS s_usuario, s.gestor AS s_gestor, s.periodo AS s_periodo, s.tipo_mantenimiento AS s_tipo_mantenimiento, s.falla AS s_falla, s.srealizado AS s_srealizado, s.fregistro AS s_fregistro, s.fatencion AS s_fatencion,
s.ffin AS s_ffin, s.fevaluacion AS s_fevaluacion, s.refacciones AS s_refacciones, s.estatus AS s_estatus, s.unidad AS s_unidad, cc.cc_tipo, cc.cc_descripcion, i.i_marca, i.i_modelo, i.i_serie, eq.marbete AS equipo_marbete, eq.descripcion AS equipo_descripcion, eq.marca AS equipo_marca, eq.modelo AS equipo_modelo, eq.serie AS equipo_serie, us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
WHERE cc_tipo = :tipo AND bm.fecha_mov <= :ffinal
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('tipo', $form->get('componente')->getData()->getTipo());
$stmt->bindValue('ffinal', $form->get('ffinal')->getData()->add(new \DateInterval('P1D'))->format('Y-m-d'));
} elseif ($form->get('componente')->getData() != '' && $form->get('unidad')->getData() == '' && $form->get('finicio')->getData() == '' && $form->get('ffinal')->getData() == '') {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento, bm.observacion AS bm_observacion, u.u_nombre, d.d_unidad, s.id_sol AS s_solicitud, s.tipo_equipo AS s_tipo_equipo, s.id_equipo AS s_id_equipo, s.ubicacion AS s_ubicacion, s.usuario AS s_usuario, s.gestor AS s_gestor, s.periodo AS s_periodo, s.tipo_mantenimiento AS s_tipo_mantenimiento, s.falla AS s_falla, s.srealizado AS s_srealizado, s.fregistro AS s_fregistro, s.fatencion AS s_fatencion,
s.ffin AS s_ffin, s.fevaluacion AS s_fevaluacion, s.refacciones AS s_refacciones, s.estatus AS s_estatus, s.unidad AS s_unidad, cc.cc_tipo, cc.cc_descripcion, i.i_marca, i.i_modelo, i.i_serie, eq.marbete AS equipo_marbete, eq.descripcion AS equipo_descripcion, eq.marca AS equipo_marca, eq.modelo AS equipo_modelo, eq.serie AS equipo_serie, us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
WHERE cc_tipo = :tipo
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('tipo', $form->get('componente')->getData()->getTipo());
} elseif ($form->get('componente')->getData() == '' && $form->get('unidad')->getData() != '' && $form->get('finicio')->getData() != '' && $form->get('ffinal')->getData() != '') {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento, bm.observacion AS bm_observacion, u.u_nombre, d.d_unidad, s.id_sol AS s_solicitud, s.tipo_equipo AS s_tipo_equipo, s.id_equipo AS s_id_equipo, s.ubicacion AS s_ubicacion, s.usuario AS s_usuario, s.gestor AS s_gestor, s.periodo AS s_periodo, s.tipo_mantenimiento AS s_tipo_mantenimiento, s.falla AS s_falla, s.srealizado AS s_srealizado, s.fregistro AS s_fregistro, s.fatencion AS s_fatencion,
s.ffin AS s_ffin, s.fevaluacion AS s_fevaluacion, s.refacciones AS s_refacciones, s.estatus AS s_estatus, s.unidad AS s_unidad, cc.cc_tipo, cc.cc_descripcion, i.i_marca, i.i_modelo, i.i_serie, eq.marbete AS equipo_marbete, eq.descripcion AS equipo_descripcion, eq.marca AS equipo_marca, eq.modelo AS equipo_modelo, eq.serie AS equipo_serie, us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
WHERE bm.id_uni = :id_uni AND bm.fecha_mov BETWEEN :finicio AND :ffinal
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('id_uni', $form->get('unidad')->getData()->getIdUni());
$stmt->bindValue('finicio', $form->get('finicio')->getData()->format('Y-m-d H:i:s'));
$stmt->bindValue('ffinal', $form->get('ffinal')->getData()->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'));
} elseif ($form->get('componente')->getData() == '' && $form->get('unidad')->getData() != '' && $form->get('finicio')->getData() == '' && $form->get('ffinal')->getData() != '') {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento, bm.observacion AS bm_observacion, u.u_nombre, d.d_unidad, s.id_sol AS s_solicitud, s.tipo_equipo AS s_tipo_equipo, s.id_equipo AS s_id_equipo, s.ubicacion AS s_ubicacion, s.usuario AS s_usuario, s.gestor AS s_gestor, s.periodo AS s_periodo, s.tipo_mantenimiento AS s_tipo_mantenimiento, s.falla AS s_falla, s.srealizado AS s_srealizado, s.fregistro AS s_fregistro, s.fatencion AS s_fatencion,
s.ffin AS s_ffin, s.fevaluacion AS s_fevaluacion, s.refacciones AS s_refacciones, s.estatus AS s_estatus, s.unidad AS s_unidad, cc.cc_tipo, cc.cc_descripcion, i.i_marca, i.i_modelo, i.i_serie, eq.marbete AS equipo_marbete, eq.descripcion AS equipo_descripcion, eq.marca AS equipo_marca, eq.modelo AS equipo_modelo, eq.serie AS equipo_serie, us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
WHERE bm.id_uni = :id_uni AND bm.fecha_mov <= :ffinal
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('id_uni', $form->get('unidad')->getData()->getIdUni());
$stmt->bindValue('ffinal', $form->get('ffinal')->getData()->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'));
} elseif ($form->get('componente')->getData() == '' && $form->get('unidad')->getData() != '' && $form->get('finicio')->getData() == '' && $form->get('ffinal')->getData() == '') {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento, bm.observacion AS bm_observacion, u.u_nombre, d.d_unidad, s.id_sol AS s_solicitud, s.tipo_equipo AS s_tipo_equipo, s.id_equipo AS s_id_equipo, s.ubicacion AS s_ubicacion, s.usuario AS s_usuario, s.gestor AS s_gestor, s.periodo AS s_periodo, s.tipo_mantenimiento AS s_tipo_mantenimiento, s.falla AS s_falla, s.srealizado AS s_srealizado, s.fregistro AS s_fregistro, s.fatencion AS s_fatencion,
s.ffin AS s_ffin, s.fevaluacion AS s_fevaluacion, s.refacciones AS s_refacciones, s.estatus AS s_estatus, s.unidad AS s_unidad, cc.cc_tipo, cc.cc_descripcion, i.i_marca, i.i_modelo, i.i_serie, eq.marbete AS equipo_marbete, eq.descripcion AS equipo_descripcion, eq.marca AS equipo_marca, eq.modelo AS equipo_modelo, eq.serie AS equipo_serie, us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
WHERE bm.id_uni = :id_uni
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('id_uni', $form->get('unidad')->getData()->getIdUni());
} elseif ($form->get('componente')->getData() == '' && $form->get('unidad')->getData() == '' && $form->get('finicio')->getData() != '' && $form->get('ffinal')->getData() != '') {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento, bm.observacion AS bm_observacion, u.u_nombre, d.d_unidad, s.id_sol AS s_solicitud, s.tipo_equipo AS s_tipo_equipo, s.id_equipo AS s_id_equipo, s.ubicacion AS s_ubicacion, s.usuario AS s_usuario, s.gestor AS s_gestor, s.periodo AS s_periodo, s.tipo_mantenimiento AS s_tipo_mantenimiento, s.falla AS s_falla, s.srealizado AS s_srealizado, s.fregistro AS s_fregistro, s.fatencion AS s_fatencion,
s.ffin AS s_ffin, s.fevaluacion AS s_fevaluacion, s.refacciones AS s_refacciones, s.estatus AS s_estatus, s.unidad AS s_unidad, cc.cc_tipo, cc.cc_descripcion, i.i_marca, i.i_modelo, i.i_serie, eq.marbete AS equipo_marbete, eq.descripcion AS equipo_descripcion, eq.marca AS equipo_marca, eq.modelo AS equipo_modelo, eq.serie AS equipo_serie, us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
WHERE bm.fecha_mov BETWEEN :finicio AND :ffinal
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('finicio', $form->get('finicio')->getData()->format('Y-m-d H:i:s'));
$stmt->bindValue('ffinal', $form->get('ffinal')->getData()->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'));
} elseif ($form->get('componente')->getData() == '' && $form->get('unidad')->getData() == '' && $form->get('finicio')->getData() == '' && $form->get('ffinal')->getData() != '') {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento, bm.observacion AS bm_observacion, u.u_nombre, d.d_unidad, s.id_sol AS s_solicitud, s.tipo_equipo AS s_tipo_equipo, s.id_equipo AS s_id_equipo, s.ubicacion AS s_ubicacion, s.usuario AS s_usuario, s.gestor AS s_gestor, s.periodo AS s_periodo, s.tipo_mantenimiento AS s_tipo_mantenimiento, s.falla AS s_falla, s.srealizado AS s_srealizado, s.fregistro AS s_fregistro, s.fatencion AS s_fatencion,
s.ffin AS s_ffin, s.fevaluacion AS s_fevaluacion, s.refacciones AS s_refacciones, s.estatus AS s_estatus, s.unidad AS s_unidad, cc.cc_tipo, cc.cc_descripcion, i.i_marca, i.i_modelo, i.i_serie, eq.marbete AS equipo_marbete, eq.descripcion AS equipo_descripcion, eq.marca AS equipo_marca, eq.modelo AS equipo_modelo, eq.serie AS equipo_serie, us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
WHERE bm.fecha_mov <= :ffinal
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('ffinal', $form->get('ffinal')->getData()->add(new DateInterval('P1D'))->format('Y-m-d'));
} else {
$sql = "SELECT DISTINCT*, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento, bm.observacion AS bm_observacion, u.u_nombre, d.d_unidad, s.id_sol AS s_solicitud, s.tipo_equipo AS s_tipo_equipo, s.id_equipo AS s_id_equipo, s.ubicacion AS s_ubicacion, s.usuario AS s_usuario, s.gestor AS s_gestor, s.periodo AS s_periodo, s.tipo_mantenimiento AS s_tipo_mantenimiento, s.falla AS s_falla, s.srealizado AS s_srealizado, s.fregistro AS s_fregistro, s.fatencion AS s_fatencion,
s.ffin AS s_ffin, s.fevaluacion AS s_fevaluacion, s.refacciones AS s_refacciones, s.estatus AS s_estatus, s.unidad AS s_unidad, cc.cc_tipo, cc.cc_descripcion, i.i_marca, i.i_modelo, i.i_serie, eq.marbete AS equipo_marbete, eq.descripcion AS equipo_descripcion, eq.marca AS equipo_marca, eq.modelo AS equipo_modelo, eq.serie AS equipo_serie, us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
";
$stmt = $conn->prepare($sql);
}
$resultSet = $stmt->executeQuery();
$movimientos = $resultSet->fetchAll();
return $this->render('consulta_solicitud/componentes.html.twig', [
'form' => $form->createView(),
'movimientos' => $movimientos
]);
}
return $this->render('consulta_solicitud/componentes.html.twig', [
'form' => $form->createView(),
'movimientos' => $movimientos
]);
}
#[Route('/componentes/reporte', name: 'app_componentes_reporte', methods: ['GET', 'POST'])]
public function componentesReporte(Request $request, EntityManagerInterface $entityManager): Response
{
ini_set('memory_limit', '5120M');
ini_set('max_execution_time', 0);
ini_set('output_buffering', 0);
/** var Usuario $user */
$user = $this->getUser();
date_default_timezone_set('America/Mexico_City');
setlocale(LC_ALL, 'es_MX');
$fecha = date('Y-m-d H:i:s');
# Obtenemos los datos de la petición
/** @var Usuario $user */
$user = $this->getUser();
$filtro = $request->request->get('form');
$filtro['ffinal'] = new DateTime($filtro['ffinal']);
$filtro['ffinal'] = $filtro['ffinal']->add(new DateInterval('P1D'))->format('Y-m-d');
$movimientos = $this->filtroConsulta($filtro, $entityManager);
# Definir el nombre temporal del archivo
$filePath = 'reporteRefacciones.xlsx';
# Se definen las cabeceras del archivo
$cabecera[] = WriterEntityFactory::createRowFromArray(['Reporte de bitácora de uso de refacciones por periodo',]);
$cabecera[] = WriterEntityFactory::createRowFromArray(['Unidad: ' . $user->getUnidad()->getNombre()]);
$cabecera[] = WriterEntityFactory::createRowFromArray(['Fecha de creación: ' . $fecha]);
$cabecera[] = WriterEntityFactory::createRowFromArray(['Usuario: ' . $user->getNombre() . ' ' . $user->getPapellido() . ' ' . $user->getSapellido()]);
$cabecera[] = WriterEntityFactory::createRowFromArray(['Fecha inicial: ' . $filtro['finicio']]);
$cabecera[] = WriterEntityFactory::createRowFromArray(['Fecha final: ' . $filtro['ffinal']]);
$cabecera[] = WriterEntityFactory::createRowFromArray(['']);
$cabecera[] = WriterEntityFactory::createRowFromArray([
'Unidad',
'Componente',
'Descripcion',
'Equipo',
'Marbete',
'Usuario Asignado',
'Fecha de asignación',
'Marca',
'Modelo',
'Serie',
'Usuario Gestor',
'Solicitud',
'Unidad'
]);
# Se crea el arreglo con los datos del cuerpo del documento
$data = [];
foreach ($movimientos as $m) {
$data[] = WriterEntityFactory::createRowFromArray([
$m['d_unidad'],
$m['cc_tipo'],
$m['cc_descripcion'],
$m['bm_equipo'],
$m['equipo_marbete'],
$m['usuario_nombre'],
$m['bm_fecha_movimiento'],
$m['i_marca'],
$m['i_modelo'],
$m['i_serie'],
$m['u_nombre'],
$m['s_solicitud'],
$m['d_unidad']
]);
}
# Se crea el documento en formato CSV
$writer = WriterEntityFactory::createXLSXWriter();
$writer
->openToFile($filePath)
->addRows($cabecera)
->addRows($data)
->close();
$response = new BinaryFileResponse($filePath);
$response->setContentDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
'reporteRefacciones' . '_' . date('Y-m-d') . '.xlsx'
);
$response->deleteFileAfterSend(true);
return $response;
}
#[Route('/componentes/uso', name: 'app_bitacora_uso_index', methods: ['GET', 'POST'])]
public function componentesUso(Request $request, EntityManagerInterface $entityManager): Response
{
$movimientos = '';
$form = $this->createFormBuilder()
->add('unidad', EntityType::class, [
'class' => Unidad::class,
'attr' => ['class' => 'form-control'],
'placeholder' => 'Todo',
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('u')
->orderBy('u.nombre', 'ASC');
}
])
->add('finicio', DateType::class,[
'label' => 'Desde',
'attr' => ['class' => 'form-control', 'class' => 'js-datepicker'],
'widget' => 'single_text',
'format' => 'yyyy-MM-dd',
'data' => new \DateTime(date('Y') . '-01-01'),
])
->add('ffinal', DateType::class, [
'label' => 'Hasta',
'attr' => ['class' => 'form-control'],
'widget' => 'single_text',
'format' => 'yyyy-MM-dd',
'data' => new \DateTime()
])
->getForm();
$form->handleRequest($request);
if ($request->isMethod('POST') && $form->isSubmitted() && $form->isValid()) {
$conn = $entityManager->getConnection();
if ($form->get('unidad')->getData() != '' && $form->get('finicio')->getData() != '' && $form->get('ffinal')->getData() != '') {
$sql = "SELECT *, bm.id_mov, COUNT(*) AS x_count
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
WHERE bm.id_uni = :id_uni AND bm.fecha_mov BETWEEN :finicio AND :ffinal
GROUP BY cc_tipo ORDER BY cc_tipo ASC
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('id_uni', $form->get('unidad')->getData()->getIdUni());
$stmt->bindValue('finicio', $form->get('finicio')->getData()->format('Y-m-d H:i:s'));
$stmt->bindValue('ffinal', $form->get('ffinal')->getData()->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'));
} elseif ($form->get('unidad')->getData() != '' && $form->get('finicio')->getData() == '' && $form->get('ffinal')->getData() != '') {
$sql = "SELECT *, bm.id_mov, COUNT(*) AS x_count
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
WHERE bm.id_uni = :id_uni AND bm.fecha_mov <= :ffinal
GROUP BY cc_tipo ORDER BY cc_tipo ASC
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('id_uni', $form->get('unidad')->getData()->getIdUni());
$stmt->bindValue('ffinal', $form->get('ffinal')->getData()->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'));
} elseif ($form->get('unidad')->getData() != '' && $form->get('finicio')->getData() == '' && $form->get('ffinal')->getData() == '') {
$sql = "SELECT *, bm.id_mov, COUNT(*) AS x_count
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
WHERE bm.id_uni = :id_uni
GROUP BY cc_tipo ORDER BY cc_tipo ASC
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('id_uni', $form->get('unidad')->getData()->getIdUni());
} elseif ($form->get('unidad')->getData() == '' && $form->get('finicio')->getData() != '' && $form->get('ffinal')->getData() != '') {
$sql = "SELECT *, bm.id_mov, COUNT(*) AS x_count
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
WHERE bm.fecha_mov BETWEEN :finicio AND :ffinal
GROUP BY cc_tipo ORDER BY cc_tipo ASC
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('finicio', $form->get('finicio')->getData()->format('Y-m-d H:i:s'));
$stmt->bindValue('ffinal', $form->get('ffinal')->getData()->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'));
} elseif ($form->get('unidad')->getData() == '' && $form->get('finicio')->getData() == '' && $form->get('ffinal')->getData() != '') {
$sql = "SELECT *, bm.tipo_equipo AS bm_equipo, bm.fecha_mov AS bm_fecha_movimiento, COUNT(*) AS x_count
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
WHERE bm.fecha_mov <= :ffinal
GROUP BY cc_tipo ORDER BY cc_tipo ASC
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('ffinal', $form->get('ffinal')->getData()->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'));
} else {
$sql = "SELECT *, bm.id_mov, COUNT(*) AS x_count
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
GROUP BY cc_tipo ORDER BY cc_tipo ASC
";
$stmt = $conn->prepare($sql);
}
$resultSet = $stmt->executeQuery();
$movimientos = $resultSet->fetchAll();
return $this->render('consulta_solicitud/uso.html.twig', [
'form' => $form->createView(),
'movimientos' => $movimientos
]);
}
return $this->render('consulta_solicitud/uso.html.twig', [
'form' => $form->createView(),
'movimientos' => $movimientos
]);
}
#[Route('/componentes/uso/reporte', name: 'app_componentes_uso_reporte', methods: ['GET', 'POST'])]
public function componentesUsoReporte(Request $request, EntityManagerInterface $entityManager): Response
{
ini_set('memory_limit', '5120M');
ini_set('max_execution_time', 0);
ini_set('output_buffering', 0);
/** var Usuario $user */
$user = $this->getUser();
date_default_timezone_set('America/Mexico_City');
setlocale(LC_ALL, 'es_MX');
$fecha = date('Y-m-d H:i:s');
# Obtenemos los datos de la petición
/** @var Usuario $user */
$user = $this->getUser();
$filtro = $request->request->get('form');
$filtro['ffinal'] = new DateTime($filtro['ffinal']);
$filtro['ffinal'] = $filtro['ffinal']->add(new DateInterval('P1D'))->format('Y-m-d');
$conn = $entityManager->getConnection();
if ($filtro['unidad'] != '' && $filtro['finicio'] != '' && $filtro['ffinal'] != '') {
$sql = "SELECT *, bm.id_mov, COUNT(*) AS x_count
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_uni, nombre AS u_nombre FROM unidad) AS u ON u.id_uni = bm.id_uni
WHERE bm.id_uni = :id_uni AND bm.fecha_mov BETWEEN :finicio AND :ffinal
GROUP BY cc_tipo ORDER BY cc_tipo ASC
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('id_uni', $filtro['unidad']);
$stmt->bindValue('finicio', $filtro['finicio']);
$stmt->bindValue('ffinal', $filtro['ffinal']);
} elseif ($filtro['unidad'] != '' && $filtro['finicio'] == '' && $filtro['ffinal'] != '') {
$sql = "SELECT *, bm.id_mov, COUNT(*) AS x_count
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_uni, nombre AS u_nombre FROM unidad) AS u ON u.id_uni = bm.id_uni
WHERE bm.id_uni = :id_uni AND bm.fecha_mov <= :ffinal
GROUP BY cc_tipo ORDER BY cc_tipo ASC
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('id_uni', $filtro['unidad']);
$stmt->bindValue('ffinal', $filtro['ffinal']);
} elseif ($filtro['unidad'] != '' && $filtro['finicio'] == '' && $filtro['ffinal'] == '') {
$sql = "SELECT *, bm.id_mov, COUNT(*) AS x_count
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_uni, nombre AS u_nombre FROM unidad) AS u ON u.id_uni = bm.id_uni
WHERE bm.id_uni = :id_uni
GROUP BY cc_tipo ORDER BY cc_tipo ASC
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('id_uni', $filtro['unidad']);
} elseif ($filtro['unidad'] == '' && $filtro['finicio'] != '' && $filtro['ffinal'] != '') {
$sql = "SELECT *, bm.id_mov, COUNT(*) AS x_count
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_uni, nombre AS u_nombre FROM unidad) AS u ON u.id_uni = bm.id_uni
WHERE bm.fecha_mov BETWEEN :finicio AND :ffinal
GROUP BY cc_tipo ORDER BY cc_tipo ASC
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('finicio', $filtro['finicio']);
$stmt->bindValue('ffinal', $filtro['ffinal']);
} elseif ($filtro['unidad'] == '' && $filtro['finicio'] == '' && $filtro['ffinal'] != '') {
$sql = "SELECT *, bm.tipo_equipo AS bm_equipo, bm.fecha_mov AS bm_fecha_movimiento, COUNT(*) AS x_count
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, id_sol AS s_solicitud FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
WHERE bm.fecha_mov <= :ffinal
GROUP BY cc_tipo ORDER BY cc_tipo ASC
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('ffinal', $filtro['ffinal']);
} else {
$sql = "SELECT *, bm.id_mov, COUNT(*) AS x_count
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_uni, nombre AS u_nombre FROM unidad) AS u ON u.id_uni = bm.id_uni
GROUP BY cc_tipo ORDER BY cc_tipo ASC
";
$stmt = $conn->prepare($sql);
}
$resultSet = $stmt->executeQuery();
$movimientos = $resultSet->fetchAll();
# Definir el nombre temporal del archivo
$filePath = 'reporteRefacciones.xlsx';
# Se definen las cabeceras del archivo
$cabecera[] = WriterEntityFactory::createRowFromArray(['Reporte de bitácora de uso de refacciones por periodo',]);
$cabecera[] = WriterEntityFactory::createRowFromArray(['Unidad: ' . $user->getUnidad()->getNombre()]);
$cabecera[] = WriterEntityFactory::createRowFromArray(['Fecha de creación: ' . $fecha]);
$cabecera[] = WriterEntityFactory::createRowFromArray(['Usuario: ' . $user->getNombre() . ' ' . $user->getPapellido() . ' ' . $user->getSapellido()]);
$cabecera[] = WriterEntityFactory::createRowFromArray(['Fecha inicial: ' . $filtro['finicio']]);
$cabecera[] = WriterEntityFactory::createRowFromArray(['Fecha final: ' . $filtro['ffinal']]);
$cabecera[] = WriterEntityFactory::createRowFromArray(['']);
$cabecera[] = WriterEntityFactory::createRowFromArray([
'Componente',
'Total usados'
]);
# Se crea el arreglo con los datos del cuerpo del documento
$data = [];
foreach ($movimientos as $m) {
$data[] = WriterEntityFactory::createRowFromArray([
$m['cc_tipo'],
$m['x_count']
]);
}
# Se crea el documento en formato CSV
$writer = WriterEntityFactory::createXLSXWriter();
$writer
->openToFile($filePath)
->addRows($cabecera)
->addRows($data)
->close();
$response = new BinaryFileResponse($filePath);
$response->setContentDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
'reporteRefacciones' . '_' . date('Y-m-d') . '.xlsx'
);
$response->deleteFileAfterSend(true);
return $response;
}
#[Route('/componentes/uso/reporte-pdf', name: 'app_componentes_uso_reporte_pdf', methods: ['POST'])]
public function componentesUsoReportePdf(Request $request, SelloDigital $sello, EntityManagerInterface $entityManager): Response
{
ini_set('memory_limit', '5120M');
ini_set('max_execution_time', 0);
ini_set('output_buffering', 0);
date_default_timezone_set('America/Mexico_City');
setlocale(LC_ALL, 'es_MX');
// Obtener la fecha actual
$fecha = date('d-m-Y');
// Obtener usuario autenticado
/** @var Usuario $user */
$user = $this->getUser();
// Obtener los filtros del formulario
$filtro = $request->request->get('form');
// Obtener las fechas del formulario o establecer fechas predeterminadas
$filtro['finicio'] = !empty($filtro['finicio']) ? new DateTime($filtro['finicio']) : new DateTime('first day of this month');
$filtro['ffinal'] = !empty($filtro['ffinal']) ? new DateTime($filtro['ffinal']) : new DateTime('last day of this month');
// Aumentar el final por un día para incluir la fecha final
$filtro['ffinal'] = $filtro['ffinal']->add(new DateInterval('P1D'))->format('Y-m-d');
// Determinar la unidad a usar
$unidadId = !empty($filtro['unidad']) ? $filtro['unidad'] : $user->getUnidad()->getIdUni();
// Consulta SQL
$conn = $entityManager->getConnection();
$sql = "SELECT *, bm.id_mov, COUNT(*) AS x_count
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_uni, nombre AS u_nombre FROM unidad) AS u ON u.id_uni = bm.id_uni
WHERE bm.id_uni = :id_uni AND bm.fecha_mov BETWEEN :finicio AND :ffinal
GROUP BY cc_tipo ORDER BY cc_tipo ASC";
// Ejecutar la consulta usando la unidad determinada
$stmt = $conn->prepare($sql);
$stmt->bindValue('id_uni', $unidadId);
$stmt->bindValue('finicio', $filtro['finicio']->format('Y-m-d'));
$stmt->bindValue('ffinal', $filtro['ffinal']);
$resultSet = $stmt->executeQuery();
$movimientos = $resultSet->fetchAll();
// Instanciar TCPDF y configurar el documento
$pdf = new DocumentoPDF1();
$pdf->setPrintFooter(false);
$pdf->SetCreator('Conalep Estado de México');
$pdf->SetAuthor('SIGMEC');
$pdf->SetTitle('Reporte');
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
$pdf->AddPage('P', 'JIS_B4');
$pdf->SetY(70);
$pdf->setFontSubsetting(true);
// Generar el contenido HTML dinámico para el PDF
$html = <<<EOD
<h1>Reporte de Uso de Refacciones</h1>
<p>Fecha de creación: {$fecha}</p>
<p>Unidad: {$user->getUnidad()->getNombre()}</p>
<p>Gestor: {$user->getNombre()} {$user->getPapellido()} {$user->getSapellido()}</p>
<p>Fecha inicial: {$filtro['finicio']->format('Y-m-d')}</p>
<p>Fecha final: {$filtro['ffinal']}</p>
<table border="1" cellspacing="3" cellpadding="4">
<thead>
<tr>
<th>Componente</th>
<th>Total usados</th>
</tr>
</thead>
<tbody>
EOD;
// Agregar los datos de los movimientos al HTML
foreach ($movimientos as $movimiento) {
$html .= "<tr>
<td>{$movimiento['cc_tipo']}</td>
<td>{$movimiento['x_count']}</td>
</tr>";
}
$html .= <<<EOD
</tbody>
</table>
EOD;
// Escribir el contenido HTML en el PDF
$pdf->writeHTML($html, true, 0, true, 0);
// Enviar el PDF como respuesta para descarga
$pdf->Output('reporte.pdf', 'D');
// Retornar la respuesta para evitar errores
return new Response();
}
#[Route('/inventario/reporte-pdf', name: 'app_componentes_reporte_pdf', methods: ['GET', 'POST'])]
public function inventario_bitacora_pdf_componentes(Request $request, SelloDigital $sello, EntityManagerInterface $entityManager): Response
{
ini_set('memory_limit', '5120M');
ini_set('max_execution_time', 0);
ini_set('output_buffering', 0);
date_default_timezone_set('America/Mexico_City');
setlocale(LC_ALL, 'es_MX');
$fecha = date('d-m-Y');
$filtro = $request->request->get('form');
$filtro['ffinal'] = new DateTime($filtro['ffinal']);
$filtro['ffinal'] = $filtro['ffinal']->add(new DateInterval('P1D'))->format('Y-m-d');
$movimientos = $this->filtroConsulta($filtro, $entityManager);
// Declaración de la instancia de TCPDF
$pdf = new DocumentoPDF1();
$pdf->setPrintFooter(false);
$pdf->SetCreator('Conalep Estado de México');
$pdf->SetAuthor('SIGMEC');
$pdf->SetTitle('Reporte');
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
$pdf->setFontSubsetting(true);
// Dividir movimientos en grupos de 9 elementos
$chunks = array_chunk($movimientos, 9);
// Iterar sobre cada grupo de 9 elementos para generar una nueva página por grupo
foreach ($chunks as $i => $chunk) {
// Agregar una nueva página para cada grupo de movimientos
$pdf->AddPage('L', 'JIS_B4');
$pdf->SetY(70); // Ajustar el margen superior
// Crear tabla HTML
$html = '
<table border="1" cellpadding="4">
<thead>
<tr style="font-weight: bold; background-color: #f2f2f2;">
<th>Unidad</th>
<th>Tipo</th>
<th>Descripción</th>
<th>Equipo</th>
<th>Marbete</th>
<th>Usuario</th>
<th>Fecha Movimiento</th>
<th>Marca</th>
<th>Modelo</th>
<th>Serie</th>
<th>Unidad Origen</th>
<th>Solicitud</th>
</tr>
</thead>
<tbody>';
// Agregar los movimientos del chunk actual a la tabla
foreach ($chunk as $m) {
$html .= '
<tr>
<td>' . htmlspecialchars($m['d_unidad']) . '</td>
<td>' . htmlspecialchars($m['cc_tipo']) . '</td>
<td>' . htmlspecialchars($m['cc_descripcion']) . '</td>
<td>' . htmlspecialchars($m['bm_equipo']) . '</td>
<td>' . htmlspecialchars($m['equipo_marbete']) . '</td>
<td>' . htmlspecialchars($m['usuario_nombre']) . '</td>
<td>' . htmlspecialchars($m['bm_fecha_movimiento']) . '</td>
<td>' . htmlspecialchars($m['i_marca']) . '</td>
<td>' . htmlspecialchars($m['i_modelo']) . '</td>
<td>' . htmlspecialchars($m['i_serie']) . '</td>
<td>' . htmlspecialchars($m['u_nombre']) . '</td>
<td>' . htmlspecialchars($m['s_solicitud']) . '</td>
</tr>';
}
$html .= '
</tbody>
</table>';
// Escribir el HTML de la tabla en la página actual
$pdf->writeHTML($html, true, false, true, false, '');
}
// Enviar el PDF como respuesta para descarga
$pdf->Output('reporte.pdf', 'I');
return new Response(); // Este return evita un error, el PDF se envía directamente al navegador
}
public function filtroConsulta($filtro, EntityManagerInterface $entityManager)
{
$conn = $entityManager->getConnection();
if ($filtro['componente'] != '' && $filtro['unidad'] != '' && $filtro['finicio'] != '' && $filtro['ffinal'] != '') {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento,
bm.observacion AS bm_observacion,
u.u_nombre,
d.d_unidad,
s.id_sol AS s_solicitud,
s.tipo_mantenimiento AS s_tipo_mantenimiento,
s.falla AS s_falla,
s.srealizado AS s_srealizado,
s.fevaluacion AS s_fevaluacion,
s.refacciones AS s_refacciones,
s.estatus AS s_estatus,
s.unidad AS s_unidad,
cc.cc_tipo,
cc.cc_descripcion,
eq.marbete AS equipo_marbete,
eq.serie AS equipo_serie,
us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
WHERE cc.id_componente = :tipo AND bm.id_uni = :id_uni AND bm.fecha_mov BETWEEN :finicio AND :ffinal
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('tipo', $filtro['componente']);
$stmt->bindValue('id_uni', $filtro['unidad']);
$stmt->bindValue('finicio', $filtro['finicio']);
$stmt->bindValue('ffinal', $filtro['ffinal']);
} elseif ($filtro['componente'] != '' && $filtro['unidad'] != '' && $filtro['finicio'] == '' && $filtro['ffinal'] != '') {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento,
bm.observacion AS bm_observacion,
u.u_nombre,
d.d_unidad,
s.id_sol AS s_solicitud,
s.tipo_mantenimiento AS s_tipo_mantenimiento,
s.falla AS s_falla,
s.srealizado AS s_srealizado,
s.fevaluacion AS s_fevaluacion,
s.refacciones AS s_refacciones,
s.estatus AS s_estatus,
s.unidad AS s_unidad,
cc.cc_tipo,
cc.cc_descripcion,
eq.marbete AS equipo_marbete,
eq.serie AS equipo_serie,
us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
WHERE cc_tipo = :tipo AND bm.id_uni = :id_uni AND bm.fecha_mov <= :ffinal
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('tipo', $filtro['componente']);
$stmt->bindValue('id_uni', $filtro['unidad']);
$stmt->bindValue('ffinal', $filtro['ffinal']);
} elseif ($filtro['componente'] != '' && $filtro['unidad'] != '' && $filtro['finicio'] == '' && $filtro['ffinal'] == '') {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento,
bm.observacion AS bm_observacion,
u.u_nombre,
d.d_unidad,
s.id_sol AS s_solicitud,
s.tipo_mantenimiento AS s_tipo_mantenimiento,
s.falla AS s_falla,
s.srealizado AS s_srealizado,
s.fevaluacion AS s_fevaluacion,
s.refacciones AS s_refacciones,
s.estatus AS s_estatus,
s.unidad AS s_unidad,
cc.cc_tipo,
cc.cc_descripcion,
eq.marbete AS equipo_marbete,
eq.serie AS equipo_serie,
us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
WHERE cc_tipo = :tipo AND bm.id_uni = :id_uni
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('id_uni', $filtro['unidad']);
$stmt->bindValue('tipo', $filtro['componente']);
} elseif ($filtro['componente'] != '' && $filtro['unidad'] == '' && $filtro['finicio'] != '' && $filtro['ffinal'] != '') {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento,
bm.observacion AS bm_observacion,
u.u_nombre,
d.d_unidad,
s.id_sol AS s_solicitud,
s.tipo_mantenimiento AS s_tipo_mantenimiento,
s.falla AS s_falla,
s.srealizado AS s_srealizado,
s.fevaluacion AS s_fevaluacion,
s.refacciones AS s_refacciones,
s.estatus AS s_estatus,
s.unidad AS s_unidad,
cc.cc_tipo,
cc.cc_descripcion,
eq.marbete AS equipo_marbete,
eq.serie AS equipo_serie,
us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
WHERE cc_tipo = :tipo AND bm.fecha_mov BETWEEN :finicio AND :ffinal
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('tipo', $filtro['componente']);
$stmt->bindValue('finicio', $filtro['finicio']);
$stmt->bindValue('ffinal', $filtro['ffinal']);
} elseif ($filtro['componente'] != '' && $filtro['unidad'] == '' && $filtro['finicio'] == '' && $filtro['ffinal'] != '') {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento,
bm.observacion AS bm_observacion,
u.u_nombre,
d.d_unidad,
s.id_sol AS s_solicitud,
s.tipo_mantenimiento AS s_tipo_mantenimiento,
s.falla AS s_falla,
s.srealizado AS s_srealizado,
s.fevaluacion AS s_fevaluacion,
s.refacciones AS s_refacciones,
s.estatus AS s_estatus,
s.unidad AS s_unidad,
cc.cc_tipo,
cc.cc_descripcion,
eq.marbete AS equipo_marbete,
eq.serie AS equipo_serie,
us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
WHERE cc_tipo = :tipo AND bm.fecha_mov <= :ffinal
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('tipo', $filtro['componente']);
$stmt->bindValue('ffinal', $filtro['ffinal']);
} elseif ($filtro['componente'] != '' && $filtro['unidad'] == '' && $filtro['finicio'] == '' && $filtro['ffinal'] == '') {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento,
bm.observacion AS bm_observacion,
u.u_nombre,
d.d_unidad,
s.id_sol AS s_solicitud,
s.tipo_mantenimiento AS s_tipo_mantenimiento,
s.falla AS s_falla,
s.srealizado AS s_srealizado,
s.fevaluacion AS s_fevaluacion,
s.refacciones AS s_refacciones,
s.estatus AS s_estatus,
s.unidad AS s_unidad,
cc.cc_tipo,
cc.cc_descripcion,
eq.marbete AS equipo_marbete,
eq.serie AS equipo_serie,
us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
WHERE cc_tipo = :tipo
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('tipo', $filtro['componente']);
} elseif ($filtro['componente'] == '' && $filtro['unidad'] != '' && $filtro['finicio'] != '' && $filtro['ffinal'] != '') {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento,
bm.observacion AS bm_observacion,
u.u_nombre,
d.d_unidad,
s.id_sol AS s_solicitud,
s.tipo_mantenimiento AS s_tipo_mantenimiento,
s.falla AS s_falla,
s.srealizado AS s_srealizado,
s.fevaluacion AS s_fevaluacion,
s.refacciones AS s_refacciones,
s.estatus AS s_estatus,
s.unidad AS s_unidad,
cc.cc_tipo,
cc.cc_descripcion,
eq.marbete AS equipo_marbete,
eq.serie AS equipo_serie,
us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
WHERE bm.id_uni = :id_uni AND bm.fecha_mov BETWEEN :finicio AND :ffinal
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('id_uni', $filtro['unidad']);
$stmt->bindValue('finicio', $filtro['finicio']);
$stmt->bindValue('ffinal', $filtro['ffinal']);
} elseif ($filtro['componente'] == '' && $filtro['unidad'] != '' && $filtro['finicio'] == '' && $filtro['ffinal'] != '') {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento,
bm.observacion AS bm_observacion,
u.u_nombre,
d.d_unidad,
s.id_sol AS s_solicitud,
s.tipo_mantenimiento AS s_tipo_mantenimiento,
s.falla AS s_falla,
s.srealizado AS s_srealizado,
s.fevaluacion AS s_fevaluacion,
s.refacciones AS s_refacciones,
s.estatus AS s_estatus,
s.unidad AS s_unidad,
cc.cc_tipo,
cc.cc_descripcion,
eq.marbete AS equipo_marbete,
eq.serie AS equipo_serie,
us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
WHERE bm.id_uni = :id_uni AND bm.fecha_mov <= :ffinal
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('id_uni', $filtro['unidad']);
$stmt->bindValue('ffinal', $filtro['ffinal']);
} elseif ($filtro['componente'] == '' && $filtro['unidad'] != '' && $filtro['finicio'] == '' && $filtro['ffinal'] == '') {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento,
bm.observacion AS bm_observacion,
u.u_nombre,
d.d_unidad,
s.id_sol AS s_solicitud,
s.tipo_mantenimiento AS s_tipo_mantenimiento,
s.falla AS s_falla,
s.srealizado AS s_srealizado,
s.fevaluacion AS s_fevaluacion,
s.refacciones AS s_refacciones,
s.estatus AS s_estatus,
s.unidad AS s_unidad,
cc.cc_tipo,
cc.cc_descripcion,
eq.marbete AS equipo_marbete,
eq.serie AS equipo_serie,
us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
WHERE bm.id_uni = :id_uni
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('id_uni', $filtro['unidad']);
} elseif ($filtro['componente'] == '' && $filtro['unidad'] == '' && $filtro['finicio'] != '' && $filtro['ffinal'] != '') {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento,
bm.observacion AS bm_observacion,
u.u_nombre,
d.d_unidad,
s.id_sol AS s_solicitud,
s.tipo_mantenimiento AS s_tipo_mantenimiento,
s.falla AS s_falla,
s.srealizado AS s_srealizado,
s.fevaluacion AS s_fevaluacion,
s.refacciones AS s_refacciones,
s.estatus AS s_estatus,
s.unidad AS s_unidad,
cc.cc_tipo,
cc.cc_descripcion,
eq.marbete AS equipo_marbete,
eq.serie AS equipo_serie,
us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
WHERE bm.fecha_mov BETWEEN :finicio AND :ffinal
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('finicio', $filtro['finicio']);
$stmt->bindValue('ffinal', $filtro['ffinal']);
} elseif ($filtro['componente'] == '' && $filtro['unidad'] == '' && $filtro['finicio'] == '' && $filtro['ffinal'] != '') {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento,
bm.observacion AS bm_observacion,
u.u_nombre,
d.d_unidad,
s.id_sol AS s_solicitud,
s.tipo_mantenimiento AS s_tipo_mantenimiento,
s.falla AS s_falla,
s.srealizado AS s_srealizado,
s.fevaluacion AS s_fevaluacion,
s.refacciones AS s_refacciones,
s.estatus AS s_estatus,
s.unidad AS s_unidad,
cc.cc_tipo,
cc.cc_descripcion,
eq.marbete AS equipo_marbete,
eq.serie AS equipo_serie,
us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
WHERE bm.fecha_mov <= :ffinal
";
$stmt = $conn->prepare($sql);
$stmt->bindValue('ffinal', $filtro['ffinal']);
} else {
$sql = "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo,
bm.fecha_mov AS bm_fecha_movimiento,
bm.observacion AS bm_observacion,
u.u_nombre,
d.d_unidad,
s.id_sol AS s_solicitud,
s.tipo_mantenimiento AS s_tipo_mantenimiento,
s.falla AS s_falla,
s.srealizado AS s_srealizado,
s.fevaluacion AS s_fevaluacion,
s.refacciones AS s_refacciones,
s.estatus AS s_estatus,
s.unidad AS s_unidad,
cc.cc_tipo,
cc.cc_descripcion,
eq.marbete AS equipo_marbete,
eq.serie AS equipo_serie,
us.usuario_nombre
FROM bitacora_movimientos bm
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
LEFT JOIN (SELECT id_sol, tipo_equipo, id_equipo, ubicacion, usuario, gestor, periodo, tipo_mantenimiento, falla, srealizado, fregistro, fatencion, ffin, fevaluacion, refacciones, estatus, unidad FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
LEFT JOIN (SELECT id_componente, tipo AS cc_tipo, descripcion AS cc_descripcion FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
LEFT JOIN (SELECT id_componente, marca AS i_marca, modelo AS i_modelo, serie AS i_serie FROM inventario) AS i ON i.id_componente = cc.id_componente
LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
";
$stmt = $conn->prepare($sql);
}
$resultSet = $stmt->executeQuery();
return $resultSet->fetchAll();
}
//Para subir formulario
}