123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- <?php
- session_start();
- require_once '../include/bd_pdo.php';
- require_once '../include/xtemplate.class.php';
- require_once '../classes/SGI.php';
- if(!isset($_POST['id'])){
- $return['error'] = 'Error! No se recibieron los datos.';
- } else {
- define('HORA_INICIO', 6);//hora inicial de horario
- define('HORA_FINAL', 22);//hora final de horario
- define('FRACCION_HORA', 4);//fracciones en una hora
- define('DURACION_MIN', 60);//hora inicial de horario
- define('DURACION_MAX', 360);//hora final de horario
- define('DURACION_STEP', 15);//fracciones en una hora
-
- define('ALTO_RENGLON', 30);//alto del renglón
-
- $error = '';
- switch($_POST['tipo']){
- case 1: //Grupos
- $horario_rs = SGI::getHorarioGrupo($pdo, filter_input(INPUT_POST, 'id', FILTER_SANITIZE_NUMBER_INT));
- $horaMin = horaMin($horario_rs, 'Horario_hora');
- $horaMax = horaMax($horario_rs, 'Horario_hora_final');
- $dias_rs = SGI::getDias($pdo);
- if (empty($error)) {
- $xtpl = new XTemplate('../templates/horario_grupo.tpl.html');
- foreach($dias_rs as $dia){
- $xtpl->assign('DIA', $dia['Dia_desc']);
- $xtpl->assign('ID_DIA', $dia['Dia_id']);
- $xtpl->parse('main.header');
- }
- $rs_i = 0;
- $spacerArr = array(1=>0,0,0,0,0,0);
- $pendiente = '<li class="pendiente">Pendiente</em>';
- $horas_dif = intval(date('H', strtotime($horaMax))) - intval(date('H', strtotime($horaMin)));
- $sub_prof_num = 0;
- $sub_num = 0;
- $tiene_submaterias = false;
- for($h = date('H', strtotime($horaMin)); $h <= date('H', strtotime($horaMax)); $h++){
- $xtpl->assign('HORA', date('H', strtotime($h.':00')));
- $xtpl->assign('FRACCIONES', FRACCION_HORA);
- $xtpl->parse('main.hora_row.hora');
- for($f = 0; $f < FRACCION_HORA; $f++){
- foreach($dias_rs as $dia){
- if($rs_i < count($horario_rs) && date('H:i', strtotime($horario_rs[$rs_i]['Horario_hora'])) == date('H:i', strtotime($h.':'.($f * (60/FRACCION_HORA)))) && $horario_rs[$rs_i]['Dia_id'] == $dia['Dia_id']){
- if((isset($filter_fecha) && strtotime($filter_fecha) >= strtotime($horario_rs[$rs_i]['fecha_inicial']) && strtotime($filter_fecha) <= strtotime($horario_rs[$rs_i]['fecha_final']) ) || !isset($filter_fecha)){
- $size = $horario_rs[$rs_i]['Horario_duracion']/(60/FRACCION_HORA);
- $spacerArr[$dia['Dia_id']] = $size -1;
- $xtpl->assign('ID_DIA', $dia['Dia_id']);
- $xtpl->assign('DURACION_SIZE', $size);
- $xtpl->assign('ALTO_DIV', $size * ALTO_RENGLON);
- $xtpl->assign('MATERIA', $horario_rs[$rs_i]['Materia_desc']);
- $xtpl->assign('HORA_I', substr($horario_rs[$rs_i]['Horario_hora'], 0, 5));
- $xtpl->assign('HORA_F', substr($horario_rs[$rs_i]['Horario_hora_final'], 0, 5));
- if($horario_rs[$rs_i]['Salon_desc'] != '')
- if($horario_rs[$rs_i]['Salon_desc_larga'] != '')
- $xtpl->assign('SALON', $horario_rs[$rs_i]['Salon_desc'].' ['.$horario_rs[$rs_i]['Salon_desc_larga'].']');
- else
- $xtpl->assign('SALON', $horario_rs[$rs_i]['Salon_desc']);
- else{
- if(!isset($horario_rs[$rs_i]['TipoSubmateria_id']) || $horario_rs[$rs_i]['TipoSubmateria_id'] == 0)
- $xtpl->assign('SALON', '<em>Pendinte</em>');
- else
- $xtpl->assign('SALON', '*');
- }
- //----- Carga profesores ----
- if($horario_rs[$rs_i]['TipoSubmateria_id'] == 0)
- $profesores_rs = SGI::getProfesorHorarioGrupo($pdo, $horario_rs[$rs_i]['HorarioGrupo_id']);
- else { //Con submaterias
- //----- Carga submaterias ----
- $submaterias_rs = SGI::getSubMateriaHorarioGrupo($pdo, $horario_rs[$rs_i]['HorarioGrupo_id']);
- $sub_prof_num = 0;
- $nombre_impreso = false;
- if(count($submaterias_rs) > 0){
- $tiene_submaterias = true;
- foreach($submaterias_rs as $submateria){
- $xtpl->assign('SUBMATERIA', $submateria['Submateria_desc']);
- $xtpl->assign('DIA', diaNombre($horario_rs[$rs_i]['Dia_id']));
- //---
- $profesores_rs = SGI::getSubMateriaHorarioGrupoProfesor($pdo, $horario_rs[$rs_i]['HorarioGrupo_id'], $submateria['Submateria_id']);
- $sub_prof_num += count($profesores_rs);
- if(isset($profesores_rs) && count($profesores_rs) > 0){
- $profesores_all = '';
- foreach($profesores_rs as $profesor){
- $prof_nombre = '<li class="profesor">' . $profesor['Usuario_apellidos'] . ' ' . $profesor['Usuario_nombre'] . '</li>';
- $profesores_all .= $prof_nombre;
- }
- $xtpl->assign('PROFESOR_SUB', $profesores_all);
- $xtpl->assign('SALON_SUB', $submateria['Salon_desc']);
- $xtpl->parse('main.submaterias_block.row.submateria');
- if(!$nombre_impreso){
- $nombre_impreso = true;
- $xtpl->assign('MAT_ROWSPAN', count($submaterias_rs));
- $xtpl->parse('main.submaterias_block.row.materia');
- }
- $xtpl->parse('main.submaterias_block.row');
- }//solo si hay profesor
- }
- }
- unset($profesores_rs);
- }//fin con submaterias
- if(isset($profesores_rs) && count($profesores_rs) > 0){
- foreach($profesores_rs as $profesor){
- $prof_nombre = '<li class="profesor">' . $profesor['Usuario_apellidos'] . ' ' . $profesor['Usuario_nombre'] . '</li>';
- $xtpl->assign('PROFESOR', $prof_nombre);
- $xtpl->parse('main.hora_row.td.td_horario.profesor');
- }
- }else{
- if($horario_rs[$rs_i]['TipoSubmateria_id'] == 0){//no pinta maestros electivas o secuenciales
- $prof_nombre = $pendiente;
- $xtpl->assign('PROFESOR', $prof_nombre);
- $xtpl->parse('main.hora_row.td.td_horario.profesor');
- }
- }
- $xtpl->parse('main.hora_row.td.td_horario.hora');
- $xtpl->parse('main.hora_row.td.td_horario.texto');
- $xtpl->parse('main.hora_row.td.td_horario.spacer');
- $xtpl->parse('main.hora_row.td.td_horario');
- }else
- $xtpl->parse('main.hora_row.td.td_vacio');
- $rs_i++;
- }else{
- if(!isset($spacerArr[$dia['Dia_id']]) || $spacerArr[$dia['Dia_id']] == 0){
- $xtpl->assign('ID_DIA', $dia['Dia_id']);
- $xtpl->parse('main.hora_row.td.td_vacio');
- }else
- $spacerArr[$dia['Dia_id']]--;
- }
- $xtpl->parse('main.hora_row.td');
- }
- $xtpl->parse('main.hora_row');
- }
- }
- if($tiene_submaterias){
- $xtpl->parse('main.submaterias_block.materia');
- $xtpl->parse('main.submaterias_block');
- }
- $xtpl->parse('main');
- $return['html'] = $xtpl->text('main');
- $return['tabla'] = true;
- } else {
- $return['html'] = '<div class="marco">
- <div class="msgAviso d-flex flex-row justify-content-between align-items-stretch mt-4">
- <div class="iconAviso bg-danger d-flex justify-content-center align-items-center"><i class="display-3 ing-cancelar"></i></div>
- <div class="txtAviso flex-grow-1 d-flex flex-column justify-content-center align-items-center">
- <div class="display-5 indivisa-text-black mb-3">¡Error!</div>
- <div class="text-center">' . $error . '</div>
- </div>
- </div>
- </div>';
- $return['tabla'] = false;
- }
- break;
- case 2: //Docente
- date_default_timezone_set('America/Mexico_City');
- $horario_rs = SGI::getHorarioProfesor($pdo, filter_input(INPUT_POST, 'id', FILTER_SANITIZE_NUMBER_INT), date('Y-m-d'));
- $horaMin = horaMin($horario_rs, 'Hora_inicio');
- $horaMax = horaMax($horario_rs, 'Hora_final');
- $dias_rs = SGI::getDias($pdo);
- if (empty($error)) {
- $xtpl = new XTemplate('../templates/horario_profesor.tpl.html');
- foreach($dias_rs as $dia){
- $xtpl->assign('DIA', $dia['Dia_desc']);
- $xtpl->assign('ID_DIA', $dia['Dia_id']);
- $xtpl->parse('main.header');
- }
- $rs_i = 0;
- $spacerArr = array(1=>0,0,0,0,0,0);
- $horas_dif = intval(date('H', strtotime($horaMax))) - intval(date('H', strtotime($horaMin)));
- for($h = date('H', strtotime($horaMin)); $h <= date('H', strtotime($horaMax)); $h++){
- $xtpl->assign('HORA', date('H', strtotime($h.':00')));
- $xtpl->assign('FRACCIONES', FRACCION_HORA);
- $xtpl->parse('main.hora_row.hora');
- for($f = 0; $f < FRACCION_HORA; $f++){
- foreach($dias_rs as $dia){
- if($rs_i < count($horario_rs) && date('H:i', strtotime($horario_rs[$rs_i]['Hora_inicio'])) == date('H:i', strtotime($h.':'.($f * (60/FRACCION_HORA)))) && $horario_rs[$rs_i]['Dia_id'] == $dia['Dia_id']){
- if((isset($filter_fecha) && strtotime($filter_fecha) >= strtotime($horario_rs[$rs_i]['fecha_inicial']) && strtotime($filter_fecha) <= strtotime($horario_rs[$rs_i]['fecha_final']) ) || !isset($filter_fecha)){
- $size = $horario_rs[$rs_i]['Duracion']/(60/FRACCION_HORA);
- $spacerArr[$dia['Dia_id']] = $size -1;
- $xtpl->assign('ID_DIA', $dia['Dia_id']);
- $xtpl->assign('DURACION_SIZE', $size);
- $xtpl->assign('ALTO_DIV', $size * ALTO_RENGLON);
- if ($horario_rs[$rs_i]['TipoHorario_desc'] == 'Docencia'){
- $xtpl->assign('HORA_I', substr($horario_rs[$rs_i]['Hora_inicio'], 0, 5));
- $xtpl->assign('HORA_F', substr($horario_rs[$rs_i]['Hora_final'], 0, 5));
- $xtpl->assign('MATERIA', $horario_rs[$rs_i]['Materia_desc']);
- $xtpl->assign('GRUPO', $horario_rs[$rs_i]['Grupo_desc'].' '.$horario_rs[$rs_i]['Carrera_prefijo']);
- if($horario_rs[$rs_i]['Salon_desc'] != '') {
- if($horario_rs[$rs_i]['Salon_desc_larga'] != '')
- $xtpl->assign('SALON', $horario_rs[$rs_i]['Salon_desc'].' ['.$horario_rs[$rs_i]['Salon_desc_larga'].']');
- else
- $xtpl->assign('SALON', $horario_rs[$rs_i]['Salon_desc']);
- } else{
- if(!isset($horario_rs[$rs_i]['TipoSubmateria_id']) || $horario_rs[$rs_i]['TipoSubmateria_id'] == 0)
- $xtpl->assign('SALON', '<em>Pendinte</em>');
- else
- $xtpl->assign('SALON', '*');
- }
- $xtpl->parse('main.hora_row.td.td_horario.hora');
- $xtpl->parse('main.hora_row.td.td_horario.texto');
- $xtpl->parse('main.hora_row.td.td_horario.grupo');
- $xtpl->parse('main.hora_row.td.td_horario.spacer');
- $xtpl->parse('main.hora_row.td.td_horario');
- } else {
- switch ($horario_rs[$rs_i]['TipoHorario_id']){
- case 1: $xtpl->assign('CLASE', 'atencion'); break;
- case 2: $xtpl->assign('CLASE', 'gestion'); break;
- }
- $xtpl->assign('HORA_I', substr($horario_rs[$rs_i]['Hora_inicio'], 0, 5));
- $xtpl->assign('HORA_F', substr($horario_rs[$rs_i]['Hora_final'], 0, 5));
- $xtpl->parse('main.hora_row.td.td_bloque.hora');
- $xtpl->parse('main.hora_row.td.td_bloque.spacer');
- $xtpl->parse('main.hora_row.td.td_bloque');
- }
- }else
- $xtpl->parse('main.hora_row.td.td_vacio');
- $rs_i++;
- }else{
- if(!isset($spacerArr[$dia['Dia_id']]) || $spacerArr[$dia['Dia_id']] == 0){
- $xtpl->assign('ID_DIA', $dia['Dia_id']);
- $xtpl->parse('main.hora_row.td.td_vacio');
- }else
- $spacerArr[$dia['Dia_id']]--;
- }
- $xtpl->parse('main.hora_row.td');
- }
- $xtpl->parse('main.hora_row');
- }
- }
- $xtpl->parse('main');
- $return['html'] = $xtpl->text('main');
- $return['tabla'] = true;
- } else {
- $return['html'] = '<div class="marco">
- <div class="msgAviso d-flex flex-row justify-content-between align-items-stretch mt-4">
- <div class="iconAviso bg-danger d-flex justify-content-center align-items-center"><i class="display-3 ing-cancelar"></i></div>
- <div class="txtAviso flex-grow-1 d-flex flex-column justify-content-center align-items-center">
- <div class="display-5 indivisa-text-black mb-3">¡Error!</div>
- <div class="text-center">' . $error . '</div>
- </div>
- </div>
- </div>';
- $return['tabla'] = false;
- }
- break;
- case 3: //Extraordinario
- if (isset($_POST['plan']) && isset($_POST['semestre']) && isset($_POST['periodo'])) {
- $xtpl = new XTemplate('../templates/horario_extras.tpl.html');
- //$examenes_extraordinarios = SGI::getExtraordinarios($pdo, filter_input(INPUT_POST, 'periodo', FILTER_SANITIZE_NUMBER_INT), filter_input(INPUT_POST, 'semestre', FILTER_SANITIZE_NUMBER_INT), filter_input(INPUT_POST, 'plan', FILTER_SANITIZE_NUMBER_INT));
- //Tiene el id del periodo fijo porque aú no existe un indicador de extraordinarios activos
- $examenes_extraordinarios = SGI::getExtraordinarios($pdo, 38, filter_input(INPUT_POST, 'semestre', FILTER_SANITIZE_NUMBER_INT), filter_input(INPUT_POST, 'plan', FILTER_SANITIZE_NUMBER_INT));
- if (count($examenes_extraordinarios) == 0){
- $xtpl->parse('main.sin_extras');
- } else {
- foreach ($examenes_extraordinarios as $examen) {
- $xtpl->assign('MATERIA', $examen['Materia_desc']);
- $salon = $examen["Salon_desc"];
- if(!empty($examen["Salon_desc_larga"]))
- $salon .= "-".$examen["Salon_desc_larga"];
- if (empty($salon))
- $xtpl->assign('SALON', '<i>Pendiente</i>');
- else
- $xtpl->assign('SALON', $salon);
- $xtpl->assign('PROFESOR', $examen["Profesor_nombre"] . " " . $examen["Profesor_apellidos"]);
- $xtpl->assign('FECHA', substr($examen["Examen_fechahora_inicial"], 0, 10));
- $xtpl->assign('HORA', substr($examen["Examen_fechahora_inicial"], 10, 6) . ' - ' . substr($examen["Examen_fechahora_final"], 10, 6));
- $xtpl->parse('main.extras.row');
- }
- $xtpl->parse('main.extras');
- }
- $xtpl->parse('main');
- $return['html'] = $xtpl->text('main');
- } else
- $return['html'] = '<h3 class="text-danger text-center mt-4">No fue posible obtener los horarios de los extraordinarios</h3>';
- break;
- }
- }
- $return['json'] = json_encode($return);
- echo json_encode($return);
- function horaMin($arr, $campo){
- $min = '';
- foreach($arr as $horario){
- if($min == '' || date('H:i', strtotime($horario[$campo])) < date('H:i', strtotime($min))){
- $min = $horario[$campo];
- }
- }
- return date('H:i', strtotime($min));
- }
- function horaMax($arr, $campo){
- $max = '';
- foreach($arr as $horario){
- if($max == '' || date('H:i', strtotime($horario[$campo])) > date('H:i', strtotime($max))){
- $max = $horario[$campo];
- }
- }
- return date('H:i', strtotime($max));
- }
- function diaNombre($num){
- $dias = array('Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado');
- return $dias[intval($num)];
- }
|