src/Controller/ReporteController.php line 564

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Repository\InventarioRepository;
  4. use App\Repository\UnidadRepository;
  5. use App\Entity\CatComponentes;
  6. use DateInterval;
  7. use App\Entity\Unidad;
  8. use App\Entity\Usuario;
  9. use App\Service\DocumentoPDF;
  10. use App\Service\SelloDigital;
  11. use App\Service\DocumentoPDF1;
  12. use App\Repository\RedRepository;
  13. use App\Repository\OtroRepository;
  14. use Doctrine\ORM\EntityRepository;
  15. use App\Repository\EquipoRepository;
  16. use App\Repository\ImpresoraRepository;
  17. use App\Repository\SolicitudRepository;
  18. use App\Repository\UbicacionRepository;
  19. use App\Repository\UsuarioRepository;
  20. use Doctrine\ORM\EntityManagerInterface;
  21. use Symfony\Component\HttpFoundation\Request;
  22. use Symfony\Component\HttpFoundation\Response;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  25. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  26. use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
  27. use DateTime;
  28. use Symfony\Component\Form\Extension\Core\Type\DateType;
  29. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  30. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  31. #[Route('/reporte')]
  32. class ReporteController extends AbstractController
  33. {
  34.     #[Route('/refaccion-asignacion-pdf'name'app_refaccion_asignacion_pdf'methods: ['POST'])]
  35.     public function refaccionAsignacionPDF(InventarioRepository $inventarioRepositoryUnidadRepository $unidadRepositoryRequest $requestSelloDigital $sello): Response
  36.     {
  37.         ini_set('memory_limit''5120M');
  38.         ini_set('max_execution_time'0);
  39.         ini_set('output_buffering'0);
  40.         date_default_timezone_set('America/Mexico_City');
  41.         setlocale(LC_ALL'es_MX');
  42.         $refaccionId $request->request->get('refaccionId'); // Obtener el ID de la refacción desde la solicitud
  43.         // Obtener datos de la refacción específica
  44.         $inventario $inventarioRepository->find($refaccionId);
  45.         if (!$inventario) {
  46.             throw $this->createNotFoundException('Refacción no encontrada.');
  47.         }
  48.         // Obtener la unidad de origen utilizando el idUni
  49.         $unidadOrigen $unidadRepository->find($inventario->getUnidadOrigen());
  50.         $nombreUnidadOrigen $unidadOrigen $unidadOrigen->getNombre() : 'Unidad no encontrada';
  51.         $procedencia $unidadRepository->find($inventario->getProcedencia());
  52.         $nombreUnidadProcedencia $procedencia $procedencia->getNombre() : 'Unidad no encontrada';
  53.         $tiposComponente = [
  54.             => 'CPU',
  55.             => 'Placa base',
  56.             => 'RAM',
  57.             => 'HDD',
  58.             => 'SSD',
  59.             => 'NVMe',
  60.             => 'GPU',
  61.             => 'Tarjeta de sonido',
  62.             => 'Tarjeta de red',
  63.             10 => 'PSU',
  64.             11 => 'Teclado',
  65.             12 => 'Ratón',
  66.             13 => 'Monitor',
  67.             14 => 'Puertos USB',
  68.             15 => 'Webcams',
  69.             16 => 'Adaptadores Wi-Fi',
  70.         ];
  71.         $tipoComponente $tiposComponente[$inventario->getIdComponente()] ?? 'Tipo no encontrado';
  72.         $fecha date('d-m-Y');
  73.         // Declaración de la instancia de TCPDF
  74.         $pdf = new DocumentoPDF1();
  75.         $pdf->setPrintFooter(false);
  76.         $pdf->SetCreator('Conalep Estado de México');
  77.         $pdf->SetAuthor('SIGMEC');
  78.         $pdf->SetTitle('Reporte');
  79.         $pdf->SetAutoPageBreak(TRUEPDF_MARGIN_BOTTOM);
  80.         $pdf->AddPage('P''JIS_B4');
  81.         $pdf->SetY(70);
  82.         $pdf->setFontSubsetting(true);
  83.         // Renderizado del contenido del PDF con los datos de la refacción
  84.         $html = <<<EOD
  85. <style>
  86.     .header { text-align: center; }
  87.     .content { font-size: 12px; }
  88.     .footer { text-align: center; font-size: 10px; margin-top: 10px; text-align: left; }
  89.     .table-header { background-color: #f0f0f0; }
  90.     .table-body { text-align: center; font-size: 8px; }
  91. </style>
  92. <div class="content">
  93.     <p style="text-align: right;">Cuautitlán Izcalli, México; {$fecha}</p>
  94.     <p style="text-align: right;">Unidad de Innovación y Tecnologías de la Información</p>
  95.     <p style="text-align: right;"><strong>Asunto: Transferencia de refacciones</strong></p>
  96.     <p style="text-align: right;"><strong>Asunto: Asignación de equipo de cómputo</strong></p>
  97.     <p><strong>{$this->getUser()->getNombreCompleto()}</strong></p>
  98.     <p><strong>{$this->getUser()->getArea()}</strong></p>
  99.     <p><strong>P R E S E N T E</strong></p>
  100.     <p>Por medio del presente se le hace entrega de la siguiente refacción:</p>
  101.     <table width="100%" cellpadding="2" border="0.1">
  102.     <thead class="table-header">
  103.         <tr>
  104.             <th>Tipo</th>
  105.             <th>Marca</th>
  106.             <th>Modelo</th>
  107.             <th>Serie</th>
  108.             <th>Descripción</th>
  109.             <th>Procedencia</th>
  110.             <th>Unidad de Origen</th>
  111.         </tr>
  112.     </thead>
  113.     <tbody class="table-body">
  114.         <tr>
  115.             <td>{$tipoComponente}</td>
  116.             <td>{$inventario->getMarca()}</td>
  117.             <td>{$inventario->getModelo()}</td>
  118.             <td>{$inventario->getSerie()}</td>
  119.             <td>{$inventario->getDescripcion()}</td>
  120.             <td>{$nombreUnidadProcedencia}</td>
  121.             <td>{$nombreUnidadOrigen}</td>
  122.         </tr>
  123.     </tbody>
  124.     </table>
  125.     <p>Entrega ___________________</p>
  126.     <p>Recibe   ___________________</p>
  127.     <p>Sin más por el momento aprovecho la oportunidad para enviarle un cordial saludo.</p>
  128.     <div class="footer">
  129.         <p><strong>A T E N T A M E N T E</strong></p>
  130.         <p>GREGORIO JUAN BERNAL SOLÍS<br>
  131.            JEFE DE PROYECTO DE LA UNIDAD DE<br>
  132.            INNOVACIÓN Y TECNOLOGÍAS DE LA INFORMACIÓN</p>
  133.         <p>c.c.p – Beatriz Marlet Torres Perea</p>
  134.         <p>G.J.B.S.</p>
  135.     </div>
  136. </div>
  137. EOD;
  138.         $pdf->writeHTML($htmltrue0true0);
  139.         // Enviar el PDF como respuesta para descarga
  140.         $pdf->Output('reporte.pdf''D');
  141.         return new Response(); // Este return evita un error, el PDF se envía directamente al navegador
  142.     }
  143.     #[Route('/equipo-resguardo-pdf'name'app_resguardo_equipo_pdf'methods: ['POST'])]
  144.     public function equipoResguardoPDF(EquipoRepository $equipoRepositoryUsuarioRepository $usuarioRepositoryRequest $requestSelloDigital $sello)
  145.     {
  146.         ini_set('memory_limit''5120M');
  147.         ini_set('max_execution_time'0);
  148.         ini_set('output_buffering'0);
  149.         date_default_timezone_set('America/Mexico_City');
  150.         setlocale(LC_ALL'es_MX');
  151.         // Obtener el ID del equipo del request
  152.         $idEqu $request->request->get('idEqu');
  153.         // Obtener los datos del equipo desde la base de datos
  154.         $equipo $equipoRepository->find($idEqu);
  155.         if (!$equipo) {
  156.             throw $this->createNotFoundException('El equipo no se encontró.');
  157.         }
  158.         /** @var Usuario $user */
  159.         $user $this->getUser();
  160.         
  161.         //$equipo->getUsuario()->getNombre()
  162.         $user_equipo $equipo->getUsuario();
  163.         $user_gestor $usuarioRepository->findGestorByUnidad($user_equipo->getUnidad()->getIdUni()); 
  164.         $responsable_unidad =  mb_strtoupper($user_equipo->getUnidad()->getDirector(), 'UTF-8');
  165.         $cargo_del_responsable "" ;
  166.         $text_plantel "";
  167.         $id_uni $user_equipo->getUnidad()->getIdUni();
  168.         $nombre_plantel $user_equipo->getUnidad()->getNombre();
  169.         $nombre_plantel_mayus mb_strtoupper($nombre_plantel'UTF-8');
  170.         if ($id_uni == "3155280") { // Id de Dirección General
  171.             $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>";
  172.             $text_plantel $nombre_plantel;
  173.         } elseif ($id_uni == "3157010") { // Id del CAST
  174.             $cargo_del_responsable "DIRECTOR" . ($user_equipo->getUnidad()->getSexo() == "M" "A" "") . " DEL {$nombre_plantel_mayus} <br>";
  175.             $text_plantel $nombre_plantel;
  176.         } else {
  177.             $cargo_del_responsable "DIRECTOR" . ($user_equipo->getUnidad()->getSexo() == "M" "A" "") . " DEL PLANTEL {$nombre_plantel_mayus} <br>";
  178.             $text_plantel "Plantel {$nombre_plantel}";
  179.         } 
  180.         
  181.         $fecha date('d-m-Y');
  182.         $pdf = new DocumentoPDF();
  183.         // Definimos la utilización de tipografías
  184.         $pdf->setFontSubsetting(true); 
  185.         // Declaración de la instancia de TCPDF con el encabezado personalizado
  186.         $pdf = new DocumentoPDF1();
  187.         $pdf->unidad "Unidad Administrativa"// Ajusta esto según sea necesario
  188.         $pdf->codigo '15-528-PO-15-F18';
  189.         $pdf->revision '02';
  190.         $pdf->faprobacion '30/10/2022';
  191.         $pdf->fecha $fecha;
  192.         $pdf->formato '';
  193.         $pdf->nombre '';
  194.         $pdf->usuarioa $user_equipo->getNombreCompleto();
  195.         $pdf->areaa $user_equipo->getArea();
  196.         $pdf->presente 'Presente';
  197.         $pdf->mensaje1 'Por medio del presente se le hace entrega del equipo de cómputo descrito a continuación.';
  198.         $pdf->mensaje2 'Es importante mencionar que el presente equipo, le es asignado para poder llevar a cabo el cumplimiento de sus actividades laborales.';
  199.         $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.';
  200.         $pdf->mensaje4 'Sin más por el momento aprovecho la oportunidad para enviarle un cordial saludo.<br><br><br>';
  201.         $pdf->atentamente1 $responsable_unidad.  '<br>'.$cargo_del_responsable;
  202.         $pdf->cpp =  $user_equipo->getUnidad()->getIdUni() != "3155280" ?  'c.c.p – Beatriz Marlet Torres Perea'' ';
  203.         //$pdf->gjbs = 'G.J.B.S.';
  204.         $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])."." '');
  205.         $pdf->setPrintFooter(false);
  206.         // Obtenemos los datos del documento
  207.         /*$cadenaOriginal = $pdf->formato . '||';
  208.         $cadenaOriginal .= (empty($unidadId)) ? "Todas las Unidades administrativas" : $pdf->unidad;
  209.         $cadenaOriginal .= '||' . $user_equipo->getNombre() . ' ' . $user_equipo->getPapellido() . '||' . $user_equipo->getCorreo() . '||' . $user_equipo->getRol()->getNombre();
  210.         $cadenaOriginal .= '||' . $fecha;
  211.         $cadena64 = $sello->generar($cadenaOriginal);*/
  212.         // Información del documento
  213.         $pdf->SetCreator('Conalep Estado de México');
  214.         $pdf->SetAuthor('SIGMEC');
  215.         $pdf->SetTitle('Reporte');
  216.         // Definimos los saltos de página como automáticos
  217.         $pdf->SetAutoPageBreak(TRUEPDF_MARGIN_BOTTOM);
  218.         // Nueva página con sus respectivas características
  219.         $pdf->AddPage('P''JIS_B4');
  220.         $pdf->SetY(55);
  221.         // Generamos el contenido a mostrar
  222.         ob_start(); 
  223.         $html = <<<EOD
  224. <div class="content">   
  225.     <p style="text-align: right;"> {$user_equipo->getUnidad()->getMunicipio()}, México; {$fecha}</p>
  226.     <p style="text-align: right;">{$text_plantel}</p>
  227.     <p style="text-align: right;"><strong>Asunto: Asignación de equipo de cómputo</strong></p>
  228.     <p style="text-align: left;"><strong>Resguardatario: </strong> {$equipo->getUsuario()->getNombre()} {$equipo->getUsuario()->getPapellido()} {$equipo->getUsuario()->getSapellido()}</p>
  229.     <p style="text-align: left;"><strong>Ubicación del equipo: </strong> {$equipo->getUbicacion()}</p>
  230.     <p><strong>P R E S E N T E</strong></p>
  231.     <p>{$pdf->mensaje1}</p>
  232.         
  233.     <table width="100%" cellpadding="2" border="0.1"  align="center">
  234.         <thead>
  235.             <tr>
  236.                 <td colspan="4" style="text-align: center;"><b>CPU</b></td>
  237.             </tr>
  238.             <tr class="table-header">
  239.                 <td style="text-align: center;">Marbete</td>
  240.                 <td style="text-align: center;">Marca</td>
  241.                 <td style="text-align: center;">Modelo</td>
  242.                 <td style="text-align: center;">Serie</td>
  243.             </tr>
  244.         </thead>
  245.         <tbody class="table-body">
  246.         <tr>
  247.             <td>{$equipo->getMarbete()}</td>
  248.             <td>{$equipo->getMarca()}</td>
  249.             <td>{$equipo->getModelo()}</td>
  250.             <td>{$equipo->getSerie()}</td>
  251.         </tr>
  252.         </tbody>  
  253.     </table>
  254.     <p></p>
  255.     <table class="spaced-table" width="100%" cellpadding="2" border="0.1">
  256.     <thead>
  257.         <tr>
  258.             <td colspan="4" style="text-align: center;"><b>Monitor</b></td>
  259.             <td colspan="3" style="text-align: center;"><b>Teclado</b></td>
  260.             <td colspan="3" style="text-align: center;"><b>Mouse</b></td>
  261.         </tr>
  262.         <tr class="table-header">
  263.             <td style="text-align: center;">Marbete</td>
  264.             <td style="text-align: center;">Marca</td>
  265.             <td style="text-align: center;">Modelo</td>
  266.             <td style="text-align: center;">Serie</td>
  267.             <td style="text-align: center;">Marca</td>
  268.             <td style="text-align: center;">Modelo</td>
  269.             <td style="text-align: center;">Serie</td>
  270.             <td style="text-align: center;">Marca</td>
  271.             <td style="text-align: center;">Modelo</td>
  272.             <td style="text-align: center;">Serie</td>
  273.         </tr>
  274.     </thead>
  275.     <tbody class="table-body">
  276.     <tr>
  277.         <td>{$equipo->getMonitorMarbete()}</td>
  278.         <td>{$equipo->getMonitorMarca()}</td>
  279.         <td>{$equipo->getMonitorModelo()}</td>
  280.         <td>{$equipo->getMonitorSerie()}</td>
  281.         <td>{$equipo->getTecladoMarca()}</td>
  282.         <td>{$equipo->getTecladoModelo()}</td>
  283.         <td>{$equipo->getTecladoSerie()}</td>
  284.         <td>{$equipo->getMouseMarca()}</td>
  285.         <td>{$equipo->getMouseModelo()}</td>
  286.         <td>{$equipo->getMouseSerie()}</td>
  287.     </tr>
  288.     </tbody>  
  289.     </table>
  290.     <p>{$pdf->mensaje2}</p>
  291.     <p>{$pdf->mensaje3}</p>
  292.     <p>{$pdf->mensaje4}</p>
  293.     <div class="footer">
  294.         <p><strong>A T E N T A M E N T E</strong></p>
  295.         <p>{$pdf->atentamente1}</p>
  296.         <p>{$pdf->cpp}</p>
  297.         <p>{$pdf->gjbs}</p>
  298.     </div> 
  299.     <p></p>
  300.     <div class="direccion">
  301.         <p>{$user_equipo->getUnidad()->getCalle()}{$user_equipo->getUnidad()->getColonia()}{$user_equipo->getUnidad()->getMunicipio()}, Estado de México. C.P. {$user_equipo->getUnidad()->getCP()}.< /p>
  302.         <p>Tel(s): {$user_equipo->getUnidad()->getTelefono()} Email: {$user_equipo->getUnidad()->getCorreo()}< /p>
  303.     </div>
  304.     <div >
  305.        
  306.     </div>
  307. </div>
  308. <style>
  309.     .header { text-align: center; }
  310.     .content { font-size: 12px; }
  311.     .footer { text-align: center; font-size: 10px; margin-top: 10px; text-align: left; }
  312.     .table-body { text-align: center; font-size: 8px; }
  313.     .spaced-table {margin-bottom: 2px;}
  314.     .direccion { text-align: center; font-size: 10px; }
  315. </style>
  316. EOD;
  317.         ob_end_clean();
  318.         $pdf->writeHTML($htmltrue0true0);
  319.         // Respuesta del PDF para visualización del usuario
  320.         $pdf->Output('reporte.pdf''I');
  321.         return new Response(); // No es necesario renderizar una vista aquí, ya que estamos generando el PDF
  322.     }
  323.     #[Route('/otro-resguardo-pdf'name'app_resguardo_otro_pdf'methods: ['POST'])]
  324.     public function otroResguardoPDF(EquipoRepository $equipoRepositoryRequest $requestSelloDigital $sello/*, int $equipoId*/)
  325.     {
  326.         ini_set('memory_limit''5120M');
  327.         ini_set('max_execution_time'0);
  328.         ini_set('output_buffering'0);
  329.         date_default_timezone_set('America/Mexico_City');
  330.         setlocale(LC_ALL'es_MX');
  331.         // Obtenemos los datos de la petición
  332.         /** @var Usuario $user */
  333.         $user $this->getUser();
  334.         $unidadId $request->request->get('unidad_filtro');
  335.         $fecha date('d-m-Y');
  336.         /*$equipo = $equipoRepository->findOneBy(['idEquipo' => 1]);
  337.         echo "**Equipo:** {$equipo->getMarca()} {$equipo->getModelo()}\n";
  338.         echo "**Serie:** {$equipo->getSerie()}\n";
  339.         echo "**Estatus:** {$equipo->getEstatus()}\n";
  340.         echo "**Marbete:** {$equipo->getMarbete()}\n";
  341.         echo "**Procesador:** {$equipo->getProcesador()}\n";
  342.         echo "**RAM:** {$equipo->getRam()}\n";
  343.         echo "**SSD:** {$equipo->getSsd()}\n";
  344.         echo "**HDD:** {$equipo->getHdd()}\n";
  345.         echo "**EMHV:** {$equipo->getEmhv()}\n";
  346.         echo "**Ubicación:** {$equipo->getUbicacion()}\n";
  347.         echo "**Usuario:** {$equipo->getUsuario()}\n";*/
  348.         $equipos = [
  349.             [
  350.                 'estatus' => 'Activo',
  351.                 'marbete' => '1234567890',
  352.                 'marca' => 'Dell',
  353.                 'modelo' => 'OptiPlex 3090',
  354.                 'serie' => '123456789ABC',
  355.                 'procesador' => 'Intel Core i5-12345',
  356.                 'ssd' => '256 GB',
  357.                 'hdd' => '1 TB',
  358.                 'ram' => '16 GB',
  359.                 'emhv' => 'No aplica',
  360.                 'ubicacion' => 'Edificio A, Nivel 3',
  361.                 'usuario' => 'Juan Pérez López'
  362.             ],
  363.             // Add more sample data as needed
  364.         ];
  365.         // Declaración de la instancia de TCPDF con el encabezado personalizado
  366.         $pdf = new DocumentoPDF1();
  367.         if (empty($unidadId)) {
  368.             $pdf->unidad "Todas las Unidades administrativas";
  369.         } else {
  370.             $uni $this->getDoctrine()->getRepository(Unidad::class)->findOneBy(['idUni' => $unidadId]);
  371.             $pdf->unidad $uni->getNombre();
  372.         }
  373.         $pdf->codigo '15-528-PO-15-F18';
  374.         $pdf->revision '02';
  375.         $pdf->faprobacion '30/10/2022';
  376.         $pdf->fecha $fecha;
  377.         $pdf->formato '';
  378.         $pdf->nombre '';
  379.         $pdf->usuarioa $user->getNombreCompleto();
  380.         $pdf->areaa $user->getArea();
  381.         $pdf->presente 'Presente';
  382.         $pdf->mensaje1 'Por medio del presente se le hace entrega del equipo de cómputo descrito a continuación.';
  383.         $pdf->mensaje2 'Es importante mencionar que el presente equipo, le es asignado para poder llevar a cabo el cumplimiento de sus actividades laborales.';
  384.         $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.';
  385.         $pdf->mensaje4 'Sin más por el momento aprovecho la oportunidad para enviarle un cordial saludo.<br><br><br>';
  386.         $pdf->atentamente '  A T E N T A M E N T E';
  387.         $pdf->atentamente1 '  GREGORIO JUAN BERNAL SOLÍS<br>
  388.                               JEFE DE PROYECTO DE LA UNIDAD DE<br>
  389.                               INNOVACIÓN Y TECNOLOGÍAS DE LA INFORMACIÓN';
  390.         $pdf->cpp 'c.c.p – Beatriz Marlet Torres Perea';
  391.         $pdf->gjbs 'G.J.B.S.';
  392.         $pdf->setPrintFooter(false);
  393.         // Obtenemos los datos del documento
  394.         $cadenaOriginal $pdf->formato '||';
  395.         $cadenaOriginal .= (empty($unidadId)) ? "Todas las Unidades administrativas" $pdf->unidad;
  396.         $cadenaOriginal .= '||' $user->getNombre() . ' ' $user->getPapellido() . '||' $user->getCorreo() . '||' $user->getRol()->getNombre();
  397.         $cadenaOriginal .= '||' $fecha;
  398.         $cadena64 $sello->generar($cadenaOriginal);
  399.         // Información del documento
  400.         $pdf->SetCreator('Conalep Estado de México');
  401.         $pdf->SetAuthor('SIGMEC');
  402.         $pdf->SetTitle('Reporte');
  403.         // Definimos los saltos de página como automáticos
  404.         $pdf->SetAutoPageBreak(TRUEPDF_MARGIN_BOTTOM);
  405.         // Nueva página con sus respectivas características
  406.         $pdf->AddPage('P''JIS_B4');
  407.         $pdf->SetY(70);
  408.         // Definimos la utilización de tipografías
  409.         $pdf->setFontSubsetting(true);
  410.         // Generamos el contenido a mostrar
  411.         ob_start();
  412.         $html = <<<EOD
  413. <style>
  414.     .header { text-align: center; }
  415.     .content { font-size: 12px; }
  416.     .footer { text-align: center; font-size: 10px; margin-top: 10px; text-align: left; }
  417.     .table-body { text-align: center; font-size: 8px; }
  418. </style>
  419. <div class="content">
  420.     <p style="text-align: right;">Cuautitlán Izcalli, México; {$fecha}</p>
  421.     <p style="text-align: right;">Unidad de Innovación y Tecnologías de la Información</p>
  422.     <p style="text-align: right;"><strong>Asunto: Asignación de equipo de cómputo</strong></p>
  423.     <p><strong>{$user->getNombreCompleto()}</strong></p>
  424.     <p><strong>{$user->getArea()}</strong></p>
  425.     <p><strong>P R E S E N T E</strong></p>
  426.     <p>{$pdf->mensaje1}</p>
  427.     <table width="100%" cellpadding="2" border="0.1">
  428.     <thead>
  429.         <tr class="table-header">
  430.             <td>#</td>
  431.             <td>Estatus</td>
  432.             <td>Marbete</td>
  433.             <td>Marca</td>
  434.             <td>Modelo</td>
  435.             <td>Serie</td>
  436.             <td>Procesador</td>
  437.             <td>SSD</td>
  438.             <td>HDD</td>
  439.             <td>RAM</td>
  440.             <td>EMHV</td>
  441.             <td>Ubicación</td>
  442.             <td>Usuario</td>
  443.         </tr>
  444.     </thead>
  445.     <tbody class="table-body">
  446. EOD;
  447.         $pdf->setMargins(1030);
  448.         $n 1;
  449.         // **Iterate through the sample data and generate table rows**
  450.         foreach ($equipos as $equipo) {
  451.             $html .= <<<EOD
  452.     <tr>
  453.         <td>{$n}</td>
  454.         <td>{$equipo['estatus']}</td>
  455.         <td>{$equipo['marbete']}</td>
  456.         <td>{$equipo['marca']}</td>
  457.         <td>{$equipo['modelo']}</td>
  458.         <td>{$equipo['serie']}</td>
  459.         <td>{$equipo['procesador']}</td>
  460.         <td>{$equipo['ssd']}</td>
  461.         <td>{$equipo['hdd']}</td>
  462.         <td>{$equipo['ram']}</td>
  463.         <td>{$equipo['emhv']}</td>
  464.         <td>{$equipo['ubicacion']}</td>
  465.         <td>{$equipo['usuario']}</td>
  466.     </tr>
  467.     EOD;
  468.             $n++;
  469.         }
  470.         $html .= <<<EOD
  471.         </tbody>  
  472.     </table>
  473.     <p>{$pdf->mensaje2}</p>
  474.     <p>{$pdf->mensaje3}</p>
  475.     <p>{$pdf->mensaje4}</p>
  476.     <div class="footer">
  477.         <p><strong>A T E N T A M E N T E</strong></p>
  478.         <p>{$pdf->atentamente1}</p>
  479.         <p>{$pdf->cpp}</p>
  480.         <p>{$pdf->gjbs}</p>
  481.     </div>
  482. </div>
  483. EOD;
  484.         ob_end_clean();
  485.         $pdf->writeHTML($htmltrue0true0);
  486.         // Respuesta del PDF para visualización del usuario
  487.         $pdf->Output('reporte.pdf''I');
  488.         return $this->render('reporte/equipo_resguardo_pdf.html.twig');
  489.     }
  490.     #[Route('/equipo-excel'name'app_reporte_equipo_excel'methods: ['POST'])]
  491.     public function equipoExcel(EquipoRepository $equipoRepositoryRequest $request): Response
  492.     {
  493.         ini_set('memory_limit''5120M');
  494.         ini_set('max_execution_time'0);
  495.         ini_set('output_buffering'0);
  496.         # Obtenemos los datos de la petición
  497.         /** @var Usuario $user */
  498.         $user $this->getUser();
  499.         $parameters $request->request->get('unidad_filtro');
  500.         $unidad = (array_key_exists('unidad'$request->request->all()['unidad_filtro'])) ? $parameters['unidad'] : $user->getUnidad();
  501.         
  502.         $equipos = [];
  503.         # Validar si la unidad está vacía
  504.         if ($user->getRol()->getIdRol() >&& empty($unidad)) {
  505.             throw new \InvalidArgumentException('Debe seleccionar una unidad administrativa.');
  506.         }
  507.         $equipos $equipoRepository->equipoUnidad($unidad);
  508.         # Definir el nombre temporal del archivo
  509.         $filePath 'equipo.xlsx';
  510.         # Se definen las cabeceras del archivo
  511.         $cabecera WriterEntityFactory::createRowFromArray([
  512.             'No.',
  513.             'Estatus',
  514.             'Marbete',
  515.             'Descripción',
  516.             'Marca',
  517.             'Modelo',
  518.             'Serie',
  519.             'Procesador',
  520.             'CPU velocidad',
  521.             'Núcleos',
  522.             'SSD',
  523.             'HDD',
  524.             'RAM',
  525.             'MAC',
  526.             'IP',
  527.             'EMHV',
  528.             'Monitor marbete',
  529.             'Monitor marca',
  530.             'Monitor modelo',
  531.             'Monitor serie',
  532.             'Monitor tipo',
  533.             'Monitor pulgadas',
  534.             'Teclado marca',
  535.             'Teclado modelo',
  536.             'Teclado serie',
  537.             'Mouse marca',
  538.             'Mouse modelo',
  539.             'Mouse serie',
  540.             'Uso',
  541.             'Función',
  542.             'Descripción de la función',
  543.             'Unidad',
  544.             'Ubicación',
  545.             'Usuario'
  546.         ]);
  547.         # Se crea el arreglo con los datos del cuerpo del documento
  548.         $data = [];
  549.         $n 1;
  550.         foreach ($equipos as $equipo) {
  551.             $u '';
  552.                 if ($equipo->getUsuario()) {
  553.                     $u $equipo->getUsuario()->getNombre() . ' ' $equipo->getUsuario()->getPapellido();
  554.                 }else{
  555.                     $u 'Sin usuario';
  556.                 }
  557.             $usuario $u;
  558.             $ubicacion $equipo->getUbicacion()->getArea();
  559.             $unidad $equipo->getUnidad()->getNombre();
  560.             $ssd "";
  561.             if ($equipo->getSsd() > || $equipo->getSsd() != "") {
  562.                 $ssd $equipo->getSsd() . ' Gb';
  563.             }
  564.             $uso = match ($equipo->getUso()) {
  565.                 "1" => "Educativo",
  566.                 "2" => "Docente",
  567.                 "3" => "Administrativo",
  568.                 default => ""
  569.             };
  570.             $funcion = match ($equipo->getFuncion()) {
  571.                 "1" => "Escritorio",
  572.                 "2" => "Servidor",
  573.                 default => ""
  574.             };
  575.             $estatus = match ($equipo->getEstatus()) {
  576.                 "1" => "En operación",
  577.                 "2" => "Descompuesto",
  578.                 "3" => "Sin instalar",
  579.                 "4" => "En proceso de baja",
  580.                 "5" => "Baja",
  581.                 default => ""
  582.             };
  583.             $emhv = match ($equipo->isEmhv()) {
  584.                 true => "Cumple",
  585.                 false => "No cumple",
  586.                 default => ""
  587.             };
  588.             $data[] = WriterEntityFactory::createRowFromArray([
  589.                 $n,
  590.                 $estatus,
  591.                 $equipo->getMarbete(),
  592.                 $equipo->getDescripcion(),
  593.                 $equipo->getMarca(),
  594.                 $equipo->getModelo(),
  595.                 $equipo->getSerie(),
  596.                 $equipo->getProcesador(),
  597.                 $equipo->getCpuVelocidad(),
  598.                 $equipo->getNucleos(),
  599.                 $ssd,
  600.                 $equipo->getHhd(),
  601.                 $equipo->getRam(),
  602.                 $equipo->getMac(),
  603.                 $equipo->getIp(),
  604.                 $emhv,
  605.                 $equipo->getMonitorMarbete(),
  606.                 $equipo->getMonitorMarca(),
  607.                 $equipo->getMonitorModelo(),
  608.                 $equipo->getMonitorSerie(),
  609.                 $equipo->getMonitorTipo(),
  610.                 $equipo->getMonitorPulgadas(),
  611.                 $equipo->getTecladoMarca(),
  612.                 $equipo->getTecladoModelo(),
  613.                 $equipo->getTecladoSerie(),
  614.                 $equipo->getMouseMarca(),
  615.                 $equipo->getMouseModelo(),
  616.                 $equipo->getMouseSerie(),
  617.                 $uso,
  618.                 $funcion,
  619.                 $equipo->getFuncionDescripcion(),
  620.                 $unidad,
  621.                 $ubicacion,
  622.                 $usuario
  623.             ]);
  624.             $n++;
  625.         }
  626.         # Se crea el documento en formato CSV
  627.         $writer WriterEntityFactory::createXLSXWriter();
  628.         $writer
  629.             ->openToFile($filePath)
  630.             ->addRow($cabecera)
  631.             ->addRows($data)
  632.             ->close()
  633.         ;
  634.         $response = new BinaryFileResponse($filePath);
  635.         $response->setContentDisposition(
  636.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  637.             'equipo' '_' date('Y-m-d') . '.xlsx'
  638.         );
  639.         $response->deleteFileAfterSend(true);
  640.         return $response;
  641.     }
  642.     #[Route('/equipo-pdf'name'app_reporte_equipo_pdf'methods: ['POST'])]
  643.     public function equipoPDF(EquipoRepository $equipoRepositoryRequest $requestSelloDigital $sello)
  644.     {
  645.         ini_set('memory_limit''5120M');
  646.         ini_set('max_execution_time'0);
  647.         ini_set('output_buffering'0);
  648.         date_default_timezone_set('America/Mexico_City');
  649.         setlocale(LC_ALL'es_MX');
  650.         # Obtenemos los datos de la petición
  651.         /** @var Usuario $user */
  652.         $user $this->getUser();
  653.         $parameters $request->request->get('unidad_filtro');
  654.         $unidad = (array_key_exists('unidad'$request->request->all()['unidad_filtro'])) ? $parameters['unidad'] : $user->getUnidad();
  655.         $fecha date('d-m-Y H:i');
  656.         # Declaración de la instancia de TCPDF con el encabezado personalizado
  657.         $pdf = new DocumentoPDF();
  658.         if (empty($unidad)) {
  659.             $pdf->unidad "Todas las Unidades administrativas";
  660.         } else {
  661.             $uni $this->getDoctrine()->getRepository(Unidad::class)->findOneBy(['idUni' => $unidad]);
  662.             $pdf->unidad $uni->getNombre();
  663.         }
  664.         $pdf->codigo '15-528-PO-15-F18';
  665.         $pdf->revision '02';
  666.         $pdf->faprobacion '30/10/2022';
  667.         $pdf->fecha $fecha;
  668.         $pdf->formato 'FORMATO CE-1';
  669.         $pdf->nombre 'CONTROL DE EQUIPO DE CÓMPUTO';
  670.         $pdf->setPrintFooter(false);
  671.         
  672.         # Obtenemos los datos del documento
  673.         $equipos $equipoRepository->equipoUnidad($unidad1);
  674.         $cadenaOriginal $pdf->formato '||';
  675.         $cadenaOriginal .= (empty($unidad)) ? "Todas las Unidades administrativas" $pdf->unidad;
  676.         $cadenaOriginal .= '||' $user->getNombre() . ' ' $user->getPapellido() . '||' $user->getCorreo() . '||' $user->getRol()->getNombre();
  677.         $cadenaOriginal .= '||' $fecha;
  678.         $cadena64 $sello->generar($cadenaOriginal);
  679.         # Información del documento
  680.         $pdf->SetCreator('Conalep Estado de México');
  681.         $pdf->SetAuthor('SIGMEC');
  682.         $pdf->SetTitle('Reporte');
  683.         # Definimos los saltos de página como automáticos
  684.         $pdf->SetAutoPageBreak(TRUEPDF_MARGIN_BOTTOM);
  685.         #Nueva página con sus respectivas características
  686.         $pdf->AddPage('L''JIS_B4');
  687.         $pdf->SetY(50);
  688.         # Definimos la utilización de tipigrafías
  689.         $pdf->setFontSubsetting(true);
  690.         ### Generamos el contenido a mostrar ###
  691.         ob_start();
  692.         $html = <<<EOD
  693.         <table cellpadding="2" border="0.1">
  694.         <thead>
  695.             <tr style="text-align: center; background-color: #e4e4e4; font-size: 9px">
  696.                 <td rowspan="2" style="width: 2%">#</td>
  697.                 <td rowspan="2">Estatus</td>
  698.                 <td colspan="9">CPU</td>
  699.                 <td colspan="6">Monitor</td>
  700.                 <td colspan="3">Teclado</td>
  701.                 <td colspan="3">Mouse</td>
  702.                 <td rowspan="2">Uso</td>
  703.                 <td rowspan="2" style="font-size: 7.5px">Función</td>
  704.                 <td rowspan="2" style="font-size: 7px">Ubicación</td>
  705.                 <td rowspan="2" style="font-size: 7.5px">Usuario</td>
  706.             </tr>
  707.             <tr style="text-align: center; background-color: #e4e4e4; font-size: 7px">
  708.                 <td>Marbete</td>
  709.                 <td>Marca</td>
  710.                 <td>Modelo</td>
  711.                 <td>Serie</td>
  712.                 <td style="font-size: 6px">Procesador</td>
  713.                 <td>SSD</td>
  714.                 <td>HDD</td>
  715.                 <td>RAM</td>
  716.                 <td>EMHV</td>
  717.                 <td>Marbete</td>
  718.                 <td>Marca</td>
  719.                 <td>Modelo</td>
  720.                 <td>Serie</td>
  721.                 <td>Tipo</td>
  722.                 <td>Pulgadas</td>
  723.                 <td>Marca</td>
  724.                 <td>Modelo</td>
  725.                 <td>Serie</td>
  726.                 <td>Marca</td>
  727.                 <td>Modelo</td>
  728.                 <td>Serie</td>
  729.             </tr>
  730.         </thead>
  731.         <tbody>
  732.         EOD;
  733.         $pdf->setMargins(1050);
  734.         $n 1;
  735.         foreach ($equipos as $equipo) {
  736.             $u '';
  737.                 if ($equipo->getUsuario()) {
  738.                     $u $equipo->getUsuario()->getNombre() . ' ' $equipo->getUsuario()->getPapellido();
  739.                 }else{
  740.                     $u 'Sin usuario';
  741.                 }
  742.             $usuario $u;
  743.             $ubicacion $equipo->getUbicacion()->getArea();
  744.             $uso = match ($equipo->getUso()) {
  745.                 "1" => "Educativo",
  746.                 "2" => "Docente",
  747.                 "3" => "Administrativo",
  748.                 default => ""
  749.             };
  750.             $funcion = match ($equipo->getFuncion()) {
  751.                 "1" => "Escritorio",
  752.                 "2" => "Servidor",
  753.                 default => ""
  754.             };
  755.             $estatus = match ($equipo->getEstatus()) {
  756.                 "1" => "En operación",
  757.                 "2" => "Descompuesto",
  758.                 "3" => "Sin instalar",
  759.                 "4" => "En proceso de baja",
  760.                 "5" => "Baja",
  761.                 default => ""
  762.             };
  763.             $emhv = match ($equipo->isEmhv()) {
  764.                 true => "Si",
  765.                 false => "No",
  766.                 default => ""
  767.             };
  768.             $html .= <<<EOD
  769.             <tr style="font-size: 7px" nobr="true">
  770.                 <td style="width: 2%">{$n}</td>
  771.                 <td>{$estatus}</td>
  772.                 <td>{$equipo->getMarbete()}</td>
  773.                 <td>{$equipo->getMarca()}</td>
  774.                 <td>{$equipo->getModelo()}</td>
  775.                 <td>{$equipo->getSerie()}</td>
  776.                 <td>{$equipo->getProcesador()}</td>
  777.                 <td>{$equipo->getSsd()}</td>
  778.                 <td>{$equipo->getHhd()}</td>
  779.                 <td>{$equipo->getRam()}</td>
  780.                 <td>{$emhv}</td>
  781.                 <td>{$equipo->getMonitorMarbete()}</td>
  782.                 <td>{$equipo->getMonitorMarca()}</td>
  783.                 <td>{$equipo->getMonitorModelo()}</td>
  784.                 <td>{$equipo->getMonitorSerie()}</td>
  785.                 <td>{$equipo->getMonitorTipo()}</td>
  786.                 <td>{$equipo->getMonitorPulgadas()}</td>
  787.                 <td>{$equipo->getTecladoMarca()}</td>
  788.                 <td>{$equipo->getTecladoModelo()}</td>
  789.                 <td>{$equipo->getTecladoSerie()}</td>
  790.                 <td>{$equipo->getMouseMarca()}</td>
  791.                 <td>{$equipo->getMouseModelo()}</td>
  792.                 <td>{$equipo->getMouseSerie()}</td>
  793.                 <td>{$uso}</td>
  794.                 <td style="font-size: 6px">{$funcion}</td>
  795.                 <td style="font-size: 6px">{$ubicacion}</td>
  796.                 <td style="font-size: 6px">{$usuario}</td>
  797.             </tr>
  798.             EOD;
  799.             $n++;
  800.         }
  801.         $html .= <<<EOD
  802.                 </tbody>  
  803.             </table>
  804.         EOD;
  805.         # Declaramos una nueva tipografía para el pie de página del contenido
  806.         $pdf->SetFont('freesans'''10''true);
  807.         # $pdf->write2DBarcode($cadenaOriginal, 'QRCODE,H', false, false, 20, 20, $styleQR, 'N')
  808.         $qr = new \TCPDF2DBarcode($cadenaOriginal'QRCODE,M');
  809.         $imgdata $qr->getBarcodePngData(2.52.5, array(000));
  810.         file_put_contents('img/sistema/qr.png'$imgdata);
  811.         $html .=
  812.             <<<EOD
  813.             <br>
  814.             <br>
  815.             <br>
  816.             <table width="100%" cellpadding="5" border="0">
  817.                 <tbody>
  818.                     <tr>
  819.                         <td style="width: 30%; font-size: 11px"><strong>GENERÓ: </strong></td>
  820.                         <td style="width: 30%"><strong>Usuario: </strong>{$user->getNombre()} {$user->getPapellido()}</td>
  821.                         <td style="width: 30%"><strong>Correo: </strong>{$user->getCorreo()}</td>
  822.                         <td style="width: 9%" rowspan="2"><img src="img/sistema/qr.png" alt="QRCODE" /></td>
  823.                     </tr>
  824.                     <tr>
  825.                         <td colspan="2" style="width: 75%">{$cadena64}</td>
  826.                         <td style="width: 13%"><img src="img/sistema/logo.png" alt="LOGO"></td>
  827.                     </tr>
  828.                 </tbody>
  829.             </table>
  830.             EOD;
  831.         # Imprimimos el contenido como HTML
  832.         $pdf->writeHTMLCell($w 0$h 0$x ''$y ''$html$border 0$ln 1$fill 0$reseth true$align ''$autopadding true);
  833.         ob_end_clean();
  834.         # ---------------------------------------------------------
  835.         # Mostramos el resultado en pantalla
  836.         $pdf->Output($pdf->formato date('Ymd') . '.pdf''D');
  837.     }
  838.     #[Route('/impresora-excel'name'app_reporte_impresora_excel'methods: ['POST'])]
  839.     public function impresoraExcel(ImpresoraRepository $impresoraRepositoryRequest $request): Response
  840.     {
  841.         ini_set('memory_limit''5120M');
  842.         ini_set('max_execution_time'0);
  843.         ini_set('output_buffering'0);
  844.         # Obtenemos los datos de la petición
  845.         /** @var Usuario $user */
  846.         $user $this->getUser();
  847.         $parameters $request->request->get('unidad_filtro');
  848.         $unidad = (array_key_exists('unidad'$request->request->all()['unidad_filtro'])) ? $parameters['unidad'] : $user->getUnidad();
  849.         # Validar si la unidad está vacía
  850.         if ($user->getRol()->getIdRol() >&& empty($unidad)) {
  851.             throw new \InvalidArgumentException('Debe seleccionar una unidad administrativa.');
  852.         }
  853.         $impresoras $impresoraRepository->impresoraUnidad($unidad);
  854.         
  855.         # Definir el nombre temporal del archivo
  856.         $filePath 'impresora.xlsx';
  857.         # Se definen las cabeceras del archivo
  858.         $cabecera WriterEntityFactory::createRowFromArray([
  859.             'No.',
  860.             'Estatus',
  861.             'Marbete',
  862.             'Descripción',
  863.             'Marca',
  864.             'Modelo',
  865.             'Serie',
  866.             'Tipo',
  867.             'Uso',
  868.             'MAC',
  869.             'IP',
  870.             'Unidad',
  871.             'Ubicación',
  872.             'Usuario'
  873.         ]);
  874.         # Se crea el arreglo con los datos del cuerpo del documento
  875.         $data = [];
  876.         $n 1;
  877.         foreach ($impresoras as $impresora) {
  878.             $u = ($impresora->getUsuario()) ? $impresora->getUsuario()->getNombre() . ' ' $impresora->getUsuario()->getPapellido() : 'Sin usuario';
  879.             $usuario $u;
  880.             $ubicacion $impresora->getUbicacion()->getArea();
  881.             $unidad $impresora->getUnidad()->getNombre();
  882.             $tipo = match ($impresora->getTipo()) {
  883.                 "0" => "Laser",
  884.                 "1" => "Matriz",
  885.                 "2" => "Tinta",
  886.                 default => ""
  887.             };
  888.             $uso = match ($impresora->getUso()) {
  889.                 "1" => "Educativo",
  890.                 "2" => "Docente",
  891.                 "3" => "Administrativo",
  892.                 default => ""
  893.             };
  894.             $estatus = match ($impresora->getEstatus()) {
  895.                 "1" => "En operación",
  896.                 "2" => "Descompuesto",
  897.                 "3" => "Sin instalar",
  898.                 "4" => "En proceso de baja",
  899.                 "5" => "Baja",
  900.                 default => ""
  901.             };
  902.             $data[] = WriterEntityFactory::createRowFromArray([
  903.                 $n,
  904.                 $estatus,
  905.                 $impresora->getMarbete(),
  906.                 $impresora->getMarca(),
  907.                 $impresora->getModelo(),
  908.                 $impresora->getSerie(),
  909.                 $tipo,
  910.                 $uso,
  911.                 $impresora->getMac(),
  912.                 $impresora->getIp(),
  913.                 $unidad,
  914.                 $ubicacion,
  915.                 $usuario
  916.             ]);
  917.             $n++;
  918.         }
  919.         # Se crea el documento en formato CSV
  920.         $writer WriterEntityFactory::createXLSXWriter();
  921.         $writer
  922.             ->openToFile($filePath)
  923.             ->addRow($cabecera)
  924.             ->addRows($data)
  925.             ->close();
  926.         $response = new BinaryFileResponse($filePath);
  927.         $response->setContentDisposition(
  928.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  929.             'impresora' '_' date('Y-m-d') . '.xlsx'
  930.         );
  931.         $response->deleteFileAfterSend(true);
  932.         return $response;
  933.     }
  934.     #[Route('/impresora-pdf'name'app_reporte_impresora_pdf'methods: ['POST'])]
  935.     public function impresoraPDF(ImpresoraRepository $impresoraRepositoryRequest $requestSelloDigital $sello)
  936.     {
  937.         ini_set('memory_limit''5120M');
  938.         ini_set('max_execution_time'0);
  939.         ini_set('output_buffering'0);
  940.         date_default_timezone_set('America/Mexico_City');
  941.         setlocale(LC_ALL'es_MX');
  942.         # Obtenemos los datos de la petición
  943.         /** @var Usuario $user */
  944.         $user $this->getUser();
  945.         $parameters $request->request->get('unidad_filtro');
  946.         $unidad = (array_key_exists('unidad'$request->request->all()['unidad_filtro'])) ? $parameters['unidad'] : $user->getUnidad();
  947.         $fecha date('d-m-Y H:i');
  948.         # Declaración de la instancia de TCPDF con el encabezado personalizado
  949.         $pdf = new DocumentoPDF();
  950.         if (empty($unidad)) {
  951.             $pdf->unidad "Todas las Unidades administrativas";
  952.         } else {
  953.             $uni $this->getDoctrine()->getRepository(Unidad::class)->findOneBy(['idUni' => $unidad]);
  954.             $pdf->unidad $uni->getNombre();
  955.         }
  956.         $pdf->codigo '15-528-PO-15-F18';
  957.         $pdf->revision '02';
  958.         $pdf->faprobacion '30/10/2022';
  959.         $pdf->fecha $fecha;
  960.         $pdf->formato 'FORMATO CE-2';
  961.         $pdf->nombre 'CONTROL DE IMPRESORAS';
  962.         $pdf->setPrintFooter(false);
  963.         # Obtenemos los datos del documento
  964.         $impresoras $impresoraRepository->impresoraUnidad($unidad1);
  965.         $cadenaOriginal $pdf->formato '||';
  966.         $cadenaOriginal .= (empty($unidad)) ? "Todas las Unidades administrativas" $pdf->unidad;
  967.         $cadenaOriginal .= '||' $user->getNombre() . ' ' $user->getPapellido() . '||' $user->getCorreo() . '||' $user->getRol()->getNombre();
  968.         $cadenaOriginal .= '||' $fecha;
  969.         $cadena64 $sello->generar($cadenaOriginal);
  970.         # Información del documento
  971.         $pdf->SetCreator('Conalep Estado de México');
  972.         $pdf->SetAuthor('SIGMEC');
  973.         $pdf->SetTitle('Reporte');
  974.         # Definimos los saltos de página como automáticos
  975.         #$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
  976.         #Nueva página con sus respectivas características
  977.         $pdf->AddPage('L''LEGAL');
  978.         $pdf->SetY(50);
  979.         # Definimos la utilización de tipigrafías
  980.         $pdf->setFontSubsetting(true);
  981.         ### Generamos el contenido a mostrar ###
  982.         ob_start();
  983.         $html = <<<EOD
  984.         <table cellpadding="2" border="0.1" width="100%">
  985.         <thead>
  986.             <tr style="text-align: center; background-color: #e4e4e4; font-size: 11px">
  987.                 <td style="width: 5%">No.</td>
  988.                 <td>Estatus</td>
  989.                 <td>Marbete</td>
  990.                 <td>Marca</td>
  991.                 <td>Modelo</td>
  992.                 <td>Serie</td>
  993.                 <td>Tipo</td>
  994.                 <td>Uso</td>
  995.                 <td>Ubicación</td>
  996.                 <td>Usuario</td>
  997.             </tr>
  998.         </thead>
  999.         <tbody>
  1000.         EOD;
  1001.         $pdf->setMargins(1050);
  1002.         $n 1;
  1003.         foreach ($impresoras as $impresora) {
  1004.             $u = ($impresora->getUsuario()) ? $impresora->getUsuario()->getNombre() . ' ' $impresora->getUsuario()->getPapellido() : 'Sin usuario';
  1005.             $usuario $u;
  1006.             $ubicacion $impresora->getUbicacion()->getArea();
  1007.             $tipo = match ($impresora->getTipo()) {
  1008.                 '0' => '<span>Laser</span>',
  1009.                 '1' => '<span>Matriz</span>',
  1010.                 '2' => '<span>Tinta</span>',
  1011.                 default => ""
  1012.             };
  1013.             $uso = match ($impresora->getUso()) {
  1014.                 "1" => "Educativo",
  1015.                 "2" => "Docente",
  1016.                 "3" => "Administrativo",
  1017.                 default => ""
  1018.             };
  1019.             $estatus = match ($impresora->getEstatus()) {
  1020.                 "1" => "En operación",
  1021.                 "2" => "Descompuesto",
  1022.                 "3" => "Sin instalar",
  1023.                 "4" => "En proceso de baja",
  1024.                 "5" => "Baja",
  1025.                 default => ""
  1026.             };
  1027.             $html .= <<<EOD
  1028.             <tr style="font-size: 10px" nobr="true">
  1029.                 <td style="width: 5%">{$n}</td>
  1030.                 <td>{$estatus}</td>
  1031.                 <td>{$impresora->getMarbete()}</td>
  1032.                 <td>{$impresora->getMarca()}</td>
  1033.                 <td>{$impresora->getModelo()}</td>
  1034.                 <td>{$impresora->getSerie()}</td>
  1035.                 <td>{$tipo}</td>
  1036.                 <td>{$uso}</td>
  1037.                 <td>{$ubicacion}</td>
  1038.                 <td>{$usuario}</td>
  1039.             </tr>
  1040.             EOD;
  1041.             $n++;
  1042.         }
  1043.         $html .= <<<EOD
  1044.                 </tbody>  
  1045.             </table>
  1046.         EOD;
  1047.         # Declaramos una nueva tipografía para el pie de página del contenido
  1048.         $pdf->SetFont('freesans'''10''true);
  1049.         # $pdf->write2DBarcode($cadenaOriginal, 'QRCODE,H', false, false, 20, 20, $styleQR, 'N')
  1050.         $qr = new \TCPDF2DBarcode($cadenaOriginal'QRCODE,M');
  1051.         $imgdata $qr->getBarcodePngData(2.52.5, array(000));
  1052.         file_put_contents('img/sistema/qr.png'$imgdata);
  1053.         $html .= <<<EOD
  1054.             <br>
  1055.             <br>
  1056.             <br>
  1057.             <table width="100%" cellpadding="5" border="0">
  1058.                 <tbody>
  1059.                     <tr>
  1060.                         <td style="width: 30%; font-size: 11px"><strong>GENERÓ: </strong></td>
  1061.                         <td style="width: 30%"><strong>Usuario: </strong>{$user->getNombre()} {$user->getPapellido()}</td>
  1062.                         <td style="width: 30%"><strong>Correo: </strong>{$user->getCorreo()}</td>
  1063.                         <td style="width: 9%" rowspan="2"><img src="img/sistema/qr.png" alt="QRCODE" /></td>
  1064.                     </tr>
  1065.                     <tr>
  1066.                         <td colspan="2" style="width: 75%">{$cadena64}</td>
  1067.                         <td style="width: 13%"><img src="img/sistema/logo.png" alt="LOGO"></td>
  1068.                     </tr>
  1069.                 </tbody>
  1070.             </table>
  1071.         EOD;
  1072.         # Imprimimos el contenido como HTML
  1073.         $pdf->writeHTMLCell($w 0$h 0$x ''$y ''$html$border 0$ln 1$fill 0$reseth true$align ''$autopadding true);
  1074.         ob_end_clean();
  1075.         # ---------------------------------------------------------
  1076.         # Mostramos el resultado en pantalla
  1077.         $pdf->Output($pdf->formato date('Ymd') . '.pdf''D');
  1078.     }
  1079.     #[Route('/otro-excel'name'app_reporte_otro_excel'methods: ['POST'])]
  1080.     public function otroExcel(OtroRepository $otroRepositoryRequest $request): Response
  1081.     {
  1082.         ini_set('memory_limit''5120M');
  1083.         ini_set('max_execution_time'0);
  1084.         ini_set('output_buffering'0);
  1085.         # Obtenemos los datos de la petición
  1086.         /** @var Usuario $user */
  1087.         $user $this->getUser();
  1088.         $parameters $request->request->get('unidad_filtro');
  1089.         $unidad = (array_key_exists('unidad'$request->request->all()['unidad_filtro'])) ? $parameters['unidad'] : $user->getUnidad();
  1090.         # Validar si la unidad está vacía 
  1091.         if ($user->getRol()->getIdRol() >&& empty($unidad)) {
  1092.             throw new \InvalidArgumentException('Debe seleccionar una unidad administrativa.');
  1093.         }
  1094.         
  1095.         # Obtenemos los datos del documento
  1096.         $otros $otroRepository->otroUnidad($unidad);
  1097.         # Definir el nombre temporal del archivo
  1098.         $filePath 'otro.xlsx';
  1099.         # Se definen las cabeceras del archivo
  1100.         $cabecera WriterEntityFactory::createRowFromArray([
  1101.             'No.',
  1102.             'Estatus',
  1103.             'Marbete',
  1104.             'Descripción',
  1105.             'Marca',
  1106.             'Modelo',
  1107.             'Serie',
  1108.             'Uso',
  1109.             'MAC',
  1110.             'IP',
  1111.             'Unidad',
  1112.             'Ubicación',
  1113.             'Usuario'
  1114.         ]);
  1115.         # Se crea el arreglo con los datos del cuerpo del documento
  1116.         $data = [];
  1117.         $n 1;
  1118.         foreach ($otros as $otro) {
  1119.             $u = ($otro->getUsuario()) ? $otro->getUsuario()->getNombre() . ' ' $otro->getUsuario()->getPapellido() : 'Sin usuario';
  1120.             $usuario $u;
  1121.             $ubicacion $otro->getUbicacion()->getArea();
  1122.             $unidad $otro->getUnidad()->getNombre();
  1123.             $uso = match ($otro->getUso()) {
  1124.                 "1" => "Educativo",
  1125.                 "2" => "Docente",
  1126.                 "3" => "Administrativo",
  1127.                 default => ""
  1128.             };
  1129.             $estatus = match ($otro->getEstatus()) {
  1130.                 "1" => "En operación",
  1131.                 "2" => "Descompuesto",
  1132.                 "3" => "Sin instalar",
  1133.                 "4" => "En proceso de baja",
  1134.                 "5" => "Baja",
  1135.                 default => ""
  1136.             };
  1137.             $data[] = WriterEntityFactory::createRowFromArray([
  1138.                 $n,
  1139.                 $estatus,
  1140.                 $otro->getMarbete(),
  1141.                 $otro->getDescripcion(),
  1142.                 $otro->getMarca(),
  1143.                 $otro->getModelo(),
  1144.                 $otro->getSerie(),
  1145.                 $uso,
  1146.                 $otro->getMac(),
  1147.                 $otro->getIp(),
  1148.                 $unidad,
  1149.                 $ubicacion,
  1150.                 $usuario
  1151.             ]);
  1152.             $n++;
  1153.         }
  1154.         # Se crea el documento en formato CSV
  1155.         $writer WriterEntityFactory::createXLSXWriter();
  1156.         $writer
  1157.             ->openToFile($filePath)
  1158.             ->addRow($cabecera)
  1159.             ->addRows($data)
  1160.             ->close();
  1161.         $response = new BinaryFileResponse($filePath);
  1162.         $response->setContentDisposition(
  1163.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  1164.             'otro' '_' date('Y-m-d') . '.xlsx'
  1165.         );
  1166.         $response->deleteFileAfterSend(true);
  1167.         return $response;
  1168.     }
  1169.     #[Route('/otro-pdf'name'app_reporte_otro_pdf'methods: ['POST'])]
  1170.     public function otroPDF(OtroRepository $otroRepositoryRequest $requestSelloDigital $sello)
  1171.     {
  1172.         ini_set('memory_limit''5120M');
  1173.         ini_set('max_execution_time'0);
  1174.         ini_set('output_buffering'0);
  1175.         date_default_timezone_set('America/Mexico_City');
  1176.         setlocale(LC_ALL'es_MX');
  1177.         # Obtenemos los datos de la petición
  1178.         /** @var Usuario $user */
  1179.         $user $this->getUser();
  1180.         $parameters $request->request->get('unidad_filtro');
  1181.         $unidad = (array_key_exists('unidad'$request->request->all()['unidad_filtro'])) ? $parameters['unidad'] : $user->getUnidad();
  1182.         $fecha date('d-m-Y H:i');
  1183.         # Declaración de la instancia de TCPDF con el encabezado personalizado
  1184.         $pdf = new DocumentoPDF();
  1185.         if (empty($unidad)) {
  1186.             $pdf->unidad "Todas las Unidades administrativas";
  1187.         } else {
  1188.             $uni $this->getDoctrine()->getRepository(Unidad::class)->findOneBy(['idUni' => $unidad]);
  1189.             $pdf->unidad $uni->getNombre();
  1190.         }
  1191.         $pdf->codigo '15-528-PO-15-F18';
  1192.         $pdf->revision '02';
  1193.         $pdf->faprobacion '30/10/2022';
  1194.         $pdf->fecha $fecha;
  1195.         $pdf->formato 'FORMATO CE-3';
  1196.         $pdf->nombre 'CONTROL DE OTROS BIENES INFORMÁTICOS';
  1197.         $pdf->setPrintFooter(false);
  1198.         # Obtenemos los datos del documento
  1199.         $otros $otroRepository->otroUnidad($unidad1);
  1200.         $cadenaOriginal $pdf->formato '||';
  1201.         $cadenaOriginal .= (empty($unidad)) ? "Todas las Unidades administrativas" $pdf->unidad;
  1202.         $cadenaOriginal .= '||' $user->getNombre() . ' ' $user->getPapellido() . '||' $user->getCorreo() . '||' $user->getRol()->getNombre();
  1203.         $cadenaOriginal .= '||' $fecha;
  1204.         $cadena64 $sello->generar($cadenaOriginal);
  1205.         # Información del documento
  1206.         $pdf->SetCreator('Conalep Estado de México');
  1207.         $pdf->SetAuthor('SIGMEC');
  1208.         $pdf->SetTitle('Reporte');
  1209.         # Definimos los saltos de página como automáticos
  1210.         #$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
  1211.         #Nueva página con sus respectivas características
  1212.         $pdf->AddPage('L''LEGAL');
  1213.         $pdf->SetY(50);
  1214.         # Definimos la utilización de tipigrafías
  1215.         $pdf->setFontSubsetting(true);
  1216.         ### Generamos el contenido a mostrar ###
  1217.         ob_start();
  1218.         $html = <<<EOD
  1219.         <table cellpadding="2" border="0.1">
  1220.         <thead>
  1221.             <tr style="text-align: center; background-color: #e4e4e4; font-size: 11px">
  1222.                 <td style="width: 5%">No.</td>
  1223.                 <td>Estatus</td>
  1224.                 <td>Marbete</td>
  1225.                 <td>Descripción</td>
  1226.                 <td>Marca</td>
  1227.                 <td>Modelo</td>
  1228.                 <td>Serie</td>
  1229.                 <td>Uso</td>
  1230.                 <td>Ubicación</td>
  1231.                 <td>Usuario</td>
  1232.             </tr>
  1233.         </thead>
  1234.         <tbody>
  1235.         EOD;
  1236.         $pdf->setMargins(1050);
  1237.         $n 1;
  1238.         foreach ($otros as $otro) {
  1239.             $u = ($otro->getUsuario()) ? $otro->getUsuario()->getNombre() . ' ' $otro->getUsuario()->getPapellido() : 'Sin usuario';
  1240.             $usuario $u;
  1241.             $ubicacion $otro->getUbicacion()->getArea();
  1242.             $uso = match ($otro->getUso()) {
  1243.                 "1" => "Educativo",
  1244.                 "2" => "Docente",
  1245.                 "3" => "Administrativo",
  1246.                 default => ""
  1247.             };
  1248.             $estatus = match ($otro->getEstatus()) {
  1249.                 "1" => "En operación",
  1250.                 "2" => "Descompuesto",
  1251.                 "3" => "Sin instalar",
  1252.                 "4" => "En proceso de baja",
  1253.                 "5" => "Baja",
  1254.                 default => ""
  1255.             };
  1256.             $html .= <<<EOD
  1257.             <tr style="font-size: 10px" nobr="true">
  1258.                 <td style="width: 5%">{$n}</td>
  1259.                 <td>{$estatus}</td>
  1260.                 <td>{$otro->getMarbete()}</td>
  1261.                 <td>{$otro->getDescripcion()}</td>
  1262.                 <td>{$otro->getMarca()}</td>
  1263.                 <td>{$otro->getModelo()}</td>
  1264.                 <td>{$otro->getSerie()}</td>
  1265.                 <td>{$uso}</td>
  1266.                 <td>{$ubicacion}</td>
  1267.                 <td>{$usuario}</td>
  1268.             </tr>
  1269.             EOD;
  1270.             $n++;
  1271.         }
  1272.         $html .= <<<EOD
  1273.                 </tbody>  
  1274.             </table>
  1275.         EOD;
  1276.         # Declaramos una nueva tipografía para el pie de página del contenido
  1277.         $pdf->SetFont('freesans'''10''true);
  1278.         # $pdf->write2DBarcode($cadenaOriginal, 'QRCODE,H', false, false, 20, 20, $styleQR, 'N')
  1279.         $qr = new \TCPDF2DBarcode($cadenaOriginal'QRCODE,M');
  1280.         $imgdata $qr->getBarcodePngData(2.52.5, array(000));
  1281.         file_put_contents('img/sistema/qr.png'$imgdata);
  1282.         $html .= <<<EOD
  1283.             <br>
  1284.             <br>
  1285.             <br>
  1286.             <table width="100%" cellpadding="5" border="0">
  1287.                 <tbody>
  1288.                     <tr>
  1289.                         <td style="width: 30%; font-size: 11px"><strong>GENERÓ: </strong></td>
  1290.                         <td style="width: 30%"><strong>Usuario: </strong>{$user->getNombre()} {$user->getPapellido()}</td>
  1291.                         <td style="width: 30%"><strong>Correo: </strong>{$user->getCorreo()}</td>
  1292.                         <td style="width: 9%" rowspan="2"><img src="img/sistema/qr.png" alt="QRCODE" /></td>
  1293.                     </tr>
  1294.                     <tr>
  1295.                         <td colspan="2" style="width: 75%">{$cadena64}</td>
  1296.                         <td style="width: 13%"><img src="img/sistema/logo.png" alt="LOGO"></td>
  1297.                     </tr>
  1298.                 </tbody>
  1299.             </table>
  1300.         EOD;
  1301.         # Imprimimos el contenido como HTML
  1302.         $pdf->writeHTMLCell($w 0$h 0$x ''$y ''$html$border 0$ln 1$fill 0$reseth true$align ''$autopadding true);
  1303.         ob_end_clean();
  1304.         # ---------------------------------------------------------
  1305.         # Mostramos el resultado en pantalla
  1306.         $pdf->Output($pdf->formato date('Ymd') . '.pdf''D');
  1307.     }
  1308.     #[Route('/red-excel'name'app_reporte_red_excel'methods: ['POST'])]
  1309.     public function redExcel(RedRepository $redRepositoryRequest $request): Response
  1310.     {
  1311.         ini_set('memory_limit''5120M');
  1312.         ini_set('max_execution_time'0);
  1313.         ini_set('output_buffering'0);
  1314.         # Obtenemos los datos de la petición
  1315.         /** @var Usuario $user */
  1316.         $user $this->getUser();
  1317.         $parameters $request->request->get('unidad_filtro');
  1318.         $unidad = (array_key_exists('unidad'$request->request->all()['unidad_filtro'])) ? $parameters['unidad'] : $user->getUnidad();
  1319.         
  1320.         if ($user->getRol()->getIdRol() >&& empty($unidad)) {
  1321.             throw new \InvalidArgumentException('Debe seleccionar una unidad administrativa.');
  1322.         }
  1323.         # Obtenemos los datos del documento
  1324.         $redes $redRepository->redUnidad($unidad);
  1325.         # Definir el nombre temporal del archivo
  1326.         $filePath 'red.xlsx';
  1327.         # Se definen las cabeceras del archivo
  1328.         $cabecera WriterEntityFactory::createRowFromArray([
  1329.             'No.',
  1330.             'Estatus',
  1331.             'Marbete (opcional)',
  1332.             'Descripción',
  1333.             'Marca',
  1334.             'Modelo',
  1335.             'Serie',
  1336.             'Velocidad',
  1337.             'Puertos',
  1338.             'Uso',
  1339.             'MAC',
  1340.             'IP',
  1341.             'Unidad',
  1342.             'Ubicación',
  1343.             'Usuario'
  1344.         ]);
  1345.         # Se crea el arreglo con los datos del cuerpo del documento
  1346.         $data = [];
  1347.         $n 1;
  1348.         foreach ($redes as $red) {
  1349.             $u = ($red->getUsuario()) ? $red->getUsuario()->getNombre() . ' ' $red->getUsuario()->getPapellido() : 'Sin usuario';
  1350.             $usuario $u;
  1351.             $ubicacion $red->getUbicacion()->getArea();
  1352.             $unidad $red->getUnidad()->getNombre();
  1353.             $uso = match ($red->getUso()) {
  1354.                 "1" => "Educativo",
  1355.                 "2" => "Docente",
  1356.                 "3" => "Administrativo",
  1357.                 default => ""
  1358.             };
  1359.             $estatus = match ($red->getEstatus()) {
  1360.                 "1" => "En operación",
  1361.                 "2" => "Descompuesto",
  1362.                 "3" => "Sin instalar",
  1363.                 "4" => "En proceso de baja",
  1364.                 "5" => "Baja",
  1365.                 default => ""
  1366.             };
  1367.             $data[] = WriterEntityFactory::createRowFromArray([
  1368.                 $n,
  1369.                 $estatus,
  1370.                 $red->getMarbete(),
  1371.                 $red->getDescripcion(),
  1372.                 $red->getMarca(),
  1373.                 $red->getModelo(),
  1374.                 $red->getSerie(),
  1375.                 $red->getVelocidad(),
  1376.                 $red->getPuertos(),
  1377.                 $uso,
  1378.                 $red->getMac(),
  1379.                 $red->getIp(),
  1380.                 $unidad,
  1381.                 $ubicacion,
  1382.                 $usuario
  1383.             ]);
  1384.             $n++;
  1385.         }
  1386.         # Se crea el documento en formato CSV
  1387.         $writer WriterEntityFactory::createXLSXWriter();
  1388.         $writer
  1389.             ->openToFile($filePath)
  1390.             ->addRow($cabecera)
  1391.             ->addRows($data)
  1392.             ->close();
  1393.         $response = new BinaryFileResponse($filePath);
  1394.         $response->setContentDisposition(
  1395.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  1396.             'red' '_' date('Y-m-d') . '.xlsx'
  1397.         );
  1398.         $response->deleteFileAfterSend(true);
  1399.         return $response;
  1400.     }
  1401.     #[Route('/red-pdf'name'app_reporte_red_pdf'methods: ['POST'])]
  1402.     public function redPDF(RedRepository $redRepositoryRequest $requestSelloDigital $sello)
  1403.     {
  1404.         ini_set('memory_limit''5120M');
  1405.         ini_set('max_execution_time'0);
  1406.         ini_set('output_buffering'0);
  1407.         date_default_timezone_set('America/Mexico_City');
  1408.         setlocale(LC_ALL'es_MX');
  1409.         # Obtenemos los datos de la petición
  1410.         /** @var Usuario $user */
  1411.         $user $this->getUser();
  1412.         $parameters $request->request->get('unidad_filtro');
  1413.         $unidad = (array_key_exists('unidad'$request->request->all()['unidad_filtro'])) ? $parameters['unidad'] : $user->getUnidad();
  1414.         $fecha date('d-m-Y H:i');
  1415.         # Declaración de la instancia de TCPDF con el encabezado personalizado
  1416.         $pdf = new DocumentoPDF();
  1417.         if (empty($unidad)) {
  1418.             $pdf->unidad "Todas las Unidades administrativas";
  1419.         } else {
  1420.             $uni $this->getDoctrine()->getRepository(Unidad::class)->findOneBy(['idUni' => $unidad]);
  1421.             $pdf->unidad $uni->getNombre();
  1422.         }
  1423.         $pdf->codigo '15-528-PO-15-F18';
  1424.         $pdf->revision '02';
  1425.         $pdf->faprobacion '30/10/2022';
  1426.         $pdf->fecha $fecha;
  1427.         $pdf->formato 'FORMATO CE-4';
  1428.         $pdf->nombre 'CONTROL DE ACTIVOS DE COMUNICACIÓN';
  1429.         $pdf->setPrintFooter(false);
  1430.         # Obtenemos los datos del documento
  1431.         $redes $redRepository->redUnidad($unidad1);
  1432.         $cadenaOriginal $pdf->formato '||';
  1433.         $cadenaOriginal .= (empty($unidad)) ? "Todas las Unidades administrativas" $pdf->unidad;
  1434.         $cadenaOriginal .= '||' $user->getNombre() . ' ' $user->getPapellido() . '||' $user->getCorreo() . '||' $user->getRol()->getNombre();
  1435.         $cadenaOriginal .= '||' $fecha;
  1436.         $cadena64 $sello->generar($cadenaOriginal);
  1437.         # Información del documento
  1438.         $pdf->SetCreator('Conalep Estado de México');
  1439.         $pdf->SetAuthor('SIGMEC');
  1440.         $pdf->SetTitle('Reporte');
  1441.         # Definimos los saltos de página como automáticos
  1442.         #$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
  1443.         #Nueva página con sus respectivas características
  1444.         $pdf->AddPage('L''LEGAL');
  1445.         $pdf->SetY(50);
  1446.         # Definimos la utilización de tipigrafías
  1447.         $pdf->setFontSubsetting(true);
  1448.         ### Generamos el contenido a mostrar ###
  1449.         ob_start();
  1450.         $html = <<<EOD
  1451.         <table cellpadding="2" border="0.1">
  1452.         <thead>
  1453.             <tr style="text-align: center; background-color: #e4e4e4; font-size: 11px">
  1454.                 <td style="width: 5%">No.</td>
  1455.                 <td>Estatus</td>
  1456.                 <td>Marbete (opcional)</td>
  1457.                 <td>Descripción</td>
  1458.                 <td>Marca</td>
  1459.                 <td>Modelo</td>
  1460.                 <td>Serie</td>
  1461.                 <td>Velocidad</td>
  1462.                 <td>Puertos</td>
  1463.                 <td>Uso</td>
  1464.                 <td>Ubicación</td>
  1465.                 <td>Usuario</td>
  1466.             </tr>
  1467.         </thead>
  1468.         <tbody>
  1469.         EOD;
  1470.         $pdf->setMargins(10,50);
  1471.         $n 1;
  1472.         foreach ($redes as $red) {
  1473.             $u = ($red->getUsuario()) ? $red->getUsuario()->getNombre() . ' ' $red->getUsuario()->getPapellido() : 'Sin usuario';
  1474.             $usuario $u;
  1475.             $ubicacion $red->getUbicacion()->getArea();
  1476.             $uso = match ($red->getUso()) {
  1477.                 "1" => "Educativo",
  1478.                 "2" => "Docente",
  1479.                 "3" => "Administrativo",
  1480.                 default => ""
  1481.             };
  1482.             $estatus = match ($red->getEstatus()) {
  1483.                 "1" => "En operación",
  1484.                 "2" => "Descompuesto",
  1485.                 "3" => "Sin instalar",
  1486.                 "4" => "En proceso de baja",
  1487.                 "5" => "Baja",
  1488.                 default => ""
  1489.             };
  1490.             $html .= <<<EOD
  1491.             <tr style="font-size: 10px" nobr="true">
  1492.                 <td style="width: 5%">{$n}</td>
  1493.                 <td>{$estatus}</td>
  1494.                 <td>{$red->getMarbete()}</td>
  1495.                 <td>{$red->getDescripcion()}</td>
  1496.                 <td>{$red->getMarca()}</td>
  1497.                 <td>{$red->getModelo()}</td>
  1498.                 <td>{$red->getSerie()}</td>
  1499.                 <td>{$red->getVelocidad()}</td>
  1500.                 <td>{$red->getPuertos()}</td>
  1501.                 <td>{$uso}</td>
  1502.                 <td>{$ubicacion}</td>
  1503.                 <td>{$usuario}</td>
  1504.             </tr>
  1505.             EOD;
  1506.             $n++;
  1507.         }
  1508.         $html .= <<<EOD
  1509.                 </tbody>  
  1510.             </table>
  1511.         EOD;
  1512.         # Declaramos una nueva tipografía para el pie de página del contenido
  1513.         $pdf->SetFont('freesans'''10''true);
  1514.         # $pdf->write2DBarcode($cadenaOriginal, 'QRCODE,H', false, false, 20, 20, $styleQR, 'N')
  1515.         $qr = new \TCPDF2DBarcode($cadenaOriginal'QRCODE,M');
  1516.         $imgdata $qr->getBarcodePngData(2.52.5, array(000));
  1517.         file_put_contents('img/sistema/qr.png'$imgdata);
  1518.         $html .= <<<EOD
  1519.             <br>
  1520.             <br>
  1521.             <br>
  1522.             <table width="100%" cellpadding="5" border="0">
  1523.                 <tbody>
  1524.                     <tr>
  1525.                         <td style="width: 30%; font-size: 11px"><strong>GENERÓ: </strong></td>
  1526.                         <td style="width: 30%"><strong>Usuario: </strong>{$user->getNombre()} {$user->getPapellido()}</td>
  1527.                         <td style="width: 30%"><strong>Correo: </strong>{$user->getCorreo()}</td>
  1528.                         <td style="width: 9%" rowspan="2"><img src="img/sistema/qr.png" alt="QRCODE" /></td>
  1529.                     </tr>
  1530.                     <tr>
  1531.                         <td colspan="2" style="width: 75%">{$cadena64}</td>
  1532.                         <td style="width: 13%"><img src="img/sistema/logo.png" alt="LOGO"></td>
  1533.                     </tr>
  1534.                 </tbody>
  1535.             </table>
  1536.         EOD;
  1537.         # Imprimimos el contenido como HTML
  1538.         $pdf->writeHTMLCell($w 0$h 0$x ''$y ''$html$border 0$ln 1$fill 0$reseth true$align ''$autopadding true);
  1539.         ob_end_clean();
  1540.         # ---------------------------------------------------------
  1541.         # Mostramos el resultado en pantalla
  1542.         $pdf->Output($pdf->formato date('Ymd') . '.pdf''I');
  1543.     }
  1544.     #[Route('/pamp-excel'name'app_reporte_pamp_excel'methods: ['POST'])]
  1545.     public function pampExcel(SolicitudRepository $solRepRequest $request): Response
  1546.     {
  1547.         ini_set('memory_limit''5120M');
  1548.         ini_set('max_execution_time'0);
  1549.         ini_set('output_buffering'0);
  1550.         # Obtenemos los datos de la petición
  1551.         /** @var Usuario $user */
  1552.         $user $this->getUser();
  1553.         $parameters $request->request->get('pamp_filtro');
  1554.         $unidad = (array_key_exists('unidad'$request->request->all()['pamp_filtro'])) ? $parameters['unidad'] : $user->getUnidad()->getIdUni();
  1555.         $finicio $parameters['anio'] . '-01-01';
  1556.         $ffin $parameters['anio'] . '-12-31';
  1557.         # Obtenemos los datos del documento
  1558.         $solicitudes $solRep->registroTipoEquipoUsuario(null4$unidad$finicio$ffin);
  1559.         # Definir el nombre temporal del archivo
  1560.         $filePath 'pamp.xlsx';
  1561.         # Se definen las cabeceras del archivo
  1562.         $cabecera WriterEntityFactory::createRowFromArray([
  1563.             'No.',
  1564.             'Solicitud',
  1565.             'Periodo',
  1566.             'Tipo equipo',
  1567.             'Marbete',
  1568.             'Marca',
  1569.             'Modelo',
  1570.             'Serie',
  1571.             'Descripción',
  1572.             'Unidad adminstrativa',
  1573.             'Ubicación',
  1574.             'Trabajo a realizar',
  1575.             'Fecha registro',
  1576.             'Fecha atención',
  1577.             'Fecha de finalización',
  1578.             'Servicio realizado',
  1579.             'Refacciones',
  1580.             'Resguardatario',
  1581.             'Correo resguardatario',
  1582.             'Gestor',
  1583.             'Correo gestor',
  1584.             'Estatus'
  1585.         ]);
  1586.         # Se crea el arreglo con los datos del cuerpo del documento
  1587.         $data = [];
  1588.         $n 1;
  1589.         foreach ($solicitudes as $solicitud) {
  1590.             if ($solicitud['tipo_mantenimiento'] == 'MP') {
  1591.                 $estatus = match ($solicitud['estatus']) {
  1592.                     "1" => "Pendiente",
  1593.                     "2" => "En Proceso",
  1594.                     "3" => "Atendido",
  1595.                     "4" => "Evaluado",
  1596.                     default => ""
  1597.                 };
  1598.                 $data[] = WriterEntityFactory::createRowFromArray([
  1599.                     $n,
  1600.                     $solicitud['id_sol'],
  1601.                     $solicitud['periodo'],
  1602.                     $solicitud['tipo_equipo'],
  1603.                     $solicitud['marbete'],
  1604.                     $solicitud['marca'],
  1605.                     $solicitud['modelo'],
  1606.                     $solicitud['serie'],
  1607.                     $solicitud['descripcion'],
  1608.                     $solicitud['nunidad'],
  1609.                     $solicitud['nubicacion'],
  1610.                     $solicitud['falla'],
  1611.                     $solicitud['fregistro'],
  1612.                     $solicitud['fatencion'],
  1613.                     $solicitud['ffin'],
  1614.                     $solicitud['srealizado'],
  1615.                     $solicitud['refacciones'],
  1616.                     $solicitud['unombre'] . ' ' $solicitud['uapellido'],
  1617.                     $solicitud['ucorreo'],
  1618.                     $solicitud['gnombre'] . ' ' $solicitud['gapellido'],
  1619.                     $solicitud['gcorreo'],
  1620.                     $estatus,
  1621.                 ]);
  1622.                 $n++;
  1623.             }
  1624.         }
  1625.         # Se crea el documento en formato CSV
  1626.         $writer WriterEntityFactory::createXLSXWriter();
  1627.         $writer
  1628.             ->openToFile($filePath)
  1629.             ->addRow($cabecera)
  1630.             ->addRows($data)
  1631.             ->close();
  1632.         $response = new BinaryFileResponse($filePath);
  1633.         $response->setContentDisposition(
  1634.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  1635.             'pamp' '_' date('Y-m-d') . '.xlsx'
  1636.         );
  1637.         $response->deleteFileAfterSend(true);
  1638.         return $response;
  1639.     }
  1640.     #[Route('/pamp-pdf'name'app_reporte_pamp_pdf'methods: ['POST'])]
  1641.     public function pampPDF(SolicitudRepository $solRepRequest $requestSelloDigital $sello)
  1642.     {
  1643.         ini_set('memory_limit''5120M');
  1644.         ini_set('max_execution_time'0);
  1645.         ini_set('output_buffering'0);
  1646.         date_default_timezone_set('America/Mexico_City');
  1647.         setlocale(LC_ALL'es_MX');
  1648.         # Se obtiene el nivel de acceso
  1649.         $perfil $request->getSession()->get('perfil');
  1650.         $nivel $perfil[9]["nivel"];
  1651.         # Obtenemos los datos de la petición
  1652.         /** @var Usuario $user */
  1653.         $user $this->getUser();
  1654.         $parameters $request->request->get('pamp_filtro');
  1655.         if (empty($parameters)) {
  1656.             $uni "";
  1657.             $year date('Y');
  1658.         } else {
  1659.             $uni = (array_key_exists('unidad'$request->request->all()['pamp_filtro'])) ? $parameters['unidad'] : $user->getUnidad()->getIdUni();
  1660.             $year $parameters['anio'];
  1661.         }
  1662.         $periodo date('d-m-Y H:i');
  1663.         # Declaración de la instancia de TCPDF con el encabezado personalizado
  1664.         $pdf = new DocumentoPDF();
  1665.         if (empty($uni)) {
  1666.             $pdf->unidad "Todas las Unidades administrativas";
  1667.         } else {
  1668.             $unidad $this->getDoctrine()->getRepository(Unidad::class)->findOneBy(['idUni' => $uni]);
  1669.             $pdf->unidad $unidad->getNombre();
  1670.         }
  1671.         $pdf->codigo '15-528-PO-15-F18';
  1672.         $pdf->revision '02';
  1673.         $pdf->faprobacion '30/10/2022';
  1674.         $pdf->fecha $year#$periodo
  1675.         $pdf->formato 'Diagrama de Gantt';
  1676.         $pdf->nombre 'Programa Anual de Mantenimiento Preventivo';
  1677.         $pdf->setPrintFooter(false);
  1678.         # Obtenemos los datos del documento
  1679.         if ($nivel == 2) {
  1680.             $solicitud $solRep->findByAnioUnidad($year$uni);
  1681.             $conteo $solRep->countByUnidad($uni);
  1682.         } else {
  1683.             $solicitud $solRep->findByAnioUnidad($year$user->getUnidad()->getIdUni());
  1684.             $conteo $solRep->countByUnidad($user->getUnidad()->getIdUni());
  1685.         }
  1686.         $cadenaOriginal $pdf->formato '||';
  1687.         $cadenaOriginal .= (empty($unidad)) ? "Todas las Unidades administrativas" $pdf->unidad;
  1688.         $cadenaOriginal .= '||' $user->getNombre() . ' ' $user->getPapellido() . '||' $user->getCorreo() . '||' $user->getRol()->getNombre();
  1689.         $cadenaOriginal .= '||' $pdf->fecha;
  1690.         $cadena64 $sello->generar($cadenaOriginal);
  1691.         # Información del documento
  1692.         $pdf->SetCreator('Conalep Estado de México');
  1693.         $pdf->SetAuthor('SIGMEC');
  1694.         $pdf->SetTitle('Programa Anual de Mantenimiento Preventivo');
  1695.         # Definimos los saltos de página como automáticos
  1696.         #$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
  1697.         #Nueva página con sus respectivas características
  1698.         $pdf->AddPage('L''LEGAL');
  1699.         $pdf->SetY(50);
  1700.         # Definimos la utilización de tipigrafías
  1701.         $pdf->setFontSubsetting(true);
  1702.         # Obtiene datos de avance y equipos con mp
  1703.         $n 0;
  1704.         $atendido 0;
  1705.         $avance 0;
  1706.         $marbetes = [];
  1707.         foreach ($solicitud as $s) {
  1708.             if ($s["estatus"] == "4") {
  1709.                 $atendido $atendido 1;
  1710.             }
  1711.             if ($s["tipo_equipo"] == "Cómputo") {
  1712.                 if (!in_array($s["marbete"], $marbetes)) {
  1713.                     $marbetes[] = $s["marbete"];
  1714.                 }
  1715.             }
  1716.             $n++;
  1717.         }
  1718.         if ($atendido and $n 0) {
  1719.             $avance floor(($atendido $n) * 100);
  1720.         }
  1721.         $ecmp count($marbetes);
  1722.         ### Generamos el contenido a mostrar ###
  1723.         ob_start();
  1724.         $html = <<<EOD
  1725. <table cellpadding="2" border="0">
  1726.    <tbody>
  1727.    <tr>
  1728.        <td colspan="8"><strong>Unidad administrativa</strong>: {$pdf->unidad}</td>
  1729.    </tr>
  1730.    <tr>
  1731.        <td style="text-align: center">{$conteo["impresora"]}</td>
  1732.        <td style="text-align: center">{$conteo["red"]}</td>
  1733.        <td style="text-align: center">{$conteo["otro"]}</td>
  1734.        <td style="text-align: center">{$conteo["equipo"]}</td>
  1735.        <td style="text-align: center">{$conteo["emhv"]}</td>
  1736.        <td style="text-align: center">{$ecmp}</td>
  1737.        <td style="text-align: center">{$conteo["indice"]}%</td>
  1738.        <td style="text-align: center">{$avance}%</td>
  1739.    </tr>
  1740.    <tr>
  1741.        <td style="text-align: center"><strong>IMPRESORAS</strong></td>
  1742.        <td style="text-align: center"><strong>RED</strong></td>
  1743.        <td style="text-align: center"><strong>OTRO</strong></td>
  1744.        <td style="text-align: center"><strong>CÓMPUTO</strong></td>
  1745.        <td style="text-align: center"><strong>EMHV</strong></td>
  1746.        <td style="text-align: center"><strong>EQ. COMPUTO/MP</strong></td>
  1747.        <td style="text-align: center"><strong>ÍNDICE DE EMHV</strong></td>
  1748.        <td style="text-align: center"><strong>AVANCE ATENCIÓN</strong></td>
  1749.    </tr>
  1750.    </tbody>
  1751. </table>
  1752. <br><br>
  1753. EOD;
  1754.         $html .= <<<EOD
  1755.         <table cellpadding="2" border="0.1">
  1756.         <thead>
  1757.         <tr style="text-align: center; background-color: #e4e4e4; font-size: 10px">
  1758.             <th width="8.5mm">#</th>
  1759.             <th width="27mm">Marbete</th>
  1760.             <th width="45mm">Equipo</th>
  1761.             <th width="125mm">Trabajo a realizar</th>
  1762.             <th width="8mm"></th>
  1763.             <th width="10mm">Ene</th>
  1764.             <th width="10mm">Feb</th>
  1765.             <th width="10mm">Mar</th>
  1766.             <th width="10mm">Abr</th>
  1767.             <th width="10mm">May</th>
  1768.             <th width="10mm">Jun</th>
  1769.             <th width="10mm">Jul</th>
  1770.             <th width="10mm">Ago</th>
  1771.             <th width="10mm">Sep</th>
  1772.             <th width="10mm">Oct</th>
  1773.             <th width="10mm">Nov</th>
  1774.             <th width="10mm">Dic</th>
  1775.         </tr>
  1776.         </thead>
  1777.         <tbody>
  1778.         EOD;
  1779.         $pdf->setMargins(1050);
  1780.         $n 1;
  1781.         foreach ($solicitud as $i) {
  1782.             $mesP date('m'strtotime($i['fatencion']));
  1783.             $diaP date('d'strtotime($i['fatencion']));
  1784.             if (empty($i['fevaluacion'])) {
  1785.                 $mesR "00";
  1786.                 $diaR "00";
  1787.             } else {
  1788.                 $mesR date('m'strtotime($i['fevaluacion']));
  1789.                 $diaR date('d'strtotime($i['fevaluacion']));
  1790.             }
  1791.             if ($mesP == "01") {
  1792.                 $mesP01 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
  1793.                 $diaP01 $diaP;
  1794.             } else {
  1795.                 $mesP01 '';
  1796.                 $diaP01 '';
  1797.             }
  1798.             if ($mesP == "02") {
  1799.                 $mesP02 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
  1800.                 $diaP02 $diaP;
  1801.             } else {
  1802.                 $mesP02 '';
  1803.                 $diaP02 '';
  1804.             }
  1805.             if ($mesP == "03") {
  1806.                 $mesP03 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
  1807.                 $diaP03 $diaP;
  1808.             } else {
  1809.                 $mesP03 '';
  1810.                 $diaP03 '';
  1811.             }
  1812.             if ($mesP == "04") {
  1813.                 $mesP04 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
  1814.                 $diaP04 $diaP;
  1815.             } else {
  1816.                 $mesP04 '';
  1817.                 $diaP04 '';
  1818.             }
  1819.             if ($mesP == "05") {
  1820.                 $mesP05 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
  1821.                 $diaP05 $diaP;
  1822.             } else {
  1823.                 $mesP05 '';
  1824.                 $diaP05 '';
  1825.             }
  1826.             if ($mesP == "06") {
  1827.                 $mesP06 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
  1828.                 $diaP06 $diaP;
  1829.             } else {
  1830.                 $mesP06 '';
  1831.                 $diaP06 '';
  1832.             }
  1833.             if ($mesP == "07") {
  1834.                 $mesP07 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
  1835.                 $diaP07 $diaP;
  1836.             } else {
  1837.                 $mesP07 '';
  1838.                 $diaP07 '';
  1839.             }
  1840.             if ($mesP == "08") {
  1841.                 $mesP08 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
  1842.                 $diaP08 $diaP;
  1843.             } else {
  1844.                 $mesP08 '';
  1845.                 $diaP08 '';
  1846.             }
  1847.             if ($mesP == "09") {
  1848.                 $mesP09 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
  1849.                 $diaP09 $diaP;
  1850.             } else {
  1851.                 $mesP09 '';
  1852.                 $diaP09 '';
  1853.             }
  1854.             if ($mesP == "10") {
  1855.                 $mesP10 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
  1856.                 $diaP10 $diaP;
  1857.             } else {
  1858.                 $mesP10 '';
  1859.                 $diaP10 '';
  1860.             }
  1861.             if ($mesP == "11") {
  1862.                 $mesP11 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
  1863.                 $diaP11 $diaP;
  1864.             } else {
  1865.                 $mesP11 '';
  1866.                 $diaP11 '';
  1867.             }
  1868.             if ($mesP == "12") {
  1869.                 $mesP12 'style="background-color: #8b9cd0; text-align: center; color: #333333;"';
  1870.                 $diaP12 $diaP;
  1871.             } else {
  1872.                 $mesP12 '';
  1873.                 $diaP12 '';
  1874.             }
  1875.             if ($mesR == "01") {
  1876.                 $mesR01 'style="background-color: #dce79b; text-align: center; color: #333333;"';
  1877.                 $diaR01 $diaR;
  1878.             } else {
  1879.                 $mesR01 '';
  1880.                 $diaR01 '';
  1881.             }
  1882.             if ($mesR == "02") {
  1883.                 $mesR02 'style="background-color: #dce79b; text-align: center; color: #333333;"';
  1884.                 $diaR02 $diaR;
  1885.             } else {
  1886.                 $mesR02 '';
  1887.                 $diaR02 '';
  1888.             }
  1889.             if ($mesR == "03") {
  1890.                 $mesR03 'style="background-color: #dce79b; text-align: center; color: #333333;"';
  1891.                 $diaR03 $diaR;
  1892.             } else {
  1893.                 $mesR03 '';
  1894.                 $diaR03 '';
  1895.             }
  1896.             if ($mesR == "04") {
  1897.                 $mesR04 'style="background-color: #dce79b; text-align: center; color: #333333;"';
  1898.                 $diaR04 $diaR;
  1899.             } else {
  1900.                 $mesR04 '';
  1901.                 $diaR04 '';
  1902.             }
  1903.             if ($mesR == "05") {
  1904.                 $mesR05 'style="background-color: #dce79b; text-align: center; color: #333333;"';
  1905.                 $diaR05 $diaR;
  1906.             } else {
  1907.                 $mesR05 '';
  1908.                 $diaR05 '';
  1909.             }
  1910.             if ($mesR == "06") {
  1911.                 $mesR06 'style="background-color: #dce79b; text-align: center; color: #333333;"';
  1912.                 $diaR06 $diaR;
  1913.             } else {
  1914.                 $mesR06 '';
  1915.                 $diaR06 '';
  1916.             }
  1917.             if ($mesR == "07") {
  1918.                 $mesR07 'style="background-color: #dce79b; text-align: center; color: #333333;"';
  1919.                 $diaR07 $diaR;
  1920.             } else {
  1921.                 $mesR07 '';
  1922.                 $diaR07 '';
  1923.             }
  1924.             if ($mesR == "08") {
  1925.                 $mesR08 'style="background-color: #dce79b; text-align: center; color: #333333;"';
  1926.                 $diaR08 $diaR;
  1927.             } else {
  1928.                 $mesR08 '';
  1929.                 $diaR08 '';
  1930.             }
  1931.             if ($mesR == "09") {
  1932.                 $mesR09 'style="background-color: #dce79b; text-align: center; color: #333333;"';
  1933.                 $diaR09 $diaR;
  1934.             } else {
  1935.                 $mesR09 '';
  1936.                 $diaR09 '';
  1937.             }
  1938.             if ($mesR == "10") {
  1939.                 $mesR10 'style="background-color: #dce79b; text-align: center; color: #333333;"';
  1940.                 $diaR10 $diaR;
  1941.             } else {
  1942.                 $mesR10 '';
  1943.                 $diaR10 '';
  1944.             }
  1945.             if ($mesR == "11") {
  1946.                 $mesR11 'style="background-color: #dce79b; text-align: center; color: #333333;"';
  1947.                 $diaR11 $diaR;
  1948.             } else {
  1949.                 $mesR11 '';
  1950.                 $diaR11 '';
  1951.             }
  1952.             if ($mesR == "12") {
  1953.                 $mesR12 'style="background-color: #dce79b; text-align: center; color: #333333;"';
  1954.                 $diaR12 $diaR;
  1955.             } else {
  1956.                 $mesR12 '';
  1957.                 $diaR12 '';
  1958.             }
  1959.             $html .= <<<EOD
  1960.             <tr style="font-size: 9px">
  1961.                 <td width="8.5mm" rowspan="2" align="center">$n</td>
  1962.                 <td width="27mm" rowspan="2">{$i["marbete"]}</td>
  1963.                 <td width="45mm" rowspan="2">{$i["tipo_equipo"]}</td>
  1964.                 <td width="125mm" rowspan="2">{$i["falla"]}</td>
  1965.                 <td width="8mm">P</td>
  1966.                 <td width="10mm" {$mesP01}>{$diaP01}</td>
  1967.                 <td width="10mm" {$mesP02}>{$diaP02}</td>
  1968.                 <td width="10mm" {$mesP03}>{$diaP03}</td>
  1969.                 <td width="10mm" {$mesP04}>{$diaP04}</td>
  1970.                 <td width="10mm" {$mesP05}>{$diaP05}</td>
  1971.                 <td width="10mm" {$mesP06}>{$diaP06}</td>
  1972.                 <td width="10mm" {$mesP07}>{$diaP07}</td>
  1973.                 <td width="10mm" {$mesP08}>{$diaP08}</td>
  1974.                 <td width="10mm" {$mesP09}>{$diaP09}</td>
  1975.                 <td width="10mm" {$mesP10}>{$diaP10}</td>
  1976.                 <td width="10mm" {$mesP11}>{$diaP11}</td>
  1977.                 <td width="10mm" {$mesP12}>{$diaP12}</td>
  1978.             </tr>
  1979.             <tr style="font-size: 9px">
  1980.                 <td width="8mm">R</td>
  1981.                 <td width="10mm" {$mesR01}>{$diaR01}</td>
  1982.                 <td width="10mm" {$mesR02}>{$diaR02}</td>
  1983.                 <td width="10mm" {$mesR03}>{$diaR03}</td>
  1984.                 <td width="10mm" {$mesR04}>{$diaR04}</td>
  1985.                 <td width="10mm" {$mesR05}>{$diaR05}</td>
  1986.                 <td width="10mm" {$mesR06}>{$diaR06}</td>
  1987.                 <td width="10mm" {$mesR07}>{$diaR07}</td>
  1988.                 <td width="10mm" {$mesR08}>{$diaR08}</td>
  1989.                 <td width="10mm" {$mesR09}>{$diaR09}</td>
  1990.                 <td width="10mm" {$mesR10}>{$diaR10}</td>
  1991.                 <td width="10mm" {$mesR11}>{$diaR11}</td>
  1992.                 <td width="10mm" {$mesR12}>{$diaR12}</td>
  1993.             </tr>
  1994.             EOD;
  1995.             $n++;
  1996.         }
  1997.         $html .= <<<EOD
  1998.                 </tbody>  
  1999.             </table>
  2000.         EOD;
  2001.         # Declaramos una nueva tipografía para el pie de página del contenido
  2002.         $pdf->SetFont('freesans'''10''true);
  2003.         # $pdf->write2DBarcode($cadenaOriginal, 'QRCODE,H', false, false, 20, 20, $styleQR, 'N')
  2004.         $qr = new \TCPDF2DBarcode($cadenaOriginal'QRCODE,M');
  2005.         $imgdata $qr->getBarcodePngData(2.52.5, array(000));
  2006.         file_put_contents('img/sistema/qr.png'$imgdata);
  2007.         $html .= <<<EOD
  2008.             <br>
  2009.             <br>
  2010.             <br>
  2011.             <table width="100%" cellpadding="5" border="0">
  2012.                 <tbody>
  2013.                     <tr>
  2014.                         <td style="width: 30%; font-size: 11px"><strong>GENERÓ: </strong></td>
  2015.                         <td style="width: 30%"><strong>Usuario: </strong>{$user->getNombre()} {$user->getPapellido()}</td>
  2016.                         <td style="width: 30%"><strong>Correo: </strong>{$user->getCorreo()}</td>
  2017.                         <td style="width: 9%" rowspan="2"><img src="img/sistema/qr.png" alt="QRCODE" /></td>
  2018.                     </tr>
  2019.                     <tr>
  2020.                         <td colspan="2" style="width: 75%">{$cadena64}</td>
  2021.                         <td style="width: 13%"><img src="img/sistema/logo.png" alt="LOGO"></td>
  2022.                     </tr>
  2023.                 </tbody>
  2024.             </table>
  2025.         EOD;
  2026.         # Imprimimos el contenido como HTML
  2027.         $pdf->writeHTMLCell($w 0$h 0$x ''$y ''$html$border 0$ln 1$fill 0$reseth true$align ''$autopadding true);
  2028.         ob_end_clean();
  2029.         # ---------------------------------------------------------
  2030.         # Mostramos el resultado en pantalla
  2031.         $pdf->Output($pdf->formato date('Ymd') . '.pdf''D');
  2032.     }
  2033.     #[Route('/ubicacion-excel'name'app_reporte_ubicacion_excel'methods: ['POST'])]
  2034.     public function ubicacionExcel(UbicacionRepository $ubicacionRepositoryRequest $request): Response
  2035.     {
  2036.         ini_set('memory_limit''5120M');
  2037.         ini_set('max_execution_time'0);
  2038.         ini_set('output_buffering'0);
  2039.         # Obtenemos los datos de la petición
  2040.         /** @var Usuario $user */
  2041.         $user $this->getUser(); 
  2042.       
  2043.         $ubicaciones = [];
  2044.         if($user->getRol()->getIdRol() <= 2){
  2045.             $ubicaciones $ubicacionRepository->ubicaUnidad();
  2046.         }else{
  2047.             $ubicaciones $ubicacionRepository->ubicaUnidad($user->getUnidad());
  2048.         }
  2049.         # Obtenemos los datos del documento
  2050.         
  2051.         # Definir el nombre temporal del archivo
  2052.         $filePath 'otro.xlsx';
  2053.         # Se definen las cabeceras del archivo
  2054.         $cabecera WriterEntityFactory::createRowFromArray([
  2055.             'ID.',
  2056.             'Ubicación',
  2057.             'Unidad',
  2058.             'Estatus'
  2059.         ]);
  2060.         # Se crea el arreglo con los datos del cuerpo del documento
  2061.         $data = [];
  2062.         $n 1;
  2063.         foreach ($ubicaciones as $ubicacion) {
  2064.             /*$usuario = $ubicacion->getUsuario()->getNombre() . ' ' . $ubicacion->getUsuario()->getPapellido();
  2065.             $ubicacion1 = $ubicacion->getUbicacion()->getArea();*/
  2066.             $unidad $ubicacion->getUnidad()->getNombre();
  2067.             /*$activo = match ($ubicacion->getActivo()) {
  2068.                 "1" => 'Activo',
  2069.                 "0" => 'Inactivo',
  2070.                 default => ""
  2071.             };*/
  2072.             if ($ubicacion->getActivo() == 1) {
  2073.                 $activo "Activo";
  2074.             } else {
  2075.                 $activo "Inactivo";
  2076.             }
  2077.             $data[] = WriterEntityFactory::createRowFromArray([
  2078.                 $ubicacion->getIdUbi(),
  2079.                 $ubicacion->getArea(),
  2080.                 $unidad,
  2081.                 $activo
  2082.                 //$ubicacion->getActivo()
  2083.                 //$usuario,
  2084.             ]);
  2085.             $n++;
  2086.         }
  2087.         # Se crea el documento en formato CSV
  2088.         $writer WriterEntityFactory::createXLSXWriter();
  2089.         $writer
  2090.             ->openToFile($filePath)
  2091.             ->addRow($cabecera)
  2092.             ->addRows($data)
  2093.             ->close();
  2094.         $response = new BinaryFileResponse($filePath);
  2095.         $response->setContentDisposition(
  2096.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  2097.             'Ubicaciónes- ' '_' date('Y-m-d') . '.xlsx'
  2098.         );
  2099.         $response->deleteFileAfterSend(true);
  2100.         return $response;
  2101.     }
  2102.     #[Route('/componentes'name'app_bitacora_index'methods: ['GET''POST'])]
  2103.     public function componentes(Request $requestEntityManagerInterface $entityManager): Response
  2104.     {
  2105.         $movimientos '';
  2106.         $form $this->createFormBuilder()
  2107.             ->add('componente'EntityType::class, [
  2108.                 'class' => CatComponentes::class,
  2109.                 'attr' => ['class' => 'form-control'],
  2110.                 'placeholder' => 'Todo',
  2111.                 'query_builder' => function (EntityRepository $er) {
  2112.                     return $er->createQueryBuilder('cc')
  2113.                         ->orderBy('cc.tipo''ASC');
  2114.                 }
  2115.             ])
  2116.             ->add('unidad'EntityType::class, [
  2117.                 'class' => Unidad::class,
  2118.                 'attr' => ['class' => 'form-control'],
  2119.                 'placeholder' => 'Todo',
  2120.                 'query_builder' => function (EntityRepository $er) {
  2121.                     return $er->createQueryBuilder('u')
  2122.                         ->orderBy('u.nombre''ASC');
  2123.                 }
  2124.             ])
  2125.             ->add('finicio'DateType::class,[
  2126.                 'label' => 'Desde',
  2127.                 'attr' => ['class' => 'form-control''class' => 'js-datepicker'],
  2128.                 'widget' => 'single_text',
  2129.                 'format' => 'yyyy-MM-dd',
  2130.                 'data' => new \DateTime(date('Y') . '-01-01'),
  2131.             ])
  2132.             ->add('ffinal'DateType::class, [
  2133.                 'label' => 'Hasta',
  2134.                 'attr' => ['class' => 'form-control''class' => 'js-datepicker'],
  2135.                 'widget' => 'single_text',
  2136.                 'format' => 'yyyy-MM-dd',
  2137.                 'data'  =>  new \DateTime()
  2138.             ])
  2139.             ->getForm();
  2140.         $form->handleRequest($request);
  2141.         if ($request->isMethod('POST') && $form->isSubmitted() && $form->isValid()) {
  2142.             $conn $entityManager->getConnection();
  2143.             if ($form->get('componente')->getData() != '' && $form->get('unidad')->getData() != '' && $form->get('finicio')->getData() != '' && $form->get('ffinal')->getData() != '') {
  2144.                 $sql "SELECT DISTINCT *,  bm.tipo_equipo AS bm_equipo, 
  2145.                                 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,
  2146.                                 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
  2147.                         FROM bitacora_movimientos bm
  2148.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  2149.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  2150.                         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
  2151.                         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
  2152.                         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
  2153.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  2154.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  2155.                         WHERE cc.id_componente = :tipo AND bm.id_uni = :id_uni AND bm.fecha_mov BETWEEN :finicio AND :ffinal;
  2156.                 ";
  2157.                 $stmt $conn->prepare($sql);
  2158.                 $stmt->bindValue('tipo'$form->get('componente')->getData()->getTipo());
  2159.                 $stmt->bindValue('id_uni'$form->get('unidad')->getData()->getIdUni());
  2160.                 $stmt->bindValue('finicio'$form->get('finicio')->getData()->format('Y-m-d H:i:s'));
  2161.                 $stmt->bindValue('ffinal'$form->get('ffinal')->getData()->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'));
  2162.             } elseif ($form->get('componente')->getData() != '' && $form->get('unidad')->getData() != '' && $form->get('finicio')->getData() == '' && $form->get('ffinal')->getData() != '') {
  2163.                 $sql "SELECT DISTINCT *,  bm.tipo_equipo AS bm_equipo, 
  2164.                                 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,
  2165.                                 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
  2166.                         FROM bitacora_movimientos bm
  2167.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  2168.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  2169.                         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
  2170.                         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
  2171.                         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
  2172.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  2173.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  2174.                     WHERE cc_tipo = :tipo AND bm.id_uni = :id_uni AND bm.fecha_mov <= :ffinal
  2175.                 ";
  2176.                 $stmt $conn->prepare($sql);
  2177.                 $stmt->bindValue('tipo'$form->get('componente')->getData()->getTipo());
  2178.                 $stmt->bindValue('id_uni'$form->get('unidad')->getData()->getIdUni());
  2179.                 $stmt->bindValue('ffinal'$form->get('ffinal')->getData()->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'));
  2180.             } elseif ($form->get('componente')->getData() != '' && $form->get('unidad')->getData() != '' && $form->get('finicio')->getData() == '' && $form->get('ffinal')->getData() == '') {
  2181.                 $sql "SELECT DISTINCT *,  bm.tipo_equipo AS bm_equipo, 
  2182.                                 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,
  2183.                                 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
  2184.                         FROM bitacora_movimientos bm
  2185.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  2186.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  2187.                         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
  2188.                         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
  2189.                         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
  2190.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  2191.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  2192.                     WHERE cc_tipo = :tipo AND bm.id_uni = :id_uni
  2193.                 ";
  2194.                 $stmt $conn->prepare($sql);
  2195.                 $stmt->bindValue('id_uni'$form->get('unidad')->getData()->getIdUni());
  2196.                 $stmt->bindValue('tipo'$form->get('componente')->getData()->getTipo());
  2197.             } elseif ($form->get('componente')->getData() != '' && $form->get('unidad')->getData() == '' && $form->get('finicio')->getData() != '' && $form->get('ffinal')->getData() != '') {
  2198.                 $sql "SELECT DISTINCT *,  bm.tipo_equipo AS bm_equipo, 
  2199.                                 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,
  2200.                                 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
  2201.                         FROM bitacora_movimientos bm
  2202.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  2203.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  2204.                         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
  2205.                         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
  2206.                         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
  2207.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  2208.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  2209.                     WHERE cc_tipo = :tipo AND bm.fecha_mov BETWEEN :finicio AND :ffinal
  2210.                 ";
  2211.                 $stmt $conn->prepare($sql);
  2212.                 $stmt->bindValue('tipo'$form->get('componente')->getData()->getTipo());
  2213.                 $stmt->bindValue('finicio'$form->get('finicio')->getData()->format('Y-m-d'));
  2214.                 $stmt->bindValue('ffinal'$form->get('ffinal')->getData()->add(new \DateInterval('P1D'))->format('Y-m-d'));
  2215.             } elseif ($form->get('componente')->getData() != '' && $form->get('unidad')->getData() == '' && $form->get('finicio')->getData() == '' && $form->get('ffinal')->getData() != '') {
  2216.                 $sql "SELECT DISTINCT *,  bm.tipo_equipo AS bm_equipo, 
  2217.                                 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,
  2218.                                 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
  2219.                         FROM bitacora_movimientos bm
  2220.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  2221.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  2222.                         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
  2223.                         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
  2224.                         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
  2225.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  2226.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  2227.                     WHERE cc_tipo = :tipo AND bm.fecha_mov <= :ffinal
  2228.                 ";
  2229.                 $stmt $conn->prepare($sql);
  2230.                 $stmt->bindValue('tipo'$form->get('componente')->getData()->getTipo());
  2231.                 $stmt->bindValue('ffinal'$form->get('ffinal')->getData()->add(new \DateInterval('P1D'))->format('Y-m-d'));
  2232.             } elseif ($form->get('componente')->getData() != '' && $form->get('unidad')->getData() == '' && $form->get('finicio')->getData() == '' && $form->get('ffinal')->getData() == '') {
  2233.                 $sql "SELECT DISTINCT *,  bm.tipo_equipo AS bm_equipo, 
  2234.                                 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,
  2235.                                 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
  2236.                         FROM bitacora_movimientos bm
  2237.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  2238.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  2239.                         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
  2240.                         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
  2241.                         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
  2242.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  2243.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  2244.                     WHERE cc_tipo = :tipo
  2245.                 ";
  2246.                 $stmt $conn->prepare($sql);
  2247.                 $stmt->bindValue('tipo'$form->get('componente')->getData()->getTipo());
  2248.             } elseif ($form->get('componente')->getData() == '' && $form->get('unidad')->getData() != '' && $form->get('finicio')->getData() != '' && $form->get('ffinal')->getData() != '') {
  2249.                 $sql "SELECT DISTINCT *,  bm.tipo_equipo AS bm_equipo, 
  2250.                                 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,
  2251.                                 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
  2252.                         FROM bitacora_movimientos bm
  2253.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  2254.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  2255.                         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
  2256.                         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
  2257.                         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
  2258.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  2259.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  2260.                     WHERE bm.id_uni = :id_uni AND bm.fecha_mov BETWEEN :finicio AND :ffinal
  2261.                 ";
  2262.                 $stmt $conn->prepare($sql);
  2263.                 $stmt->bindValue('id_uni'$form->get('unidad')->getData()->getIdUni());
  2264.                 $stmt->bindValue('finicio'$form->get('finicio')->getData()->format('Y-m-d H:i:s'));
  2265.                 $stmt->bindValue('ffinal'$form->get('ffinal')->getData()->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'));
  2266.             } elseif ($form->get('componente')->getData() == '' && $form->get('unidad')->getData() != '' && $form->get('finicio')->getData() == '' && $form->get('ffinal')->getData() != '') {
  2267.                 $sql "SELECT DISTINCT *,  bm.tipo_equipo AS bm_equipo, 
  2268.                                 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,
  2269.                                 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
  2270.                         FROM bitacora_movimientos bm
  2271.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  2272.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  2273.                         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
  2274.                         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
  2275.                         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
  2276.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  2277.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  2278.                     WHERE bm.id_uni = :id_uni AND bm.fecha_mov <= :ffinal
  2279.                 ";
  2280.                 $stmt $conn->prepare($sql);
  2281.                 $stmt->bindValue('id_uni'$form->get('unidad')->getData()->getIdUni());
  2282.                 $stmt->bindValue('ffinal'$form->get('ffinal')->getData()->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'));
  2283.             } elseif ($form->get('componente')->getData() == '' && $form->get('unidad')->getData() != '' && $form->get('finicio')->getData() == '' && $form->get('ffinal')->getData() == '') {
  2284.                 $sql "SELECT DISTINCT *,  bm.tipo_equipo AS bm_equipo, 
  2285.                                 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,
  2286.                                 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
  2287.                         FROM bitacora_movimientos bm
  2288.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  2289.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  2290.                         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
  2291.                         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
  2292.                         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
  2293.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  2294.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  2295.                     WHERE bm.id_uni = :id_uni
  2296.                 ";
  2297.                 $stmt $conn->prepare($sql);
  2298.                 $stmt->bindValue('id_uni'$form->get('unidad')->getData()->getIdUni());
  2299.             } elseif ($form->get('componente')->getData() == '' && $form->get('unidad')->getData() == '' && $form->get('finicio')->getData() != '' && $form->get('ffinal')->getData() != '') {
  2300.                 $sql "SELECT DISTINCT *,  bm.tipo_equipo AS bm_equipo, 
  2301.                                 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,
  2302.                                 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
  2303.                         FROM bitacora_movimientos bm
  2304.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  2305.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  2306.                         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
  2307.                         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
  2308.                         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
  2309.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  2310.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  2311.                     WHERE bm.fecha_mov BETWEEN :finicio AND :ffinal
  2312.                 ";
  2313.                 $stmt $conn->prepare($sql);
  2314.                 $stmt->bindValue('finicio'$form->get('finicio')->getData()->format('Y-m-d H:i:s'));
  2315.                 $stmt->bindValue('ffinal'$form->get('ffinal')->getData()->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'));
  2316.             } elseif ($form->get('componente')->getData() == '' && $form->get('unidad')->getData() == '' && $form->get('finicio')->getData() == '' && $form->get('ffinal')->getData() != '') {
  2317.                 $sql "SELECT DISTINCT *,  bm.tipo_equipo AS bm_equipo, 
  2318.                                 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,
  2319.                                 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
  2320.                         FROM bitacora_movimientos bm
  2321.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  2322.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  2323.                         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
  2324.                         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
  2325.                         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
  2326.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  2327.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  2328.                     WHERE bm.fecha_mov <= :ffinal
  2329.                 ";
  2330.                 $stmt $conn->prepare($sql);
  2331.                 $stmt->bindValue('ffinal'$form->get('ffinal')->getData()->add(new DateInterval('P1D'))->format('Y-m-d'));
  2332.             } else {
  2333.                 $sql "SELECT DISTINCT*,  bm.tipo_equipo AS bm_equipo, 
  2334.                                 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,
  2335.                                 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
  2336.                         FROM bitacora_movimientos bm
  2337.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  2338.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  2339.                         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
  2340.                         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
  2341.                         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
  2342.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  2343.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  2344.                 ";
  2345.                 $stmt $conn->prepare($sql);
  2346.             }
  2347.             $resultSet $stmt->executeQuery();
  2348.             $movimientos $resultSet->fetchAll();
  2349.             return $this->render('consulta_solicitud/componentes.html.twig', [
  2350.                 'form' => $form->createView(),
  2351.                 'movimientos' => $movimientos
  2352.             ]);
  2353.         }
  2354.         return $this->render('consulta_solicitud/componentes.html.twig', [
  2355.             'form' => $form->createView(),
  2356.             'movimientos' => $movimientos
  2357.         ]);
  2358.     }
  2359.     #[Route('/componentes/reporte'name'app_componentes_reporte'methods: ['GET''POST'])]
  2360.     public function componentesReporte(Request $requestEntityManagerInterface $entityManager): Response
  2361.     {
  2362.         ini_set('memory_limit''5120M');
  2363.         ini_set('max_execution_time'0);
  2364.         ini_set('output_buffering'0);
  2365.         /** var Usuario $user */
  2366.         $user $this->getUser();
  2367.         date_default_timezone_set('America/Mexico_City');
  2368.         setlocale(LC_ALL'es_MX');
  2369.         $fecha date('Y-m-d H:i:s');
  2370.         # Obtenemos los datos de la petición
  2371.         /** @var Usuario $user */
  2372.         $user $this->getUser();
  2373.         $filtro $request->request->get('form');
  2374.         $filtro['ffinal'] = new DateTime($filtro['ffinal']);
  2375.         $filtro['ffinal'] = $filtro['ffinal']->add(new DateInterval('P1D'))->format('Y-m-d');
  2376.         $movimientos $this->filtroConsulta($filtro$entityManager);
  2377.         # Definir el nombre temporal del archivo
  2378.         $filePath 'reporteRefacciones.xlsx';
  2379.         # Se definen las cabeceras del archivo
  2380.         $cabecera[] = WriterEntityFactory::createRowFromArray(['Reporte de bitácora de uso de refacciones por periodo',]);
  2381.         $cabecera[] = WriterEntityFactory::createRowFromArray(['Unidad: ' $user->getUnidad()->getNombre()]);
  2382.         $cabecera[] = WriterEntityFactory::createRowFromArray(['Fecha de creación: ' $fecha]);
  2383.         $cabecera[] = WriterEntityFactory::createRowFromArray(['Usuario: ' $user->getNombre() . ' ' $user->getPapellido() . ' ' $user->getSapellido()]);
  2384.         $cabecera[] = WriterEntityFactory::createRowFromArray(['Fecha inicial: ' $filtro['finicio']]);
  2385.         $cabecera[] = WriterEntityFactory::createRowFromArray(['Fecha final: ' $filtro['ffinal']]);
  2386.         $cabecera[] = WriterEntityFactory::createRowFromArray(['']);
  2387.         $cabecera[] = WriterEntityFactory::createRowFromArray([
  2388.             'Unidad',
  2389.             'Componente',
  2390.             'Descripcion',
  2391.             'Equipo',
  2392.             'Marbete',
  2393.             'Usuario Asignado',
  2394.             'Fecha de asignación',
  2395.             'Marca',
  2396.             'Modelo',
  2397.             'Serie',
  2398.             'Usuario Gestor',
  2399.             'Solicitud',
  2400.             'Unidad'
  2401.         ]);
  2402.         # Se crea el arreglo con los datos del cuerpo del documento
  2403.         $data = [];
  2404.         foreach ($movimientos as $m) {
  2405.             $data[] = WriterEntityFactory::createRowFromArray([
  2406.                 $m['d_unidad'],
  2407.                 $m['cc_tipo'],
  2408.                 $m['cc_descripcion'],
  2409.                 $m['bm_equipo'],
  2410.                 $m['equipo_marbete'],
  2411.                 $m['usuario_nombre'],
  2412.                 $m['bm_fecha_movimiento'],
  2413.                 $m['i_marca'],
  2414.                 $m['i_modelo'],
  2415.                 $m['i_serie'],
  2416.                 $m['u_nombre'],
  2417.                 $m['s_solicitud'],
  2418.                 $m['d_unidad']
  2419.             ]);
  2420.         }
  2421.         # Se crea el documento en formato CSV
  2422.         $writer WriterEntityFactory::createXLSXWriter();
  2423.         $writer
  2424.             ->openToFile($filePath)
  2425.             ->addRows($cabecera)
  2426.             ->addRows($data)
  2427.             ->close();
  2428.         $response = new BinaryFileResponse($filePath);
  2429.         $response->setContentDisposition(
  2430.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  2431.             'reporteRefacciones' '_' date('Y-m-d') . '.xlsx'
  2432.         );
  2433.         $response->deleteFileAfterSend(true);
  2434.         return $response;
  2435.     }
  2436.     #[Route('/componentes/uso'name'app_bitacora_uso_index'methods: ['GET''POST'])]
  2437.     public function componentesUso(Request $requestEntityManagerInterface $entityManager): Response
  2438.     {
  2439.         $movimientos '';
  2440.         $form $this->createFormBuilder()
  2441.             ->add('unidad'EntityType::class, [
  2442.                 'class' => Unidad::class,
  2443.                 'attr' => ['class' => 'form-control'],
  2444.                 'placeholder' => 'Todo',
  2445.                 'query_builder' => function (EntityRepository $er) {
  2446.                     return $er->createQueryBuilder('u')
  2447.                         ->orderBy('u.nombre''ASC');
  2448.                 }
  2449.             ])
  2450.             ->add('finicio'DateType::class,[
  2451.                 'label' => 'Desde',
  2452.                 'attr' => ['class' => 'form-control''class' => 'js-datepicker'],
  2453.                 'widget' => 'single_text',
  2454.                 'format' => 'yyyy-MM-dd',
  2455.                 'data' => new \DateTime(date('Y') . '-01-01'),
  2456.             ])
  2457.             ->add('ffinal'DateType::class, [
  2458.                 'label' => 'Hasta',
  2459.                 'attr' => ['class' => 'form-control'],
  2460.                 'widget' => 'single_text',
  2461.                 'format' => 'yyyy-MM-dd',
  2462.                 'data'  =>  new \DateTime()
  2463.             ])
  2464.             ->getForm();
  2465.             
  2466.         $form->handleRequest($request);
  2467.         if ($request->isMethod('POST') && $form->isSubmitted() && $form->isValid()) {
  2468.             $conn $entityManager->getConnection();
  2469.             if ($form->get('unidad')->getData() != '' && $form->get('finicio')->getData() != '' && $form->get('ffinal')->getData() != '') {
  2470.                 $sql "SELECT *, bm.id_mov, COUNT(*) AS x_count
  2471.                     FROM bitacora_movimientos bm
  2472.                     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
  2473.                     WHERE bm.id_uni = :id_uni AND bm.fecha_mov BETWEEN :finicio AND :ffinal
  2474.                     GROUP BY cc_tipo ORDER BY cc_tipo ASC
  2475.                 ";
  2476.                 $stmt $conn->prepare($sql);
  2477.                 $stmt->bindValue('id_uni'$form->get('unidad')->getData()->getIdUni());
  2478.                 $stmt->bindValue('finicio'$form->get('finicio')->getData()->format('Y-m-d H:i:s'));
  2479.                 $stmt->bindValue('ffinal'$form->get('ffinal')->getData()->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'));
  2480.             } elseif ($form->get('unidad')->getData() != '' && $form->get('finicio')->getData() == '' && $form->get('ffinal')->getData() != '') {
  2481.                 $sql "SELECT *, bm.id_mov, COUNT(*) AS x_count
  2482.                     FROM bitacora_movimientos bm
  2483.                     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
  2484.                     WHERE bm.id_uni = :id_uni AND bm.fecha_mov <= :ffinal
  2485.                     GROUP BY cc_tipo ORDER BY cc_tipo ASC
  2486.                 ";
  2487.                 $stmt $conn->prepare($sql);
  2488.                 $stmt->bindValue('id_uni'$form->get('unidad')->getData()->getIdUni());
  2489.                 $stmt->bindValue('ffinal'$form->get('ffinal')->getData()->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'));
  2490.             } elseif ($form->get('unidad')->getData() != '' && $form->get('finicio')->getData() == '' && $form->get('ffinal')->getData() == '') {
  2491.                 $sql "SELECT *, bm.id_mov, COUNT(*) AS x_count
  2492.                     FROM bitacora_movimientos bm
  2493.                     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
  2494.                     WHERE bm.id_uni = :id_uni
  2495.                     GROUP BY cc_tipo ORDER BY cc_tipo ASC
  2496.                 ";
  2497.                 $stmt $conn->prepare($sql);
  2498.                 $stmt->bindValue('id_uni'$form->get('unidad')->getData()->getIdUni());
  2499.             } elseif ($form->get('unidad')->getData() == '' && $form->get('finicio')->getData() != '' && $form->get('ffinal')->getData() != '') {
  2500.                 $sql "SELECT *, bm.id_mov, COUNT(*) AS x_count
  2501.                     FROM bitacora_movimientos bm
  2502.                     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
  2503.                     WHERE bm.fecha_mov BETWEEN :finicio AND :ffinal
  2504.                     GROUP BY cc_tipo ORDER BY cc_tipo ASC
  2505.                 ";
  2506.                 $stmt $conn->prepare($sql);
  2507.                 $stmt->bindValue('finicio'$form->get('finicio')->getData()->format('Y-m-d H:i:s'));
  2508.                 $stmt->bindValue('ffinal'$form->get('ffinal')->getData()->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'));
  2509.             } elseif ($form->get('unidad')->getData() == '' && $form->get('finicio')->getData() == '' && $form->get('ffinal')->getData() != '') {
  2510.                 $sql "SELECT *, bm.tipo_equipo AS bm_equipo, bm.fecha_mov AS bm_fecha_movimiento, COUNT(*) AS x_count
  2511.                     FROM bitacora_movimientos bm
  2512.                     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
  2513.                     WHERE bm.fecha_mov <= :ffinal
  2514.                     GROUP BY cc_tipo ORDER BY cc_tipo ASC
  2515.                 ";
  2516.                 $stmt $conn->prepare($sql);
  2517.                 $stmt->bindValue('ffinal'$form->get('ffinal')->getData()->add(new DateInterval('P1D'))->format('Y-m-d H:i:s'));
  2518.             } else {
  2519.                 $sql "SELECT *, bm.id_mov, COUNT(*) AS x_count
  2520.                     FROM bitacora_movimientos bm
  2521.                     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
  2522.                     GROUP BY cc_tipo ORDER BY cc_tipo ASC
  2523.                 ";
  2524.                 $stmt $conn->prepare($sql);
  2525.             }
  2526.             
  2527.             $resultSet $stmt->executeQuery();
  2528.             $movimientos $resultSet->fetchAll();
  2529.             return $this->render('consulta_solicitud/uso.html.twig', [
  2530.                 'form' => $form->createView(),
  2531.                 'movimientos' => $movimientos
  2532.             ]);
  2533.         }
  2534.         return $this->render('consulta_solicitud/uso.html.twig', [
  2535.             'form' => $form->createView(),
  2536.             'movimientos' => $movimientos
  2537.         ]);
  2538.     }
  2539.     #[Route('/componentes/uso/reporte'name'app_componentes_uso_reporte'methods: ['GET''POST'])]
  2540.     public function componentesUsoReporte(Request $requestEntityManagerInterface $entityManager): Response
  2541.     {
  2542.         ini_set('memory_limit''5120M');
  2543.         ini_set('max_execution_time'0);
  2544.         ini_set('output_buffering'0);
  2545.         /** var Usuario $user */
  2546.         $user $this->getUser();
  2547.         date_default_timezone_set('America/Mexico_City');
  2548.         setlocale(LC_ALL'es_MX');
  2549.         $fecha date('Y-m-d H:i:s');
  2550.         # Obtenemos los datos de la petición
  2551.         /** @var Usuario $user */
  2552.         $user $this->getUser();
  2553.         $filtro $request->request->get('form');
  2554.         $filtro['ffinal'] = new DateTime($filtro['ffinal']);
  2555.         $filtro['ffinal'] = $filtro['ffinal']->add(new DateInterval('P1D'))->format('Y-m-d');
  2556.         $conn $entityManager->getConnection();
  2557.         if ($filtro['unidad'] != '' && $filtro['finicio'] != '' && $filtro['ffinal'] != '') {
  2558.             $sql "SELECT *, bm.id_mov, COUNT(*) AS x_count
  2559.                 FROM bitacora_movimientos bm
  2560.                 LEFT JOIN (SELECT id_componente, tipo AS cc_tipo FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
  2561.                 LEFT JOIN (SELECT id_uni, nombre AS u_nombre FROM unidad) AS u ON u.id_uni = bm.id_uni
  2562.                 WHERE bm.id_uni = :id_uni AND bm.fecha_mov BETWEEN :finicio AND :ffinal
  2563.                 GROUP BY cc_tipo ORDER BY cc_tipo ASC
  2564.             ";
  2565.             $stmt $conn->prepare($sql);
  2566.             $stmt->bindValue('id_uni'$filtro['unidad']);
  2567.             $stmt->bindValue('finicio'$filtro['finicio']);
  2568.             $stmt->bindValue('ffinal'$filtro['ffinal']);
  2569.         } elseif ($filtro['unidad'] != '' && $filtro['finicio'] == '' && $filtro['ffinal'] != '') {
  2570.             $sql "SELECT *, bm.id_mov, COUNT(*) AS x_count
  2571.                 FROM bitacora_movimientos bm
  2572.                 LEFT JOIN (SELECT id_componente, tipo AS cc_tipo FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
  2573.                 LEFT JOIN (SELECT id_uni, nombre AS u_nombre FROM unidad) AS u ON u.id_uni = bm.id_uni
  2574.                 WHERE bm.id_uni = :id_uni AND bm.fecha_mov <= :ffinal
  2575.                 GROUP BY cc_tipo ORDER BY cc_tipo ASC
  2576.             ";
  2577.             $stmt $conn->prepare($sql);
  2578.             $stmt->bindValue('id_uni'$filtro['unidad']);
  2579.             $stmt->bindValue('ffinal'$filtro['ffinal']);
  2580.         } elseif ($filtro['unidad'] != '' && $filtro['finicio'] == '' && $filtro['ffinal'] == '') {
  2581.             $sql "SELECT *, bm.id_mov, COUNT(*) AS x_count
  2582.                 FROM bitacora_movimientos bm
  2583.                 LEFT JOIN (SELECT id_componente, tipo AS cc_tipo FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
  2584.                 LEFT JOIN (SELECT id_uni, nombre AS u_nombre FROM unidad) AS u ON u.id_uni = bm.id_uni
  2585.                 WHERE bm.id_uni = :id_uni
  2586.                 GROUP BY cc_tipo ORDER BY cc_tipo ASC
  2587.             ";
  2588.             $stmt $conn->prepare($sql);
  2589.             $stmt->bindValue('id_uni'$filtro['unidad']);
  2590.         } elseif ($filtro['unidad'] == '' && $filtro['finicio'] != '' && $filtro['ffinal'] != '') {
  2591.             $sql "SELECT *, bm.id_mov, COUNT(*) AS x_count
  2592.                 FROM bitacora_movimientos bm
  2593.                 LEFT JOIN (SELECT id_componente, tipo AS cc_tipo FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
  2594.                 LEFT JOIN (SELECT id_uni, nombre AS u_nombre FROM unidad) AS u ON u.id_uni = bm.id_uni
  2595.                 WHERE bm.fecha_mov BETWEEN :finicio AND :ffinal
  2596.                 GROUP BY cc_tipo ORDER BY cc_tipo ASC
  2597.             ";
  2598.             $stmt $conn->prepare($sql);
  2599.             $stmt->bindValue('finicio'$filtro['finicio']);
  2600.             $stmt->bindValue('ffinal'$filtro['ffinal']);
  2601.         } elseif ($filtro['unidad'] == '' && $filtro['finicio'] == '' && $filtro['ffinal'] != '') {
  2602.             $sql "SELECT *, bm.tipo_equipo AS bm_equipo, bm.fecha_mov AS bm_fecha_movimiento, COUNT(*) AS x_count
  2603.                 FROM bitacora_movimientos bm
  2604.                 LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  2605.                 LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  2606.                 LEFT JOIN (SELECT id_sol, id_sol AS s_solicitud FROM solicitud) AS s ON s.id_sol = bm.id_solicitud
  2607.                 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
  2608.                 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
  2609.                 WHERE bm.fecha_mov <= :ffinal
  2610.                 GROUP BY cc_tipo ORDER BY cc_tipo ASC
  2611.             ";
  2612.             $stmt $conn->prepare($sql);
  2613.             $stmt->bindValue('ffinal'$filtro['ffinal']);
  2614.         } else {
  2615.             $sql "SELECT *, bm.id_mov, COUNT(*) AS x_count
  2616.                 FROM bitacora_movimientos bm
  2617.                 LEFT JOIN (SELECT id_componente, tipo AS cc_tipo FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
  2618.                 LEFT JOIN (SELECT id_uni, nombre AS u_nombre FROM unidad) AS u ON u.id_uni = bm.id_uni
  2619.                 GROUP BY cc_tipo ORDER BY cc_tipo ASC
  2620.             ";
  2621.             $stmt $conn->prepare($sql);
  2622.         }
  2623.         
  2624.         $resultSet $stmt->executeQuery();
  2625.         $movimientos $resultSet->fetchAll();
  2626.         # Definir el nombre temporal del archivo
  2627.         $filePath 'reporteRefacciones.xlsx';
  2628.         # Se definen las cabeceras del archivo
  2629.         $cabecera[] = WriterEntityFactory::createRowFromArray(['Reporte de bitácora de uso de refacciones por periodo',]);
  2630.         $cabecera[] = WriterEntityFactory::createRowFromArray(['Unidad: ' $user->getUnidad()->getNombre()]);
  2631.         $cabecera[] = WriterEntityFactory::createRowFromArray(['Fecha de creación: ' $fecha]);
  2632.         $cabecera[] = WriterEntityFactory::createRowFromArray(['Usuario: ' $user->getNombre() . ' ' $user->getPapellido() . ' ' $user->getSapellido()]);
  2633.         $cabecera[] = WriterEntityFactory::createRowFromArray(['Fecha inicial: ' $filtro['finicio']]);
  2634.         $cabecera[] = WriterEntityFactory::createRowFromArray(['Fecha final: ' $filtro['ffinal']]);
  2635.         $cabecera[] = WriterEntityFactory::createRowFromArray(['']);
  2636.         $cabecera[] = WriterEntityFactory::createRowFromArray([
  2637.             'Componente',
  2638.             'Total usados'
  2639.         ]);
  2640.         # Se crea el arreglo con los datos del cuerpo del documento
  2641.         $data = [];
  2642.         foreach ($movimientos as $m) {
  2643.             $data[] = WriterEntityFactory::createRowFromArray([
  2644.                 $m['cc_tipo'],
  2645.                 $m['x_count']
  2646.             ]);
  2647.         }
  2648.         # Se crea el documento en formato CSV
  2649.         $writer WriterEntityFactory::createXLSXWriter();
  2650.         $writer
  2651.             ->openToFile($filePath)
  2652.             ->addRows($cabecera)
  2653.             ->addRows($data)
  2654.             ->close();
  2655.         $response = new BinaryFileResponse($filePath);
  2656.         $response->setContentDisposition(
  2657.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  2658.             'reporteRefacciones' '_' date('Y-m-d') . '.xlsx'
  2659.         );
  2660.         $response->deleteFileAfterSend(true);
  2661.         return $response;
  2662.     }
  2663.     #[Route('/componentes/uso/reporte-pdf'name'app_componentes_uso_reporte_pdf'methods: ['POST'])]
  2664.     public function componentesUsoReportePdf(Request $requestSelloDigital $selloEntityManagerInterface $entityManager): Response
  2665.     {
  2666.         ini_set('memory_limit''5120M');
  2667.         ini_set('max_execution_time'0);
  2668.         ini_set('output_buffering'0);
  2669.         date_default_timezone_set('America/Mexico_City');
  2670.         setlocale(LC_ALL'es_MX');
  2671.         // Obtener la fecha actual
  2672.         $fecha date('d-m-Y');
  2673.         // Obtener usuario autenticado
  2674.         /** @var Usuario $user */
  2675.         $user $this->getUser();
  2676.         // Obtener los filtros del formulario
  2677.         $filtro $request->request->get('form');
  2678.         // Obtener las fechas del formulario o establecer fechas predeterminadas
  2679.         $filtro['finicio'] = !empty($filtro['finicio']) ? new DateTime($filtro['finicio']) : new DateTime('first day of this month');
  2680.         $filtro['ffinal'] = !empty($filtro['ffinal']) ? new DateTime($filtro['ffinal']) : new DateTime('last day of this month');
  2681.         // Aumentar el final por un día para incluir la fecha final
  2682.         $filtro['ffinal'] = $filtro['ffinal']->add(new DateInterval('P1D'))->format('Y-m-d');
  2683.         // Determinar la unidad a usar
  2684.         $unidadId = !empty($filtro['unidad']) ? $filtro['unidad'] : $user->getUnidad()->getIdUni();
  2685.         // Consulta SQL
  2686.         $conn $entityManager->getConnection();
  2687.         $sql "SELECT *, bm.id_mov, COUNT(*) AS x_count
  2688.         FROM bitacora_movimientos bm
  2689.         LEFT JOIN (SELECT id_componente, tipo AS cc_tipo FROM cat_componentes) AS cc ON cc.id_componente = bm.id_componente
  2690.         LEFT JOIN (SELECT id_uni, nombre AS u_nombre FROM unidad) AS u ON u.id_uni = bm.id_uni
  2691.         WHERE bm.id_uni = :id_uni AND bm.fecha_mov BETWEEN :finicio AND :ffinal
  2692.         GROUP BY cc_tipo ORDER BY cc_tipo ASC";
  2693.         // Ejecutar la consulta usando la unidad determinada
  2694.         $stmt $conn->prepare($sql);
  2695.         $stmt->bindValue('id_uni'$unidadId);
  2696.         $stmt->bindValue('finicio'$filtro['finicio']->format('Y-m-d'));
  2697.         $stmt->bindValue('ffinal'$filtro['ffinal']);
  2698.         $resultSet $stmt->executeQuery();
  2699.         $movimientos $resultSet->fetchAll();
  2700.         // Instanciar TCPDF y configurar el documento
  2701.         $pdf = new DocumentoPDF1();
  2702.         $pdf->setPrintFooter(false);
  2703.         $pdf->SetCreator('Conalep Estado de México');
  2704.         $pdf->SetAuthor('SIGMEC');
  2705.         $pdf->SetTitle('Reporte');
  2706.         $pdf->SetAutoPageBreak(TRUEPDF_MARGIN_BOTTOM);
  2707.         $pdf->AddPage('P''JIS_B4');
  2708.         $pdf->SetY(70);
  2709.         $pdf->setFontSubsetting(true);
  2710.         // Generar el contenido HTML dinámico para el PDF
  2711.         $html = <<<EOD
  2712. <h1>Reporte de Uso de Refacciones</h1>
  2713. <p>Fecha de creación: {$fecha}</p>
  2714. <p>Unidad: {$user->getUnidad()->getNombre()}</p>
  2715. <p>Gestor: {$user->getNombre()} {$user->getPapellido()} {$user->getSapellido()}</p>
  2716. <p>Fecha inicial: {$filtro['finicio']->format('Y-m-d')}</p>
  2717. <p>Fecha final: {$filtro['ffinal']}</p>
  2718. <table border="1" cellspacing="3" cellpadding="4">
  2719.     <thead>
  2720.         <tr>
  2721.             <th>Componente</th>
  2722.             <th>Total usados</th>
  2723.         </tr>
  2724.     </thead>
  2725.     <tbody>
  2726. EOD;
  2727.         // Agregar los datos de los movimientos al HTML
  2728.         foreach ($movimientos as $movimiento) {
  2729.             $html .= "<tr>
  2730.                 <td>{$movimiento['cc_tipo']}</td>
  2731.                 <td>{$movimiento['x_count']}</td>
  2732.               </tr>";
  2733.         }
  2734.         $html .= <<<EOD
  2735.     </tbody>
  2736. </table>
  2737. EOD;
  2738.         // Escribir el contenido HTML en el PDF
  2739.         $pdf->writeHTML($htmltrue0true0);
  2740.         // Enviar el PDF como respuesta para descarga
  2741.         $pdf->Output('reporte.pdf''D');
  2742.         // Retornar la respuesta para evitar errores
  2743.         return new Response();
  2744.     }
  2745.     #[Route('/inventario/reporte-pdf'name'app_componentes_reporte_pdf'methods: ['GET''POST'])]
  2746.     public function inventario_bitacora_pdf_componentes(Request $requestSelloDigital $selloEntityManagerInterface $entityManager): Response
  2747.     {
  2748.         ini_set('memory_limit''5120M');
  2749.         ini_set('max_execution_time'0);
  2750.         ini_set('output_buffering'0);
  2751.         date_default_timezone_set('America/Mexico_City');
  2752.         setlocale(LC_ALL'es_MX');
  2753.         $fecha date('d-m-Y');
  2754.         $filtro $request->request->get('form');
  2755.         $filtro['ffinal'] = new DateTime($filtro['ffinal']);
  2756.         $filtro['ffinal'] = $filtro['ffinal']->add(new DateInterval('P1D'))->format('Y-m-d');
  2757.         $movimientos $this->filtroConsulta($filtro$entityManager);
  2758.         // Declaración de la instancia de TCPDF
  2759.         $pdf = new DocumentoPDF1();
  2760.         $pdf->setPrintFooter(false);
  2761.         $pdf->SetCreator('Conalep Estado de México');
  2762.         $pdf->SetAuthor('SIGMEC');
  2763.         $pdf->SetTitle('Reporte');
  2764.         $pdf->SetAutoPageBreak(TRUEPDF_MARGIN_BOTTOM);
  2765.         $pdf->setFontSubsetting(true);
  2766.         // Dividir movimientos en grupos de 9 elementos
  2767.         $chunks array_chunk($movimientos9);
  2768.         // Iterar sobre cada grupo de 9 elementos para generar una nueva página por grupo
  2769.         foreach ($chunks as $i => $chunk) {
  2770.             // Agregar una nueva página para cada grupo de movimientos
  2771.             $pdf->AddPage('L''JIS_B4');
  2772.             $pdf->SetY(70); // Ajustar el margen superior
  2773.             // Crear tabla HTML
  2774.             $html '
  2775.         <table border="1" cellpadding="4">
  2776.             <thead>
  2777.                 <tr style="font-weight: bold; background-color: #f2f2f2;">
  2778.                     <th>Unidad</th>
  2779.                     <th>Tipo</th>
  2780.                     <th>Descripción</th>
  2781.                     <th>Equipo</th>
  2782.                     <th>Marbete</th>
  2783.                     <th>Usuario</th>
  2784.                     <th>Fecha Movimiento</th>
  2785.                     <th>Marca</th>
  2786.                     <th>Modelo</th>
  2787.                     <th>Serie</th>
  2788.                     <th>Unidad Origen</th>
  2789.                     <th>Solicitud</th>
  2790.                 </tr>
  2791.             </thead>
  2792.             <tbody>';
  2793.             // Agregar los movimientos del chunk actual a la tabla
  2794.             foreach ($chunk as $m) {
  2795.                 $html .= '
  2796.                 <tr>
  2797.                     <td>' htmlspecialchars($m['d_unidad']) . '</td>
  2798.                     <td>' htmlspecialchars($m['cc_tipo']) . '</td>
  2799.                     <td>' htmlspecialchars($m['cc_descripcion']) . '</td>
  2800.                     <td>' htmlspecialchars($m['bm_equipo']) . '</td>
  2801.                     <td>' htmlspecialchars($m['equipo_marbete']) . '</td>
  2802.                     <td>' htmlspecialchars($m['usuario_nombre']) . '</td>
  2803.                     <td>' htmlspecialchars($m['bm_fecha_movimiento']) . '</td>
  2804.                     <td>' htmlspecialchars($m['i_marca']) . '</td>
  2805.                     <td>' htmlspecialchars($m['i_modelo']) . '</td>
  2806.                     <td>' htmlspecialchars($m['i_serie']) . '</td>
  2807.                     <td>' htmlspecialchars($m['u_nombre']) . '</td>
  2808.                     <td>' htmlspecialchars($m['s_solicitud']) . '</td>
  2809.                 </tr>';
  2810.             }
  2811.             $html .= '
  2812.             </tbody>
  2813.         </table>';
  2814.             // Escribir el HTML de la tabla en la página actual
  2815.             $pdf->writeHTML($htmltruefalsetruefalse'');
  2816.         }
  2817.         // Enviar el PDF como respuesta para descarga
  2818.         $pdf->Output('reporte.pdf''I');
  2819.         return new Response(); // Este return evita un error, el PDF se envía directamente al navegador
  2820.     }
  2821.     public function filtroConsulta($filtroEntityManagerInterface $entityManager)
  2822.     {
  2823.         $conn $entityManager->getConnection();
  2824.         if ($filtro['componente'] != '' && $filtro['unidad'] != '' && $filtro['finicio'] != '' && $filtro['ffinal'] != '') {
  2825.             $sql "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo, 
  2826.                                bm.fecha_mov AS bm_fecha_movimiento, 
  2827.                                bm.observacion AS bm_observacion, 
  2828.                                u.u_nombre,
  2829.                                d.d_unidad,
  2830.                                s.id_sol AS s_solicitud,
  2831.                                s.tipo_mantenimiento AS s_tipo_mantenimiento,
  2832.                                s.falla AS s_falla,
  2833.                                s.srealizado AS s_srealizado,
  2834.                                s.fevaluacion AS s_fevaluacion,
  2835.                                s.refacciones AS s_refacciones,
  2836.                                s.estatus AS s_estatus,
  2837.                                s.unidad AS s_unidad,
  2838.                                cc.cc_tipo, 
  2839.                                cc.cc_descripcion,
  2840.                                eq.marbete AS equipo_marbete,
  2841.                                eq.serie AS equipo_serie,
  2842.                                us.usuario_nombre
  2843.                         FROM bitacora_movimientos bm
  2844.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  2845.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  2846.                         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
  2847.                         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
  2848.                         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
  2849.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  2850.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  2851.                 WHERE cc.id_componente = :tipo AND bm.id_uni = :id_uni AND bm.fecha_mov BETWEEN :finicio AND :ffinal
  2852.             ";
  2853.             $stmt $conn->prepare($sql);
  2854.             $stmt->bindValue('tipo'$filtro['componente']);
  2855.             $stmt->bindValue('id_uni'$filtro['unidad']);
  2856.             $stmt->bindValue('finicio'$filtro['finicio']);
  2857.             $stmt->bindValue('ffinal'$filtro['ffinal']);
  2858.         } elseif ($filtro['componente'] != '' && $filtro['unidad'] != '' && $filtro['finicio'] == '' && $filtro['ffinal'] != '') {
  2859.             $sql "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo, 
  2860.                                bm.fecha_mov AS bm_fecha_movimiento, 
  2861.                                bm.observacion AS bm_observacion, 
  2862.                                u.u_nombre,
  2863.                                d.d_unidad,
  2864.                                s.id_sol AS s_solicitud,
  2865.                                s.tipo_mantenimiento AS s_tipo_mantenimiento,
  2866.                                s.falla AS s_falla,
  2867.                                s.srealizado AS s_srealizado,
  2868.                                s.fevaluacion AS s_fevaluacion,
  2869.                                s.refacciones AS s_refacciones,
  2870.                                s.estatus AS s_estatus,
  2871.                                s.unidad AS s_unidad,
  2872.                                cc.cc_tipo, 
  2873.                                cc.cc_descripcion,
  2874.                                eq.marbete AS equipo_marbete,
  2875.                                eq.serie AS equipo_serie,
  2876.                                us.usuario_nombre
  2877.                         FROM bitacora_movimientos bm
  2878.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  2879.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  2880.                         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
  2881.                         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
  2882.                         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
  2883.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  2884.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  2885.                 WHERE cc_tipo = :tipo AND bm.id_uni = :id_uni AND bm.fecha_mov <= :ffinal
  2886.             ";
  2887.             $stmt $conn->prepare($sql);
  2888.             $stmt->bindValue('tipo'$filtro['componente']);
  2889.             $stmt->bindValue('id_uni'$filtro['unidad']);
  2890.             $stmt->bindValue('ffinal'$filtro['ffinal']);
  2891.         } elseif ($filtro['componente'] != '' && $filtro['unidad'] != '' && $filtro['finicio'] == '' && $filtro['ffinal'] == '') {
  2892.             $sql "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo, 
  2893.                                bm.fecha_mov AS bm_fecha_movimiento, 
  2894.                                bm.observacion AS bm_observacion, 
  2895.                                u.u_nombre,
  2896.                                d.d_unidad,
  2897.                                s.id_sol AS s_solicitud,
  2898.                                s.tipo_mantenimiento AS s_tipo_mantenimiento,
  2899.                                s.falla AS s_falla,
  2900.                                s.srealizado AS s_srealizado,
  2901.                                s.fevaluacion AS s_fevaluacion,
  2902.                                s.refacciones AS s_refacciones,
  2903.                                s.estatus AS s_estatus,
  2904.                                s.unidad AS s_unidad,
  2905.                                cc.cc_tipo, 
  2906.                                cc.cc_descripcion,
  2907.                                eq.marbete AS equipo_marbete,
  2908.                                eq.serie AS equipo_serie,
  2909.                                us.usuario_nombre
  2910.                         FROM bitacora_movimientos bm
  2911.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  2912.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  2913.                         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
  2914.                         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
  2915.                         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
  2916.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  2917.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  2918.                 WHERE cc_tipo = :tipo AND bm.id_uni = :id_uni
  2919.             ";
  2920.             $stmt $conn->prepare($sql);
  2921.             $stmt->bindValue('id_uni'$filtro['unidad']);
  2922.             $stmt->bindValue('tipo'$filtro['componente']);
  2923.         } elseif ($filtro['componente'] != '' && $filtro['unidad'] == '' && $filtro['finicio'] != '' && $filtro['ffinal'] != '') {
  2924.             $sql "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo, 
  2925.                                bm.fecha_mov AS bm_fecha_movimiento, 
  2926.                                bm.observacion AS bm_observacion, 
  2927.                                u.u_nombre,
  2928.                                d.d_unidad,
  2929.                                s.id_sol AS s_solicitud,
  2930.                                s.tipo_mantenimiento AS s_tipo_mantenimiento,
  2931.                                s.falla AS s_falla,
  2932.                                s.srealizado AS s_srealizado,
  2933.                                s.fevaluacion AS s_fevaluacion,
  2934.                                s.refacciones AS s_refacciones,
  2935.                                s.estatus AS s_estatus,
  2936.                                s.unidad AS s_unidad,
  2937.                                cc.cc_tipo, 
  2938.                                cc.cc_descripcion,
  2939.                                eq.marbete AS equipo_marbete,
  2940.                                eq.serie AS equipo_serie,
  2941.                                us.usuario_nombre
  2942.                         FROM bitacora_movimientos bm
  2943.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  2944.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  2945.                         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
  2946.                         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
  2947.                         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
  2948.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  2949.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  2950.                 WHERE cc_tipo = :tipo AND bm.fecha_mov BETWEEN :finicio AND :ffinal
  2951.             ";
  2952.             $stmt $conn->prepare($sql);
  2953.             $stmt->bindValue('tipo'$filtro['componente']);
  2954.             $stmt->bindValue('finicio'$filtro['finicio']);
  2955.             $stmt->bindValue('ffinal'$filtro['ffinal']);
  2956.         } elseif ($filtro['componente'] != '' && $filtro['unidad'] == '' && $filtro['finicio'] == '' && $filtro['ffinal'] != '') {
  2957.             $sql "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo, 
  2958.                                bm.fecha_mov AS bm_fecha_movimiento, 
  2959.                                bm.observacion AS bm_observacion, 
  2960.                                u.u_nombre,
  2961.                                d.d_unidad,
  2962.                                s.id_sol AS s_solicitud,
  2963.                                s.tipo_mantenimiento AS s_tipo_mantenimiento,
  2964.                                s.falla AS s_falla,
  2965.                                s.srealizado AS s_srealizado,
  2966.                                s.fevaluacion AS s_fevaluacion,
  2967.                                s.refacciones AS s_refacciones,
  2968.                                s.estatus AS s_estatus,
  2969.                                s.unidad AS s_unidad,
  2970.                                cc.cc_tipo, 
  2971.                                cc.cc_descripcion,
  2972.                                eq.marbete AS equipo_marbete,
  2973.                                eq.serie AS equipo_serie,
  2974.                                us.usuario_nombre
  2975.                         FROM bitacora_movimientos bm
  2976.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  2977.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  2978.                         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
  2979.                         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
  2980.                         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
  2981.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  2982.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  2983.                 WHERE cc_tipo = :tipo AND bm.fecha_mov <= :ffinal
  2984.             ";
  2985.             $stmt $conn->prepare($sql);
  2986.             $stmt->bindValue('tipo'$filtro['componente']);
  2987.             $stmt->bindValue('ffinal'$filtro['ffinal']);
  2988.         } elseif ($filtro['componente'] != '' && $filtro['unidad'] == '' && $filtro['finicio'] == '' && $filtro['ffinal'] == '') {
  2989.             $sql "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo, 
  2990.                                bm.fecha_mov AS bm_fecha_movimiento, 
  2991.                                bm.observacion AS bm_observacion, 
  2992.                                u.u_nombre,
  2993.                                d.d_unidad,
  2994.                                s.id_sol AS s_solicitud,
  2995.                                s.tipo_mantenimiento AS s_tipo_mantenimiento,
  2996.                                s.falla AS s_falla,
  2997.                                s.srealizado AS s_srealizado,
  2998.                                s.fevaluacion AS s_fevaluacion,
  2999.                                s.refacciones AS s_refacciones,
  3000.                                s.estatus AS s_estatus,
  3001.                                s.unidad AS s_unidad,
  3002.                                cc.cc_tipo, 
  3003.                                cc.cc_descripcion,
  3004.                                eq.marbete AS equipo_marbete,
  3005.                                eq.serie AS equipo_serie,
  3006.                                us.usuario_nombre
  3007.                         FROM bitacora_movimientos bm
  3008.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  3009.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  3010.                         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
  3011.                         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
  3012.                         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
  3013.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  3014.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  3015.                 WHERE cc_tipo = :tipo
  3016.             ";
  3017.             $stmt $conn->prepare($sql);
  3018.             $stmt->bindValue('tipo'$filtro['componente']);
  3019.         } elseif ($filtro['componente'] == '' && $filtro['unidad'] != '' && $filtro['finicio'] != '' && $filtro['ffinal'] != '') {
  3020.             $sql "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo, 
  3021.                                bm.fecha_mov AS bm_fecha_movimiento, 
  3022.                                bm.observacion AS bm_observacion, 
  3023.                                u.u_nombre,
  3024.                                d.d_unidad,
  3025.                                s.id_sol AS s_solicitud,
  3026.                                s.tipo_mantenimiento AS s_tipo_mantenimiento,
  3027.                                s.falla AS s_falla,
  3028.                                s.srealizado AS s_srealizado,
  3029.                                s.fevaluacion AS s_fevaluacion,
  3030.                                s.refacciones AS s_refacciones,
  3031.                                s.estatus AS s_estatus,
  3032.                                s.unidad AS s_unidad,
  3033.                                cc.cc_tipo, 
  3034.                                cc.cc_descripcion,
  3035.                                eq.marbete AS equipo_marbete,
  3036.                                eq.serie AS equipo_serie,
  3037.                                us.usuario_nombre
  3038.                         FROM bitacora_movimientos bm
  3039.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  3040.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  3041.                         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
  3042.                         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
  3043.                         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
  3044.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  3045.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  3046.                 WHERE bm.id_uni = :id_uni AND bm.fecha_mov BETWEEN :finicio AND :ffinal
  3047.             ";
  3048.             $stmt $conn->prepare($sql);
  3049.             $stmt->bindValue('id_uni'$filtro['unidad']);
  3050.             $stmt->bindValue('finicio'$filtro['finicio']);
  3051.             $stmt->bindValue('ffinal'$filtro['ffinal']);
  3052.         } elseif ($filtro['componente'] == '' && $filtro['unidad'] != '' && $filtro['finicio'] == '' && $filtro['ffinal'] != '') {
  3053.             $sql "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo, 
  3054.                                bm.fecha_mov AS bm_fecha_movimiento, 
  3055.                                bm.observacion AS bm_observacion, 
  3056.                                u.u_nombre,
  3057.                                d.d_unidad,
  3058.                                s.id_sol AS s_solicitud,
  3059.                                s.tipo_mantenimiento AS s_tipo_mantenimiento,
  3060.                                s.falla AS s_falla,
  3061.                                s.srealizado AS s_srealizado,
  3062.                                s.fevaluacion AS s_fevaluacion,
  3063.                                s.refacciones AS s_refacciones,
  3064.                                s.estatus AS s_estatus,
  3065.                                s.unidad AS s_unidad,
  3066.                                cc.cc_tipo, 
  3067.                                cc.cc_descripcion,
  3068.                                eq.marbete AS equipo_marbete,
  3069.                                eq.serie AS equipo_serie,
  3070.                                us.usuario_nombre
  3071.                         FROM bitacora_movimientos bm
  3072.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  3073.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  3074.                         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
  3075.                         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
  3076.                         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
  3077.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  3078.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  3079.                 WHERE bm.id_uni = :id_uni AND bm.fecha_mov <= :ffinal
  3080.             ";
  3081.             $stmt $conn->prepare($sql);
  3082.             $stmt->bindValue('id_uni'$filtro['unidad']);
  3083.             $stmt->bindValue('ffinal'$filtro['ffinal']);
  3084.         } elseif ($filtro['componente'] == '' && $filtro['unidad'] != '' && $filtro['finicio'] == '' && $filtro['ffinal'] == '') {
  3085.             $sql "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo, 
  3086.                                bm.fecha_mov AS bm_fecha_movimiento, 
  3087.                                bm.observacion AS bm_observacion, 
  3088.                                u.u_nombre,
  3089.                                d.d_unidad,
  3090.                                s.id_sol AS s_solicitud,
  3091.                                s.tipo_mantenimiento AS s_tipo_mantenimiento,
  3092.                                s.falla AS s_falla,
  3093.                                s.srealizado AS s_srealizado,
  3094.                                s.fevaluacion AS s_fevaluacion,
  3095.                                s.refacciones AS s_refacciones,
  3096.                                s.estatus AS s_estatus,
  3097.                                s.unidad AS s_unidad,
  3098.                                cc.cc_tipo, 
  3099.                                cc.cc_descripcion,
  3100.                                eq.marbete AS equipo_marbete,
  3101.                                eq.serie AS equipo_serie,
  3102.                                us.usuario_nombre
  3103.                         FROM bitacora_movimientos bm
  3104.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  3105.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  3106.                         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
  3107.                         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
  3108.                         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
  3109.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  3110.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  3111.                 WHERE bm.id_uni = :id_uni
  3112.             ";
  3113.             $stmt $conn->prepare($sql);
  3114.             $stmt->bindValue('id_uni'$filtro['unidad']);
  3115.         } elseif ($filtro['componente'] == '' && $filtro['unidad'] == '' && $filtro['finicio'] != '' && $filtro['ffinal'] != '') {
  3116.             $sql "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo, 
  3117.                                bm.fecha_mov AS bm_fecha_movimiento, 
  3118.                                bm.observacion AS bm_observacion, 
  3119.                                u.u_nombre,
  3120.                                d.d_unidad,
  3121.                                s.id_sol AS s_solicitud,
  3122.                                s.tipo_mantenimiento AS s_tipo_mantenimiento,
  3123.                                s.falla AS s_falla,
  3124.                                s.srealizado AS s_srealizado,
  3125.                                s.fevaluacion AS s_fevaluacion,
  3126.                                s.refacciones AS s_refacciones,
  3127.                                s.estatus AS s_estatus,
  3128.                                s.unidad AS s_unidad,
  3129.                                cc.cc_tipo, 
  3130.                                cc.cc_descripcion,
  3131.                                eq.marbete AS equipo_marbete,
  3132.                                eq.serie AS equipo_serie,
  3133.                                us.usuario_nombre
  3134.                         FROM bitacora_movimientos bm
  3135.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  3136.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  3137.                         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
  3138.                         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
  3139.                         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
  3140.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  3141.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  3142.                 WHERE bm.fecha_mov BETWEEN :finicio AND :ffinal
  3143.             ";
  3144.             $stmt $conn->prepare($sql);
  3145.             $stmt->bindValue('finicio'$filtro['finicio']);
  3146.             $stmt->bindValue('ffinal'$filtro['ffinal']);
  3147.         } elseif ($filtro['componente'] == '' && $filtro['unidad'] == '' && $filtro['finicio'] == '' && $filtro['ffinal'] != '') {
  3148.             $sql "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo, 
  3149.                                bm.fecha_mov AS bm_fecha_movimiento, 
  3150.                                bm.observacion AS bm_observacion, 
  3151.                                u.u_nombre,
  3152.                                d.d_unidad,
  3153.                                s.id_sol AS s_solicitud,
  3154.                                s.tipo_mantenimiento AS s_tipo_mantenimiento,
  3155.                                s.falla AS s_falla,
  3156.                                s.srealizado AS s_srealizado,
  3157.                                s.fevaluacion AS s_fevaluacion,
  3158.                                s.refacciones AS s_refacciones,
  3159.                                s.estatus AS s_estatus,
  3160.                                s.unidad AS s_unidad,
  3161.                                cc.cc_tipo, 
  3162.                                cc.cc_descripcion,
  3163.                                eq.marbete AS equipo_marbete,
  3164.                                eq.serie AS equipo_serie,
  3165.                                us.usuario_nombre
  3166.                         FROM bitacora_movimientos bm
  3167.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  3168.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  3169.                         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
  3170.                         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
  3171.                         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
  3172.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  3173.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  3174.                 WHERE bm.fecha_mov <= :ffinal
  3175.             ";
  3176.             $stmt $conn->prepare($sql);
  3177.             $stmt->bindValue('ffinal'$filtro['ffinal']);
  3178.         } else {
  3179.             $sql "SELECT DISTINCT *, bm.tipo_equipo AS bm_equipo, 
  3180.                                bm.fecha_mov AS bm_fecha_movimiento, 
  3181.                                bm.observacion AS bm_observacion, 
  3182.                                u.u_nombre,
  3183.                                d.d_unidad,
  3184.                                s.id_sol AS s_solicitud,
  3185.                                s.tipo_mantenimiento AS s_tipo_mantenimiento,
  3186.                                s.falla AS s_falla,
  3187.                                s.srealizado AS s_srealizado,
  3188.                                s.fevaluacion AS s_fevaluacion,
  3189.                                s.refacciones AS s_refacciones,
  3190.                                s.estatus AS s_estatus,
  3191.                                s.unidad AS s_unidad,
  3192.                                cc.cc_tipo, 
  3193.                                cc.cc_descripcion,
  3194.                                eq.marbete AS equipo_marbete,
  3195.                                eq.serie AS equipo_serie,
  3196.                                us.usuario_nombre
  3197.                         FROM bitacora_movimientos bm
  3198.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS u_nombre FROM usuario) AS u ON u.id_usu = bm.id_usu
  3199.                         LEFT JOIN (SELECT id_uni, nombre AS d_unidad FROM unidad) AS d ON d.id_uni = bm.id_uni
  3200.                         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
  3201.                         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
  3202.                         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
  3203.                         LEFT JOIN equipo eq ON eq.id_equ = s.id_equipo
  3204.                         LEFT JOIN (SELECT id_usu, CONCAT(nombre, ' ', papellido, ' ', sapellido) AS usuario_nombre FROM usuario) AS us ON us.id_usu = eq.usuario
  3205.             ";
  3206.             $stmt $conn->prepare($sql);
  3207.         }
  3208.         $resultSet $stmt->executeQuery();
  3209.         return $resultSet->fetchAll();
  3210.     }
  3211. //Para subir formulario
  3212. }