123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465 |
- //alumnosObj.push({id: <?php echo $cve;?>, nombre:"", plan:"", matArr:[{id, desc, clave, plan, sem, grupo_id, grupo, califArr{calif, fecha, calif_tipo, revalidada}}]});
- //carga las materias en el objeto alumnosObj
- function loadMaterias(){
- if(idArr.length > 0){
- $.ajax({
- url: './action/asignamaterias_select.php',
- type: 'POST',
- dataType: 'json',
- data: { idArr: idArr, plan: _plan},
- success: function(result) {
- if(result["error"]!= "" && result["error"] !== undefined){
- $("#errorBox").collapse('show');
- $("#errorBox_text").html(result["error"]);
- $('#messageBox')[0].scrollIntoView({ block: "end" });
- }else{
- //cargar datos de materias
- if(result["alumnos"].length > 0){//hay materias
- alumnosObj = result["alumnos"];
- }//hay materias
-
- printAlumnosDataHTML();//imprime datos de alumnos
- updateAll();//actualiza materias para todos
- printMateriasHTML();//imprime listado
- }
- },
- error: function(jqXHR, textStatus, errorThrown ){
- $("#errorBox").collapse('show');
- $("#errorBox_text").html(errorThrown);
- $('#messageBox')[0].scrollIntoView({ block: "end" });
- }
- });//
- }//fin hay semestre
- }
- function buscaAlumno(clave){
- var i;
- for(i = 0; i<alumnosObj.length; i++){
- if(alumnosObj[i].id == clave)
- return i;
- }
- return -1;
- }
- function buscaMateria(index, id){
- var i;
- for(i = 0; i<alumnosObj[index].matArr.length; i++){
- if(alumnosObj[index].matArr[i].id == id)
- return i;
- }
- return -1;
- }
- //{id, desc, clave, plan, sem, calif, fecha, calif_tipo, revalidada, grupo_id, grupo}]
- function insertaMateriaAlumno(index, id, desc, clave, plan, gpo_id, gpo){
- if(buscaMateria(index, id) < 0){//no está
- alumnosObj[index].matArr.push({id: id, desc:desc, clave:clave, plan:plan, calif:"", revalidada:false, grupo_id: gpo_id, grupo: gpo});
- return true;
- }
- return false;
- }
- function borraMateriaAlumno(index, id){
- var pos = buscaMateria(index, id);
- if(pos >= 0){//si está
- alumnosObj[index].matArr.splice(pos, 1);
- return true;
- }
- return false;
- }
- function buscaMateriaAll(id, arreglo){
- var i;
- for(i = 0; i<arreglo.length; i++){
- if(arreglo[i].id == id)
- return i;
- }
- return -1;
- }
- function updateAll(){
- var materiaArr = [];//[{id, desc, clave, plan, total}]});
- for(i=0; i<alumnosObj.length; i++){
- for(j=0; j<alumnosObj[i].matArr.length; j++){
- if(alumnosObj[i].matArr[j].califArr === undefined || alumnosObj[i].matArr[j].califArr.length == 0 || !alumnosObj[i].matArr[j].califArr[0].revalidada){//sólo pone materias sin calificación
- pos = buscaMateriaAll(alumnosObj[i].matArr[j].id, materiaArr);
- if(pos == -1){//no existe y no tiene calificación
- materiaArr.push({id: alumnosObj[i].matArr[j].id, desc: alumnosObj[i].matArr[j].desc, clave: alumnosObj[i].matArr[j].clave, plan: alumnosObj[i].matArr[j].plan, total: 1});
- }else{//ya existe
- materiaArr[pos].total++;
- }
- }
- }
- }
- //imprime
- $("#tab0 .table-asignadas tbody").html("");
- for(i=0; i<materiaArr.length; i++){
- allMateriaHTML(materiaArr[i].id, materiaArr[i].desc, materiaArr[i].clave, materiaArr[i].plan, materiaArr[i].total);
- }
- }
- function printAlumnosDataHTML(){
- for(var index=0; index < alumnosObj.length; index++){
- var alumno = alumnosObj[index].id;
- $("#tab"+alumno+" .nombre").text(alumnosObj[index].nombre);
- $("#tab"+alumno+" .plan").text(alumnosObj[index].plan);
- }
- }
- function datosMateriaHTML(desc, clave, plan, grupo){
- if(grupo == "")//sin grupo
- return '<td><b class="text-uppercase">'+desc+'</b><br>['+clave+'] '+plan+'</td>';
- return '<td><span class="mr-2 badge badge-secondary text-monospace">'+grupo+'</span> <b class="text-uppercase">'+desc+'</b><br>['+clave+'] '+plan+'</td>';
- }
- //Para materias cargdas. Ya pueden tener Calificación
- function printMateriasHTML(){
- for(var index=0; index < alumnosObj.length; index++){
- var alumno = alumnosObj[index].id;
-
- for(var m = 0; m < alumnosObj[index].matArr.length; m++){
- //{id, desc, clave, plan, calif, fecha, extra, revalidada}
- var id_mat = alumnosObj[index].matArr[m].id;
- var desc = alumnosObj[index].matArr[m].desc;
- var clave = alumnosObj[index].matArr[m].clave;
- var plan = alumnosObj[index].matArr[m].plan;
-
- //var extra = (alumnosObj[index].matArr[m].extra) ? 'Sí' : 'No';
- var revalidada = false;
- if(alumnosObj[index].matArr[m].califArr.length > 0 && alumnosObj[index].matArr[m].califArr[0].revalidada){
- revalidada = true;
- }
- alumnosObj[index].matArr[m].revalidada;
- var grupo = alumnosObj[index].matArr[m].grupo;
-
- var nuevaMateria ="";
-
- if(!revalidada){//No es revalidada, puede borrar
- nuevaMateria = '<tr id="mat_'+alumno+'_'+id_mat+'">';
- nuevaMateria += '<td class="text-secondary" width="80px"><a href="#" data-toggle="modal" data-target="#modal_confirm" title="Borrar" data-cve="'+alumno+'" data-mat="'+id_mat+'">\
- <span class="ing-basura ing-fw"></span> </a></td>';
- nuevaMateria += datosMateriaHTML(desc, clave, plan, grupo);
- nuevaMateria += '<td> </td>';
- }else{
- nuevaMateria = '<tr style="color:#aaa">';
- nuevaMateria += '<td> </td>';
- nuevaMateria += datosMateriaHTML(desc, clave, plan, "");
- nuevaMateria += '<td><i>Equivalencia</i></td>';
- }
- nuevaMateria += '</tr>';
- $(nuevaMateria).appendTo("#tab"+alumno+" .table-asignadas tbody");
- }
- }
- }
- //Para concentrado de materias
- function allMateriaHTML(id_mat, desc, clave, plan, total){
- var nuevaMateria ="";
- nuevaMateria = '<tr>\
- <td class="text-secondary" width="80px"><a href="#" data-toggle="modal" data-target="#modal_confirm" title="Borrar" data-cve="0" data-mat="'+id_mat+'">\
- <span class="ing-basura ing-fw"></span> </a></td>\
- '+datosMateriaHTML(desc, clave, plan, '')+'\
- <td>Total: '+total+'</td>\
- </tr>';
- $(nuevaMateria).appendTo("#tab0 .table-asignadas tbody");
- }
- //Para materias nuevas. No necesita Calificación y se puede borrar
- function creaMateriaHTML(index, id_mat, desc, clave, plan, grupo){
- var alumno = alumnosObj[index].id;
- var nuevaMateria = '<tr id="mat_'+alumno+'_'+id_mat+'">\
- <td class="text-secondary" width="80px"><a href="#" data-toggle="modal" data-target="#modal_confirm" title="Borrar" data-cve="'+alumno+'" data-mat="'+id_mat+'">\
- <span class="ing-basura ing-fw"></span> </a></td>\
- '+datosMateriaHTML(desc, clave, plan, grupo)+'\
- <td> </td>\
- </tr>';
- $(nuevaMateria).appendTo("#tab"+alumno+" .table-asignadas tbody");
- }
- function changeAllChecks(activo){
- $(".selectAll").prop("checked", activo);//deselecciona general
- $(".select_materia").prop("checked", activo);//deselecciona cada uno
- $("#btn_lote").prop("disabled", !activo);//bloquea boton
- }
- function preguntarAntesDeSalir(){
- if (_modificado)
- return "¿Deseas abandonar la página? Los últimos cambios que realizaste no se guardarán";
- }
- window.onbeforeunload = preguntarAntesDeSalir;
- $('body').on('change', '.selectAll', function() {
- var check = $(this).prop("checked");
- $(this).parents(".table").find(".select_materia").prop("checked", check);
- if($(".select_materia:checked").length > 0)
- $("#btn_lote").prop("disabled", false);
- else
- $("#btn_lote").prop("disabled", true);
- });
- $('body').on('change', '.select_materia', function() {
- event.stopPropagation();
- //var check = $(this).prop("checked");
- var numberOfChecked = $(this).parents(".table").find('.select_materia:checked').length;
- var totalCheckboxes = $(this).parents(".table").find('.select_materia').length;
- if(numberOfChecked == totalCheckboxes){
- $(this).parents(".table").find(".selectAll").prop("checked", true);
- }else{
- $(this).parents(".table").find(".selectAll").prop("checked", false);
- }
- if($(".select_materia:checked").length > 0){
- $("#btn_lote").prop("disabled", false);
- }else{
- $("#btn_lote").prop("disabled", true);
- }
- });
- $(document).ready(function(){
- loadMaterias();
-
- _selected = $(".nav-pills .active").data("id");
-
- $("#btn_lote").prop("disabled", true);
-
-
- $("#btn_lote").click(function(){//asigna materias seleccionadas
- var asignadas = 0;
- var total = 0;
- if(_selected == 0){//asigna a todos
- for(thisIndex = 0; thisIndex<alumnosObj.length; thisIndex++){
- $(".select_materia:checked").each(function(index) {
- if(insertaMateriaAlumno(thisIndex, $(this).data("id"), $(this).data("desc"), $(this).data("clave"), $(this).data("plan"), $(this).data("grupo_id"), $(this).data("grupo"))){
- creaMateriaHTML(thisIndex, $(this).data("id"), $(this).data("desc"), $(this).data("clave"), $(this).data("plan"), $(this).data("grupo"));
- }else{
- asignadas++;
- }
- total++;
- });
- }
- //TODO imprimir listado general desde el objeto
- }else{
- thisIndex = buscaAlumno(_selected);//devuelve indice
- $(".select_materia:checked").each(function(index) {
- if(insertaMateriaAlumno(thisIndex, $(this).data("id"), $(this).data("desc"), $(this).data("clave"), $(this).data("plan"), $(this).data("grupo_id"), $(this).data("grupo"))){
- creaMateriaHTML(thisIndex, $(this).data("id"), $(this).data("desc"), $(this).data("clave"), $(this).data("plan"), $(this).data("grupo"));
- }else{
- asignadas++;
- }
- total++;
- });
- }
- _modificado = true;
- changeAllChecks(false);//deselecciona checks de busqueda de materias
- updateAll();//actualiza para todos
-
- if(asignadas > 0){
- $("#errorBox").collapse('show');
- if(_selected == 0){//asigna a todos
- $("#errorBox_text").html(asignadas+" materias ya está asignadas a algunos alumnos y fueron omitidas.");
- }else{
- $("#errorBox_text").html(asignadas+" materias ya está asignadas al alumno y fueron omitidas.");
- }
- }
- if(asignadas < total){
- $("#successBox").collapse('show');
- $("#successBox_text").html("Las materias se asignaron correctamente. Recuerda guardar los cambios");
- }
-
- $('#messageBox')[0].scrollIntoView({ block: "end" });
- });
-
- //cambia tab, cambia variable de activo
- $(".nav-pills .nav-link").click(function(){
- _selected = $(this).data("id");
- });
- $("#filter_sem").change(function(){
- if($("#filter_sem").val() == ""){
- $("#result_block").addClass("d-none");
- }else{
- $.ajax({
- url: './action/materiaasignar_busca.php',
- type: 'POST',
- dataType: 'json',
- data: { sem: $("#filter_sem").val(), plan:_plan},
- success: function(result) {
- if(result["error"]!= "" && result["error"] !== undefined){
- $("#errorBox").collapse('show');
- $("#errorBox_text").html(result["error"]);
- $('#messageBox')[0].scrollIntoView({ block: "end" });
- }else{
- //cargar grupos y materias
- if(result["materias"].length == 0){//no hay materias
- $("#result_block").addClass("d-none");
- $("#result_sin").removeClass("d-none");
- }else{
- $("#result_sin").addClass("d-none");
- $("#result_block").removeClass("d-none");
-
-
- var grupos = $("#accordion > .card").length;//cuenta bloques de grupo actuales
- $('#accordion .collapse').not('#grupoCollapse0').collapse('hide');
-
- if(grupos > result["materias"].length){//sobran
- //borrar renglones extra (rows - result.length) pero dejar al menos 1
- while(grupos > result["materias"].length && grupos > 1){
- $("#accordion .card:last-child").remove();
- grupos--;
- }
- }else{//faltan
- // clone the rest of the rows
- for(var i=0; i<(result["materias"].length - grupos); i++){
- var cloned = $("#accordion .card:first-child").clone();//sirvió sin (true)
- cloned.find(".collapse").removeClass("in");
- cloned.find(".accordion-toggle").prop("href", "#grupoCollapse"+(i+grupos));
- cloned.find(".panel-collapse").prop("id", "grupoCollapse"+(i+grupos)).addClass("collapse");
-
- cloned.find(".selectAll").prop("id", "selectAll"+(i+grupos));
- cloned.find(".selectAll").siblings("label").prop("for", "selectAll"+(i+grupos));
-
- $("#accordion").append(cloned);
- }
- }
- $('#grupoCollapse0').collapse('show');
- if(result["materias"].length != 0){//hay grupos?
- $("#accordion .card").each(function(index) {
- if(index < result["materias"].length){//llenar info
- $(this).find(".grupo-nombre").text(result["materias"][index][0]["gpo"]);
-
- //clonar renglones de tabla
- var rows = $(this).find(".mat_asignar tr").length;//cuenta accesos actuales
- if(rows > result["materias"][index].length){//sobran
- //borrar renglones extra (rows - result.length) pero dejar al menos 1
- while(rows > result["materias"][index].length && rows > 1){
- $(this).find(".mat_asignar tr:last-child").remove();
- rows--;
- }
- }else{//faltan
- // clone the rest of the rows
- for(var i=0; i<(result["materias"][index].length - rows); i++){
- $(this).find(".mat_asignar tr:first-child").clone(true).appendTo("#grupoCollapse"+index+" .mat_asignar");
- }
- }
- var index_gpo = index;
- $("#grupoCollapse"+index_gpo+" .mat_asignar tr").each(function(index2) {
- if(index2 < result["materias"][index_gpo].length){//llenar info
- $(this).prop("id", "mat"+result["materias"][index_gpo][index2]["id"]);
- $(this).data("id", result["materias"][index_gpo][index2]["id"]);
- $(this).find(".materia-nombre").html(result["materias"][index_gpo][index2]["desc"]);
- $(this).find(".materia-clave").html(result["materias"][index_gpo][index2]["clave"]);
- $(this).find(".materia-plan").html(result["materias"][index_gpo][index2]["plan"]);
- $(this).find(".select_materia").prop("id", "check"+index_gpo+"_"+result["materias"][index_gpo][index2]["id"]);
- $(this).find(".select_materia").val(result["materias"][index_gpo][index2]["id"]);
- $(this).find(".select_materia").data("id", result["materias"][index_gpo][index2]["id"])
- .data("desc", result["materias"][index_gpo][index2]["desc"])
- .data("clave", result["materias"][index_gpo][index2]["clave"])
- .data("plan", result["materias"][index_gpo][index2]["plan"])
- .data("grupo_id", result["materias"][index_gpo][index2]["gpo_id"])
- .data("grupo", result["materias"][index_gpo][index2]["gpo"]);
- $(this).find("label").prop("for", "check"+index_gpo+"_"+result["materias"][index_gpo][index2]["id"]);
- }
- });
-
-
- }
- });
- }
-
- }//hay materias
- }//sin error
- },
- error: function(jqXHR, textStatus, errorThrown ){
- $("#errorBox").collapse('show');
- $("#errorBox_text").html(errorThrown);
- $('#messageBox')[0].scrollIntoView({ block: "end" });
- }
- });//
- }//fin hay semestre
- }); //click
- //al abrir modal
- $("#modal_confirm").on('show.bs.modal', function (event) {
- var button = $(event.relatedTarget);// Button that triggered the modal
- $("#cve_borrar").val(button.data("cve"));
- $("#mat_borrar").val(button.data("mat"));
- if(button.data("cve") == 0)
- $("#all-msg").removeClass("d-none");
- else
- $("#all-msg").addClass("d-none");
- });
- $(".btn-borrar").click(function(){
- var pos;
- if($("#cve_borrar").val() == 0){//todos
- for(pos=0; pos<alumnosObj.length; pos++){
- if(borraMateriaAlumno(pos, $("#mat_borrar").val()))
- $('#mat_'+alumnosObj[pos].id+'_'+$("#mat_borrar").val()).remove();
- }
- }else{//uno solo
- pos = buscaAlumno($("#cve_borrar").val());
- if(borraMateriaAlumno(pos, $("#mat_borrar").val()))
- $('#mat_'+$("#cve_borrar").val()+'_'+$("#mat_borrar").val()).remove();
- }
-
- $("#modal_confirm").modal('hide');
- updateAll();//actualiza para todos
- _modificado = true;
- //$('#messageBox')[0].scrollIntoView({ block: "end" });
- });
-
- $("#btn-guardar").click(function(){
- $.ajax({
- url: './action/asignamaterias_update.php',
- type: 'POST',
- dataType: 'json',
- async: false,
- data: { json: JSON.stringify(alumnosObj)},
- beforeSend: function(x) {
- if (x && x.overrideMimeType) {
- x.overrideMimeType("application/j-son;charset=UTF-8");
- }
- },
- success: function(result) {
- if(result["error"]!= "" && result["error"] !== undefined){
- $("#errorBox").collapse('show');
- $("#errorBox_text").html("Error al guardar el horario.<br>"+result["error"]);
- }else{
- if(result["sin_borrar"] !== undefined && result["sin_borrar"] > 0){
- $("#errorBox").collapse('show');
- $("#errorBox_text").html(result["sin_borrar"]+" materias no pudieron ser borradas");
- }else if(result["aprobadas"] !== undefined && result["aprobadas"] > 0){
- $("#errorBox").collapse('show');
- $("#errorBox_text").html(result["aprobadas"]+" materias ya estaban aprobadas y no se guardaron");
- for(i=0; i<result["aprobadasArr"].length; i++){
- var pos = buscaAlumno(result["aprobadasArr"][i].usr);
- if(borraMateriaAlumno(pos, result["aprobadasArr"][i].mat)){
- $('#mat_'+result["aprobadasArr"][i].usr+'_'+result["aprobadasArr"][i].mat).remove();
- }
- }
- }else
- $("#errorBox").collapse('hide');
-
- $("#successBox").collapse('show');
- $("#successBox_text").html(result["ok"]);
- }
- $('#messageBox')[0].scrollIntoView({ block: "end" });
- _modificado = false;
- },
- error: function(jqXHR, textStatus, errorThrown ){
- $("#errorBox").collapse('show');
- $("#errorBox_text").html(errorThrown);
- $('#messageBox')[0].scrollIntoView({ block: "end" });
- }
- });//ajax
- });
-
- });
|