tieneAcceso()){ $return["error"] = "Error! No tienes permisos para realizar esta acción."; }else if(!isset($_POST["id"])){ $return["error"] = "Error! No se recibió la información del grupo."; }else{ $grupo = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto $json = json_decode($_POST["json"], true); $return["error"] = ""; try { $pdo->beginTransaction(); $error = false; $arregloQuery = array(); //---- Valida que no haya conflicto de salones ---------- foreach($json as $clase){ if($clase["salon"] == ""){ $stmt = $pdo->prepare('Select * from fs_horariogrupovalida(:gpo, :dia, :hora, :mat, NULL, :fecha_ini, :fecha_fin, :duracion)'); }else{ $stmt = $pdo->prepare('Select * from fs_horariogrupovalida(:gpo, :dia, :hora, :mat, :salon, :fecha_ini, :fecha_fin, :duracion)'); $stmt->bindParam(":salon", $clase["salon"]); } $stmt->bindParam(":gpo", $grupo); $stmt->bindParam(":dia", $clase["dia"]); $stmt->bindParam(":hora", $clase["hora"]); $stmt->bindParam(":mat", $clase["materia"]); $fecha_tmp = fechaGuion($clase["fecha_inicial"]); $stmt->bindParam(":fecha_ini", $fecha_tmp); $fecha_tmp = fechaGuion($clase["fecha_final"]); $stmt->bindParam(":fecha_fin", $fecha_tmp); $stmt->bindParam(":duracion", $clase["duracion"]); if(!$stmt->execute()){ $t = $stmt->errorInfo(); $return["error"] .= "No se puede grabar el horario. Ocurrió un error al validar la materia '".$clase["materia_nombre"]."'. ".$t[2]; $error = true; $return["json"] = json_encode($return); echo json_encode($return); exit(); } $invalido_rs = $stmt->fetchAll(); $stmt->closeCursor(); if(count($invalido_rs) > 0 && isset($invalido_rs[0]["Materia_desc"])){ $return["error"] .= "No se puede grabar el horario. La materia ".$clase["materia_nombre"]." utiliza el mismo salón (".$invalido_rs[0]["Salon_desc"].") que ".$invalido_rs[0]["Materia_desc"]." del grupo ".$invalido_rs[0]["Grupo_desc"]." el mismo día a la misma hora."; $error = true; $return["json"] = json_encode($return); echo json_encode($return); exit(); } if(is_array($clase["profesores"]) ){ foreach($clase["profesores"] as $profesor){ if($profesor["salon"] == ""){ $stmt = $pdo->prepare('Select * from fs_horariogrupovalida(:gpo, :dia, :hora, :mat, NULL, :fecha_ini, :fecha_fin, :duracion)'); }else{ $stmt = $pdo->prepare('Select * from fs_horariogrupovalida(:gpo, :dia, :hora, :mat, :salon, :fecha_ini, :fecha_fin, :duracion)'); $stmt->bindParam(":salon", $profesor["salon"]); } $stmt->bindParam(":mat", $clase["materia"]); $stmt->bindParam(":gpo", $grupo); $stmt->bindParam(":dia", $clase["dia"]); $stmt->bindParam(":hora", $clase["hora"]); if($profesor["fecha_inicial"] != "") $fecha_tmp = fechaGuion($profesor["fecha_inicial"]); else $fecha_tmp = fechaGuion($clase["fecha_inicial"]); $stmt->bindParam(":fecha_ini", $fecha_tmp); if($profesor["fecha_final"] != "") $fecha_tmp = fechaGuion($profesor["fecha_final"]); else $fecha_tmp = fechaGuion($clase["fecha_final"]); $stmt->bindParam(":fecha_fin", $fecha_tmp); $stmt->bindParam(":duracion", $clase["duracion"]); if(!$stmt->execute()){ $t = $stmt->errorInfo(); $return["error"] .= "No se puede grabar el horario. Ocurrió un error al validar la materia '".$clase["materia_nombre"]."'. ".$t[2]; $error = true; $return["json"] = json_encode($return); echo json_encode($return); exit(); } $invalido_rs = $stmt->fetchAll(); $stmt->closeCursor(); if(count($invalido_rs) > 0 && isset($invalido_rs[0]["Materia_desc"])){ $return["error"] .= "No se puede grabar el horario. La materia ".$clase["materia_nombre"]." utiliza el mismo salón (".$invalido_rs[0]["Salon_desc"].") que ".$invalido_rs[0]["Materia_desc"]." del grupo ".$invalido_rs[0]["Grupo_desc"]." el mismo día a la misma hora."; $error = true; $return["json"] = json_encode($return); echo json_encode($return); exit(); } } } } //---- Valida que no haya conflicto de profesores ---------- foreach($json as $clase){ if(is_array($clase["profesores"]) ){ foreach($clase["profesores"] as $profesor){ if($profesor["profesor"] == ""){ $stmt = $pdo->prepare('Select * from fs_profesorhorariogrupovalida(:gpo, :dia, :hora, NULL, :fecha_ini, :fecha_fin, :duracion)'); }else{ $stmt = $pdo->prepare('Select * from fs_profesorhorariogrupovalida(:gpo, :dia, :hora, :prof, :fecha_ini, :fecha_fin, :duracion)'); $stmt->bindParam(":prof", $profesor["profesor"]); } $stmt->bindParam(":gpo", $grupo); $stmt->bindParam(":dia", $clase["dia"]); $stmt->bindParam(":hora", $clase["hora"]); if($profesor["fecha_inicial"] != "") $fecha_tmp = fechaGuion($profesor["fecha_inicial"]); else $fecha_tmp = fechaGuion($clase["fecha_inicial"]); $stmt->bindParam(":fecha_ini", $fecha_tmp); if($profesor["fecha_final"] != "") $fecha_tmp = fechaGuion($profesor["fecha_final"]); else $fecha_tmp = fechaGuion($clase["fecha_final"]); $stmt->bindParam(":fecha_fin", $fecha_tmp); $stmt->bindParam(":duracion", $clase["duracion"]); if(!$stmt->execute()){ $t = $stmt->errorInfo(); $return["error"] .= "No se puede grabar el horario. Ocurrió un error al validar el profesor de la materia '".$clase["materia_nombre"]."'. ".$t[2]; $error = true; $return["json"] = json_encode($return); echo json_encode($return); exit(); } $invalido_rs = $stmt->fetchAll(); $stmt->closeCursor(); if(count($invalido_rs) > 0 && isset($invalido_rs[0]["Materia_desc"])){ $return["error"] .= "No se puede grabar el horario. La materia ".$clase["materia_nombre"]." utiliza el mismo salón (".$invalido_rs[0]["Salon_desc"].") que ".$invalido_rs[0]["Materia_desc"]." del grupo ".$invalido_rs[0]["Grupo_desc"]." el mismo día a la misma hora."; $error = true; $return["json"] = json_encode($return); echo json_encode($return); exit(); } } } } //---- Insertar ---------- /* $return["query"] = $arregloQuery; $return["error"] = "Modo Prueba."; $return["json"] = json_encode($return); echo json_encode($return); exit();*/ //Quita todo y vuelve a insertar $stmt = $pdo->prepare('Select * from fd_horariogrupo(:gpo)'); $stmt->bindParam(":gpo", $grupo); if(!$stmt->execute()){ $t = $stmt->errorInfo(); $return["error"] .= "Ocurrió un error al borrar los horarios del grupo ".$t[2]; $error = true; } $stmt->closeCursor(); if(!$error){ foreach($json as $clase){ //Inserta Horario grupo if($clase["salon"] == "") $stmt = $pdo->prepare('Select * from fi_horariogrupo(:gpo, :dia, :hora, :mat, NULL, :usr, :fecha_ini, :fecha_fin, :duracion)'); else{ $stmt = $pdo->prepare('Select * from fi_horariogrupo(:gpo, :dia, :hora, :mat, :salon, :usr, :fecha_ini, :fecha_fin, :duracion)'); $stmt->bindParam(":salon", $clase["salon"]); } $stmt->bindParam(":gpo", $grupo); $stmt->bindParam(":dia", $clase["dia"]); $stmt->bindParam(":hora", $clase["hora"]); $stmt->bindParam(":mat", $clase["materia"]); $stmt->bindParam(":usr", $_SESSION["usuario_id"]); $fecha_tmpI = fechaGuion($clase["fecha_inicial"]); $stmt->bindParam(":fecha_ini", $fecha_tmpI); $fecha_tmpF = fechaGuion($clase["fecha_final"]); $stmt->bindParam(":fecha_fin", $fecha_tmpF); $stmt->bindParam(":duracion", $clase["duracion"]); if(!$stmt->execute()){ $t = $stmt->errorInfo(); $return["error"] .= "Ocurrió un error al insertar el horario de la materia '".$clase["materia_nombre"]."'. ".$t[2]; $error = true; } $stmt->closeCursor(); //Inserta Profesores/submaterias if(!$error && is_array($clase["profesores"]) ){ foreach($clase["profesores"] as $profesor){ if(!$error && ($profesor["profesor"] != "" || $profesor["submateria"] != "") && ($profesor["profesor"] > 0 || $profesor["submateria"] > 0)){ //si los 2 son vacios no guarda $query = ":gpo, :dia, :hora, :mat, "; if($profesor["profesor"] != "" && intval($profesor["profesor"]) != 0){ $query .=":prof, "; }else{ $query .="NULL, "; } if($profesor["submateria"] != "" && intval($profesor["submateria"]) != 0){ $query .=":sub, "; }else{ $query .="NULL, "; } if($profesor["fecha_inicial"] != "" && $profesor["fecha_final"] != ""){ $query .=":fecha_ini, :fecha_fin, "; }else{ $query .="NULL, NULL, "; } if($profesor["salon"] != ""){ $query .=":salon"; }else{ $query .="NULL"; } $stmt = $pdo->prepare('Select * from fi_profesorhorariogrupo('.$query.')'); $stmt->bindParam(":gpo", $grupo); $stmt->bindParam(":dia", $clase["dia"]); $stmt->bindParam(":hora", $clase["hora"]); $stmt->bindParam(":mat", $clase["materia"]); if($profesor["profesor"] != "" && intval($profesor["profesor"]) != 0) $stmt->bindParam(":prof", $profesor["profesor"]); if($profesor["submateria"] != "" && intval($profesor["submateria"]) != 0) $stmt->bindParam(":sub", $profesor["submateria"]); if($profesor["fecha_inicial"] != "" && $profesor["fecha_final"] != ""){ $stmt->bindParam(":fecha_ini", $profesor["fecha_inicial"]); $stmt->bindParam(":fecha_fin", $profesor["fecha_final"]);} if($profesor["salon"] != "") $stmt->bindParam(":salon", $profesor["salon"]); if(!$stmt->execute()){ $t = $stmt->errorInfo(); $return["error"] .= "Ocurrió un error al insertar los profesores/submaterias ".$t[2]; $error = true; } $stmt->closeCursor(); } }//fin foreach }//fin error }//foreach json }//no error if(!$error){ $pdo->commit(); unset($return["error"]); $return["ok"] = "El horario se guardó correctamente"; }else $pdo->rollBack(); $stmt = null; // cierra conexion } catch(PDOException $e) { $pdo->rollBack(); $return["error"] = "Ocurrió un error al insertar los datos de los horarios."; } } $return["json"] = json_encode($return); echo json_encode($return); ?>