materiasalumnos_importar.php 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. <?php
  2. ini_set ( 'max_execution_time' , '600' );//10 min
  3. ini_set ( 'max_input_time' , '600' );//10 min
  4. require_once("../../include/constantes.php");
  5. require_once("../../include/nocache.php");
  6. require_once("../../include/util.php");
  7. require_once("../../include/bd_pdo.php");
  8. require_once("../../classes/ValidaSesion.php");
  9. function valoresCompletos($data, $max){
  10. for($i = 0; $i<$max; $i++){
  11. if(!isset($data[$i]) || (trim($data[$i]) == "" || strlen(trim($data[$i])) <= 1))
  12. return false;
  13. }
  14. return true;
  15. }
  16. function obtieneNumeros ($texto) {
  17. preg_match_all('/\d+/', $texto, $matches);
  18. return implode($matches[0]);
  19. }
  20. function obtieneLetras ($texto) {
  21. preg_match_all('/[a-zA-Z]+/', $texto, $matches);
  22. return implode($matches[0]);
  23. }
  24. function quitaCarrera($plan_rs, $shortname){
  25. foreach($plan_rs AS $plan){
  26. if( mb_strpos($shortname, $plan["Carrera_prefijo"]) !== false){
  27. return str_replace($plan["Carrera_prefijo"], "",$shortname);
  28. }
  29. }
  30. }
  31. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  32. $objSesion = new ValidaSesion($pdo, 102, GEMA);
  33. if(!$objSesion->tieneAcceso()){
  34. $return["error"] = "No tienes permisos para acceder a esa sección o la sesión caducó.";
  35. }else if(!isset($_FILES['archivo']['name'][0])){
  36. $return["error"] = "No se recibieron los datos de los alumnos.";
  37. }else{
  38. //$inputFileName =__DIR__. '/tmp/alumnos_tmp.xlsx';
  39. $archivo = $_FILES['archivo']['name'][0];
  40. // Check file size
  41. if ($_FILES["archivo"]["size"][0] > 10 * 1024 * 1024) {//en bytes
  42. $return["error"] = "El archivo supera los 10MB y no se puede cargar.";
  43. $return["json"] = json_encode($return);
  44. echo json_encode($return);
  45. exit();
  46. }
  47. $exts_arr = array("csv");
  48. $dot_arr = explode('.', $archivo);
  49. $ext = end($dot_arr);
  50. if(!in_array($ext, $exts_arr)){
  51. $return["error"] = "No es una extensión válida. Solo se permiten archivos CSV.";
  52. $return["json"] = json_encode($return);
  53. echo json_encode($return);
  54. exit();
  55. }
  56. //--------
  57. $stmt = $pdo->prepare('Select DISTINCT "Carrera_prefijo", "Carrera_id" from fs_planestudio(:nivel, NULL, NULL, true, 0, NULL) ORDER BY "Carrera_prefijo"');
  58. $stmt->bindParam(":nivel", $_SESSION["nivel_id"]);
  59. if(!$stmt->execute()){
  60. $return["error"] = "Ocurrió un error al cargar los planes de estudios";
  61. $return["json"] = json_encode($return);
  62. echo json_encode($return);
  63. exit();
  64. }else{
  65. $plan_rs = $stmt->fetchAll();
  66. }
  67. $stmt->closeCursor();
  68. //---------
  69. //$newfilename = "tmp_al_".$_SESSION["gpo_id"].".".$ext;
  70. $inputFileName = $_FILES["archivo"]["tmp_name"][0];
  71. /*$alumnoData=array();
  72. $al_old = "";
  73. $i=-1;
  74. $file_to_read = fopen($inputFileName, 'r');
  75. while (!feof($file_to_read) ) {
  76. $row = fgetcsv($file_to_read, 100, ',');
  77. if($row[0]!="" && $row[1]!=""){
  78. if($row[0] != $al_old){
  79. if($al_old != ""){
  80. $alumnoData[$i]["mat_list"] = substr($alumnoData[$i]["mat_list"],0,-1);
  81. }
  82. if(strpos($row[0],'al')===false) $clave = $row[0];//OK
  83. else $clave = substr($row[0],2);
  84. $i++;
  85. $alumnoData[$i] = array("clave"=>$clave, "mat_list"=>"");
  86. $grupoMat = "";
  87. $al_old = $row[0];
  88. }
  89. if(stripos( $row[1], "ELECTIVA") === false){
  90. $tmpArr = explode("-", $row[1]);
  91. if(count($tmpArr) >= 4){
  92. $shortname = $tmpArr[0];
  93. $mat_id = $tmpArr[3];//OK
  94. $grupo = quitaCarrera($plan_rs, $shortname );//OK
  95. $alumnoData[$i]["mat_list"] .= $grupo.",".$mat_id.";";
  96. }
  97. }
  98. }
  99. }
  100. if($al_old != ""){
  101. $alumnoData[$i]["mat_list"] = substr($alumnoData[$i]["mat_list"],0,-1);
  102. }
  103. fclose($file_to_read);
  104. $return["alumnoData"] = $alumnoData;*/
  105. /*$return["json"] = json_encode($return);
  106. echo json_encode($return);
  107. exit();*/
  108. try {
  109. $pdo->beginTransaction();
  110. $alumnoArr = array();
  111. $row = 1;
  112. $omitidoArr = array();
  113. $insertada = 0;
  114. $debug = "";
  115. //$debug .= "SELECT * from fi_alumnomaterias_csv(".$data["clave"].", ".$_SESSION["periodo_id"].", ".$data["mat_list"].") ||";
  116. $stmt = $pdo->prepare('SELECT * from fi_alumnomaterias_csv(:clave, :per, :gpo, :mat)');
  117. $stmt->bindParam(":per", $_SESSION["periodo_id"]);
  118. $file_to_read = fopen($inputFileName, 'r');
  119. while (!feof($file_to_read) ) {
  120. $row = fgetcsv($file_to_read, 100, ',');
  121. if($row[0] != "" && $row[1] != ""){
  122. if(stripos( $row[1], "ELECTIVA") === false){
  123. $tmpArr = explode("-", $row[1]);
  124. if(count($tmpArr) >= 4){
  125. $shortname = trim($tmpArr[0]);
  126. $mat_id = trim($tmpArr[3]);//OK
  127. $grupo = trim(quitaCarrera($plan_rs, $shortname ));//OK
  128. }
  129. if(strpos($row[0],'al')===false) $clave = trim($row[0]);//OK
  130. else $clave = substr(trim($row[0]),2);
  131. $stmt->bindParam(":clave", $clave);
  132. $stmt->bindParam(":gpo", $grupo);
  133. $stmt->bindParam(":mat", $mat_id);
  134. if(!$stmt->execute()){
  135. $pdo->rollBack();
  136. $return["debug"] = "SELECT * from fi_alumnomaterias_csv(".$clave.", ".$_SESSION["periodo_id"].", '".$grupo."', $mat_id) ||";
  137. $return["error"] = "Ocurrió un error al cargar los planes de estudios";
  138. $return["json"] = json_encode($return);
  139. echo json_encode($return);
  140. exit();
  141. }else{
  142. $mat_rs = $stmt->fetch();
  143. }
  144. switch($mat_rs["fi_alumnomaterias_csv"]){
  145. case 0:
  146. $insertada++;
  147. break;
  148. case 1:
  149. $omitidoArr[] = array("clave"=>$clave, "desc"=> "No existe la clave de alumno");
  150. break;
  151. case 2:
  152. $omitidoArr[] = array("clave"=>$clave, "desc"=> "La materia ".$row[1]." ya está asignada para el alumno");
  153. break;
  154. case 3:
  155. $omitidoArr[] = array("clave"=>$clave, "desc"=> "No existe la materia o el grupo ".$row[1]." en el periodo ".$_SESSION["periodo_id"]);
  156. break;
  157. //$debug .= 'SELECT * from fi_alumnomaterias_excel(\''.$clave.'\', '.$_SESSION["periodo_id"].', '.$grupo.', '.$mat_id.')'." |";
  158. }
  159. }
  160. }
  161. }
  162. fclose($file_to_read);
  163. /*$stmt = $pdo->prepare('SELECT * from fi_alumnomaterias_csv(:clave, :per, :gpo, :mat)');
  164. $stmt->bindParam(":per", $_SESSION["periodo_id"]);
  165. foreach($alumnoData as $data){//Carrera / Clave / Nombre completo
  166. if(!empty($data["mat_list"])){
  167. $stmt->bindParam(":clave", $data["clave"]);
  168. $stmt->bindParam(":gpo", $data["mat_list"]);
  169. $stmt->bindParam(":mat", $data["mat_list"]);
  170. if(!$stmt->execute()){
  171. $pdo->rollBack();
  172. $return["error"] = "Ocurrió un error al cargar los planes de estudios";
  173. $return["json"] = json_encode($return);
  174. echo json_encode($return);
  175. exit();
  176. }else{
  177. $mat_rs = $stmt->fetch();
  178. }
  179. if($mat_rs["Materia_insertada"]){
  180. $insertada++;
  181. }else{
  182. if($mat_rs["Materia_repetida"]){
  183. $omitidoArr[] = array("clave"=>$data["clave"], "desc"=> "Algunas materias ya estaban asignadas");
  184. }else{
  185. $omitidoArr[] = array("clave"=>$data["clave"], "desc"=> "Error al insertar materias para el alumno");
  186. }
  187. //$debug .= 'SELECT * from fi_alumnomaterias_excel(\''.$clave.'\', '.$_SESSION["periodo_id"].', '.$grupo.', '.$mat_id.')'." |";
  188. }
  189. }
  190. }*/
  191. $stmt->closeCursor();
  192. $pdo->commit();
  193. $return["insertados"] = $insertada;
  194. $return["omitidosArr"] = $omitidoArr;
  195. $return["debug"] = $debug;
  196. } catch(PDOException $e) {
  197. //$pdo->rollBack();
  198. //header("Location:".$pag."?error=1");
  199. $return["debug"] = "SELECT * from fi_alumnomaterias_csv(".$clave.", ".$_SESSION["periodo_id"].", '".$grupo."', $mat_id) ||";
  200. $return["error"] = $e->getMessage();
  201. //print_r($e);
  202. }
  203. }
  204. $return["json"] = json_encode($return);
  205. echo json_encode($return);