/**
* @author Mauricio Peña Domínguez
*/
import { ModalConfirmacion } from "/InscripcionesEVG/assets/js/utils/modalConfirmacion.js";
import M_inscribirAlumnosTO from "/InscripcionesEVG/assets/js/models/m_inscribirAlumnosTO.js";
import { ErrorDialog } from "/InscripcionesEVG/assets/js/utils/errorHandler.js";
import { Loader } from "/InscripcionesEVG/assets/js/utils/loader.js";
const boton = document.getElementById("inscripcionAlumnos");
const errorDialog = new ErrorDialog();
/**
* Evento que se dispara al hacer clic en el botón de inscripción de alumnos.
* Muestra un modal de confirmación antes de proceder con la inscripción.
* @param {MouseEvent} e - Evento de clic.
*/
boton.addEventListener("click", (e) => {
e.preventDefault();
const resultado = obtenerInscripcion();
if (!resultado) return;
new ModalConfirmacion({
titulo: "Confirme operación",
mensaje: "¿Estás seguro de inscribir a los alumnos?",
/**
* Función que se ejecuta al aceptar la confirmación.
* Realiza la inscripción llamando al modelo y muestra mensajes según el resultado.
*/
onAceptar: async () => {
const loader = new Loader("Cargando...");
const obj = new M_inscribirAlumnosTO();
const data = await obj.inscribirAlumnos(resultado);
if (data.success) {
loader.ocultar();
errorDialog.show(data.success, true);
} else {
loader.ocultar();
errorDialog.show("Esta mal " + data.error);
return;
}
},
/**
* Función que se ejecuta al cancelar la confirmación.
*/
onCancelar: () => {
console.log("cancelar");
},
});
});
/**
* Obtiene y valida la información de inscripción de alumnos de la UI.
* Valida que las inscripciones tipo 'C' tengan al menos 4 alumnos.
* @returns {string|null} JSON con la inscripción si es válida, o null si hay errores.
*/
function obtenerInscripcion() {
const categorias = ["camposPruebasMasculina", "camposPruebasFemenina"];
let resultado = {
M: { P: {}, C: {} },
F: { P: {}, C: {} },
};
let hayErrorEnTipoC = false;
categorias.forEach((categoriaId) => {
const genero = categoriaId.includes("Masculina") ? "M" : "F";
const campos = document.querySelectorAll(`#${categoriaId} .campo`);
campos.forEach((campo) => {
const pruebaId = campo.querySelector("label").id;
const selects = campo.querySelectorAll("select");
selects.forEach((select) => {
const tipo = select.name.toUpperCase(); // "P" o "C"
const alumnoId = select.value;
if (alumnoId !== "" && (tipo === "P" || tipo === "C")) {
if (!resultado[genero][tipo][pruebaId]) {
resultado[genero][tipo][pruebaId] = [];
}
resultado[genero][tipo][pruebaId].push(Number(alumnoId));
}
});
});
});
// Validar que las pruebas tipo C tengan exactamente 4 alumnos inscritos
for (const genero of ["M", "F"]) {
const pruebasC = resultado[genero]["C"];
for (const idPrueba in pruebasC) {
const inscripciones = pruebasC[idPrueba];
if (inscripciones.length !== 4) {
hayErrorEnTipoC = true;
break;
}
}
if (hayErrorEnTipoC) break;
}
if (hayErrorEnTipoC) {
errorDialog.show("4*100 son mínimo 4 participantes");
return null;
}
// Verifica que haya al menos una inscripción
const hayInscripciones = Object.values(resultado).some((genero) =>
Object.values(genero).some((tipo) =>
Object.values(tipo).some((alumnos) => alumnos.length > 0),
),
);
if (!hayInscripciones) {
errorDialog.show("Inscripción vacía");
return null;
}
// Devuelve la inscripción en formato JSON
resultado = JSON.stringify(resultado, null, 2);
return resultado;
}