diff --git a/diplomas/src/components/dialogs/crearDiplomaDialog.jsx b/diplomas/src/components/dialogs/crearDiplomaDialog.jsx
index b9e05df..24915f9 100644
--- a/diplomas/src/components/dialogs/crearDiplomaDialog.jsx
+++ b/diplomas/src/components/dialogs/crearDiplomaDialog.jsx
@@ -27,13 +27,13 @@ export default function CrearDiplomaDialog({
fecha,
setFecha,
}) {
- const [diseñoSeleccionado, setDiseñoSeleccionado] = useState(DISEÑOS[0]?.id || null);
+ 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]
+ prev.includes(id) ? prev.filter((cid) => cid !== id) : [...prev, id]
);
};
@@ -68,7 +68,9 @@ export default function CrearDiplomaDialog({
-
+
{competencias.map((comp) => (
setFecha(e.target.value)}
+ onChange={(e) => setFecha(e.target.value)}
/>
-
diff --git a/diplomas/src/components/dialogs/vistaPreviaDiplomaDialog.jsx b/diplomas/src/components/dialogs/vistaPreviaDiplomaDialog.jsx
index 82567e6..7151584 100644
--- a/diplomas/src/components/dialogs/vistaPreviaDiplomaDialog.jsx
+++ b/diplomas/src/components/dialogs/vistaPreviaDiplomaDialog.jsx
@@ -1,4 +1,4 @@
-import React, { useState } from "react";
+import { useState, useEffect } from "react";
import {
Dialog,
DialogContent,
@@ -6,57 +6,164 @@ import {
DialogTitle,
} from "@/components/ui/dialog";
import Diploma from "@/components/Diploma";
-import { PDFDownloadLink, PDFViewer } from "@react-pdf/renderer";
-import { Button } from "../ui/button";
+import { PDFDownloadLink, PDFViewer, pdf } from "@react-pdf/renderer";
+import { supabaseClient } from "@/utils/supabase";
function VistaPreviaDiplomaDialog({
open,
onOpenChange,
alumno,
- competencias,
+ competencias: competenciasProp,
fecha,
competenciasAcreditadas,
}) {
const [mostrarVistaPrevia, setMostrarVistaPrevia] = useState(false);
+ const [enviando, setEnviando] = useState(false);
+ const [mensaje, setMensaje] = useState("");
+ const [competencias, setCompetencias] = useState([]);
- if (!open || !alumno) return null;
+ 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).filter(Boolean) || [];
+ setCompetencias(comps);
+ });
+ }
+ }, [alumno]);
- // Filtra solo las competencias seleccionadas si se pasa el array de acreditadas
- const competenciasMostradas = Array.isArray(competenciasAcreditadas)
- ? (Array.isArray(competencias) ? competencias : []).filter((comp) =>
- competenciasAcreditadas.includes(comp.id)
- )
- : (Array.isArray(competencias) ? competencias : []);
+ if (!alumno) return null;
- const competenciasParaPDF =
- Array.isArray(competenciasMostradas) && competenciasMostradas.length > 0
- ? competenciasMostradas
- : [];
+ const competenciasMostradas = competenciasAcreditadas
+ ? competencias.filter((comp) => competenciasAcreditadas.includes(comp.id))
+ : competencias;
+
+ // Simulación de envío de PDF por correo y WhatsApp
+ const handleEnviar = async () => {
+ setEnviando(true);
+ setMensaje("");
+ // Simula la generación del PDF
+ const blob = await pdf(
+
+ ).toBlob();
+
+ // Simula el envío por correo (espera 2 segundos)
+ await new Promise((resolve) => setTimeout(resolve, 2000));
+
+ // Enviar mensaje real por WhatsApp usando la API de WhatsApp (abrirá una nueva ventana)
+ const telefono = alumno.telefono.replace(/\D/g, ""); // Solo números
+ const mensajeWhatsapp = encodeURIComponent(
+ `Hola ${alumno.nombre}, tu diploma ha sido generado y enviado a tu correo (${alumno.correo}). ¡Felicidades!`
+ );
+ window.open(`https://wa.me/${telefono}?text=${mensajeWhatsapp}`, "_blank");
+
+ setMensaje(
+ `Diploma enviado por correo a ${alumno.correo} y mensaje enviado por WhatsApp al ${alumno.telefono}.`
+ );
+ setEnviando(false);
+ };
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
-
-
+
);
}
diff --git a/diplomas/src/pages/diplomasVista.jsx b/diplomas/src/pages/diplomasVista.jsx
index fe6af1d..5fe5e71 100644
--- a/diplomas/src/pages/diplomasVista.jsx
+++ b/diplomas/src/pages/diplomasVista.jsx
@@ -37,6 +37,20 @@ export default function DiplomasVista() {
}
};
+ useEffect(() => {
+ if (alumnoSeleccionado && alumnoSeleccionado.curso?.id) {
+ supabaseClient
+ .from("curso_competencia")
+ .select("competencia(id, descripcion)")
+ .eq("curso_id", alumnoSeleccionado.curso.id)
+ .then(({ data }) => {
+ const comps = data?.map((c) => c.competencia).filter(Boolean) || [];
+ setCompetencias(comps);
+ setCompetenciasAcreditadas(comps.map((c) => c.id)); // Opcional: selecciona todas por default
+ });
+ }
+ }, [alumnoSeleccionado]);
+
return (
@@ -82,7 +96,7 @@ export default function DiplomasVista() {
{mostrarDialog && (