xls_examenesextraordinarios.php 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. <?php
  2. setlocale(LC_TIME, 'es_MX.UTF-8');
  3. require_once("../../include/nocache.php");
  4. require_once("../../include/constantes.php");
  5. require_once("../../include/bd_pdo.php");
  6. require_once("../../include/util.php");
  7. require_once("../../classes/ValidaSesion.php");
  8. require_once("../classes/ArchivoMaterias.php");
  9. require "../../include/phpSpreadsheet/autoload.php";
  10. use PhpOffice\PhpSpreadsheet\IOFactory;
  11. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  12. use PhpOffice\PhpSpreadsheet\Style\Border;
  13. use PhpOffice\PhpSpreadsheet\Style\Fill;
  14. use PhpOffice\PhpSpreadsheet\Style\Style;
  15. use PhpOffice\PhpSpreadsheet\Shared\Date;
  16. use PhpOffice\PhpSpreadsheet\Style\Alignment;
  17. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  18. $objSesion = new ValidaSesion($pdo, 274, APSA);
  19. if(!$objSesion->tieneAcceso()){
  20. header("Location: ".$pag."?error=3");
  21. exit();
  22. }
  23. unset($objValida);
  24. //Obtiene fechas de extraordinarios del periodo
  25. $stmt = $pdo->prepare('Select * from fs_fechaimportante(:periodo, 2)');
  26. $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
  27. if(!$stmt->execute()){
  28. $errorDesc = "Ocurrió un error al cargar las fechas de extraordinarios del periodo";
  29. }else{
  30. $extras_rs = $stmt->fetch();
  31. }
  32. $stmt->closeCursor();
  33. //Obtiene examenes
  34. $query = "";
  35. if(isset($_POST["sem"]) && is_numeric($_POST["sem"])){
  36. $query .= ":sem,";
  37. $filter_sem = filter_input(INPUT_POST, "sem", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  38. }else{
  39. $query .= "NULL,";
  40. }
  41. if(isset($_POST["plan"]) && is_numeric($_POST["plan"])){
  42. $query .= ":plan,";
  43. $filter_plan = filter_input(INPUT_POST, "plan", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  44. }else{
  45. $query .= "NULL,";
  46. }
  47. if(isset($_POST["area"]) && is_numeric($_POST["area"])){
  48. $query .= ":area,";
  49. $filter_area = filter_input(INPUT_POST, "area", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  50. }else{
  51. $query .= "NULL,";
  52. }
  53. if(isset($_POST["fecha_inicial"]) && $_POST["fecha_inicial"]!=""){
  54. $filter_fini = trim(filter_input(INPUT_POST, "fecha_inicial", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto
  55. }
  56. if(isset($_POST["fecha_final"]) && $_POST["fecha_final"]!=""){
  57. $filter_ffin = trim(filter_input(INPUT_POST, "fecha_final", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto
  58. }
  59. if(isset($filter_fini)) $fecha_ini = fechaGuion($filter_fini); else $fecha_ini = $extras_rs["FechaImportante_inicial"];
  60. if(isset($filter_ffin)) $fecha_fin = fechaGuion($filter_ffin); else $fecha_fin = $extras_rs["FechaImportante_final"];
  61. $stmt = $pdo->prepare('Select * from fs_examen(NULL, :periodo, '.$query.' :fini, :ffin, NULL, 0, NULL )');
  62. $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
  63. $stmt->bindParam(":fini", $fecha_ini);
  64. $stmt->bindParam(":ffin", $fecha_fin);
  65. //if(isset($filter_extra)) $stmt->bindParam(":extra", $filter_extra);
  66. if(isset($filter_plan)) $stmt->bindParam(":plan", $filter_plan);
  67. if(isset($filter_area)) $stmt->bindParam(":area", $filter_area);
  68. if(isset($filter_sem)) $stmt->bindParam(":sem", $filter_sem);
  69. if(!$stmt->execute()){
  70. print_r($stmt->errorInfo());
  71. $errorDesc = "Ocurrió un error al cargar los exámenes";
  72. }else{
  73. $examenes_rs = $stmt->fetchAll();
  74. }
  75. $stmt->closeCursor();
  76. $pendiente = "Pendiente";
  77. //--------
  78. //
  79. // Create new Spreadsheet object
  80. $spreadsheet = new Spreadsheet();
  81. // Set document properties
  82. $spreadsheet->getProperties()->setCreator('Ingeniería La Salle')
  83. ->setLastModifiedBy('Ingeniería La Salle')
  84. ->setTitle('Exámenes extraordinarios')
  85. ->setDescription('Exámenes extraordinarios en el periodo.');
  86. // Rename worksheet
  87. $spreadsheet->getActiveSheet()->setTitle('Examen');
  88. $headerStyle = new Style();
  89. $headerStyle->applyFromArray(
  90. [
  91. 'fill' => [
  92. 'fillType' => Fill::FILL_SOLID,
  93. 'color' => ['argb' => 'FF001d68'],
  94. ],
  95. 'borders' => [
  96. 'bottom' => ['borderStyle' => Border::BORDER_THIN],
  97. 'right' => ['borderStyle' => Border::BORDER_MEDIUM],
  98. ],
  99. 'font' => [
  100. 'bold' => true,
  101. 'color' => ['argb' => 'FFFFFFFF'],
  102. 'name' => 'Indivisa Text Sans',
  103. ]
  104. ]
  105. );
  106. $bodyStyle = new Style();
  107. $bodyStyle->applyFromArray(
  108. [
  109. 'alignment' => [
  110. 'vertical' => Alignment::VERTICAL_TOP,
  111. ],
  112. 'font' => [
  113. 'size' => 10,
  114. 'name' => 'Indivisa Text Sans',
  115. ],
  116. 'borders' => [
  117. 'allBorders' => [
  118. 'borderStyle' => Border::BORDER_THIN,
  119. 'color' => ['argb' => 'FF001d68'],
  120. ],
  121. /*'inside' => ['borderStyle' => Border::BORDER_THIN],*/
  122. ],
  123. ]
  124. );
  125. $spreadsheet->getDefaultStyle()->getFont()->setName('Indivisa Text Sans');
  126. $row_base = 6;
  127. //crea imagen
  128. $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
  129. $drawing->setName('La Salle');
  130. $drawing->setDescription('La Salle');
  131. $drawing->setPath('../../img/logopdf.png'); // put your path and image here
  132. $drawing->setCoordinates('A1');
  133. $drawing->setHeight(100);
  134. $drawing->setOffsetX(10);
  135. //agrega imagen
  136. $drawing->setWorksheet($spreadsheet->getActiveSheet());
  137. //crea imagen
  138. $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
  139. $drawing->setName('Facultad de Ingenería');
  140. $drawing->setDescription('Facultad de Ingenería');
  141. $drawing->setPath('../../img/logoIngenieria.png'); // put your path and image here
  142. $drawing->setCoordinates('F1');
  143. $drawing->setHeight(100);
  144. $drawing->setOffsetX(-20);
  145. //agrega imagen
  146. $drawing->setWorksheet($spreadsheet->getActiveSheet());
  147. $row = $row_base;
  148. $col = 1;
  149. $spreadsheet->setActiveSheetIndex(0)
  150. ->setCellValueByColumnAndRow($col++, $row, 'Semestre')
  151. ->setCellValueByColumnAndRow($col++, $row, 'Materia')
  152. ->setCellValueByColumnAndRow($col++, $row, 'Fecha')
  153. ->setCellValueByColumnAndRow($col++, $row, 'Horario')
  154. ->setCellValueByColumnAndRow($col++, $row, 'Salón')
  155. ->setCellValueByColumnAndRow($col++, $row, 'Profesor');
  156. $spreadsheet->getActiveSheet()->duplicateStyle($headerStyle, 'A'.$row.':F'.$row);
  157. $row ++;
  158. foreach($examenes_rs as $examen){
  159. $fechaIArr = explode(" ", $examen["Examen_fechahora_inicial"]);
  160. $fechaFArr = explode(" ", $examen["Examen_fechahora_final"]);
  161. $horas = date('H:i', strtotime($fechaIArr[1]))." a ".date('H:i', strtotime($fechaFArr[1]))." hrs.";
  162. $salon = "Pendiente";
  163. if($examen["Salon_desc"]!= ""){
  164. if($examen["Salon_desc_larga"] != "")
  165. $salon = $examen["Salon_desc"]." (".$examen["Salon_desc_larga"].")";
  166. else
  167. $salon = $examen["Salon_desc"];
  168. }
  169. $semestre = "Electiva";
  170. if($examen["Materia_semestre"] != "")
  171. $semestre = $examen["Materia_semestre"];
  172. $col = 1;
  173. $spreadsheet->setActiveSheetIndex(0)
  174. ->setCellValueByColumnAndRow($col++, $row, $semestre)
  175. ->setCellValueByColumnAndRow($col++, $row, $examen["Materia_desc"]." (".$examen["Carrera_prefijo"]." ".$examen["PlanEstudio_desc"].")")
  176. ->setCellValueByColumnAndRow($col++, $row, fechaSlash($fechaIArr[0]))
  177. ->setCellValueByColumnAndRow($col++, $row, $horas)
  178. ->setCellValueByColumnAndRow($col++, $row, $salon)
  179. ->setCellValueByColumnAndRow($col++, $row, $examen["Usuario_apellidos"]." ".$examen["Usuario_nombre"]);
  180. $spreadsheet->getActiveSheet()->duplicateStyle($bodyStyle, 'A'.$row.':F'.$row);
  181. /*$spreadsheet->getActiveSheet()->getStyle('A'.$row)->getAlignment()->setWrapText(true);
  182. $spreadsheet->getActiveSheet()->getStyle('B'.$row)->getAlignment()->setWrapText(true);
  183. $spreadsheet->getActiveSheet()->getStyle('E'.$row)->getAlignment()->setWrapText(true);*/
  184. $row++;
  185. }//for each materias
  186. //$spreadsheet->getActiveSheet()->getStyle('A1:H1')->getFont()->setBold(true);
  187. $spreadsheet->getActiveSheet()->setAutoFilter($spreadsheet->getActiveSheet()->calculateWorksheetDimension());
  188. //Auto ajustar anchos
  189. $spreadsheet->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);
  190. //$spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(15);
  191. //$spreadsheet->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
  192. $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(35);
  193. $spreadsheet->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);
  194. $spreadsheet->getActiveSheet()->getColumnDimension('D')->setAutoSize(true);
  195. $spreadsheet->getActiveSheet()->getColumnDimension('E')->setAutoSize(true);
  196. $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(35);
  197. //$spreadsheet->getActiveSheet()->getColumnDimension('F')->setAutoSize(true);
  198. // Set active sheet index to the first sheet, so Excel opens this as the first sheet
  199. $spreadsheet->setActiveSheetIndex(0);
  200. // Redirect output to a client’s web browser (Xlsx)
  201. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  202. header('Content-Disposition: attachment;filename="examenesExtraordinarios_'.date("y-m-d").'.xlsx"');
  203. header('Cache-Control: max-age=0');
  204. // If you're serving to IE 9, then the following may be needed
  205. header('Cache-Control: max-age=1');
  206. // If you're serving to IE over SSL, then the following may be needed
  207. header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
  208. header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
  209. header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
  210. header('Pragma: public'); // HTTP/1.0
  211. $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
  212. $writer->save('php://output');
  213. exit;