src/Controller/ReporteController.php line 37

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