diff --git a/diplomas/src/pages/crearDiplomaDialog.jsx b/diplomas/src/pages/crearDiplomaDialog.jsx
new file mode 100644
index 0000000..2769b20
--- /dev/null
+++ b/diplomas/src/pages/crearDiplomaDialog.jsx
@@ -0,0 +1,98 @@
+import React, { useEffect, useState } from "react";
+import {
+ Dialog,
+ DialogContent,
+ DialogHeader,
+ DialogTitle,
+ DialogDescription,
+ DialogFooter,
+} from "@/components/ui/dialog";
+import { Button } from "@/components/ui/button";
+import { supabaseClient } from "@/utils/supabase";
+
+// Puedes reemplazar esto por tus propios diseños
+const DISEÑOS = [
+ { id: 1, nombre: "Diseño Clásico" },
+ { id: 2, nombre: "Diseño Moderno" },
+];
+
+export default function CrearDiplomaDialog({
+ open,
+ onOpenChange,
+ alumno,
+ competencias,
+ setCompetencias,
+ competenciasAcreditadas,
+ setCompetenciasAcreditadas,
+ fecha,
+ setFecha,
+}) {
+ const [diseñoSeleccionado, setDiseñoSeleccionado] = useState(DISEÑOS[0]?.id || null);
+
+ const toggleCompetencia = (id) => {
+ setCompetenciasAcreditadas((prev) =>
+ prev.includes(id)
+ ? prev.filter((cid) => cid !== id)
+ : [...prev, id]
+ );
+ };
+
+ useEffect(() => {
+ if (alumno && alumno.curso?.id) {
+ supabaseClient
+ .from("curso_competencia")
+ .select("competencia(id, descripcion)")
+ .eq("curso_id", alumno.curso.id)
+ .then(({ data }) => {
+ const comps = data?.map((c) => c.competencia) || [];
+ setCompetencias(comps);
+ setCompetenciasAcreditadas(comps.map((c) => c.id)); // todas seleccionadas por default
+ });
+ }
+ }, [alumno]);
+
+ const handleCrearDiploma = async () => {
+ // Aquí va la lógica para crear el diploma en la base de datos
+ // 1. Insertar en Diploma
+ // 2. Insertar en Diploma_Competencia
+ // 3. (Opcional) Generar PDF y enviar
+
+ // Ejemplo de inserción (ajusta según tu lógica real)
+ // await supabaseClient.from("Diploma").insert({...});
+ // await supabaseClient.from("Diploma_Competencia").insert([...]);
+
+ onOpenChange(false);
+ // Aquí puedes mostrar un mensaje de éxito o iniciar la generación del PDF
+ };
+
+ if (!open || !alumno) return null;
+
+ return (
+
+
Crear Diploma
+
+
+ {competencias.map((comp) => (
+
+ toggleCompetencia(comp.id)}
+ className="mr-2"
+ />
+ {comp.descripcion}
+
+ ))}
+
+
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/diplomas/src/pages/diplomasVista.jsx b/diplomas/src/pages/diplomasVista.jsx
index d246ba1..7b7a901 100644
--- a/diplomas/src/pages/diplomasVista.jsx
+++ b/diplomas/src/pages/diplomasVista.jsx
@@ -1,12 +1,106 @@
-import React from "react";
+import React, { useEffect, useState } from "react";
import Layout from "@/components/layout/Layout";
+import { supabaseClient } from "@/utils/supabase";
+import { Button } from "@/components/ui/button";
+import CrearDiplomaDialog from "./crearDiplomaDialog"; // Importa tu dialog
+import VistaPreviaDiplomaDialog from "./vistaPreviaDiplomaDialog";
export default function DiplomasVista() {
+ const [alumnos, setAlumnos] = useState([]);
+ const [alumnoSeleccionado, setAlumnoSeleccionado] = useState(null);
+ const [mostrarDialog, setMostrarDialog] = useState(false);
+
+ // Estado compartido para los datos del diploma
+ const [competencias, setCompetencias] = useState([]);
+ const [competenciasAcreditadas, setCompetenciasAcreditadas] = useState([]);
+ const [fecha, setFecha] = useState("");
+
+ useEffect(() => {
+ const cargarAlumnos = async () => {
+ const { data, error } = await supabaseClient
+ .from("alumno")
+ .select("id, nombre, correo, telefono, curso(id, nombre)")
+ .order("id", { ascending: true });
+ if (!error) setAlumnos(data);
+ };
+ cargarAlumnos();
+ }, []);
+
+ // Limpiar datos al cerrar dialog
+ const handleCloseDialog = (open) => {
+ setMostrarDialog(open);
+ if (!open) {
+ setAlumnoSeleccionado(null);
+ setCompetencias([]);
+ setCompetenciasAcreditadas([]); // limpiar al cerrar
+ setFecha("");
+ }
+ };
+
return (
-
-
Vista de diplomas
+
+
Vista de Diplomas
+
+
+
+ ID |
+ Nombre |
+ Correo |
+ Teléfono |
+ Curso |
+ Acciones |
+
+
+
+ {alumnos.map((alumno) => (
+
+ {alumno.id} |
+ {alumno.nombre} |
+ {alumno.correo} |
+ {alumno.telefono} |
+ {alumno.curso?.nombre || "Sin curso"} |
+
+
+ |
+
+ ))}
+
+
+ {/* Dialog para crear diploma */}
+ {mostrarDialog && (
+
+ )}
);
}
diff --git a/diplomas/src/pages/vistaPreviaDiplomaDialog.jsx b/diplomas/src/pages/vistaPreviaDiplomaDialog.jsx
new file mode 100644
index 0000000..3c0810d
--- /dev/null
+++ b/diplomas/src/pages/vistaPreviaDiplomaDialog.jsx
@@ -0,0 +1,30 @@
+import React from "react";
+
+export default function VistaPreviaDiplomaDialog({ open, alumno, competencias, fecha, competenciasAcreditadas }) {
+ if (!open || !alumno) return null;
+
+ // Filtra solo las competencias seleccionadas si se pasa el array de acreditadas
+ const competenciasMostradas = competenciasAcreditadas
+ ? competencias.filter((comp) => competenciasAcreditadas.includes(comp.id))
+ : competencias;
+
+ return (
+
+
Diploma
+
Alumno: {alumno.nombre}
+
Curso: {alumno.curso?.nombre || "Sin curso"}
+
+
Competencias Acreditadas:
+
+ {competenciasMostradas.map((comp) => (
+ - {comp.descripcion}
+ ))}
+
+
+
+ Fecha: {fecha || new Date().toLocaleDateString()}
+
+
Vista previa
+
+ );
+}
\ No newline at end of file