From 30b07db07e1283d1b755103649885d759a792a5b Mon Sep 17 00:00:00 2001 From: BenitoBB Date: Wed, 14 May 2025 08:48:51 -0600 Subject: [PATCH] feat: add telefono field to Alumnos schema, update AlumnosManual and AlumnosArchivo to handle course registration and competency management --- diplomas/src/components/app-sidebar.jsx | 9 - diplomas/src/pages/alumnosArchivo.jsx | 51 +++- diplomas/src/pages/alumnosManual.jsx | 4 +- diplomas/src/pages/cursosManual.jsx | 344 ++++++++++++++++-------- diplomas/src/schemas/AlumnosSchema.js | 4 + 5 files changed, 290 insertions(+), 122 deletions(-) diff --git a/diplomas/src/components/app-sidebar.jsx b/diplomas/src/components/app-sidebar.jsx index 628aa4a..62d21dc 100644 --- a/diplomas/src/components/app-sidebar.jsx +++ b/diplomas/src/components/app-sidebar.jsx @@ -53,15 +53,6 @@ const data = { }, ], }, - { - title: "Competencias", - items: [ - { - title: "Vista de competencias", - url: "/competenciasVista", - }, - ], - }, { title: "Diplomas", items: [ diff --git a/diplomas/src/pages/alumnosArchivo.jsx b/diplomas/src/pages/alumnosArchivo.jsx index 91026ee..da5df59 100644 --- a/diplomas/src/pages/alumnosArchivo.jsx +++ b/diplomas/src/pages/alumnosArchivo.jsx @@ -3,13 +3,17 @@ import Papa from "papaparse"; import * as XLSX from "xlsx"; import Layout from "@/components/layout/Layout"; import { Button } from "@/components/ui/button"; -import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription } from "@/components/ui/dialog"; +import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from "@/components/ui/dialog"; +import { CursosManualForm } from "./cursosManual"; // Importa el formulario sin Layout +import { supabaseClient } from "@/utils/supabase"; export default function AlumnosArchivo() { const [archivo, setArchivo] = useState(null); const [datos, setDatos] = useState([]); const [dialogoAbierto, setDialogoAbierto] = useState(false); const [mensajeDialogo, setMensajeDialogo] = useState(""); + const [mostrarDialogCurso, setMostrarDialogCurso] = useState(false); + const [cursoFaltante, setCursoFaltante] = useState(""); useEffect(() => { if (archivo) extraerContenido(); @@ -21,13 +25,36 @@ export default function AlumnosArchivo() { const errores = []; for (const alumno of datos) { + // 1. Verifica si el curso existe + const { data: cursosEncontrados, error: errorCurso } = await supabaseClient + .from("curso") + .select("id") + .eq("nombre", alumno.nombreCurso) + .maybeSingle(); + + if (errorCurso) { + errores.push({ alumno, error: "Error al buscar el curso" }); + continue; + } + + if (!cursosEncontrados) { + // Si no existe el curso, muestra el dialog para registrar el curso + setCursoFaltante(alumno.nombreCurso); + setMostrarDialogCurso(true); + setMensajeDialogo(`El curso "${alumno.nombreCurso}" no existe. Por favor, regístralo primero.`); + setDialogoAbierto(true); + return; // Detiene el registro de alumnos + } + + // 2. Si existe, registra el alumno con el curso_id correcto const res = await fetch("/api/alumno", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ nombre: alumno.nombre, correo: alumno.correo, - nombreCurso: alumno.nombreCurso, + telefono: alumno.telefono, + curso_id: cursosEncontrados.id, // Usar el id del curso }), }); @@ -161,7 +188,25 @@ export default function AlumnosArchivo() { - {/* Dialog Component */} + {/* Dialog para curso faltante */} + + + + + Registrar curso faltante + + + El curso {cursoFaltante} no existe. Por favor, regístralo antes de continuar. + + + + + + + + + + {/* Dialog de información */} diff --git a/diplomas/src/pages/alumnosManual.jsx b/diplomas/src/pages/alumnosManual.jsx index 51539df..2a6a72f 100644 --- a/diplomas/src/pages/alumnosManual.jsx +++ b/diplomas/src/pages/alumnosManual.jsx @@ -66,7 +66,7 @@ export default function AlumnosManual() { nombre: data.nombre, correo: data.correo, telefono: data.telefono, - nombreCurso: data.cursoSeleccionado, // Guardar el nombre del curso + curso_id: Number(data.cursoSeleccionado), // Guardar el ID del curso }, ]); @@ -138,7 +138,7 @@ export default function AlumnosManual() { {cursos.map((curso) => ( - + {curso.nombre} ))} diff --git a/diplomas/src/pages/cursosManual.jsx b/diplomas/src/pages/cursosManual.jsx index 6b9b2d4..59b67e9 100644 --- a/diplomas/src/pages/cursosManual.jsx +++ b/diplomas/src/pages/cursosManual.jsx @@ -96,116 +96,244 @@ export default function CursosManual() {

Nuevo curso

-
- - {errors.nombre && ( -

{errors.nombre.message}

- )} - -