main.php 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565
  1. <?php
  2. require_once("../include/constantes.php");
  3. require_once("../include/bd_pdo.php");
  4. require_once("../include/util.php");
  5. require_once("../classes/ValidaSesion.php");
  6. require_once("../classes/MainMenu.php");
  7. $menu = 1;
  8. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  9. $objSesion = new ValidaSesion($pdo, NULL, APSA);
  10. /*if(!$objSesion->tieneAcceso()){
  11. $objSesion->terminaSesion();
  12. }*/
  13. $errorDesc = "";
  14. function tieneArea($rs_areas, $area_id){
  15. foreach($rs_areas as $area){
  16. if($area["Area_id"] == $area_id)
  17. return true;
  18. }
  19. return false;
  20. }
  21. $stmt = $pdo->prepare('Select * from fs_logAutorizacionHorario(:usr, NULL)');
  22. $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
  23. if(!$stmt->execute()){
  24. //$t = $stmt->errorInfo();
  25. $errorDesc .= "Ocurrió un error al obtener el log de aprobación de horario.";
  26. }else
  27. $loghorario_rs = $stmt->fetchAll();
  28. ?>
  29. <!DOCTYPE html>
  30. <html lang="es" prefix="og: http://ogp.me/ns#">
  31. <head>
  32. <title>APSA - Facultad de Ingeniería</title>
  33. <meta charset="utf-8">
  34. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  35. <link rel="icon" type="image/png" href="../img/favicon.png" />
  36. <link rel="stylesheet" href="../css/bootstrap-ulsa.min.css" type="text/css">
  37. <link rel="stylesheet" href="../css/indivisa.css" type="text/css">
  38. <link rel="stylesheet" href="../css/sgi.css?rand=<?php echo rand();?>" type="text/css">
  39. <link rel="stylesheet" href="../css/fa_all.css" type="text/css">
  40. <link rel="stylesheet" href="../css/postit.css?v2" type="text/css">
  41. </head>
  42. <body>
  43. <div >
  44. <?php
  45. //--- Objeto que pinta menu y header
  46. $menuObj = new MainMenu($_SESSION["usuario_id"], $menu, $pdo, APSA, $_SESSION["usuario_apellidos"]." ".$_SESSION["usuario_nombre"]." <a href='perfil.php' style='font-size:70%'><span class='ing-editar'></span></a>");//usr, menu, pdo, sist
  47. $menuObj->printMenu();
  48. $stmt = $pdo->prepare('Select * from fs_periodousuario(:usr)');
  49. $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
  50. if(!$stmt->execute()){
  51. $errorDesc = "Ocurrió un error al cargar los datos de los periodos.";
  52. }else
  53. $periodo_rs = $stmt->fetchAll();
  54. $stmt->closeCursor();
  55. $stmt = null;
  56. $errorDesc = "";
  57. if(isset($_SESSION["periodo_id"]) && $_SESSION["periodo_id"] != ""){
  58. $stmt = $pdo->prepare('Select * from fs_alertamateriastiempo(:per, :usr)');
  59. $stmt->bindParam(":per", $_SESSION["periodo_id"]);
  60. $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
  61. if(!$stmt->execute()){
  62. $errorDesc .= "Ocurrió un error al cargar los datos del tiempo faltante de las materias en el periodo.<br>";
  63. }else
  64. $materiasTiempo_rs = $stmt->fetchAll();
  65. $stmt->closeCursor();
  66. $stmt = $pdo->prepare('Select * from fs_alertasalones(:per, :usr)');
  67. $stmt->bindParam(":per", $_SESSION["periodo_id"]);
  68. $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
  69. if(!$stmt->execute()){
  70. $errorDesc .= "Ocurrió un error al cargar los datos de los salones faltantes para las materias en el periodo.<br>";
  71. }else
  72. $salones_rs = $stmt->fetchAll();
  73. $stmt->closeCursor();
  74. $stmt = $pdo->prepare('Select * from fs_alertaprofesores(:per, :usr)');
  75. $stmt->bindParam(":per", $_SESSION["periodo_id"]);
  76. $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
  77. if(!$stmt->execute()){
  78. $errorDesc .= "Ocurrió un error al cargar los datos de los profesores faltantes de las materias en el periodo.<br>";
  79. }else
  80. $profesores_rs = $stmt->fetchAll();
  81. $stmt->closeCursor();
  82. $stmt = null;
  83. }
  84. $stmt = $pdo->prepare('Select * from fs_alertasubordinadohorario(:usr)');
  85. $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
  86. if(!$stmt->execute()){
  87. $e = $stmt->errorInfo();
  88. $errorDesc .= "Ocurrió un error al cargar los datos de los horarios de los subordinados.<br>";
  89. }else
  90. $horarioSubordinados_rs = $stmt->fetchAll();
  91. $stmt->closeCursor();
  92. //--Manejo de errores y mensajes de exito
  93. if(isset($_GET["error"]) && is_numeric($_GET["error"])){
  94. switch ($_GET["error"]){
  95. case 0: $errorDesc = "No se recibió la información del periodo."; break;
  96. case 1: $errorDesc = "Ocurrió un error al actualizar el periodo activo."; break;
  97. case 2: $errorDesc = "El periodo no puede ser seleccionado."; break;
  98. case 3: $errorDesc = "No se recibieron tus datos para actualizarlos."; break;
  99. case 4: $errorDesc = "Ocurrió un error al actualizar tus datos."; break;
  100. }
  101. }
  102. if(isset($_GET["ok"]) && is_numeric($_GET["ok"])){
  103. switch ($_GET["ok"]){
  104. case 0: $successDesc = "El periodo se actualizó correctamente."; break;
  105. case 1: $successDesc = "Tus datos se registraron correctamente y serán actualizados una vez revisados."; break;
  106. }
  107. }
  108. ?>
  109. <main class="container-fluid content marco">
  110. <?php include_once("../include/errorMessage.php"); ?>
  111. <?php if(isset($loghorario_rs) && count($loghorario_rs) >0){?>
  112. <div class="row justify-content-md-center my-4" id="log-box">
  113. <div class="col-12 col-md-8">
  114. <div class="alert alert-success">
  115. <?php foreach($loghorario_rs as $log){
  116. $fecha = explode(" ", $log["LogAutorizacionHorario_fecha"]);
  117. $status = ($log["LogAutorizacionHorario_aprobado"] == true ? "APROBADO": "RECHAZADO");
  118. ?>
  119. <p>
  120. <span class="text-monospace mr-2">[<?php echo fechaSlash($fecha[0])." ". substr($fecha[1], 0, strpos($fecha[1], ".")); ?>]</span>
  121. Tu horario administrativo <b>ha sido <?php echo $status; ?></b>
  122. <button class="btn btn-sm btn-primary ml-4 log-leido" data-id="<?php echo $log["LogAutorizacionHorario_id"];?>"><?php echo $ICO["aceptar"];?> Marcar como leído</button>
  123. </p>
  124. <?php } ?>
  125. </div>
  126. </div>
  127. </div>
  128. <?php }?>
  129. <?php include("../include/periodoCambio.php");?>
  130. <!--
  131. <p>Puedes editar tus datos personales y ver tus horarios en el menú <a href="perfil.php" class="font-weight-bold">Mi cuenta -&gt; Mi asistencia</a> </p>
  132. -->
  133. <?php
  134. //Si puede editar, muestra fecha límite
  135. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  136. $objSesion2 = new ValidaSesion($pdo, 51, APSA);
  137. if($objSesion2->tieneAcceso() && $objSesion2->puedeEditar()){
  138. //if(($_SESSION["jefe_carrera"] || $_SESSION["sgi_administrador"] /*|| administrador de sistema*/ ) && $objSesion->getFechaJefes() != ""){
  139. $textRed = "";
  140. if(strtotime("+7 days") >= strtotime($objSesion->getFechaJefes())){
  141. $textRed = "text-danger";
  142. }
  143. ?>
  144. <h4 class="my-4">Fecha límite para que jefes de área puedan editar horarios: <span class="<?php echo $textRed;?>"><?php echo fechaTexto($objSesion->getFechaJefes()); ?></span></h4>
  145. <?php } ?>
  146. <!-- VALIDA CONFLICTO DE HORARIOS -->
  147. <?php
  148. function validaHorarios(& $arr){
  149. $erroresArr = array();
  150. for($i = 0; $i < count($arr)-1; $i++){
  151. for($j = $i+1; $j < count($arr); $j++){
  152. if($arr[$i]["Dia_id"] == $arr[$j]["Dia_id"] && !($arr[$i]["TipoHorario_id"] == 3 && $arr[$i]["TipoHorario_id"] == $arr[$j]["TipoHorario_id"])){
  153. if( (date('H:i', strtotime($arr[$i]["Hora_inicio"])) <= date('H:i', strtotime($arr[$j]["Hora_inicio"])) && date('H:i', strtotime($arr[$i]["Hora_final"])) > date('H:i', strtotime($arr[$j]["Hora_inicio"])) )
  154. || (date('H:i', strtotime($arr[$j]["Hora_inicio"])) <= date('H:i', strtotime($arr[$i]["Hora_inicio"])) && date('H:i', strtotime($arr[$j]["Hora_final"])) > date('H:i', strtotime($arr[$i]["Hora_inicio"])) )
  155. ){
  156. if($arr[$i]["TipoHorario_id"] < $arr[$j]["TipoHorario_id"]){
  157. $erroresArr[] = array('nombre'=>$arr[$i]["TipoHorario_desc"], 'dia'=> diaNombre($arr[$i]["Dia_id"]), 'hora_i'=>date('H:i', strtotime($arr[$i]["Hora_inicio"])), 'hora_f'=> date('H:i', strtotime($arr[$i]["Hora_final"])));
  158. $arr[$i]["Duracion"] = (strtotime('2019-01-01 '.$arr[$j]["Hora_inicio"]) - strtotime('2019-01-01 '.$arr[$i]["Hora_inicio"]))/60;
  159. if($arr[$i]["Duracion"] <= 0) array_splice($arr, $i, 1);
  160. }else{ //if($arr[$i]["TipoHorario_id"] < $arr[$j]["TipoHorario_id"])
  161. $erroresArr[] = array('nombre'=>$arr[$j]["TipoHorario_desc"], 'dia'=> diaNombre($arr[$j]["Dia_id"]), 'hora_i'=>date('H:i', strtotime($arr[$j]["Hora_inicio"])), 'hora_f'=> date('H:i', strtotime($arr[$j]["Hora_final"])));
  162. $arr[$j]["Duracion"] = (strtotime('2019-01-01 '.$arr[$i]["Hora_inicio"]) - strtotime('2019-01-01 '.$arr[$j]["Hora_inicio"]))/60;
  163. if($arr[$j]["Duracion"] <= 0) array_splice($arr, $j, 1);
  164. }
  165. }
  166. }
  167. }
  168. }
  169. return $erroresArr;
  170. }
  171. //Obtiene horario del usuario
  172. if($_SESSION["profesor"]){
  173. $stmt = $pdo->prepare('Select * from fs_mihorario(:usr, :per, 3)');//Obtiene todo el calendario
  174. $stmt->bindParam(":per", $_SESSION["periodo_id"]);
  175. }else
  176. $stmt = $pdo->prepare('Select * from fs_mihorario(:usr, 0, 3)');//Obtiene todo el calendario
  177. $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
  178. if(!$stmt->execute()){
  179. //$t = $stmt->errorInfo();
  180. echo "Ocurrió un error al obtener el horario";
  181. }else
  182. $horario_rs = $stmt->fetchAll();
  183. if(isset($horario_rs) && count($horario_rs) > 0){
  184. $erroresArr = validaHorarios($horario_rs);
  185. if(count($erroresArr) > 0){
  186. ?>
  187. <div class="row">
  188. <div class="col-12">
  189. <div class="alert alert-danger">
  190. <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  191. <span aria-hidden="true">&times;</span>
  192. </button>
  193. <h4 class="mb-2"><?php echo $ICO["alerta"];?> Conflicto en horario</h4>
  194. <p>El horario administrativo se traslapa con el horario de clases. Es necesario que modifiques tu horario para que se pueda mostrar correctamente.</p>
  195. <p class="text-center mb-0"><a href="mihorario.php"><i>Modificar horario</i> <span class="ing-editar"></span></a></p>
  196. </div>
  197. </div>
  198. </div>
  199. <?php
  200. }
  201. } ?>
  202. <!-- ACTUALIZACION DE DATOS PENDIENTES -->
  203. <?php
  204. //Obtiene estado
  205. $stmt = $pdo->prepare('Select * from fs_checkusuario_estado(:id)');
  206. $stmt->bindParam(":id", $_SESSION["usuario_id"]);
  207. if($stmt->execute()){
  208. $checkedo_rs = $stmt->fetch();
  209. if($checkedo_rs["CheckUsuario_Estado_id"]==1){
  210. ?>
  211. <div class="row">
  212. <div class="col-12">
  213. <div class="alert alert-success">
  214. <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  215. <span aria-hidden="true">&times;</span>
  216. </button>
  217. <h4 class="mb-2"><?php echo $ICO["alerta"];?> Actualización de datos</span></h4>
  218. <p>Tus datos personales están en espera de autorización.</p>
  219. </div>
  220. </div>
  221. </div>
  222. <?php }
  223. $stmt->closeCursor(); // cierra conexion de resultado
  224. }
  225. ?>
  226. <!-- BLOQUE DE ALERTAS -->
  227. <form action="horariogrupo.php" method="post" id="formSend">
  228. <input type="hidden" name="grupo" value="" id="filter_grupo">
  229. </form>
  230. <form action="reposicion.php" method="post" id="formRepo">
  231. <input type="hidden" name="prof" value="" id="filter_prof">
  232. <input type="hidden" name="edo" value="" id="filter_edo">
  233. </form>
  234. <div class="row mt-4">
  235. <!-- REPOSICIONES -->
  236. <?php
  237. $objSesion3 = new ValidaSesion($pdo, 52, APSA);//--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  238. if($objSesion3->tieneAcceso()){
  239. if($_SESSION["jefe_carrera"]){
  240. $edo = 1;
  241. }else{
  242. $edo = 2;
  243. }
  244. $stmt = $pdo->prepare('Select * from fs_reposicion(NULL, :periodo, NULL, NULL, NULL, NULL, :edo, 0, '.MAX_ROWS.' )');
  245. $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
  246. $stmt->bindParam(":edo", $edo);
  247. if(!$stmt->execute()){
  248. $errorDesc = "Error al obtener las reposiciones";
  249. //print_r($stmt->errorInfo());
  250. }
  251. $reposiciones_rs = $stmt->fetchAll();
  252. $stmt->closeCursor();
  253. $reposiciones_arr = array();
  254. if(isset($reposiciones_rs) && count($reposiciones_rs) > 0){
  255. //Area de usuario
  256. $stmt = $pdo->prepare('Select * from fs_areausuario(:usr)');
  257. $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
  258. if(!$stmt->execute()){
  259. $errorDesc = "Error al obtener el área del usuario";
  260. //print_r($stmt->errorInfo());
  261. }
  262. $areas_rs = $stmt->fetchAll();
  263. $stmt->closeCursor();
  264. foreach($reposiciones_rs as $reposicion){
  265. if(tieneArea($areas_rs, $reposicion["Area_id"]) || $_SESSION["sgi_administrador"]){
  266. $reposiciones_arr[] = $reposicion;
  267. }
  268. }
  269. }
  270. if(count($reposiciones_arr)>0){
  271. ?>
  272. <div class="col-12 col-md-6 my-2">
  273. <div class="alerta-purple alert-heading alert alerta-collapse mb-0">
  274. <h5 class="mb-0">
  275. <a class="d-block collapsed" data-toggle="collapse" href="#collapseReposicion" role="button" aria-expanded="false" aria-controls="collapseReposicion">
  276. <span class="ing-importante fa-2x mr-2" style="vertical-align:middle;"></span>
  277. <span style="vertical-align:middle;">Reposiciones de clase</span>
  278. <span class="ing-caret ing-fw float-right" style="vertical-align:middle;"></span>
  279. </a>
  280. </h5>
  281. </div>
  282. <div class="small limit collapse bg-info rounded-bottom pt-3" id="collapseReposicion">
  283. <p class="text-center font-weight-bold">Las siguientes reposiciones están pendientes</p>
  284. <?php
  285. foreach($reposiciones_arr as $rep){
  286. $fecha = explode(" ",$rep["Reposicion_fecha_nueva"]);
  287. echo "<p data-id='".$rep["Usuario_id"]."' data-edo='".$edo."' class='openpage send-reposicion' title='Abrir reposiciones'><b>".$rep["Usuario_apellidos"]." ".$rep["Usuario_nombre"]."</b> - ".$rep["Grupo_desc"]." ".$rep["Carrera_prefijo"]." <span class='float-right text-monospace'>(".fechaSlash($fecha[0]).")</span></p>";
  288. }?>
  289. </div>
  290. </div>
  291. <?php }
  292. }
  293. ?>
  294. <!-- AUTORIZACIÓN DE HORARIOS -->
  295. <?php if(isset($horarioSubordinados_rs) && count($horarioSubordinados_rs) > 0){?>
  296. <div class="col-12 col-md-6 my-2">
  297. <div class="alerta-blue alert-heading alert alerta-collapse mb-0">
  298. <h5 class="mb-0">
  299. <a class="d-block collapsed" data-toggle="collapse" href="#collapseHorario" role="button" aria-expanded="false" aria-controls="collapseHorario">
  300. <span class="ing-importante fa-2x mr-2" style="vertical-align:middle;"></span>
  301. <span style="vertical-align:middle;">Horarios pendientes de autorización</span>
  302. <span class="ing-caret ing-fw float-right" style="vertical-align:middle;"></span>
  303. </a>
  304. </h5>
  305. </div>
  306. <div class="small limit collapse bg-info rounded-bottom pt-3" id="collapseHorario">
  307. <?php
  308. $objSesion2 = new ValidaSesion($pdo, 81, APSA);//--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  309. foreach($horarioSubordinados_rs as $sub){
  310. if($objSesion2->tieneAcceso()){
  311. echo "<p class='openpage' onclick='window.location.href=\"horarioautorizacion.php\" '><b>".$sub["Usuario_apellidos"]." ".$sub["Usuario_nombre"]."</b></p>";
  312. }else{
  313. echo "<p><b>".$sub["Usuario_apellidos"]." ".$sub["Usuario_nombre"]."</b></p>";
  314. }
  315. }?>
  316. </div>
  317. </div>
  318. <?php } ?>
  319. <!-- MATERIAS FALTANTES -->
  320. <?php if(isset($materiasTiempo_rs) && count($materiasTiempo_rs) > 0){?>
  321. <div class="col-12 col-md-6 my-2">
  322. <div class="alerta-red alert-heading alert alerta-collapse mb-0">
  323. <h5 class="mb-0">
  324. <a class="d-block collapsed" data-toggle="collapse" href="#collapseMaterias" role="button" aria-expanded="false" aria-controls="collapseMaterias">
  325. <span class="ing-importante fa-2x mr-2" style="vertical-align:middle;"></span>
  326. <span style="vertical-align:middle;">Materias faltantes por asignar</span>
  327. <span class="ing-caret ing-fw float-right" style="vertical-align:middle;"></span>
  328. </a>
  329. </h5>
  330. </div>
  331. <div class="small limit collapse bg-info rounded-bottom pt-3" id="collapseMaterias">
  332. <?php
  333. $objSesion2 = new ValidaSesion($pdo, 51, APSA);//--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  334. foreach($materiasTiempo_rs as $grupo){
  335. if($objSesion2->tieneAcceso()){
  336. echo "<p data-id='".$grupo["Grupo_id"]."' class='openpage send-form' title='Abrir horario'><b>".$grupo["Grupo_desc"]." ".$grupo["Carrera_prefijo"]."</b> - ".$grupo["PlanEstudio_desc"]." <span class='float-right text-monospace'>(".sprintf('%0.2f', $grupo["TiempoFaltante"])."hrs)</span></p>";
  337. }else{
  338. echo "<p><b>".$grupo["Grupo_desc"]." ".$grupo["Carrera_prefijo"]."</b> - ".$grupo["PlanEstudio_desc"]." <span class='float-right text-monospace'>(".sprintf('%0.2f', $grupo["TiempoFaltante"])."hrs)</span></p>";
  339. }
  340. }?>
  341. </div>
  342. </div>
  343. <?php } ?>
  344. <!-- SALONES FALTANTES -->
  345. <?php //if($_SESSION["tipo_administrativo"] <=2){ si es administrador sgi, o de sistema
  346. if(isset($salones_rs) && count($salones_rs) > 0){
  347. ?>
  348. <div class="col-12 col-md-6 my-2">
  349. <div class="alerta-green alert-heading alert alerta-collapse mb-0">
  350. <h5 class="mb-0">
  351. <a class="d-block collapsed" data-toggle="collapse" href="#collapseSalon" role="button" aria-expanded="false" aria-controls="collapseSalon">
  352. <span class="ing-importante fa-2x mr-2" style="vertical-align:middle;"></span>
  353. <span style="vertical-align:middle;">Salones faltantes por asignar</span>
  354. <span class="ing-caret ing-fw float-right" style="vertical-align:middle;"></span>
  355. </a>
  356. </h5>
  357. </div>
  358. <div class="small limit collapse bg-info rounded-bottom pt-3" id="collapseSalon">
  359. <?php
  360. $objSesion2 = new ValidaSesion($pdo, 51, APSA);//--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  361. foreach($salones_rs as $grupo){
  362. if($objSesion2->tieneAcceso()){
  363. echo "<p data-id='".$grupo["Grupo_id"]."' class='openpage send-form' title='Abrir horario'><b>".$grupo["Grupo_desc"]." ".$grupo["Carrera_prefijo"]."</b> - ".$grupo["PlanEstudio_desc"]." <span class='float-right text-monospace'>(".$grupo["SinSalon"].")</span></p>";
  364. }else{
  365. echo "<p><b>".$grupo["Grupo_desc"]." ".$grupo["Carrera_prefijo"]."</b> - ".$grupo["PlanEstudio_desc"]." <span class='float-right text-monospace'>(".$grupo["SinSalon"].")</span></p>";
  366. }
  367. }?>
  368. </div>
  369. </div>
  370. <?php } ?>
  371. <!-- PROFESORES FALTANTES -->
  372. <?php if(isset($profesores_rs) && count($profesores_rs) > 0){
  373. ?>
  374. <div class="col-12 col-md-6 my-2">
  375. <div class="alerta-lila alert-heading alert alerta-collapse mb-0">
  376. <h5 class="mb-0">
  377. <a class="d-block collapsed" data-toggle="collapse" href="#collapseProf" role="button" aria-expanded="false" aria-controls="collapseProf">
  378. <span class="ing-importante fa-2x mr-2" style="vertical-align:middle;"></span>
  379. <span style="vertical-align:middle;">Profesores faltantes por asignar</span>
  380. <span class="ing-caret ing-fw float-right" style="vertical-align:middle;"></span>
  381. </a>
  382. </h5>
  383. </div>
  384. <div class="small limit collapse bg-info rounded-bottom pt-3" id="collapseProf">
  385. <?php
  386. $objSesion2 = new ValidaSesion($pdo, 51, APSA);//--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  387. foreach($profesores_rs as $grupo){
  388. if($objSesion2->tieneAcceso()){
  389. echo "<p data-id='".$grupo["Grupo_id"]."' class='openpage send-form' title='Abrir horario'><b>".$grupo["Grupo_desc"]." ".$grupo["Carrera_prefijo"]."</b> - ".$grupo["PlanEstudio_desc"]." <span class='float-right text-monospace'>(".$grupo["SinProfesor"].")</span></p>";
  390. }else{
  391. echo "<p><b>".$grupo["Grupo_desc"]." ".$grupo["Carrera_prefijo"]."</b> - ".$grupo["PlanEstudio_desc"]." <span class='float-right text-monospace'>(".$grupo["SinProfesor"].")</span></p>";
  392. }
  393. }?>
  394. </div>
  395. </div>
  396. <?php } ?>
  397. <!-- CALIFICACIONES FINALES -->
  398. <?php if($_SESSION["profesor"] ){
  399. //Fecha límite
  400. $stmt = $pdo->prepare('Select * from fs_periodo(:per, NULL, NULL, NULL)');
  401. $stmt->bindParam(":per", $_SESSION["periodo_id"]);
  402. if(!$stmt->execute()){
  403. $errorDesc = "Ocurrió un error al leer los datos de la materia";
  404. }else{
  405. $fecha_rs = $stmt->fetch();
  406. $fecha_max = date('Y-m-d', strtotime($fecha_rs["Periodo_fecha_final"]. ' + 9 days'));
  407. $fecha_min = date('Y-m-d', strtotime($fecha_rs["Periodo_fecha_inicial"]. ' - 7 days'));
  408. unset($fecha_rs);
  409. }
  410. $stmt->closeCursor();
  411. //Materias
  412. $stmt = $pdo->prepare('Select * from fs_materiasprofesor(:per, :usr)');
  413. $stmt->bindParam(":per", $_SESSION["periodo_id"]);
  414. $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
  415. if(!$stmt->execute()){
  416. $errorDesc = "Ocurrió un error al leer los datos de la materia";
  417. }else{
  418. $materias_rs = $stmt->fetchAll();
  419. }
  420. $stmt->closeCursor();
  421. $objSesion2 = new ValidaSesion($pdo, 85, APSA);//--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  422. if(($objSesion2->tieneAcceso() || $_SESSION["sgi_administrador"] ) && isset($fecha_max, $fecha_min) && strtotime($fecha_min) <= strtotime(date("Y-m-d")) && strtotime(date("Y-m-d")) <= strtotime($fecha_max) && count($materias_rs)>0){
  423. ?>
  424. <form action="calificaciones_grupo.php" method="post" id="formMateriaSend">
  425. <input type="hidden" name="materia" value="" id="filter_materia">
  426. </form>
  427. <div class="col-12 col-md-6 my-2">
  428. <div class="alerta-pink alert-heading alert alerta-collapse mb-0">
  429. <h5 class="mb-0">
  430. <a class="d-block collapsed" data-toggle="collapse" href="#collapseCalif" role="button" aria-expanded="false" aria-controls="collapseCalif">
  431. <span class="ing-importante fa-2x mr-2" style="vertical-align:middle;"></span>
  432. <span style="vertical-align:middle;">Captura de calificaciones finales</span>
  433. <span class="ing-caret ing-fw float-right" style="vertical-align:middle;"></span>
  434. </a>
  435. </h5>
  436. </div>
  437. <div class="small limit collapse bg-info rounded-bottom pt-3" id="collapseCalif">
  438. <p class="text-center font-weight-bold">Disponible hasta el <?php echo fechaSlash($fecha_max);?></p>
  439. <p>Materias del periodo</p>
  440. <?php
  441. foreach($materias_rs as $materia){
  442. echo "<p data-mat='".$materia["Materia_id"]."' data-gpo='".$materia["Grupo_id"]."' class='openpage send-materia' title='Abrir horario'><b>".$materia["Grupo_desc"]." ".$materia["Carrera_prefijo"]."</b> - ".$materia["Materia_desc"]."</p>";
  443. }?>
  444. </div>
  445. </div>
  446. <?php }
  447. }?>
  448. </div>
  449. </main>
  450. <!--- FOOTER--->
  451. <div style="isolation: isolate;">
  452. <?php require_once("../include/footer.php"); ?>
  453. </div>
  454. </div>
  455. <script src="../js/jquery.min.js"></script>
  456. <script src="../js/bootstrap/popper.min.js"></script>
  457. <script src="../js/bootstrap/bootstrap.min.js"></script>
  458. <script src="../js/sidebarmenu.js"></script>
  459. <script src="../js/datalist.js"></script>
  460. <script>
  461. $(document).ready(function(){
  462. setDatalist("#periodo", <?php echo $_SESSION["periodo_id"]; ?>)
  463. $(document).on('click', '#dlPeriodo ul li' ,function(){
  464. $("#formaPeriodo").submit();
  465. });
  466. $('.send-form').click(function(){
  467. $("#filter_grupo").val($(this).data("id"));
  468. $("#formSend").submit();
  469. });
  470. $('.send-reposicion').click(function(){
  471. $("#filter_prof").val($(this).data("id"));
  472. $("#filter_edo").val($(this).data("edo"));
  473. $("#formRepo").submit();
  474. });
  475. $('.send-materia').click(function(){
  476. $("#filter_materia").val($(this).data("mat")+"|"+$(this).data("gpo"));
  477. $("#formMateriaSend").submit();
  478. });
  479. <?php if(isset($loghorario_rs) && count($loghorario_rs) >0){?>
  480. $('.log-leido').click(function(){
  481. var id = $(this).data("id");
  482. var btn = $(this);
  483. $.ajax({
  484. url: './action/loghorario_update.php',
  485. type: 'POST',
  486. dataType: 'json',
  487. data: { id: id, },
  488. success: function(result) {
  489. if(result["error"]!= "" && result["error"] !== undefined){
  490. $("#errorBox").collapse('show');
  491. $("#errorBox_text").html(result["error"]);
  492. }else{
  493. //$("#successBox").collapse('show');
  494. //$("#successBox_text").html(result["ok"]);
  495. btn.parents("p").remove();
  496. if($("#log-box").find("p").length == 0)
  497. $("#log-box").remove();
  498. }
  499. },
  500. error: function(jqXHR, textStatus, errorThrown ){
  501. $("#errorBox").collapse('show');
  502. $("#errorBox_text").html(errorThrown);
  503. }
  504. });//ajax
  505. });
  506. <?php } ?>
  507. });
  508. </script>
  509. </body>
  510. </html>