diff --git a/action/solicitud_insert.php b/action/solicitud_insert.php index 77ac936..e67723e 100644 --- a/action/solicitud_insert.php +++ b/action/solicitud_insert.php @@ -50,7 +50,7 @@ $duracion_rs = $db->querySingle("select * from duracion where duracion_id = :id" $duracion_tiempo = $duracion_rs["duracion_interval"]; //-- Obtiene datos de horario regular de clase -if($horario!= null) +if($horario!= null && $tipo !=3) { $horario_rs = $db->querySingle('SELECT * from horario_view where horario_id = :hor', [':hor' => $horario] @@ -58,140 +58,141 @@ if($horario!= null) $materia = $horario_rs["materia_id"]; $dia = $horario_rs["horario_dia"]; + $hora_orig = $horario_rs["horario_hora"]; }else{ $dia = date('w', strtotime($fecha)); } $hora = $hora_ini.":".$min_ini.":00"; +switch($tipo){ + case 1://Reposición + $fecha_new = DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d')." ".$hora; + $fecha_fin_new = date("Y-m-d", strtotime($fecha_new))." ".$duracion_tiempo; + $dia_new = date('w', strtotime($fecha_new)); -if($tipo == 2){//Cambio - $fecha_cambio = DateTime::createFromFormat('d/m/Y', $fecha_cambio)->format('Y-m-d'); - $dia_falta = date('w', strtotime($fecha_cambio)); -}else{ - $fecha_new = DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d')." ".$hora; - $fecha_fin_new = date("Y-m-d", strtotime($fecha_new))." ".$duracion_tiempo; - $dia_new = date('w', strtotime($fecha_new)); + $fecha_falta = DateTime::createFromFormat('d/m/Y', $fecha_falta)->format('Y-m-d'); + $dia_falta = date('w', strtotime($fecha_falta)); + + //Valida que tenga clase en la fecha de falta + if(intval($dia) != intval($dia_falta)){ + header("Location:".$pag."?error=11"); + /*print_r($_POST); + echo 'SELECT * from horario_view where horario_id = '.$horario; + echo intval($dia)." != ".intval($dia_falta);*/ + exit(); + } + $fecha_nueva = date('d/m/Y', strtotime($fecha_new)); + $fecha_clase = date('d/m/Y', strtotime($fecha_falta)); + break; + case 2://Cambio + $fecha_cambio = DateTime::createFromFormat('d/m/Y', $fecha_cambio)->format('Y-m-d'); + $dia_falta = date('w', strtotime($fecha_cambio)); + $fecha_nueva = date('d/m/Y', strtotime($fecha_cambio)); + break; + case 3://Solicitud de espacio + $fecha_new = DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d')." ".$hora; + $fecha_fin_new = date("Y-m-d", strtotime($fecha_new))." ".$duracion_tiempo; + $dia_new = date('w', strtotime($fecha_new)); + $fecha_nueva = date('d/m/Y', strtotime($fecha_new)); + break; + case 4://Cambio permanente + $fecha_new = DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d')." ".$hora; + $fecha_fin_new = date("Y-m-d", strtotime($fecha_new))." ".$duracion_tiempo; + $dia_new = date('w', strtotime($fecha_new)); - $fecha_falta = DateTime::createFromFormat('d/m/Y', $fecha_falta)->format('Y-m-d'); - $dia_falta = date('w', strtotime($fecha_falta)); + $fecha_cambio = DateTime::createFromFormat('d/m/Y', $fecha_cambio)->format('Y-m-d'); + $dia_falta = date('w', strtotime($fecha_cambio)); + + $fecha_nueva = date('d/m/Y', strtotime($fecha_new)); + $fecha_clase = date('d/m/Y', strtotime($fecha_cambio)); + break; +} + +if($materia!= null && $tipo !=3){ + //Obtiene materia + $materia_rs = $db->querySingle('SELECT materia_nombre from materia where materia_id = :mat',[':mat' => $materia]); } -//Valida que tenga clase en la fecha de falta -if(intval($dia) != intval($dia_falta)){ - header("Location:".$pag."?error=11"); - /*print_r($_POST); - echo 'SELECT * from horario_view where horario_id = '.$horario; - echo intval($dia)." != ".intval($dia_falta);*/ +switch($tipo){ + case 1://Reposición + $traslape = $db->querySingle('SELECT * from traslape_profesor_reposicion(:prof, :fecha, :hora, :dur)', + [':prof' => $prof, ':fecha'=>DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d'), ':hora'=>$hora, ':dur'=>$duracion_tiempo] + )["traslape_profesor_reposicion"]; + if($traslape){ + //print_r($_POST); + //echo "SELECT * from traslape_profesor_reposicion($prof,'".DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d')."' , '$hora', $duracion)"; + header("Location:".$pag."?error=9"); + exit(); + } + + $db_params=[ + ":f_falta"=>$fecha_falta, ":f_nueva"=>$fecha_new, ":hora_nueva"=>$hora, ":prof"=>$prof, ":desc"=>$comentario, + ":edo"=>1, ":alumnos"=>$alumnos, ":aula"=>$aula, ":solicitudtipo"=>$tipo, ":usr"=>$user->user["id"], + ":duracion"=>$duracion_tiempo, ":hor"=>$horario, ":bloque"=>$bloque, ":ciclo"=>$ciclo + ]; + $asunto = "Solicitud - Reposición nueva"; + $texto = "

Se creó un cambio de salón nuevo.

"; + $texto .= "

".mb_strtoupper($materia_rs["materia_nombre"])." del día ".$fecha_falta." a las ".$hora_orig." hrs. se propone reponer el ".$fecha_nueva." a las ".$hora." hrs."; + + /* + $log = new LogActividad(); + $desc_log = "Inserta reposición nueva ID[".$rs["fi_reposicion"]."] Fechas[".$fecha_falta.">".$fecha_new."] Periodo[".$_SESSION["periodo_id"]."] Materia[".$materia."] Profesor[".$prof."] Salon[".$salon."] Horario[".$horario."] Alumnos[".$alumnos."]"; + $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);*/ + break; + case 2: + $db_params=[ + ":f_falta"=>$fecha_cambio, ":f_nueva"=>$fecha_cambio, ":hora_nueva"=>$hora, ":prof"=>$prof, ":desc"=>$comentario, + ":edo"=>1, ":alumnos"=>$alumnos, ":aula"=>$aula, ":solicitudtipo"=>$tipo, ":usr"=>$user->user["id"], + ":duracion"=>$duracion_tiempo, ":hor"=>$horario, ":bloque"=>$bloque, ":ciclo"=>$ciclo + ]; + $asunto = "Solicitud - Cambio de salón"; + $texto = "

Se creó una solicitud de cambio de salón nuevo.

"; + $texto .= "

El día ".$fecha_nueva." a las ".$hora." hrs. "; + + /* + $log = new LogActividad(); + $desc_log = "Inserta reposición nueva ID[".$rs["fi_reposicion"]."] Fechas[".$fecha_cambio.">".$fecha_cambio_nueva."] Periodo[".$_SESSION["periodo_id"]."] Materia[".$materia."] Profesor[".$prof."] Salon[".$salon."] Horario[".$horario."] Alumnos[".$alumnos."]"; + $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log); + */ + break; + case 3: + $db_params=[ + ":f_falta"=>null, ":f_nueva"=>$fecha_new, ":hora_nueva"=>$hora, ":prof"=>$prof, ":desc"=>$comentario, + ":edo"=>1, ":alumnos"=>$alumnos, ":aula"=>$aula, ":solicitudtipo"=>$tipo, ":usr"=>$user->user["id"], + ":duracion"=>$duracion_tiempo, ":hor"=>null, ":bloque"=>null, ":ciclo"=>null + ]; + $asunto = "Solicitud - Asignación de espacio"; + $texto = "

Se creó una solicitud de asignación de salón nuevo.

"; + $texto .= "

".mb_strtoupper($materia_rs["materia_nombre"])." del día ".$fecha_nueva." a las ".$hora." hrs. "; + break; + case 4: + $db_params=[ + ":f_falta"=>$fecha_cambio, ":f_nueva"=>$fecha_new, ":hora_nueva"=>$hora, ":prof"=>$prof, ":desc"=>$comentario, + ":edo"=>1, ":alumnos"=>$alumnos, ":aula"=>$aula, ":solicitudtipo"=>$tipo, ":usr"=>$user->user["id"], + ":duracion"=>$duracion_tiempo, ":hor"=>$horario, ":bloque"=>$bloque, ":ciclo"=>$ciclo + ]; + $asunto = "Solicitud - Cambio permanente"; + $texto = "

Se creó una solicitud de asignación de salón nuevo.

"; + $texto .= "

".mb_strtoupper($materia_rs["materia_nombre"])." del día ".$fecha_clase." a las ".$hora_orig." hrs. se propone cambiar para el ".$fecha_nueva." a las ".$hora." hrs."; + break; + +} +try{ + $db->query('SELECT * from fi_solicitud(:f_falta, :f_nueva, :hora_nueva, :prof, :desc, :edo, :alumnos, :aula, :solicitudtipo, :usr, :duracion, :hor, :bloque, :ciclo)', + $db_params); +}catch(Exception $e){ + echo "ERROR Cambio
".$e->getMessage(); + //header("Location: ".$pag."?error=1"); exit(); } -//Obtiene materia -$materia_rs = $db->querySingle('SELECT materia_nombre from materia where materia_id = :mat',[':mat' => $materia]); -//Obtiene correo -$correos_rs = $db->querySingle('SELECT coor.usuario_correo, coor.usuario_nombre from usuario coor where rol_id = :rol_coord and facultad_id = ( - select coalesce(facultad_id,0) from usuario u where u.usuario_id = :id_usr) and coor.usuario_correo != \'\'',[':rol_coord' => COORDINADOR, ':id_usr' => $user->user["id"]] -); -if( count($correos_rs) > 0 ){ - $to = $correos_rs["usuario_correo"]; -} +MandaCorreos::enviarCorreo($db, $asunto, $texto, $user->facultad["facultad_id"], MandaCorreos::COORDINADOR); -if($tipo == 1){//Reposición - // Valida que grupo no tenga clases - /*$result = validaConflictoHoras($pdo, $gpo, $dia_new, $hora, $materia, "-", $fecha_new, $fecha_fin_new, $duracion); - if($result != ""){//error - //echo $result; - header("Location:".$pag."?error=7"); - exit(); - } - */ - //Valida que profesor no este en 2 reposiciones al mismo tiempo en la fecha nueva - - $traslape = $db->querySingle('SELECT * from traslape_profesor_reposicion(:prof, :fecha, :hora, :dur)', - [':prof' => $prof, ':fecha'=>DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d'), ':hora'=>$hora, ':dur'=>$duracion_tiempo] - )["traslape_profesor_reposicion"]; - if($traslape){ - //print_r($_POST); - //echo "SELECT * from traslape_profesor_reposicion($prof,'".DateTime::createFromFormat('d/m/Y', $fecha)->format('Y-m-d')."' , '$hora', $duracion)"; - - header("Location:".$pag."?error=9"); - exit(); - } - - try{ - if($user->jefe_carrera){//jefe - $db->query('SELECT * from fi_reposicion_solicitud(:f_falta, :f_nueva, :hora_nueva, :hor, :prof, 1, :desc, :alumnos, true, :aula, :duracion, :usr, :bloque, :ciclo)', - [':f_falta' => $fecha_falta, ':f_nueva' => $fecha_new, ':hora_nueva' => $hora, ':hor' => $horario, - ':prof' => $prof, ':desc' => $comentario, ':alumnos' => $alumnos, ':aula' => $aula, ':duracion' => $duracion_tiempo, ':usr'=>$user->user["id"], - ':bloque' => $bloque, ':ciclo' => $ciclo - ] - ); - - }else{//coordinador - echo 'SELECT * from fi_reposicion_solicitud(:f_falta, :f_nueva, :hora_nueva, :hor, :prof, 2, :desc, :alumnos, true, :aula, :duracion, :usr, :bloque, :ciclo, '.$salon.')'; - $db->query('SELECT * from fi_reposicion_solicitud(:f_falta, :f_nueva, :hora_nueva, :hor, :prof, 2, :desc, :alumnos, true, :aula, :duracion, :usr, :bloque, :ciclo, :salon)', - [':f_falta' => $fecha_falta, ':f_nueva' => $fecha_new, ':hora_nueva' => $hora, ':hor' => $horario, - ':prof' => $prof, ':desc' => $comentario, ':alumnos' => $alumnos, ':aula' => $aula, ':duracion' => $duracion_tiempo, ':usr'=>$user->user["id"], - ':bloque' => $bloque, ':ciclo' => $ciclo, ':salon'=>$salon - ] - ); - } - }catch(Exception $e){ - - echo "ERROR Reposición
".$e->getMessage(); - //header("Location: ".$pag."?error=1"); - exit(); - } - $fecha_clase = date('d/m/Y', strtotime($fecha_falta)); - $fecha_nueva = date('d/m/Y', strtotime($fecha_new)); - $texto = "

Se creó una reposición nueva.

"; - $texto .= "

".mb_strtoupper($materia_rs["materia_nombre"])." del día ".$fecha_clase." a las ".$horario_rs["horario_hora"]." hrs. se propone reponer el ".$fecha_nueva." a las ".$hora." hrs."; - $texto .= "

Ingresa al sistema PAAD para autorizarla.

"; - -/* - $log = new LogActividad(); - $desc_log = "Inserta reposición nueva ID[".$rs["fi_reposicion"]."] Fechas[".$fecha_falta.">".$fecha_new."] Periodo[".$_SESSION["periodo_id"]."] Materia[".$materia."] Profesor[".$prof."] Salon[".$salon."] Horario[".$horario."] Alumnos[".$alumnos."]"; - $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);*/ - - -}else{//Cambio salón / hora - - try{ - if($user->jefe_carrera){//jefe - $db->query('SELECT * from fi_reposicion_solicitud(:f_falta, :f_nueva, :hora_nueva, :hor, :prof, 1, :desc, :alumnos, false, :aula, :duracion, :usr, :bloque, :ciclo)', - [':f_falta' => $fecha_cambio, ':f_nueva' => $fecha_cambio, ':hora_nueva' => $hora, ':hor' => $horario, - ':prof' => $prof, ':desc' => $comentario, ':alumnos' => $alumnos, ':aula' => $aula, ':duracion' => $duracion_tiempo, ':usr'=>$user->user["id"], - ':bloque' => $bloque, ':ciclo' => $ciclo - ] - ); - }else{//coordinador - $db->query('SELECT * from fi_reposicion_solicitud(:f_falta, :f_nueva, :hora_nueva, :hor, :prof, 2, :desc, :alumnos, false, :aula, :duracion, :usr, :bloque, :ciclo, :salon)', - [':f_falta' => $fecha_cambio, ':f_nueva' => $fecha_cambio, ':hora_nueva' => $hora, ':hor' => $horario, - ':prof' => $prof, ':desc' => $comentario, ':alumnos' => $alumnos, ':aula' => $aula, ':duracion' => $duracion_tiempo, ':usr'=>$user->user["id"], - ':bloque' => $bloque, ':ciclo' => $ciclo, ':salon'=>$salon - ] - ); - } - }catch(Exception $e){ - echo "ERROR Cambio
".$e->getMessage(); - //header("Location: ".$pag."?error=1"); - exit(); - } - $texto = "

Se creó un cambio de salón nuevo.

"; - $texto .= "

".mb_strtoupper($materia_rs["materia_nombre"])." del día ".$fecha_falta." a las ".$hora." hrs. se propone reponer el ".$fecha_nueva." a las ".$hora." hrs."; +/*if($to!= "" && ENVIO_CORREOS){ $texto .= "

Ingresa al sistema PAAD para autorizarlo.

"; - - /* - $log = new LogActividad(); - $desc_log = "Inserta reposición nueva ID[".$rs["fi_reposicion"]."] Fechas[".$fecha_cambio.">".$fecha_cambio_nueva."] Periodo[".$_SESSION["periodo_id"]."] Materia[".$materia."] Profesor[".$prof."] Salon[".$salon."] Horario[".$horario."] Alumnos[".$alumnos."]"; - $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log); - */ - -} - -if($to!= "" && ENVIO_CORREOS){ $asunto = "Reposición nueva - solicitud"; //crear plantilla $texto = ' @@ -207,7 +208,7 @@ if($to!= "" && ENVIO_CORREOS){ Mailer::enviarCorreo($to, $asunto, $texto, true); } -} +}*/ header("Location: ".$pag."?ok=0"); exit(); diff --git a/class/manda_correo.php b/class/manda_correo.php new file mode 100644 index 0000000..ebbb753 --- /dev/null +++ b/class/manda_correo.php @@ -0,0 +1,84 @@ +querySingle("SELECT DISTINCT coor.usuario_correo FROM usuario coor + where rol_id = 9 and facultad_id = :fac + and coor.usuario_correo is not null and coor.usuario_correo != ''", + [':fac' => $facultad] + ); + foreach($correos_rs as $correo){ + array_push($correos, $correo["usuario_correo"]); + } + unset($correos_rs); + } + if($tipo & self::SUPERVISOR){ + $correosSup_rs = $db->querySingle("SELECT DISTINCT sup.usuario_correo + FROM horario_supervisor hs + inner join usuario sup on sup.usuario_id =hs.usuario_id + where :id_fac = ANY(hs.facultad_id_array) + and sup.usuario_correo is not null and sup.usuario_correo != ''", + [':id_fac' => $facultad] ); + foreach($correosSup_rs as $correo){ + array_push($correos, $correo["usuario_correo"]); + } + unset($correosSup_rs); + } + if($tipo & self::JEFE){ + $correosJefe_rs = $db->querySingle("SELECT DISTINCT jefe.usuario_correo + FROM horario_jefe_carrera hs + inner join usuario jefe on jefe.usuario_id =hs.usuario_id + where :id_fac = ANY(hs.facultad_id_array) + and jefe.usuario_correo is not null and jefe.usuario_correo != ''", + [':id_fac' => $facultad] ); + foreach($correosJefe_rs as $correo){ + array_push($correos, $correo["usuario_correo"]); + } + unset($correosJefe_rs); + } + if($tipo & self::PROFESOR && $prof_id != NULL){ + $correosProf_rs = $db->querySingle("SELECT DISTINCT prof.usuario_correo + FROM horario_profesor hs + inner join usuario prof on prof.usuario_id =hs.usuario_id + where :id_fac = ANY(hs.facultad_id_array) and prof.usuario_id = :id_prof + and prof.usuario_correo is not null and prof.usuario_correo != ''", + [':id_prof'=>$prof_id, ':id_fac' => $facultad] ); + foreach($correosProf_rs as $correo){ + array_push($correos, $correo["usuario_correo"]); + } + unset($correosProf_rs); + } + $to .= join(",", $correos); + } + + if($to!= "" && self::ENVIO_CORREOS){ + //crear plantilla + $texto = ' + La Salle + '.$texto.' + '; + + require_once('../include/phpmailer/PHPMailerAutoload.php'); + if($_ENV['DB_NAME'] == "paad_pruebas" || self::PRUEBAS){ + $asunto = "PRUEBAS-".$asunto; + } + Mailer::enviarCorreo($to, $asunto, $texto, true); + + } + } +} +?> \ No newline at end of file diff --git a/rest/horarios.php b/rest/horarios.php index 2ef619c..4f9a929 100644 --- a/rest/horarios.php +++ b/rest/horarios.php @@ -19,6 +19,14 @@ require_once $ruta_superior."/include/bd_pdo_rest.php"; require_once __DIR__."/token.php"; require_once __DIR__."/LogCambios.php"; +function quitaAcentos($cadena) { + // Normalizar la cadena para descomponer caracteres acentuados en sus formas base y acentos + $cadenaNormalizada = Normalizer::normalize($cadena, Normalizer::FORM_D); + // Utilizar una expresión regular para eliminar los caracteres diacríticos + $cadenaSinAcentos = preg_replace('/\p{M}/u', '', $cadenaNormalizada); + return $cadenaSinAcentos; +} + //--------------ACTUALIZA HORARIOS-------------------------- if(!empty($_GET["fecha"])){ $hoy = $_GET["fecha"]; @@ -271,7 +279,12 @@ try{ //------------------ // Encontrar los "hash" que están en $sgu pero no están en $bd - $hashes_no_en_sgu = array_diff($hashes_bd, $hashes_sgu); + //$hashes_no_en_sgu = array_udiff($hashes_bd, $hashes_sgu, 'strcasecmp'); + $hashes_no_en_sgu = array_udiff($hashes_bd, $hashes_sgu, function($a, $b){ + return strcasecmp(quitaAcentos($a), quitaAcentos($b)); + }); + + if($debug) echo "hashes_no_en_sgu ".count($hashes_no_en_sgu)."
"; if(count($hashes_no_en_sgu)>0){ @@ -305,7 +318,12 @@ try{ } // Encontrar los "hash" que están en $sgu pero no están en $bd - $hashes_no_en_bd = array_diff($hashes_sgu, $hashes_bd); + //$hashes_no_en_bd = array_udiff($hashes_sgu, $hashes_bd, 'strcasecmp'); + //comparar $hashes_sgu y $hashes_bd sin importar las maypusculas, minúsculas incluyendo acentos y ñ + $hashes_no_en_bd = array_udiff($hashes_sgu, $hashes_bd, function($a, $b){ + return strcasecmp(quitaAcentos($a), quitaAcentos($b)); + }); + //echo "hashes_no_en_bd ".count($hashes_no_en_bd)."
"; diff --git a/solicitud_crear.php b/solicitud_crear.php index 8d4cd18..74cc4a7 100644 --- a/solicitud_crear.php +++ b/solicitud_crear.php @@ -128,8 +128,8 @@ if(!is_null($user->periodo_id)){ if($write==true && isset($prof_rs) && count($prof_rs)>0) {?>
-
-
+
+
@@ -642,6 +642,7 @@ if(!is_null($user->periodo_id)){ $('#fecha_nueva').attr("required", true); $("#hora_nombre").text("Hora reposición *"); + $("#materiaBlock").show(); break; case 2://cambio de salón $('#fecha_cambio').parents('.row').show(); @@ -653,6 +654,7 @@ if(!is_null($user->periodo_id)){ $('#fecha_nueva').removeAttr("required"); $("#hora_nombre").text("Hora cambio *"); + $("#materiaBlock").show(); var hora = $("#dlMateria ul li.selected").data("hr"); var min = $("#dlMateria ul li.selected").data("min"); $("#hora_ini").val(hora); @@ -668,17 +670,19 @@ if(!is_null($user->periodo_id)){ $('#fecha_nueva').attr("required", true); $("#hora_nombre").text("Hora *"); + $("#materiaBlock").hide(); break; case 4: $('#fecha_cambio').parents('.row').show(); $('#fecha_falta').parents('.row').hide(); $('#fecha_nueva').parents('.row').show(); - + $('#fecha_cambio').attr("required", true); $('#fecha_falta').removeAttr("required"); $('#fecha_nueva').attr("required", true); - + $("#hora_nombre").text("Hora cambio *"); + $("#materiaBlock").show(); break; } }