From a744fb083db778d82798eb6cc278ddaf06e1c180 Mon Sep 17 00:00:00 2001 From: BenitoBB Date: Fri, 13 Jun 2025 16:51:22 -0600 Subject: [PATCH] feat: enhance AlumnosVista and DiplomasVista with new data handling for inyecciones and pildoras, including editing capabilities and improved UI for displaying types and formations --- diplomas/src/pages/alumnosVista.jsx | 220 ++++++++++------------- diplomas/src/pages/diplomasVista.jsx | 32 +++- diplomas/src/pages/inyeccionesManual.jsx | 149 ++++++++++++++- diplomas/src/pages/inyeccionesVista.jsx | 153 ++++++++++++++-- 4 files changed, 399 insertions(+), 155 deletions(-) diff --git a/diplomas/src/pages/alumnosVista.jsx b/diplomas/src/pages/alumnosVista.jsx index 2951e9d..9093e69 100644 --- a/diplomas/src/pages/alumnosVista.jsx +++ b/diplomas/src/pages/alumnosVista.jsx @@ -33,6 +33,10 @@ export default function AlumnosVista() { const [modalMensaje, setModalMensaje] = useState(""); const [nuevoCurso, setNuevoCurso] = useState(""); const [cursos, setCursos] = useState([]); + const [nuevoTipo, setNuevoTipo] = useState(""); + const [nuevaFormacion, setNuevaFormacion] = useState(""); + const [inyecciones, setInyecciones] = useState([]); + const [pildoras, setPildoras] = useState([]); // Estado para confirmación de eliminación const [confirmarEliminar, setConfirmarEliminar] = useState(false); @@ -41,6 +45,14 @@ export default function AlumnosVista() { useEffect(() => { cargarAlumnos(); cargarCursos(); + supabaseClient + .from("pildoras") + .select("id, nombre") + .then(({ data }) => setPildoras(data || [])); + supabaseClient + .from("inyeccion") + .select("id, nombre") + .then(({ data }) => setInyecciones(data || [])); }, []); const cargarCursos = async () => { @@ -55,13 +67,21 @@ export default function AlumnosVista() { const cargarAlumnos = async () => { const { data, error } = await supabaseClient .from("alumno") - .select("id, nombre, correo, telefono, curso_id, curso(nombre)") + .select(` + id, + nombre, + correo, + telefono, + tipo_formacion, + curso_id, + curso(id, nombre), + inyeccion_id, + inyeccion(id, nombre), + pildoras_id, + pildoras(id, nombre) + `) .order("id", { ascending: true }); - if (error) { - console.error("Error al cargar alumnos:", error.message); - } else { - setAlumnos(data); - } + setAlumnos(data || []); }; const { @@ -83,10 +103,15 @@ export default function AlumnosVista() { // Iniciar edición const iniciarEdicion = (alumno) => { setAlumnoEditando(alumno.id); - setValue("nombre", alumno.nombre); - setValue("correo", alumno.correo); - setValue("telefono", alumno.telefono); - setValue("cursoSeleccionado", alumno.curso_id?.toString() || ""); + setNuevoNombre(alumno.nombre || ""); + setNuevoCorreo(alumno.correo || ""); + setNuevoNumero(alumno.telefono || ""); + setNuevoTipo(alumno.tipo_formacion || ""); + // Detecta la formación actual según el tipo + if (alumno.tipo_formacion === "curso") setNuevaFormacion(alumno.curso_id ? String(alumno.curso_id) : ""); + else if (alumno.tipo_formacion === "inyeccion") setNuevaFormacion(alumno.inyeccion_id ? String(alumno.inyeccion_id) : ""); + else if (alumno.tipo_formacion === "pildora") setNuevaFormacion(alumno.pildoras_id ? String(alumno.pildoras_id) : ""); + else setNuevaFormacion(""); }; // Cancelar edición @@ -96,25 +121,36 @@ export default function AlumnosVista() { }; // Guardar cambios - const guardarEdicion = async (data) => { + const guardarEdicion = async (id) => { + // Prepara el objeto de actualización + let updateObj = { + tipo_formacion: nuevoTipo, + curso_id: null, + inyeccion_id: null, + pildoras_id: null, + nombre: nuevoNombre, + correo: nuevoCorreo, + telefono: nuevoNumero, + }; + + if (nuevoTipo === "curso") updateObj.curso_id = Number(nuevaFormacion); + if (nuevoTipo === "inyeccion") updateObj.inyeccion_id = Number(nuevaFormacion); + if (nuevoTipo === "pildora") updateObj.pildoras_id = Number(nuevaFormacion); + const { error } = await supabaseClient .from("alumno") - .update({ - nombre: data.nombre, - correo: data.correo, - telefono: data.telefono, - curso_id: data.cursoSeleccionado, - }) - .eq("id", alumnoEditando); + .update(updateObj) + .eq("id", id); - if (error) { - setModalMensaje("Error al actualizar el alumno"); + if (!error) { + setModalMensaje("Alumno actualizado correctamente"); + setMostrarModal(true); + setAlumnoEditando(null); + await cargarAlumnos(); // <--- Refresca la tabla } else { - setModalMensaje("Alumno actualizado exitosamente"); - await cargarAlumnos(); - cancelarEdicion(); + setModalMensaje("Error al actualizar el alumno"); + setMostrarModal(true); } - setMostrarModal(true); }; // Confirmar eliminación @@ -154,111 +190,45 @@ export default function AlumnosVista() { Nombre Correo Teléfono - Curso + Tipo + Formación Acciones - {alumnos.map((alumno) => - alumnoEditando === alumno.id ? ( - - - {alumno.id} - - - - {errors.nombre && ( - - {errors.nombre.message} - - )} - - - - {errors.correo && ( - - {errors.correo.message} - - )} - - - - {errors.telefono && ( - - {errors.telefono.message} - - )} - - - - {errors.cursoSeleccionado && ( - - {errors.cursoSeleccionado.message} - - )} - - - - - - - ) : ( - - {alumno.id} - {alumno.nombre} - {alumno.correo} - {alumno.telefono} - - {alumno.curso?.nombre || "Sin curso"} - - - - - - - - ) - )} + {alumnos.map((alumno) => ( + + {alumno.id} + {alumno.nombre} + {alumno.correo} + {alumno.telefono} + + {alumno.tipo_formacion === "curso" + ? "Curso" + : alumno.tipo_formacion === "inyeccion" + ? "Inyección" + : alumno.tipo_formacion === "pildora" + ? "Píldora" + : ""} + + + {alumno.tipo_formacion === "curso" && alumno.curso?.nombre} + {alumno.tipo_formacion === "inyeccion" && alumno.inyeccion?.nombre} + {alumno.tipo_formacion === "pildora" && alumno.pildoras?.nombre} + + + + + + ))} diff --git a/diplomas/src/pages/diplomasVista.jsx b/diplomas/src/pages/diplomasVista.jsx index 4539b60..995abc3 100644 --- a/diplomas/src/pages/diplomasVista.jsx +++ b/diplomas/src/pages/diplomasVista.jsx @@ -18,9 +18,21 @@ export default function DiplomasVista() { const cargarAlumnos = async () => { const { data, error } = await supabaseClient .from("alumno") - .select("id, nombre, correo, telefono, curso(id, nombre)") + .select(` + id, + nombre, + correo, + telefono, + tipo_formacion, + curso_id, + curso(id, nombre), + inyeccion_id, + inyeccion(id, nombre), + pildoras_id, + pildoras(id, nombre) + `) .order("id", { ascending: true }); - if (!error) setAlumnos(data); + setAlumnos(data || []); }; cargarAlumnos(); }, []); @@ -62,7 +74,8 @@ export default function DiplomasVista() { Nombre Correo Teléfono - Curso + Tipo + Formación Acciones @@ -74,7 +87,18 @@ export default function DiplomasVista() { {alumno.correo} {alumno.telefono} - {alumno.curso?.nombre || "Sin curso"} + {alumno.tipo_formacion === "curso" + ? "Curso" + : alumno.tipo_formacion === "inyeccion" + ? "Inyección" + : alumno.tipo_formacion === "pildora" + ? "Píldora" + : ""} + + + {alumno.tipo_formacion === "curso" && alumno.curso?.nombre} + {alumno.tipo_formacion === "inyeccion" && alumno.inyeccion?.nombre} + {alumno.tipo_formacion === "pildora" && alumno.pildoras?.nombre} + + ))} + + )} + + {addCompetencia && ( +
+
+ + {errors.nuevaCompetencia && ( +

+ {errors.nuevaCompetencia.message} +

+ )} +
+
+ + +
+
+ )} + + +