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