date('H:i', strtotime($arr[$j]["Hora_inicio"])) ) || (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"])) ) ){ if($arr[$i]["TipoHorario_id"] < $arr[$j]["TipoHorario_id"]){ $erroresArr[] = array('id'=> $arr[$i]["Horario_id"], '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"]))); $arr[$i]["Duracion"] = (strtotime('2019-01-01 '.$arr[$j]["Hora_inicio"]) - strtotime('2019-01-01 '.$arr[$i]["Hora_inicio"]))/60; if($arr[$i]["Duracion"] <= 0) array_splice($arr, $i, 1); }else{ //if($arr[$i]["TipoHorario_id"] < $arr[$j]["TipoHorario_id"]) $erroresArr[] = array('id'=> $arr[$j]["Horario_id"], '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"]))); $arr[$j]["Duracion"] = (strtotime('2019-01-01 '.$arr[$i]["Hora_inicio"]) - strtotime('2019-01-01 '.$arr[$j]["Hora_inicio"]))/60; if($arr[$j]["Duracion"] <= 0) array_splice($arr, $j, 1); } } } } } return $erroresArr; } //--- Objeto para validar usuario. El id de usuario lo lee desde sesión $objSesion = new ValidaSesion($pdo, 20, APSA); if(!$objSesion->tieneAcceso()){ $return["error"] = "Error! No tienes permisos para realizar esta acción."; }else if(!isset($_POST["orig"]) || !isset($_POST["dest"])){ $return["error"] = "Error! No se recibió la información del horario."; }else{ $orig = filter_input(INPUT_POST, "orig", FILTER_SANITIZE_NUMBER_INT);//limpia texto $dest = filter_input(INPUT_POST, "dest", FILTER_SANITIZE_NUMBER_INT);//limpia texto $filter_fecha = fechaGuion(trim(filter_input(INPUT_POST, "fecha", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))));//limpia texto $return["error"] = ""; $error = false; if($orig <= 0 || $orig >=3 || $dest <= 0 || $dest >=3){ $return["error"] = "Error! Los parámetros del horario son incorrectos."; $error = true; } try { $pdo->beginTransaction(); if(!$error){ $stmt = $pdo->prepare('Select COUNT("Horario_id") AS total from "HorarioAdministrativo" WHERE "Usuario_id" = :usr AND "TipoAutorizacionHorario_id" = :tipoauto');//Obtiene todo el calendario $stmt->bindParam(":usr", $_SESSION["usuario_id"]); $stmt->bindParam(":tipoauto", $orig); if(!$stmt->execute()){ //$t = $stmt->errorInfo(); $return["error"] .= "No existen bloques de horario para guardar."; $error = true; }else{ $rs = $stmt->fetch(); if($rs["total"] == 0){ $return["error"] .= "No existen bloques de horario para guardar."; $error = true; } } } //Valida que el horario no tenga errores, si tiene errores borra los horarios con conflicto if(!$error && intval($orig) == 1){ $stmt = $pdo->prepare('Select * from fs_mihorariofull(:usr, :fecha, 1)');//Obtiene todo el calendario $stmt->bindParam(":fecha", $filter_fecha); $stmt->bindParam(":usr", $_SESSION["usuario_id"]); if(!$stmt->execute()){ $t = $stmt->errorInfo(); $return["error"] .= "Ocurrió un error al obtener los horarios."; $error = true; echo "Ocurrió un error al obtener los horarios ".$t; exit(); } $horario_rs = $stmt->fetchAll(); $erroresArr = validaHorarios($horario_rs); $return["conflictoCount"] = count($erroresArr); if(count($erroresArr) > 0){ //$return["errorArr"] = $erroresArr; foreach($erroresArr as $horario_err){ $stmt = $pdo->prepare('Select * from fd_mihorario(:id, :usr)'); $stmt->bindParam(":id", $horario_err["id"]); $stmt->bindParam(":usr", $_SESSION["usuario_id"]); if(!$stmt->execute()){ //$t = $stmt->errorInfo(); $return["error"] .= "Ocurrió un error al borrar el horario duplicado."; $error = true; } } } } if(!$error){ //---- Actualiza ---------- $stmt = $pdo->prepare('Select * from fu_mihorarioautorizacion(:usr, :orig, :dest)'); $stmt->bindParam(":usr", $_SESSION["usuario_id"]); $stmt->bindParam(":orig", $orig); $stmt->bindParam(":dest", $dest); if(!$stmt->execute()){ //$t = $stmt->errorInfo(); $return["error"] .= "Ocurrió un error al actualizar el estado de aprobación de horario."; $error = true; }else{ $pdo->commit(); unset($return["error"]); switch($dest){ case 1: $return["ok"] = "Se canceló el envío de aprobación."; break; case 2: $return["ok"] = "El horario se envió a aprobación."; break; //case 3: $return["ok"] = "El horario se aprobó correctamente."; break; } //Inserta Log $log = new LogActividad(); $desc_log = "Actualiza aprobación de horario De tipo[".$orig."] A [".$dest."]"; $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log); } $stmt = $pdo->prepare('Select * from fs_director()'); if(!$stmt->execute()){ $return["error"] .= "Ocurrió un error al obtener datos del director."; $error = true; } $director_rs = $stmt->fetch(); $stmt->closeCursor(); //Es director, autoriza horario por default if(!$error && $director_rs["Usuario_id"] == $_SESSION["usuario_id"]){ $stmt = $pdo->prepare('Select * from fu_mihorarioautorizacion(:usr, 2, 3)');//autorizado $stmt->bindParam(":usr", $_SESSION["usuario_id"]); if(!$stmt->execute()){ //$t = $stmt->errorInfo(); $return["error"] .= "Ocurrió un error al actualizar el estado de aprobación de horario."; $error = true; } } } if($error){ $pdo->rollBack(); } $stmt = null; // cierra conexion } catch(PDOException $e) { $pdo->rollBack(); $return["error"] = "Ocurrió un error al actualizar el estado de aprobación del horario.".$e->getMessage(); } } $return["json"] = json_encode($return); echo json_encode($return); ?>