xls_asistenciasprofesor.php 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  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 "../../include/phpSpreadsheet/autoload.php";
  9. use PhpOffice\PhpSpreadsheet\IOFactory;
  10. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  11. use PhpOffice\PhpSpreadsheet\Style\Border;
  12. use PhpOffice\PhpSpreadsheet\Style\Fill;
  13. use PhpOffice\PhpSpreadsheet\Style\Style;
  14. use PhpOffice\PhpSpreadsheet\Shared\Date;
  15. $pag = "../reporte_asistenciasprofesor.php";
  16. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  17. $objSesion = new ValidaSesion($pdo, array(72, 81), APSA);
  18. if(!$objSesion->tieneAcceso()){
  19. header("Location: ".$pag."?error=3");
  20. exit();
  21. }
  22. unset($objValida);
  23. if(empty($_POST["fecha_inicial"]) || empty($_POST["fecha_final"]) || !isset($_POST["hora_inicial"]) || !isset($_POST["hora_final"]) || !isset($_POST["clave"])){
  24. //header("Location: ".$pag."?error=0");
  25. echo "<h1>Error, no se recibieron los datos</h1>";
  26. exit();
  27. }
  28. //$filter_periodo = filter_input(INPUT_POST, "periodo", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  29. $filter_periodo = $_SESSION["periodo_id"];
  30. //Periodo
  31. $stmt = $pdo->prepare('Select * from fs_periodo(:id, NULL, NULL, NULL)');
  32. $stmt->bindParam(":id", $filter_periodo);
  33. if(!$stmt->execute()){
  34. $errorDesc = "Ocurrió un error al cargar el periodo";
  35. }else{
  36. $periodo_rs = $stmt->fetch();
  37. }
  38. $stmt->closeCursor();
  39. //Obtiene profesores
  40. $filter_fini = trim(filter_input(INPUT_POST, "fecha_inicial", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto
  41. $filter_ffin = trim(filter_input(INPUT_POST, "fecha_final", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto
  42. if(isset($_POST["hora_inicial"]) && $_POST["hora_inicial"]!=""){
  43. $filter_hini = trim(filter_input(INPUT_POST, "hora_inicial", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto
  44. }else{
  45. $filter_hini = '00:00';
  46. }
  47. if(isset($_POST["hora_final"]) && $_POST["hora_final"]!=""){
  48. $filter_hfin = trim(filter_input(INPUT_POST, "hora_final", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto
  49. }else{
  50. $filter_hfin = '23:59';
  51. }
  52. $query = "";
  53. $query .= "NULL,";
  54. if(isset($_POST["clave"]) && $_POST["clave"] != ""){
  55. $query .= ":clave,";
  56. $filter_clave = filter_input(INPUT_POST, "clave", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  57. }else{
  58. $query .= "NULL,";
  59. }
  60. if(isset($_POST["area"]) && is_numeric($_POST["area"]) && trim($_POST["area"]) != ""){
  61. $query .= ":area,";
  62. $filter_area = filter_input(INPUT_POST, "area", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  63. }else{
  64. $query .= "NULL,";
  65. }
  66. $hoy_fecha = date("Y-m-d");
  67. if(isset($filter_fini)) $fecha_ini = fechaGuion($filter_fini); else $fecha_ini = $periodo_rs["Periodo_fecha_inicial"];
  68. if(isset($filter_ffin)){
  69. $fecha_fin = fechaGuion($filter_ffin);
  70. }else{
  71. if($periodo_rs["Periodo_fecha_final"] < $hoy_fecha){
  72. $fecha_fin = $periodo_rs["Periodo_fecha_final"];
  73. }else{
  74. $fecha_fin = $hoy_fecha;
  75. }
  76. }
  77. $stmt = $pdo->prepare('Select * from fs_asistenciaprofesores(:per, :fini, :ffin, :hini, :hfin, '.$query.' 0, NULL)');//sólo activos
  78. $stmt->bindParam(":per", $filter_periodo);
  79. $stmt->bindParam(":fini", $fecha_ini);
  80. $stmt->bindParam(":ffin", $fecha_fin);
  81. $stmt->bindParam(":hini", $filter_hini);
  82. $stmt->bindParam(":hfin", $filter_hfin);
  83. if(isset($filter_desc)) $stmt->bindParam(":desc", $filter_desc);
  84. if(isset($filter_clave)) $stmt->bindParam(":clave", $filter_clave);
  85. if(isset($filter_area)) $stmt->bindParam(":area", $filter_area);
  86. if(!$stmt->execute()){
  87. $errorDesc = "Ocurrió un error al cargar los profesores";
  88. print_r($stmt->errorInfo());
  89. exit();
  90. }else{
  91. $profesores_rs = $stmt->fetchAll();
  92. }
  93. $stmt->closeCursor();
  94. //--------
  95. //
  96. // Create new Spreadsheet object
  97. $spreadsheet = new Spreadsheet();
  98. // Set document properties
  99. $spreadsheet->getProperties()->setCreator('Ingeniería La Salle')
  100. ->setLastModifiedBy('Ingeniería La Salle')
  101. ->setTitle('Asistencias profesores')
  102. ->setDescription('Reporte de asistencia de profesores.');
  103. // Rename worksheet
  104. $spreadsheet->getActiveSheet()->setTitle('Asistencias');
  105. $headerStyle = new Style();
  106. $headerStyle->applyFromArray(
  107. [
  108. 'fill' => [
  109. 'fillType' => Fill::FILL_SOLID,
  110. 'color' => ['argb' => 'FF001d68'],
  111. ],
  112. 'borders' => [
  113. 'bottom' => ['borderStyle' => Border::BORDER_THIN],
  114. 'right' => ['borderStyle' => Border::BORDER_MEDIUM],
  115. ],
  116. 'font' => [
  117. 'bold' => true,
  118. 'color' => ['argb' => 'FFFFFFFF'],
  119. ]
  120. ]
  121. );
  122. // Add some data
  123. $spreadsheet->setActiveSheetIndex(0)
  124. ->setCellValue('A1', 'Profesor')
  125. ->setCellValue('B1', 'Grupo')
  126. ->setCellValue('C1', 'Materia')
  127. ->setCellValue('D1', 'Fecha')
  128. ->setCellValue('E1', 'Hora de entrada')
  129. ->setCellValue('F1', 'Hora checador')
  130. ->setCellValue('G1', 'Estatus')
  131. ->setCellValue('H1', 'Área');
  132. $spreadsheet->getActiveSheet()->duplicateStyle($headerStyle, 'A1:H1');
  133. $highestRow = count($profesores_rs)+1;
  134. //formato de fecha
  135. $spreadsheet->getActiveSheet()->getStyle('D2:D'.($highestRow))
  136. ->getNumberFormat()
  137. ->setFormatCode(
  138. \PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DDMMYYYY
  139. );
  140. //Centrar fecha y horas
  141. $spreadsheet->getActiveSheet()->getStyle('D2:F'.$highestRow)->getAlignment()->setHorizontal('center');
  142. $row = 2;
  143. foreach($profesores_rs as $profesor){
  144. $col = 1;
  145. $checador = "";
  146. if(isset($profesor["Asistencia_checador_inicial"]) && $profesor["Asistencia_checador_inicial"] != "")
  147. $checador = date('H:i', strtotime($profesor["Asistencia_checador_inicial"]));
  148. $colorStatus = '';
  149. if(isset($profesor["Asistencia_isRetardo"]) && $profesor["Asistencia_isRetardo"] !== ""){
  150. if($profesor["Asistencia_isRetardo"]){
  151. $status = "Retardo";
  152. $colorStatus = 'FFFFCC00';
  153. }else{
  154. if($profesor["Asistencia_isJustificada"]){
  155. $status = "Justificada";
  156. $colorStatus = 'FF001d68';
  157. }else{
  158. $status = "Asistencia";
  159. $colorStatus = 'FF339933';
  160. }
  161. }
  162. }else{
  163. $status = "Sin registro";
  164. $colorStatus = 'ffce0e2d';
  165. }
  166. $reposicion = '';
  167. if($profesor["Asistencia_isReposicion"]) $reposicion = ' (Reposición)';
  168. $spreadsheet->setActiveSheetIndex(0)
  169. ->setCellValueByColumnAndRow($col++, $row, $profesor["Usuario_apellidos"]." ".$profesor["Usuario_nombre"])
  170. ->setCellValueByColumnAndRow($col++, $row, $profesor["Grupo_desc"]." ".$profesor["Carrera_prefijo"])
  171. ->setCellValueByColumnAndRow($col++, $row, $profesor["Materia_desc"])
  172. ->setCellValueByColumnAndRow($col++, $row, Date::PHPToExcel(fechaSlash($profesor["Fecha"])))
  173. ->setCellValueByColumnAndRow($col++, $row, date('H:i', strtotime($profesor["Horario_hora"])))
  174. ->setCellValueByColumnAndRow($col++, $row, $checador)
  175. ->setCellValueByColumnAndRow($col++, $row, $status.$reposicion)
  176. ->setCellValueByColumnAndRow($col++, $row, $profesor["Area_desc"]);
  177. $spreadsheet->getActiveSheet()->getStyle('G'.$row)
  178. ->getFont()->getColor()->setARGB($colorStatus);
  179. //\PhpOffice\PhpSpreadsheet\Cell\Coordinate::stringFromColumnIndex(1)
  180. $row++;
  181. }
  182. //$spreadsheet->getActiveSheet()->getStyle('A1:H1')->getFont()->setBold(true);
  183. $spreadsheet->getActiveSheet()->setAutoFilter($spreadsheet->getActiveSheet()->calculateWorksheetDimension());
  184. //Auto ajustar anchos
  185. $spreadsheet->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);
  186. $spreadsheet->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
  187. $spreadsheet->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);
  188. $spreadsheet->getActiveSheet()->getColumnDimension('D')->setAutoSize(true);
  189. $spreadsheet->getActiveSheet()->getColumnDimension('E')->setAutoSize(true);
  190. $spreadsheet->getActiveSheet()->getColumnDimension('F')->setAutoSize(true);
  191. $spreadsheet->getActiveSheet()->getColumnDimension('G')->setAutoSize(true);
  192. $spreadsheet->getActiveSheet()->getColumnDimension('H')->setAutoSize(true);
  193. // Set active sheet index to the first sheet, so Excel opens this as the first sheet
  194. $spreadsheet->setActiveSheetIndex(0);
  195. // Redirect output to a client’s web browser (Xlsx)
  196. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  197. header('Content-Disposition: attachment;filename="asistencias_'.date("y-m-d").'.xlsx"');
  198. header('Cache-Control: max-age=0');
  199. // If you're serving to IE 9, then the following may be needed
  200. header('Cache-Control: max-age=1');
  201. // If you're serving to IE over SSL, then the following may be needed
  202. header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
  203. header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
  204. header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
  205. header('Pragma: public'); // HTTP/1.0
  206. $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
  207. $writer->save('php://output');
  208. exit;