diff --git a/js/checador.js b/js/checador.js index b751522..52da9c4 100644 --- a/js/checador.js +++ b/js/checador.js @@ -1,628 +1,629 @@ -var msgTime = 0; -var modalVisible = false; -var ultimos = []; -var checkInterval = null; - -function az(i) { - return `${i < 10 ? '0' : ''}${i}`; -} -function init() { - setInterval(function () { - var current_time = new Date().getTime(); - var excecution_time = parseInt((current_time - started_at) / 1000); - - var s = new Date((server_time + excecution_time) * 1000); - drawClock(az(s.getHours()), az(s.getMinutes())); - drawFecha(az(s.getDate()), s.getDay(), s.getMonth(), s.getFullYear()); - }, 1000); -} - -function drawClock(hora, min) { - $('#min').text(min); - $('#hr').text(hora); -} - -function drawFecha(dd, dnum, mm, yyyy) { - var meses = ['Ene', 'Feb', 'Mzo', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic']; - $('#fecha').text(' ' + meses[mm] + ' ' + dd); - $('#ano').text(yyyy); -} - -function modalTimer() { - if (checkInterval === null) {//no es error de internet - setTimeout(function () { - $(".sub-bloque ").addClass("d-none"); - $("#registro").removeClass("d-none"); - $("#cve").focus(); - } - , 7000 + msgTime); - } -} - -//--Sin conexión de internet --- -function checadorAlive() { - if (checkInterval == null) { - checkInterval = setInterval(isAlive, 2500); - } -} -function isAlive() { - var alive = false; - try { - $.ajax({ - url: 'checador_alive.php', - type: 'POST', - dataType: 'json', - async: false, - timeout: 500,/*ms*/ - success: function (result) { - if (result["ok"] != "" && result["ok"] !== undefined) { - cambiaVista('.sub-bloque', '#registro'); - $('#db-error').text(result.error); - $("#cve").focus(); - alive = true; - clearInterval(checkInterval); - checkInterval = null; - } - }, - error: function (jqXHR, textStatus, errorThrown) { - console.log("Sin internet"); - } - });//ajax*/ - } catch (e) { - console.log("error! ", e); - } - return alive; -} -//--Fin sin conexión de internet --- - -function cambiaVista(objHide, objShow) { - $(objHide).addClass("d-none"); - $(objShow).removeClass("d-none"); -} - -function showAviso(avisos) { - cambiaVista('#registro', '#avisos'); - - const lista = document.querySelector('#lista-avisos'); - lista.innerHTML = ''; - avisos.forEach(({ aviso_texto: texto }) => { - const li = document.createElement('li'); - li.innerHTML = texto; - lista.appendChild(li); - }); -} -/* -$('#formaChecador').on('submit', function (e) { - e.preventDefault(); - var clave = $("#cve").val(); - console.log("clave: ", clave); - $.ajax({ - url: 'checador_action.php', - type: 'POST', - dataType: 'json', - data: { cve: $("#cve").val(), facultad: $("#facultad_id").val() }, - timeout: 3500, - success: function (result) { - if ((result?.error ?? "") != "") { - console.log(result["error"]); - // avisos - - // alert("here") - if (result.nombre != undefined && result.ok == undefined) { - showAviso(result.avisos); - return - cambiaVista('#registro', '#result_no'); - $("#nombre-profesor").text(result["nombre"]); - $('#result_no .clave').text(clave); - $("#last-error").text(result["error"]); - } - else if(result.nombre == undefined) { - cambiaVista('#registro', '#not_in_db'); - $('#clave-no-encontrada').html(clave); - } else - - cambiaVista('#registro', '#internet'); - - return; - } - - $("#list-result").find(".mat-desc").html(""); - $("#list-result").find(".mat-fecha").html(""); - $("#list-result").find(".mat-salon").html(""); - $("#list-result").find(".mat-gpo").html(""); - - $("#nombre").html(result["nombre"]); - - var rows = $("#list-result > li").length;//limpia tabla actual - var resultRows = 0; - //nuevas - if (result["result"] !== undefined && result["result"] != null) resultRows += result["result"].length; - //viejas - if (result["asistencias"] !== undefined && result["asistencias"] != null) resultRows += result["asistencias"].length; - - if (rows > resultRows) {//sobran - //borrar renglones extra (rows - result.length) pero dejar al menos 1 - while (rows > resultRows && rows > 1) { - $("#list-result li:last-child").remove(); - rows--; - } - } else {//faltan, clonar - for (var i = rows; i < resultRows; i++) { - $("#list-result li:first-child").clone(true).appendTo("#list-result"); - } - } - - //---------- - var retardo = false; - //hay elementos checado nuevo? - if (result["result"] !== undefined && result["result"] != null && result["result"].length != 0) { - cambiaVista('#registro', '#result_ok'); - $("#list-result").children().each(function (index) { - if (index < result["result"].length) {//llenar info - if (result["result"][index]["grupo"] != "") { - if (result["result"][index]["retardo"]) { - retardo = true; - } else { - retardo = false; - } - $(this).find(".mat-gpo").html("Grupo: " + result["result"][index]["grupo"]); - } - $(this).find(".mat-desc").html(result["result"][index]["materia"]); - $(this).find(".mat-fecha").html("Inicia " + result["result"][index]["hora_inicio"]); - if (result["result"][index]["salon"] != "") - $(this).find(".mat-salon").html("Salón: " + result["result"][index]["salon"]); - //else $(this).find(".mat-salon").html(""); - } - }); - } - var texto = ""; - //hay elementos checado anterior? - if (result["asistencias"] !== undefined && result["asistencias"] != null && result["asistencias"].length != 0) { - cambiaVista('#registro', '#result_ok'); - $("#list-result").children().each(function (index) { - if (index < result["asistencias"].length) {//llenar info - if (result["asistencias"][index]["grupo"] != "") { - if (result["asistencias"][index]["retardo"]) { - retardo = true; - } else { - retardo = false; - } - $(this).find(".mat-gpo").html("Grupo: " + result["asistencias"][index]["grupo"]); - } - $(this).find(".mat-desc").html(result["asistencias"][index]["materia"]); - $(this).find(".mat-fecha").html("Inicia " + result["asistencias"][index]["hora_inicio"]); - texto = "" + - "Ya estaba registrada" + - "" - if (result["asistencias"][index]["salon"] !== undefined && result["asistencias"][index]["salon"] != "") - $(this).find(".mat-salon").html("Salón: " + result["asistencias"][index]["salon"]); - } - }); - } - console.log(texto); - if (retardo) { - $("#estado").find("img").prop("src", "imagenes/retardo.svg"); - $("#estado").find("h2").text("Retardo").removeClass("text-success text-blue").addClass("text-warning"); - } else { - $("#estado").find("img").prop("src", "imagenes/asistencia.svg"); - if (texto == "") - $("#estado").find("h2").text("Asistencia").removeClass("text-warning text-blue").addClass("text-success"); - else - $("#estado").find("h2").html("Asistencia
" + texto).removeClass("text-warning text-success").addClass("text-blue"); - } - - - if (result.nombre.replace(/ /g, '') == "") { - // if (false) { - console.log(clave) - cambiaVista('#registro', '#not_in_db'); - $("#clave-no-encontrada").html(clave); - } else if (resultRows == 0) { - console.log(result) - //$("#nombre-profesor").text(result["nombre"]); - cambiaVista('#registro', '#result_no'); - } - - }, - error: function (jqXHR, textStatus, errorThrown) { - cambiaVista('#registro', '#internet'); - $('#db-error').text(textStatus); - checadorAlive();//Muestra mensaje sin internet y comienza a checar hasta que haya - }, - complete: function (jqXHR, textStatus) { - $("#cve").val(''); - modalTimer(); - } - }); -}); - */ - -document.querySelector('#formaChecador').addEventListener('submit', async (e) => { - e.preventDefault(); - const clave = document.querySelector('#cve'); - if (clave.value == '') { - clave.focus(); return; - } - - const data = new FormData(); - data.append('cve', clave.value); - - const btn = document.querySelector('#btnChecar'); - // remove btn - btn.classList.add('disabled'); - // add spinner - btn.insertAdjacentHTML('afterbegin', ''); - - try { - const result = await fetch('action_checador.php', { - method: 'POST', - body: data - }).then(response => response.json()); - - if (!result.ok) { - function not_int_db(clave) { - cambiaVista('#registro', '#not_in_db'); - document.querySelector('#clave-no-encontrada').innerHTML = clave; - } - function not_has_horario(nombre_profesor, from = '#registro') { - cambiaVista(from, '#result_no'); - document.querySelector('#nombre-profesor').innerHTML = nombre_profesor; - } - - switch (result.failure) { - case 'profesor': - not_int_db(clave.value); - break; - case 'horario': - let from; - if (result.avisos.length > 0) { - await show_avisos(result.avisos) - from = '#avisos'; - } - else - from = '#registro'; - not_has_horario(result.nombre, from); - break; - default: - alert('La clave no es válida'); - location.reload(); - - } - setTimeout(() => { - location.reload(); - }, 5000); - return; - } - - function show_avisos(avisos) { - return new Promise(resolve => { - if (avisos.length == 0) { - resolve(); - return; - } - - const lista_avisos = document.querySelector('#lista-avisos'); - avisos.forEach(aviso => lista_avisos.innerHTML += `

${aviso}


`); - cambiaVista('#registro', '#avisos'); - //$('#btn-aceptar-avisos').focus(); - document.querySelector('#btn-aceptar-avisos').addEventListener('click', () => { - lista_avisos.innerHTML = ''; - resolve(); - }); - }); - } - - function show_asistencia(nombre, horarios, from) { - cambiaVista(from, '#result_ok'); - document.querySelector('#nombre').innerHTML = nombre; - - const list_result = document.querySelector('#list-result'); - const li_facultad_nombre = list_result.children[0]; - const li_element = list_result.children[1]; - list_result.innerHTML = ''; - // foreach key is facultad (string), value - for (let facultad_nombre in horarios) { - let facultad = li_facultad_nombre.cloneNode(true); - facultad.innerHTML = facultad_nombre; - facultad = list_result.appendChild(facultad); - horarios[facultad_nombre].forEach(horario => { - console.log(horario); - let li = li_element.cloneNode(true); - li = list_result.appendChild(li); - li.querySelector(".mat-desc").innerHTML = horario.materia; - li.querySelector(".mat-fecha").innerHTML = `Inicia ${horario.horario_hora.slice(0, -3)}`; - - li.querySelector(".salon").innerHTML = horario.salon; - li.querySelector(".mat-gpo").innerHTML = horario.horario_grupo; - }) - } - const estado = document.querySelector('#estado'); - //estado.querySelector('img').src = 'imagenes/asistencia.svg'; - $('#icon_retardo').hide(); - $('#icon_duplicada').hide(); - $('#icon_asistencia').show(); - const h2 = estado.querySelector('.text-big'); - h2.innerHTML = `Asistencia registrada`; - h2.classList.remove('text-warning', 'text-success'); - } - - - function show_duplicadas(nombre, horarios, from) { - show_asistencia(nombre, horarios, from); - texto = ` - Ya estaba registrada - ` - - //document.querySelector('#estado').querySelector('img').src = 'imagenes/asistencia.svg'; - $('#icon_retardo').hide(); - $('#icon_asistencia').hide(); - $('#icon_duplicada').show(); - $("#estado").find(".text-big").html("Asistencia
" + texto).removeClass("text-warning text-success").addClass("text-blue"); - const estado = document.querySelector('#estado'); - const h2 = estado.querySelector('.text-big'); - - h2.innerHTML = `Asistencia
${texto}`; - h2.classList.remove('text-warning', 'text-success'); - } - - function show_retardos(nombre, horarios, from) { - show_asistencia(nombre, horarios, from); - texto = `Retardo`; - - const estado = document.querySelector('#estado'); - const h2 = estado.querySelector('.text-big'); - - h2.innerHTML = `Retardo`; - h2.classList.remove('text-success', 'text-blue'); - h2.classList.add('text-warning'); - - //estado.querySelector('img').src = 'imagenes/retardo.svg'; - $('#icon_asistencia').hide(); - $('#icon_duplicada').hide(); - $('#icon_retardo').show(); - } - - const { horarios, duplicadas, avisos } = result; - const { profesor_nombre } = result.profesor; - let retardos = {}, asistencia = {}; - // if any horario has retardo = true horarios is an object with facultad as key - if (Object.values(horarios).some(horario => horario.some(h => h.registro_retardo))) - retardos = horarios; - // if any horario has duplicada = true horarios is an object with facultad as key - else - asistencia = horarios; - - console.log(retardos, asistencia, avisos, duplicadas); - - // Mostrar avisos - await show_avisos(avisos); - const from = avisos.length > 0 ? '#avisos' : '#registro'; - - // IF DUPLICADAS HAS ELEMENTS (JSON OBJECT) - if (Object.keys(duplicadas).length > 0) - show_duplicadas(profesor_nombre, duplicadas, from); - else if (Object.keys(retardos).length > 0) - show_retardos(profesor_nombre, retardos, from); - else - show_asistencia(profesor_nombre, asistencia, from); - - // setTimeout(() => { - // location.reload(); - // }, 5000); - - - } catch (error) { - console.log(error); - cambiaVista('.sub-bloque', '#internet'); - checadorAlive(); //Muestra mensaje sin internet y comienza a checar hasta que haya - } - finally { - setTimeout(() => { - location.reload(); - }, 5000); - } -}); - -async function test(type) { - let url; - switch (type) { - case 'retardo': - url = 'json/retardo.json'; - break; - case 'duplicada': - url = 'json/duplicada.json'; - break; - case 'asistencia': - url = 'json/asistencia.json'; - break; - case 'sin_servicio': - url = 'json/no-internet.json'; - break; - case 'error': - url = 'json/error.json'; - break; - case 'internet': - url = 'json/internet.json'; - break; - case 'sin_horario': - url = 'json/sin-horario.json'; - break; - case 'clave': - url = 'json/clave-no-encontrada.json'; - break; - case 'ok': - url = 'json/asistencia-aviso.json'; - break; - case 'sin_horario_aviso': - url = 'json/sin-horario-aviso.json'; - break; - - } - try { - const result = await fetch(url).then(response => response.json()); - - if (!result.ok) { - const clave = { value: '123456' } - function not_int_db(clave) { - cambiaVista('#registro', '#not_in_db'); - document.querySelector('#clave-no-encontrada').innerHTML = clave; - } - function not_has_horario(nombre_profesor, from = '#registro') { - cambiaVista(from, '#result_no'); - document.querySelector('#nombre-profesor').innerHTML = nombre_profesor; - } - - switch (result.failure) { - case 'profesor': - not_int_db(clave.value); - break; - case 'horario': - let from; - if (result.avisos.length > 0) { - await show_avisos(result.avisos) - from = '#avisos'; - } - else - from = '#registro'; - not_has_horario(result.nombre, from); - break; - case 'internet': - cambiaVista('#registro', '#internet'); - break; - } - setTimeout(() => { - location.reload(); - }, 5000); - return; - } - - function show_avisos(avisos) { - return new Promise(resolve => { - if (avisos.length == 0) { - resolve(); - return; - } - - const lista_avisos = document.querySelector('#lista-avisos'); - avisos.forEach(aviso => lista_avisos.innerHTML += `

${aviso}


`); - cambiaVista('#registro', '#avisos'); - //$('#btn-aceptar-avisos').focus(); - document.querySelector('#btn-aceptar-avisos').addEventListener('click', () => { - lista_avisos.innerHTML = ''; - resolve(); - }); - }); - } - - function show_asistencia(nombre, horarios, from) { - cambiaVista(from, '#result_ok'); - document.querySelector('#nombre').innerHTML = nombre; - - const list_result = document.querySelector('#list-result'); - const li_facultad_nombre = list_result.children[0]; - const li_element = list_result.children[1]; - list_result.innerHTML = ''; - // foreach key is facultad (string), value - for (let facultad_nombre in horarios) { - console.log(horarios[facultad_nombre]); - - let facultad = li_facultad_nombre.cloneNode(true); - facultad.innerHTML = facultad_nombre; - facultad = list_result.appendChild(facultad); - horarios[facultad_nombre].forEach(horario => { - let li = li_element.cloneNode(true); - li = list_result.appendChild(li); - li.querySelector(".mat-desc").innerHTML = horario.materia; - li.querySelector(".mat-fecha").innerHTML = `Inicia ${horario.horario_hora.slice(0, -3)}`; - - li.querySelector(".salon").innerHTML = horario.horario_salon; - li.querySelector(".mat-gpo").innerHTML = horario.horario_grupo; - }) - } - const estado = document.querySelector('#estado'); - //estado.querySelector('img').src = 'imagenes/asistencia.svg'; - $('#icon_retardo').hide(); - $('#icon_duplicada').hide(); - $('#icon_asistencia').show(); - const h2 = estado.querySelector('.text-big'); - h2.innerHTML = `Asistencia registrada`; - h2.classList.remove('text-warning', 'text-success', 'txt-blue'); - h2.classList.add('text-success'); - } - - - function show_duplicadas(nombre, horarios, from) { - show_asistencia(nombre, horarios, from); - texto = ` - Ya estaba registrada - ` - - //document.querySelector('#estado').querySelector('img').src = 'imagenes/duplicada.svg'; - $('#icon_retardo').hide(); - $('#icon_asistencia').hide(); - $('#icon_duplicada').show(); - $("#estado").find(".text-big").html("Asistencia
" + texto).removeClass("text-warning text-success").addClass("text-blue"); - const estado = document.querySelector('#estado'); - const h2 = estado.querySelector('.text-big'); - - h2.innerHTML = `Asistencia
${texto}`; - h2.classList.remove('text-warning', 'text-success'); - } - - function show_retardos(nombre, horarios, from) { - show_asistencia(nombre, horarios, from); - texto = `Retardo`; - - const estado = document.querySelector('#estado'); - const h2 = estado.querySelector('.text-big'); - - h2.innerHTML = `Retardo`; - h2.classList.remove('text-success', 'text-blue'); - h2.classList.add('text-warning'); - - $('#icon_asistencia').hide(); - $('#icon_duplicada').hide(); - $('#icon_retardo').show(); - //estado.querySelector('img').src = 'imagenes/retardo.svg'; - } - - const { horarios, duplicadas, avisos } = result; - const { nombre } = result.profesor; - let retardos = {}, asistencia = {}; - // if any horario has retardo = true horarios is an object with facultad as key - if (Object.values(horarios).some(horario => horario.some(h => h.retardo))) - retardos = horarios; - // if any horario has duplicada = true horarios is an object with facultad as key - else - asistencia = horarios; - - console.log(retardos, asistencia, avisos, duplicadas); - - // Mostrar avisos - await show_avisos(avisos); - const from = avisos.length > 0 ? '#avisos' : '#registro'; - - // IF DUPLICADAS HAS ELEMENTS (JSON OBJECT) - if (Object.keys(duplicadas).length > 0) - show_duplicadas(nombre, duplicadas, from); - else if (Object.keys(retardos).length > 0) - show_retardos(nombre, retardos, from); - else - show_asistencia(nombre, asistencia, from); - - // setTimeout(() => { - // location.reload(); - // }, 5000); - - - } catch (error) { - console.log(error); - cambiaVista('.sub-bloque', '#error_bd'); - checadorAlive(); //Muestra mensaje sin internet y comienza a checar hasta que haya - } - finally { - setTimeout(() => { - location.reload(); - }, 5000); - } +var msgTime = 0; +var modalVisible = false; +var ultimos = []; +var checkInterval = null; + +function az(i) { + return `${i < 10 ? '0' : ''}${i}`; +} +function init() { + setInterval(function () { + var current_time = new Date().getTime(); + var excecution_time = parseInt((current_time - started_at) / 1000); + + var s = new Date((server_time + excecution_time) * 1000); + drawClock(az(s.getHours()), az(s.getMinutes())); + drawFecha(az(s.getDate()), s.getDay(), s.getMonth(), s.getFullYear()); + }, 1000); +} + +function drawClock(hora, min) { + $('#min').text(min); + $('#hr').text(hora); +} + +function drawFecha(dd, dnum, mm, yyyy) { + var meses = ['Ene', 'Feb', 'Mzo', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic']; + $('#fecha').text(' ' + meses[mm] + ' ' + dd); + $('#ano').text(yyyy); +} + +function modalTimer() { + if (checkInterval === null) {//no es error de internet + setTimeout(function () { + $(".sub-bloque ").addClass("d-none"); + $("#registro").removeClass("d-none"); + $("#cve").focus(); + } + , 7000 + msgTime); + } +} + +//--Sin conexión de internet --- +function checadorAlive() { + if (checkInterval == null) { + checkInterval = setInterval(isAlive, 2500); + } +} +function isAlive() { + var alive = false; + try { + $.ajax({ + url: 'checador_alive.php', + type: 'POST', + dataType: 'json', + async: false, + timeout: 500,/*ms*/ + success: function (result) { + if (result["ok"] != "" && result["ok"] !== undefined) { + cambiaVista('.sub-bloque', '#registro'); + $('#db-error').text(result.error); + $("#cve").focus(); + alive = true; + clearInterval(checkInterval); + checkInterval = null; + } + }, + error: function (jqXHR, textStatus, errorThrown) { + console.log("Sin internet"); + } + });//ajax*/ + } catch (e) { + console.log("error! ", e); + } + return alive; +} +//--Fin sin conexión de internet --- + +function cambiaVista(objHide, objShow) { + $(objHide).addClass("d-none"); + $(objShow).removeClass("d-none"); +} + +function showAviso(avisos) { + cambiaVista('#registro', '#avisos'); + + const lista = document.querySelector('#lista-avisos'); + lista.innerHTML = ''; + avisos.forEach(({ aviso_texto: texto }) => { + const li = document.createElement('li'); + li.innerHTML = texto; + lista.appendChild(li); + }); +} +/* +$('#formaChecador').on('submit', function (e) { + e.preventDefault(); + var clave = $("#cve").val(); + console.log("clave: ", clave); + $.ajax({ + url: 'checador_action.php', + type: 'POST', + dataType: 'json', + data: { cve: $("#cve").val(), facultad: $("#facultad_id").val() }, + timeout: 3500, + success: function (result) { + if ((result?.error ?? "") != "") { + console.log(result["error"]); + // avisos + + // alert("here") + if (result.nombre != undefined && result.ok == undefined) { + showAviso(result.avisos); + return + cambiaVista('#registro', '#result_no'); + $("#nombre-profesor").text(result["nombre"]); + $('#result_no .clave').text(clave); + $("#last-error").text(result["error"]); + } + else if(result.nombre == undefined) { + cambiaVista('#registro', '#not_in_db'); + $('#clave-no-encontrada').html(clave); + } else + + cambiaVista('#registro', '#internet'); + + return; + } + + $("#list-result").find(".mat-desc").html(""); + $("#list-result").find(".mat-fecha").html(""); + $("#list-result").find(".mat-salon").html(""); + $("#list-result").find(".mat-gpo").html(""); + + $("#nombre").html(result["nombre"]); + + var rows = $("#list-result > li").length;//limpia tabla actual + var resultRows = 0; + //nuevas + if (result["result"] !== undefined && result["result"] != null) resultRows += result["result"].length; + //viejas + if (result["asistencias"] !== undefined && result["asistencias"] != null) resultRows += result["asistencias"].length; + + if (rows > resultRows) {//sobran + //borrar renglones extra (rows - result.length) pero dejar al menos 1 + while (rows > resultRows && rows > 1) { + $("#list-result li:last-child").remove(); + rows--; + } + } else {//faltan, clonar + for (var i = rows; i < resultRows; i++) { + $("#list-result li:first-child").clone(true).appendTo("#list-result"); + } + } + + //---------- + var retardo = false; + //hay elementos checado nuevo? + if (result["result"] !== undefined && result["result"] != null && result["result"].length != 0) { + cambiaVista('#registro', '#result_ok'); + $("#list-result").children().each(function (index) { + if (index < result["result"].length) {//llenar info + if (result["result"][index]["grupo"] != "") { + if (result["result"][index]["retardo"]) { + retardo = true; + } else { + retardo = false; + } + $(this).find(".mat-gpo").html("Grupo: " + result["result"][index]["grupo"]); + } + $(this).find(".mat-desc").html(result["result"][index]["materia"]); + $(this).find(".mat-fecha").html("Inicia " + result["result"][index]["hora_inicio"]); + if (result["result"][index]["salon"] != "") + $(this).find(".mat-salon").html("Salón: " + result["result"][index]["salon"]); + //else $(this).find(".mat-salon").html(""); + } + }); + } + var texto = ""; + //hay elementos checado anterior? + if (result["asistencias"] !== undefined && result["asistencias"] != null && result["asistencias"].length != 0) { + cambiaVista('#registro', '#result_ok'); + $("#list-result").children().each(function (index) { + if (index < result["asistencias"].length) {//llenar info + if (result["asistencias"][index]["grupo"] != "") { + if (result["asistencias"][index]["retardo"]) { + retardo = true; + } else { + retardo = false; + } + $(this).find(".mat-gpo").html("Grupo: " + result["asistencias"][index]["grupo"]); + } + $(this).find(".mat-desc").html(result["asistencias"][index]["materia"]); + $(this).find(".mat-fecha").html("Inicia " + result["asistencias"][index]["hora_inicio"]); + texto = "" + + "Ya estaba registrada" + + "" + if (result["asistencias"][index]["salon"] !== undefined && result["asistencias"][index]["salon"] != "") + $(this).find(".mat-salon").html("Salón: " + result["asistencias"][index]["salon"]); + } + }); + } + console.log(texto); + if (retardo) { + $("#estado").find("img").prop("src", "imagenes/retardo.svg"); + $("#estado").find("h2").text("Retardo").removeClass("text-success text-blue").addClass("text-warning"); + } else { + $("#estado").find("img").prop("src", "imagenes/asistencia.svg"); + if (texto == "") + $("#estado").find("h2").text("Asistencia").removeClass("text-warning text-blue").addClass("text-success"); + else + $("#estado").find("h2").html("Asistencia
" + texto).removeClass("text-warning text-success").addClass("text-blue"); + } + + + if (result.nombre.replace(/ /g, '') == "") { + // if (false) { + console.log(clave) + cambiaVista('#registro', '#not_in_db'); + $("#clave-no-encontrada").html(clave); + } else if (resultRows == 0) { + console.log(result) + //$("#nombre-profesor").text(result["nombre"]); + cambiaVista('#registro', '#result_no'); + } + + }, + error: function (jqXHR, textStatus, errorThrown) { + cambiaVista('#registro', '#internet'); + $('#db-error').text(textStatus); + checadorAlive();//Muestra mensaje sin internet y comienza a checar hasta que haya + }, + complete: function (jqXHR, textStatus) { + $("#cve").val(''); + modalTimer(); + } + }); +}); + */ + +document.querySelector('#formaChecador').addEventListener('submit', async (e) => { + e.preventDefault(); + const clave = document.querySelector('#cve'); + if (clave.value == '') { + clave.focus(); return; + } + + const data = new FormData(); + data.append('cve', clave.value); + data.append('origen', 'https://checadores.lci.ulsa.mx'); + + const btn = document.querySelector('#btnChecar'); + // remove btn + btn.classList.add('disabled'); + // add spinner + btn.insertAdjacentHTML('afterbegin', ''); + + try { + const result = await fetch('action_checador.php', { + method: 'POST', + body: data + }).then(response => response.json()); + + if (!result.ok) { + function not_int_db(clave) { + cambiaVista('#registro', '#not_in_db'); + document.querySelector('#clave-no-encontrada').innerHTML = clave; + } + function not_has_horario(nombre_profesor, from = '#registro') { + cambiaVista(from, '#result_no'); + document.querySelector('#nombre-profesor').innerHTML = nombre_profesor; + } + + switch (result.failure) { + case 'profesor': + not_int_db(clave.value); + break; + case 'horario': + let from; + if (result.avisos.length > 0) { + await show_avisos(result.avisos) + from = '#avisos'; + } + else + from = '#registro'; + not_has_horario(result.nombre, from); + break; + default: + alert('La clave no es válida'); + location.reload(); + + } + setTimeout(() => { + location.reload(); + }, 5000); + return; + } + + function show_avisos(avisos) { + return new Promise(resolve => { + if (avisos.length == 0) { + resolve(); + return; + } + + const lista_avisos = document.querySelector('#lista-avisos'); + avisos.forEach(aviso => lista_avisos.innerHTML += `

${aviso}


`); + cambiaVista('#registro', '#avisos'); + //$('#btn-aceptar-avisos').focus(); + document.querySelector('#btn-aceptar-avisos').addEventListener('click', () => { + lista_avisos.innerHTML = ''; + resolve(); + }); + }); + } + + function show_asistencia(nombre, horarios, from) { + cambiaVista(from, '#result_ok'); + document.querySelector('#nombre').innerHTML = nombre; + + const list_result = document.querySelector('#list-result'); + const li_facultad_nombre = list_result.children[0]; + const li_element = list_result.children[1]; + list_result.innerHTML = ''; + // foreach key is facultad (string), value + for (let facultad_nombre in horarios) { + let facultad = li_facultad_nombre.cloneNode(true); + facultad.innerHTML = facultad_nombre; + facultad = list_result.appendChild(facultad); + horarios[facultad_nombre].forEach(horario => { + console.log(horario); + let li = li_element.cloneNode(true); + li = list_result.appendChild(li); + li.querySelector(".mat-desc").innerHTML = horario.materia; + li.querySelector(".mat-fecha").innerHTML = `Inicia ${horario.horario_hora.slice(0, -3)}`; + + li.querySelector(".salon").innerHTML = horario.salon; + li.querySelector(".mat-gpo").innerHTML = horario.horario_grupo; + }) + } + const estado = document.querySelector('#estado'); + //estado.querySelector('img').src = 'imagenes/asistencia.svg'; + $('#icon_retardo').hide(); + $('#icon_duplicada').hide(); + $('#icon_asistencia').show(); + const h2 = estado.querySelector('.text-big'); + h2.innerHTML = `Asistencia registrada`; + h2.classList.remove('text-warning', 'text-success'); + } + + + function show_duplicadas(nombre, horarios, from) { + show_asistencia(nombre, horarios, from); + texto = ` + Ya estaba registrada + ` + + //document.querySelector('#estado').querySelector('img').src = 'imagenes/asistencia.svg'; + $('#icon_retardo').hide(); + $('#icon_asistencia').hide(); + $('#icon_duplicada').show(); + $("#estado").find(".text-big").html("Asistencia
" + texto).removeClass("text-warning text-success").addClass("text-blue"); + const estado = document.querySelector('#estado'); + const h2 = estado.querySelector('.text-big'); + + h2.innerHTML = `Asistencia
${texto}`; + h2.classList.remove('text-warning', 'text-success'); + } + + function show_retardos(nombre, horarios, from) { + show_asistencia(nombre, horarios, from); + texto = `Retardo`; + + const estado = document.querySelector('#estado'); + const h2 = estado.querySelector('.text-big'); + + h2.innerHTML = `Retardo`; + h2.classList.remove('text-success', 'text-blue'); + h2.classList.add('text-warning'); + + //estado.querySelector('img').src = 'imagenes/retardo.svg'; + $('#icon_asistencia').hide(); + $('#icon_duplicada').hide(); + $('#icon_retardo').show(); + } + + const { horarios, duplicadas, avisos } = result; + const { profesor_nombre } = result.profesor; + let retardos = {}, asistencia = {}; + // if any horario has retardo = true horarios is an object with facultad as key + if (Object.values(horarios).some(horario => horario.some(h => h.registro_retardo))) + retardos = horarios; + // if any horario has duplicada = true horarios is an object with facultad as key + else + asistencia = horarios; + + console.log(retardos, asistencia, avisos, duplicadas); + + // Mostrar avisos + await show_avisos(avisos); + const from = avisos.length > 0 ? '#avisos' : '#registro'; + + // IF DUPLICADAS HAS ELEMENTS (JSON OBJECT) + if (Object.keys(duplicadas).length > 0) + show_duplicadas(profesor_nombre, duplicadas, from); + else if (Object.keys(retardos).length > 0) + show_retardos(profesor_nombre, retardos, from); + else + show_asistencia(profesor_nombre, asistencia, from); + + // setTimeout(() => { + // location.reload(); + // }, 5000); + + + } catch (error) { + console.log(error); + cambiaVista('.sub-bloque', '#internet'); + checadorAlive(); //Muestra mensaje sin internet y comienza a checar hasta que haya + } + finally { + setTimeout(() => { + location.reload(); + }, 5000); + } +}); + +async function test(type) { + let url; + switch (type) { + case 'retardo': + url = 'json/retardo.json'; + break; + case 'duplicada': + url = 'json/duplicada.json'; + break; + case 'asistencia': + url = 'json/asistencia.json'; + break; + case 'sin_servicio': + url = 'json/no-internet.json'; + break; + case 'error': + url = 'json/error.json'; + break; + case 'internet': + url = 'json/internet.json'; + break; + case 'sin_horario': + url = 'json/sin-horario.json'; + break; + case 'clave': + url = 'json/clave-no-encontrada.json'; + break; + case 'ok': + url = 'json/asistencia-aviso.json'; + break; + case 'sin_horario_aviso': + url = 'json/sin-horario-aviso.json'; + break; + + } + try { + const result = await fetch(url).then(response => response.json()); + + if (!result.ok) { + const clave = { value: '123456' } + function not_int_db(clave) { + cambiaVista('#registro', '#not_in_db'); + document.querySelector('#clave-no-encontrada').innerHTML = clave; + } + function not_has_horario(nombre_profesor, from = '#registro') { + cambiaVista(from, '#result_no'); + document.querySelector('#nombre-profesor').innerHTML = nombre_profesor; + } + + switch (result.failure) { + case 'profesor': + not_int_db(clave.value); + break; + case 'horario': + let from; + if (result.avisos.length > 0) { + await show_avisos(result.avisos) + from = '#avisos'; + } + else + from = '#registro'; + not_has_horario(result.nombre, from); + break; + case 'internet': + cambiaVista('#registro', '#internet'); + break; + } + setTimeout(() => { + location.reload(); + }, 5000); + return; + } + + function show_avisos(avisos) { + return new Promise(resolve => { + if (avisos.length == 0) { + resolve(); + return; + } + + const lista_avisos = document.querySelector('#lista-avisos'); + avisos.forEach(aviso => lista_avisos.innerHTML += `

${aviso}


`); + cambiaVista('#registro', '#avisos'); + //$('#btn-aceptar-avisos').focus(); + document.querySelector('#btn-aceptar-avisos').addEventListener('click', () => { + lista_avisos.innerHTML = ''; + resolve(); + }); + }); + } + + function show_asistencia(nombre, horarios, from) { + cambiaVista(from, '#result_ok'); + document.querySelector('#nombre').innerHTML = nombre; + + const list_result = document.querySelector('#list-result'); + const li_facultad_nombre = list_result.children[0]; + const li_element = list_result.children[1]; + list_result.innerHTML = ''; + // foreach key is facultad (string), value + for (let facultad_nombre in horarios) { + console.log(horarios[facultad_nombre]); + + let facultad = li_facultad_nombre.cloneNode(true); + facultad.innerHTML = facultad_nombre; + facultad = list_result.appendChild(facultad); + horarios[facultad_nombre].forEach(horario => { + let li = li_element.cloneNode(true); + li = list_result.appendChild(li); + li.querySelector(".mat-desc").innerHTML = horario.materia; + li.querySelector(".mat-fecha").innerHTML = `Inicia ${horario.horario_hora.slice(0, -3)}`; + + li.querySelector(".salon").innerHTML = horario.horario_salon; + li.querySelector(".mat-gpo").innerHTML = horario.horario_grupo; + }) + } + const estado = document.querySelector('#estado'); + //estado.querySelector('img').src = 'imagenes/asistencia.svg'; + $('#icon_retardo').hide(); + $('#icon_duplicada').hide(); + $('#icon_asistencia').show(); + const h2 = estado.querySelector('.text-big'); + h2.innerHTML = `Asistencia registrada`; + h2.classList.remove('text-warning', 'text-success', 'txt-blue'); + h2.classList.add('text-success'); + } + + + function show_duplicadas(nombre, horarios, from) { + show_asistencia(nombre, horarios, from); + texto = ` + Ya estaba registrada + ` + + //document.querySelector('#estado').querySelector('img').src = 'imagenes/duplicada.svg'; + $('#icon_retardo').hide(); + $('#icon_asistencia').hide(); + $('#icon_duplicada').show(); + $("#estado").find(".text-big").html("Asistencia
" + texto).removeClass("text-warning text-success").addClass("text-blue"); + const estado = document.querySelector('#estado'); + const h2 = estado.querySelector('.text-big'); + + h2.innerHTML = `Asistencia
${texto}`; + h2.classList.remove('text-warning', 'text-success'); + } + + function show_retardos(nombre, horarios, from) { + show_asistencia(nombre, horarios, from); + texto = `Retardo`; + + const estado = document.querySelector('#estado'); + const h2 = estado.querySelector('.text-big'); + + h2.innerHTML = `Retardo`; + h2.classList.remove('text-success', 'text-blue'); + h2.classList.add('text-warning'); + + $('#icon_asistencia').hide(); + $('#icon_duplicada').hide(); + $('#icon_retardo').show(); + //estado.querySelector('img').src = 'imagenes/retardo.svg'; + } + + const { horarios, duplicadas, avisos } = result; + const { nombre } = result.profesor; + let retardos = {}, asistencia = {}; + // if any horario has retardo = true horarios is an object with facultad as key + if (Object.values(horarios).some(horario => horario.some(h => h.retardo))) + retardos = horarios; + // if any horario has duplicada = true horarios is an object with facultad as key + else + asistencia = horarios; + + console.log(retardos, asistencia, avisos, duplicadas); + + // Mostrar avisos + await show_avisos(avisos); + const from = avisos.length > 0 ? '#avisos' : '#registro'; + + // IF DUPLICADAS HAS ELEMENTS (JSON OBJECT) + if (Object.keys(duplicadas).length > 0) + show_duplicadas(nombre, duplicadas, from); + else if (Object.keys(retardos).length > 0) + show_retardos(nombre, retardos, from); + else + show_asistencia(nombre, asistencia, from); + + // setTimeout(() => { + // location.reload(); + // }, 5000); + + + } catch (error) { + console.log(error); + cambiaVista('.sub-bloque', '#error_bd'); + checadorAlive(); //Muestra mensaje sin internet y comienza a checar hasta que haya + } + finally { + setTimeout(() => { + location.reload(); + }, 5000); + } } \ No newline at end of file