En este proyecto desarrollé una solución completa para automatizar el proceso de inscripción en cursos de Moodle, eliminando la necesidad de introducir datos manualmente o usar formularios genéricos. El sistema combina un frontend HTML personalizado, un backend en FastAPI y la integración con la API de Moodle, generando además un PDF de inscripción firmado y enviado por correo.
🎯 Objetivo
Simplificar y automatizar el proceso de alta de usuarios en Moodle, asegurando trazabilidad mediante un documento firmado (PDF) y evitando pasos manuales como copiar datos, enviar emails o realizar altas desde el panel de administración.
🧩 Componentes técnicos del sistema
- HTML simple sin CMS, totalmente adaptado a la imagen del cliente.
- Campos personalizados como DNI, email, nombre completo, modalidad, código postal, forma de contacto y curso.
- Validación de DNI en frontend y backend.
- Captura de firma manual mediante un
canvas que convierte la firma en base64.
⚙️ Backend desarrollado en FastAPI
El corazón del sistema es un backend construido en Python con FastAPI, que se encarga de:
- Validar los datos recibidos desde el formulario.
- Generar un PDF con toda la información y la firma digital.
- Guardar el PDF en un directorio seguro fuera del
docroot de Apache.
- Enviar el PDF por correo al centro de gestión mediante SMTP autenticado.
- Dar de alta automáticamente al usuario en Moodle, utilizando la API oficial REST, incluyendo:
- Datos básicos: nombre, apellidos, email, etc.
- Campos personalizados como el NIF.
🧩 Integración con Moodle
- Se emplea un token API generado para un usuario con privilegios.
- Se usan funciones como
core_user_create_users y core_user_update_users.
- También se integran los campos personalizados (custom fields) del perfil, lo que permite almacenar información extra como DNI, origen del contacto o el curso deseado.
🖨️ Generación del PDF
La generación del PDF no se basa en HTML, sino en un diseño nativo con la librería fpdf y Pillow. Esto permite un diseño limpio y profesional, con soporte para:
- Tipografías personalizadas.
- Firma manuscrita procesada como imagen desde base64.
- Secciones organizadas: datos personales, académicos, consentimiento, firma.
- Fecha de solicitud y formato adaptado a español.
- Firma visible insertada en el PDF.
El archivo resultante se envía tanto al usuario como al gestor.
🔐 Seguridad y privacidad
- El sistema guarda los PDFs fuera del alcance público del servidor web.
- La firma se valida y almacena como imagen insertada en el PDF.
📬 Envío de correos
- Se configura SMTP.
- Los correos incluyen el PDF adjunto como confirmación de inscripción.
- También se ha previsto reenvío manual en caso de fallo, guardando trazabilidad.
📁 Acceso a los PDFs desde Moodle
- Se desarrolló un plugin para Moodle llamado
inscripciones-viewer, que permite a los administradores acceder a todos los PDFs generados.
- Este plugin se conecta directamente a la ruta segura y solo está visible para usuarios con los permisos adecuados.
🚀 Ventajas del sistema
- Todo el proceso se realiza en segundos: sin intervención manual.
- Reducción del error humano: validación y alta 100% automáticas.
- Documento legal generado al instante, con firma y trazabilidad.
- Integración total con Moodle, sin depender de plugins externos o formularios genéricos.
- Escalable: fácilmente adaptable a nuevos cursos, modalidades o centros.
🔧 Tecnologías utilizadas
- HTML/JS para el frontend con firma.
- Python 3.11 y tipado estricto con
pydantic.
- FastAPI para el backend.
- FPDF y Pillow para el PDF.
- API REST de Moodle para la integración.
- SMTP para el envío de documentos.
💬 Conclusión
Este proyecto representa un gran ejemplo de cómo se puede automatizar completamente un proceso burocrático con tecnologías modernas, combinando velocidad, seguridad y cumplimiento legal.
Además, la solución está diseñada para ser mantenible y escalable, permitiendo añadir más cursos, campos personalizados o flujos similares en el futuro.
Si te interesa un sistema como este para tu centro de formación, contáctame desde danimarqz.dev.