From d83f7599a342d6eaa8b350eb080b5d7c544e2f04 Mon Sep 17 00:00:00 2001 From: Alejandro Rosales Date: Tue, 18 Feb 2025 01:33:57 +0000 Subject: [PATCH] Facultades propias --- export/supervisor_excel.php | 442 ++++++++++++++++++------------------ 1 file changed, 221 insertions(+), 221 deletions(-) diff --git a/export/supervisor_excel.php b/export/supervisor_excel.php index 217523b..def4d3c 100644 --- a/export/supervisor_excel.php +++ b/export/supervisor_excel.php @@ -1,222 +1,222 @@ - 'unauthorized'])); -} -$user = unserialize($_SESSION['user']); - -$json = file_get_contents('php://input'); -$params = json_decode($json, true); - -$profesor_clave = isset($params['profesor']) - ? preg_replace('/[^\d]/', '', $params['profesor']) - : null; - -$data = $db->query( - "SELECT * FROM auditoria_mat - WHERE facultad_id = COALESCE(:facultad_id, facultad_id) - AND profesor_clave = COALESCE(:profesor_clave, profesor_clave) - AND REGISTRO_FECHA_IDEAL + HORARIO_HORA between :fecha_inicio AND :fecha_fin - ORDER BY REGISTRO_FECHA_IDEAL, HORARIO_HORA", - [ - 'facultad_id' => $params['facultad_id'], - 'profesor_clave' => $profesor_clave, - 'fecha_inicio' => $_SESSION['fecha_inicio'], - 'fecha_fin' => $_SESSION['fecha_fin'], - ] -); - -$estados = empty($params['estados']) ? null : $params['estados']; - -$data = array_filter( - $data, - fn($registro) => in_array($registro['estado_supervisor_id'], $estados ?? [$registro['estado_supervisor_id']]) -); - -$data = array_values($data); - -empty($data) and die(json_encode(['error' => 'No se recibieron datos', 'data' => $data])); - -use PhpOffice\PhpSpreadsheet\Spreadsheet; -use PhpOffice\PhpSpreadsheet\Style\Border; -use PhpOffice\PhpSpreadsheet\Style\Color; -use PhpOffice\PhpSpreadsheet\Style\Fill; -use PhpOffice\PhpSpreadsheet\Style\Alignment; -use PhpOffice\PhpSpreadsheet\IOFactory; - -$spreadsheet = new Spreadsheet(); -$sheet = $spreadsheet->getActiveSheet(); - -// Image settings -$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing(); -$drawing->setName('La Salle') - ->setDescription('La Salle') - ->setPath('../imagenes/logo.png') - ->setCoordinates('B1') - ->setHeight(100) - ->setOffsetX(10) - ->setWorksheet($spreadsheet->getActiveSheet()); - -$data_excel = array( - "FECHA" => 'registro_fecha_ideal', - "CLAVE" => 'profesor_clave', - "PROFESOR" => 'profesor_nombre', - "CORREO" => 'profesor_correo', - "FACULTAD" => 'facultad', - "MATERIA" => 'materia', - "CARRERA / PROGRAMA" => 'carrera', - "GRUPO" => 'horario_grupo', - "HORARIO" => 'horario_hora_completa', - "SALÓN" => 'salon', - "UNIDAD" => 'salon_array', - "REGISTRO PROFESOR" => 'asistencia', - "HORA DE REGISTRO" => 'registro_fecha', - "NOMBRE SUPERVISOR" => 'usuario_nombre', - "REGISTRO SUPERVISOR" => 'nombre', - "HORA DE SUPERVISIÓN" => 'registro_fecha_supervisor', - "OBSERVACIONES" => 'comentario', - "JUSTIFICACIÓN" => 'justificacion', -); // Same as before - - - -const ROW = 6; -// Merge cells from A1 to C+ ROW -$sheet->mergeCells('A1:C' . (ROW - 1)); -// Merge cells from D1 to size of $data_excel + 1 -$sheet->mergeCells('D1:' . chr(65 + count($data_excel) - 1) . (ROW - 1)); - -// Set the title in D1 Sistema de Auditoría de Asistencia -$sheet->setCellValue('D1', 'Sistema de Auditoría de Asistencia'); -$sheet->getStyle('D1')->applyFromArray([ - 'font' => [ - 'bold' => true, - 'size' => 30, - 'name' => 'Indivisa Text Sans', - 'color' => ['argb' => '001d68'], - ], - 'alignment' => [ - 'vertical' => Alignment::VERTICAL_CENTER, - ], -]); - - -$lastColumnLetter = chr(65 + count($data_excel) - 1); -$headers_range = 'A' . ROW . ':' . $lastColumnLetter . ROW; - -$keys = array_keys($data_excel); -array_walk($keys, function ($key, $index) use ($sheet) { - $sheet->setCellValue(chr(65 + $index) . ROW, $key); -}); -// Apply the header styles -$sheet->getStyle($headers_range)->applyFromArray([ - 'font' => [ - 'bold' => true, - 'size' => 12, - 'name' => 'Indivisa Text Sans', - 'color' => ['argb' => Color::COLOR_WHITE], - ], - 'alignment' => [ - 'horizontal' => Alignment::HORIZONTAL_CENTER, - 'vertical' => Alignment::VERTICAL_CENTER, - ], - 'fill' => [ - 'fillType' => Fill::FILL_SOLID, - 'startColor' => ['argb' => '001d68'], - ] -]); - -// set filters -$sheet->setAutoFilter($headers_range); - - - -// Styles that are common for all rows can be set outside the loop - -const DEFAULT_FONT = [ - 'size' => 10, - 'name' => 'Indivisa Text Sans', - 'color' => ['argb' => '001d68'] -]; - -const DEFAULT_STYLE = [ - 'alignment' => [ - 'vertical' => Alignment::VERTICAL_CENTER, - 'wrapText' => true, - ], - 'font' => DEFAULT_FONT, - 'borders' => [ - 'outline' => [ - 'borderStyle' => Border::BORDER_THIN, - 'color' => ['argb' => Color::COLOR_WHITE], - ] - ] -]; - -function getFormattedValue($key, $registro) -{ - return match ($key) { - 'asistencia' => $registro['registro_fecha'] === null - ? "Sin registro" - : ($registro['registro_retardo'] ? "Retardo " : "Asistencia "), - 'registro_fecha', - 'registro_fecha_supervisor' => $registro[$key] === null - ? 'Sin registro' - : date('H:i', strtotime($registro[$key])), - 'nombre' => $registro[$key] ?? "Sin registro", - 'horario_hora_completa' => "{$registro['horario_hora']} - {$registro['horario_fin']}", - 'usuario_nombre' => $registro[$key] ?? "Sin registro", - 'salon_array' => $registro[$key], - 'justificacion', - 'comentario' => $registro[$key] ?? "Sin registro", - 'horario_grupo' => $registro[$key] ?? "Sin registro", - 'profesor_correo' => $registro[$key] ?? "Sin correo", - default => $registro[$key] - }; -} - -foreach ($data as $index => $registro) { - $pair = $index % 2 == 0; - $cellRange = 'A' . (ROW + $index + 1) . ':' . $lastColumnLetter . (ROW + $index + 1); - $styleArray = DEFAULT_STYLE; - $styleArray['fill'] = [ - 'fillType' => Fill::FILL_SOLID, - 'startColor' => ['argb' => $pair ? 'd4d9dd' : 'f6f7f8'], - ]; - - $sheet->getStyle($cellRange)->applyFromArray($styleArray); - - $values = array_values($data_excel); - - array_walk($values, function ($row, $column_index) use ($sheet, $index, $registro) { - $value = getFormattedValue($row, $registro); - $cellLocation = chr(65 + $column_index) . (ROW + $index + 1); - - $sheet->setCellValue($cellLocation, $value); - - if (in_array($value, ["Sin registro", "Sin asignar", "Sin correo"])) { - $sheet->getStyle($cellLocation)->applyFromArray(['font' => ['color' => ['argb' => 'ea0029']]]); - } - }); -} - - -foreach ($sheet->getColumnIterator() as $column) { - $colIndex = $column->getColumnIndex(); - if (in_array($colIndex, ['Q', 'R'])) { - $sheet->getColumnDimension($colIndex)->setWidth(100); // Ajusta el valor según el tamaño deseado - } else { - $sheet->getColumnDimension($colIndex)->setAutoSize(true); - } -} - -$writer = IOFactory::createWriter($spreadsheet, 'Xlsx'); + 'unauthorized'])); +} +$user = unserialize($_SESSION['user']); + +$json = file_get_contents('php://input'); +$params = json_decode($json, true); + +$profesor_clave = isset($params['profesor']) + ? preg_replace('/[^\d]/', '', $params['profesor']) + : null; + +$data = $db->query( + "SELECT * FROM auditoria_mat + WHERE facultad_id = COALESCE(:facultad_id, facultad_id) + AND profesor_clave = COALESCE(:profesor_clave, profesor_clave) + AND REGISTRO_FECHA_IDEAL + HORARIO_HORA between :fecha_inicio AND :fecha_fin + ORDER BY REGISTRO_FECHA_IDEAL, HORARIO_HORA", + [ + 'facultad_id' => $user->facultad['facultad_id'], + 'profesor_clave' => $profesor_clave, + 'fecha_inicio' => $_SESSION['fecha_inicio'], + 'fecha_fin' => $_SESSION['fecha_fin'], + ] +); + +$estados = empty($params['estados']) ? null : $params['estados']; + +$data = array_filter( + $data, + fn($registro) => in_array($registro['estado_supervisor_id'], $estados ?? [$registro['estado_supervisor_id']]) +); + +$data = array_values($data); + +empty($data) and die(json_encode(['error' => 'No se recibieron datos', 'data' => $data])); + +use PhpOffice\PhpSpreadsheet\Spreadsheet; +use PhpOffice\PhpSpreadsheet\Style\Border; +use PhpOffice\PhpSpreadsheet\Style\Color; +use PhpOffice\PhpSpreadsheet\Style\Fill; +use PhpOffice\PhpSpreadsheet\Style\Alignment; +use PhpOffice\PhpSpreadsheet\IOFactory; + +$spreadsheet = new Spreadsheet(); +$sheet = $spreadsheet->getActiveSheet(); + +// Image settings +$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing(); +$drawing->setName('La Salle') + ->setDescription('La Salle') + ->setPath('../imagenes/logo.png') + ->setCoordinates('B1') + ->setHeight(100) + ->setOffsetX(10) + ->setWorksheet($spreadsheet->getActiveSheet()); + +$data_excel = array( + "FECHA" => 'registro_fecha_ideal', + "CLAVE" => 'profesor_clave', + "PROFESOR" => 'profesor_nombre', + "CORREO" => 'profesor_correo', + "FACULTAD" => 'facultad', + "MATERIA" => 'materia', + "CARRERA / PROGRAMA" => 'carrera', + "GRUPO" => 'horario_grupo', + "HORARIO" => 'horario_hora_completa', + "SALÓN" => 'salon', + "UNIDAD" => 'salon_array', + "REGISTRO PROFESOR" => 'asistencia', + "HORA DE REGISTRO" => 'registro_fecha', + "NOMBRE SUPERVISOR" => 'usuario_nombre', + "REGISTRO SUPERVISOR" => 'nombre', + "HORA DE SUPERVISIÓN" => 'registro_fecha_supervisor', + "OBSERVACIONES" => 'comentario', + "JUSTIFICACIÓN" => 'justificacion', +); // Same as before + + + +const ROW = 6; +// Merge cells from A1 to C+ ROW +$sheet->mergeCells('A1:C' . (ROW - 1)); +// Merge cells from D1 to size of $data_excel + 1 +$sheet->mergeCells('D1:' . chr(65 + count($data_excel) - 1) . (ROW - 1)); + +// Set the title in D1 Sistema de Auditoría de Asistencia +$sheet->setCellValue('D1', 'Sistema de Auditoría de Asistencia'); +$sheet->getStyle('D1')->applyFromArray([ + 'font' => [ + 'bold' => true, + 'size' => 30, + 'name' => 'Indivisa Text Sans', + 'color' => ['argb' => '001d68'], + ], + 'alignment' => [ + 'vertical' => Alignment::VERTICAL_CENTER, + ], +]); + + +$lastColumnLetter = chr(65 + count($data_excel) - 1); +$headers_range = 'A' . ROW . ':' . $lastColumnLetter . ROW; + +$keys = array_keys($data_excel); +array_walk($keys, function ($key, $index) use ($sheet) { + $sheet->setCellValue(chr(65 + $index) . ROW, $key); +}); +// Apply the header styles +$sheet->getStyle($headers_range)->applyFromArray([ + 'font' => [ + 'bold' => true, + 'size' => 12, + 'name' => 'Indivisa Text Sans', + 'color' => ['argb' => Color::COLOR_WHITE], + ], + 'alignment' => [ + 'horizontal' => Alignment::HORIZONTAL_CENTER, + 'vertical' => Alignment::VERTICAL_CENTER, + ], + 'fill' => [ + 'fillType' => Fill::FILL_SOLID, + 'startColor' => ['argb' => '001d68'], + ] +]); + +// set filters +$sheet->setAutoFilter($headers_range); + + + +// Styles that are common for all rows can be set outside the loop + +const DEFAULT_FONT = [ + 'size' => 10, + 'name' => 'Indivisa Text Sans', + 'color' => ['argb' => '001d68'] +]; + +const DEFAULT_STYLE = [ + 'alignment' => [ + 'vertical' => Alignment::VERTICAL_CENTER, + 'wrapText' => true, + ], + 'font' => DEFAULT_FONT, + 'borders' => [ + 'outline' => [ + 'borderStyle' => Border::BORDER_THIN, + 'color' => ['argb' => Color::COLOR_WHITE], + ] + ] +]; + +function getFormattedValue($key, $registro) +{ + return match ($key) { + 'asistencia' => $registro['registro_fecha'] === null + ? "Sin registro" + : ($registro['registro_retardo'] ? "Retardo " : "Asistencia "), + 'registro_fecha', + 'registro_fecha_supervisor' => $registro[$key] === null + ? 'Sin registro' + : date('H:i', strtotime($registro[$key])), + 'nombre' => $registro[$key] ?? "Sin registro", + 'horario_hora_completa' => "{$registro['horario_hora']} - {$registro['horario_fin']}", + 'usuario_nombre' => $registro[$key] ?? "Sin registro", + 'salon_array' => $registro[$key], + 'justificacion', + 'comentario' => $registro[$key] ?? "Sin registro", + 'horario_grupo' => $registro[$key] ?? "Sin registro", + 'profesor_correo' => $registro[$key] ?? "Sin correo", + default => $registro[$key] + }; +} + +foreach ($data as $index => $registro) { + $pair = $index % 2 == 0; + $cellRange = 'A' . (ROW + $index + 1) . ':' . $lastColumnLetter . (ROW + $index + 1); + $styleArray = DEFAULT_STYLE; + $styleArray['fill'] = [ + 'fillType' => Fill::FILL_SOLID, + 'startColor' => ['argb' => $pair ? 'd4d9dd' : 'f6f7f8'], + ]; + + $sheet->getStyle($cellRange)->applyFromArray($styleArray); + + $values = array_values($data_excel); + + array_walk($values, function ($row, $column_index) use ($sheet, $index, $registro) { + $value = getFormattedValue($row, $registro); + $cellLocation = chr(65 + $column_index) . (ROW + $index + 1); + + $sheet->setCellValue($cellLocation, $value); + + if (in_array($value, ["Sin registro", "Sin asignar", "Sin correo"])) { + $sheet->getStyle($cellLocation)->applyFromArray(['font' => ['color' => ['argb' => 'ea0029']]]); + } + }); +} + + +foreach ($sheet->getColumnIterator() as $column) { + $colIndex = $column->getColumnIndex(); + if (in_array($colIndex, ['Q', 'R'])) { + $sheet->getColumnDimension($colIndex)->setWidth(100); // Ajusta el valor según el tamaño deseado + } else { + $sheet->getColumnDimension($colIndex)->setAutoSize(true); + } +} + +$writer = IOFactory::createWriter($spreadsheet, 'Xlsx'); $writer->save('php://output'); \ No newline at end of file