Academia Deltamontero · Documentación
Desarrollolocal_deltamodules

Reportes

Reportes listos (reports), informes personalizados (report_builder y custom.php) y exportación con el formato institucional (report_export, report_pdf, report-docx.py).

La trazabilidad que pide el manual (seguimiento de quién completó qué) se resuelve con cuatro clases y dos páginas, todas con la capacidad local/deltamodules:viewreports (barra superior "Reportes").

PiezaArchivoPapel
Reportes listosclasses/reports.php, reports.phpCatálogo fijo con filtros y descarga. La misma lógica usa el agente de IA (reporte_formacion).
Informes personalizadosclasses/report_builder.php, custom.phpConstructor de informes: base, columnas, filtros, condiciones, orden y agrupación; se guardan en local_deltamodules_rep.
Exportaciónclasses/report_export.php, classes/report_pdf.php, /report-docx.pyExcel, Word y PDF con el formato institucional. La usan los formatos de descarga dataformat_delta*.

Reportes listos (reports)

ClaveFiltros
pendientes (no terminaron uno o varios módulos)módulos, cargo
avance (avance por persona y módulo)módulos, cargo
completados (quiénes completaron, certificados)módulos, cargo
evaluaciones (resultados de los repasos)módulos, cargo
cargos (personas por cargo)cargo
inactivos (no ingresan hace N días)días, cargo
personal (directorio con cargo, área, correo y último acceso)cargo

Los títulos y descripciones son las cadenas rep_<clave> y rep_<clave>_desc.

MétodoQué hace
catalog()El catálogo anterior.
modules()Cursos con idnumber M__ y PTS.
cargos()Cohortes cuyo nombre empieza por "Cargo:".
resolve_modules($input)Convierte números ("1", "M07", "módulo 3"), ids o nombres en ids de curso. El número se busca por idnumber, así "1" nunca se confunde con 10, 11 o 12.
resolve_cargo($input)Cargo por id o por texto.
course_progress($course, $userid)Avance de una persona en un curso.
run($type, $f)Ejecuta el reporte y devuelve columnas y filas.
url($type, $f, $download)Dirección de la página con los filtros, para ver o descargar.

El alcance y los filtros elegidos viajan a la exportación por $SESSION->deltaexportsubtitle y aparecen como "Alcance" en el documento.

Informes personalizados (report_builder)

BaseQué es cada fila
personasUna persona
modulosUna persona en un módulo
evaluacionesUna persona en una evaluación
postulantesUn postulante (solo con local/candidate_enrollment:viewcandidates)

Las columnas de cada base tienen etiqueta (cadena rbc_<clave>), grupo (rbg_<grupo>) y tipo (text, num, pct, date, datetime). Las de persona son comunes: nombre, cédula, correo, usuario, cargo, área, equipo, líder, estado de la cuenta, creación, primer y último acceso. Cada base agrega las suyas (asignados, completados, avance global, certificados, notas; módulo, avance, estado, certificado; evaluación, intentos, mejor nota, nota para aprobar; prueba, código, nota y estado del postulante).

Elemento de la configuraciónDetalle
base, colsColumnas de la base (por defecto, las de default_columns)
cargo, area, team, modulos, suspendedFiltros rápidos
condsHasta 5 condiciones sobre cualquier columna: texto (contiene, no contiene, igual, vacío, no vacío), fecha (antes, después, nunca, alguna vez) o número (≥, >, ≤, <, =, ≠)
groupAgrupar por una columna de texto (cantidad y promedios por grupo)
sort, dirOrden

report_builder::config() normaliza la configuración (también la guardada con la versión anterior del constructor) y run() devuelve el resultado. Solo incluye personal de la Academia (sin administradores, cuentas de servicio ni postulantes, salvo en la base postulantes).

custom.php guía en cinco pasos (fila, columnas, filtros, orden y grupos, resultado), con vista previa, descarga y Guardar: la configuración se guarda en JSON en local_deltamodules_rep (nombre, base, config, autor, fechas) y aparece en reports.php como informe personalizado.

Exportación con formato institucional (report_export)

Basada en la plantilla "Plantilla.docx" de la empresa: logo, datos de la empresa, tabla de control del documento (Documento, Alcance, Fecha de emisión, Generado por, Total de registros), Tahoma y los colores institucionales (azul #1361A4, gris #E7E6E6). Los recursos están en /opt/delta-reports/ (copiados desde assets/reports/ en el Dockerfile).

MétodoFormatoImplementación
xlsx($filename, $columns, $rows, $dest)ExcelPhpSpreadsheet
docx(...)WordEscribe un JSON y ejecuta python3 /report-docx.py /opt/delta-reports/plantilla-reporte.docx datos.json salida.docx (python-docx). Si el script falla, lanza una excepción con su salida.
pdf(...)PDFreport_pdf, subclase de pdf (TCPDF de Moodle) con encabezado y pie institucionales

meta($filename) arma el título a partir del nombre del archivo (sin la fecha final). Con $dest vacío envía el archivo al navegador; con una ruta lo escribe en disco (uso desde los formatos de descarga con close_output_to_file).

report-docx.py toma la plantilla, cambia las celdas de la tabla de control conservando su formato, pone la página horizontal cuando hay más de 5 columnas y escribe título, alcance, tabla y total.

Los formatos de descarga dataformat_deltaxlsx, dataformat_deltadocx y dataformat_deltapdf llaman a estos métodos, de modo que el formato institucional aparece en todos los menús de descarga de Moodle. Ver Formatos de descarga.

Otros reportes

ReporteOrigen
Informes personalizados de Moodle (Report Builder)Nativo. create-training-report.php, create-candidates-report.php y create-review-report.php crean algunos informes con su API (no se ejecutan en cada arranque). JavaScript en additionalhtmlhead simplifica el editor de informes.
Postulanteslocal/candidate_enrollment/candidates.php con descarga en los cuatro formatos
Aceptaciones de políticaspolicies.php
Revisión anualreview.php
Equiposteam.php

En esta página