action_asistencias_excel.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. $ruta = "../";
  3. require_once "../vendor/autoload.php";
  4. require_once "../class/c_login.php";
  5. if (!isset($_SESSION['user']))
  6. die(json_encode(['error' => 'No se ha iniciado sesión']));
  7. $user = unserialize($_SESSION['user']);
  8. $user->print_to_log('Genera excel de asistencias');
  9. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  10. $spreadsheet = new Spreadsheet();
  11. $sheet = $spreadsheet->getActiveSheet();
  12. //crea imagen
  13. $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
  14. $drawing->setName('La Salle');
  15. $drawing->setDescription('La Salle');
  16. $drawing->setPath('../imagenes/logo.png'); // put your path and image here
  17. $drawing->setCoordinates('A1');
  18. $drawing->setHeight(100);
  19. $drawing->setOffsetX(10);
  20. //agrega imagen
  21. $drawing->setWorksheet($spreadsheet->getActiveSheet());
  22. // In POST
  23. /** Array
  24. * * nombre
  25. * * clave
  26. * * id
  27. * * total
  28. * * asistencias
  29. * * faltas
  30. * * justificaciones
  31. * * retardos
  32. */
  33. $retardo = query("SELECT COALESCE(FS_HAS_RETARDO(:facultad), FALSE) AS retardo", [':facultad' => $user->facultad['facultad_id']])['retardo'];
  34. extract($_POST);
  35. $row = 6;
  36. $sheet->setCellValue("A$row", 'Clave');
  37. $sheet->setCellValue("B$row", 'Profesor');
  38. $sheet->setCellValue("C$row", 'Asistencias');
  39. $sheet->setCellValue("D$row", 'Faltas');
  40. $sheet->setCellValue("E$row", 'Justificaciones');
  41. $sheet->setCellValue("F$row", 'Retardos');
  42. $sheet->setCellValue("G$row", 'Total');
  43. // $row++;
  44. $col = 0;
  45. # die(print_r($asistencias, true));
  46. foreach (json_decode($asistencias, true) as $profesor) {
  47. $row++;
  48. $sheet->setCellValue("A$row", $profesor['profesor_clave']);
  49. $sheet->setCellValue("B$row", $profesor['profesor_nombre']);
  50. $sheet->setCellValue("C$row", $profesor['asistencias']);
  51. $sheet->setCellValue("D$row", $profesor['faltas']);
  52. $sheet->setCellValue("E$row", $profesor['justificaciones']);
  53. $sheet->setCellValue("F$row", $profesor['retardos']);
  54. $sheet->setCellValue("G$row", $profesor['total']);
  55. }
  56. # Style
  57. $sheet->getStyle("A6:G$row")->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
  58. $sheet->getStyle("A6:G$row")->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
  59. $sheet->getStyle("A6:G$row")->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
  60. $sheet->getStyle("A6:G$row")->getAlignment()->setWrapText(true);
  61. $sheet->getStyle("A6:G$row")->getFont()->setSize(12);
  62. $sheet->getStyle("A6:G$row")->getFont()->setName('Indivisa Sans');
  63. # Autosize columns
  64. foreach (range('A', 'G') as $column) {
  65. $sheet->getColumnDimension($column)->setAutoSize(true);
  66. }
  67. # filters in the column
  68. $sheet->setAutoFilter("A6:G6");
  69. if (!$retardo) # hide column
  70. $sheet->getColumnDimension('F')->setVisible(false);
  71. #$writer = new Xlsx($spreadsheet);
  72. $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
  73. # $writer->save('asistencias.xlsx');
  74. // download
  75. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  76. header('Content-Disposition: attachment;filename="asistencias.xlsx"');
  77. header('Cache-Control: max-age=0');
  78. // cache expires in 60 seconds (1 minute)
  79. header('Expires: mon 26 jul 1997 05:00:00 gmt');
  80. header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
  81. header('Cache-Control: cache, must-revalidate');
  82. header('Pragma: public');
  83. $writer->save('php://output');