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); // try { const result = await fetch('https://checadores.lci.ulsa.mx/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; }) } } function show_duplicadas(nombre, horarios, from) { show_asistencia(nombre, horarios, from); texto = ` Ya estaba registrada ` document.querySelector('#estado').querySelector('img').src = 'imagenes/asistencia.svg'; $("#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('#asistencia'); h2.innerHTML = `Retardo`; h2.classList.remove('text-success', 'text-blue'); h2.classList.add('text-warning'); estado.querySelector('img').src = 'imagenes/retardo.svg'; } 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'; 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'; $("#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'; } 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); } } */