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 CambioSe 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 = ' +
+ '.$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)."