Class ReportePdfService

java.lang.Object
com.gestorrh.api.service.ReportePdfService

@Service public class ReportePdfService extends Object
Servicio especializado en la generación de documentos PDF para los reportes de asistencia.

Utiliza la librería iText (OpenPDF) para la creación programática de documentos complejos, gestionando el diseño corporativo mediante la definición de paletas de colores, fuentes tipográficas y estructuras de tablas personalizadas.

Permite exportar tanto la vista detallada de los fichajes diarios como los resúmenes acumulados, proporcionando archivos listos para su impresión o almacenamiento digital.

  • Field Details

    • COLOR_CORPORATIVO

      private static final Color COLOR_CORPORATIVO
    • GRIS_CLARO

      private static final Color GRIS_CLARO
    • COLOR_TOTALES

      private static final Color COLOR_TOTALES
    • FUENTE_TITULO

      private static final com.lowagie.text.Font FUENTE_TITULO
    • FUENTE_SUBTITULO

      private static final com.lowagie.text.Font FUENTE_SUBTITULO
    • FUENTE_FECHA_GEN

      private static final com.lowagie.text.Font FUENTE_FECHA_GEN
    • FUENTE_CABECERA

      private static final com.lowagie.text.Font FUENTE_CABECERA
    • FUENTE_CELDA

      private static final com.lowagie.text.Font FUENTE_CELDA
  • Constructor Details

    • ReportePdfService

      public ReportePdfService()
  • Method Details

    • generarPdfDetalle

      public byte[] generarPdfDetalle(String nombreEmpresa, String subtituloFiltro, List<ReporteDetalleDTO> datos)
      Genera un archivo PDF con el desglose detallado de todos los fichajes realizados por la plantilla.

      El documento resultante se configura automáticamente en orientación horizontal (Landscape) para facilitar la lectura de las múltiples columnas de datos (fechas, turnos, entradas, salidas, tiempos y extras). Incluye separadores visuales que agrupan los registros por empleado y departamento.

      Parameters:
      nombreEmpresa - Nombre oficial de la empresa para ser mostrado en el encabezado principal.
      subtituloFiltro - Descripción textual de los filtros aplicados (ej: "Desde 01/01 al 31/01").
      datos - Lista de objetos DTO que contienen la información procesada de cada fichaje.
      Returns:
      byte[] El contenido binario del archivo PDF generado, apto para ser enviado en una respuesta HTTP.
      Throws:
      RuntimeException - Si se produce un fallo técnico inesperado durante el flujo de construcción del PDF.
    • generarPdfResumen

      public byte[] generarPdfResumen(String nombreEmpresa, String subtituloFiltro, List<ReporteResumenDTO> datos)
      Genera un archivo PDF con los totales acumulados por cada empleado en el periodo seleccionado.

      A diferencia del reporte detallado, este documento se presenta en orientación vertical (Portrait) y se centra en métricas agregadas: total de días laborados, suma de horas trabajadas y acumulado de horas extraordinarias por cada trabajador.

      Incluye una fila de totales generales al final de la tabla para facilitar la revisión rápida de costes y tiempos por parte del departamento de administración.

      Parameters:
      nombreEmpresa - Nombre oficial de la empresa para el encabezado.
      subtituloFiltro - Descripción del rango temporal o filtros aplicados (ej: "Resumen Mensual - Marzo").
      datos - Lista de objetos ReporteResumenDTO con los totales consolidados.
      Returns:
      byte[] El contenido binario del archivo PDF generado.
      Throws:
      RuntimeException - Si ocurre un fallo técnico crítico durante el proceso de maquetación del documento.
    • agregarCabeceras

      private void agregarCabeceras(com.lowagie.text.Document document, String empresa, String subtitulo) throws com.lowagie.text.DocumentException
      Construye y añade la sección de cabecera corporativa al documento PDF.

      Esta sección incluye:

      1. Nombre de la empresa en mayúsculas y fuente destacada.
      2. Título descriptivo del reporte (Detallado o Resumen).
      3. Marca de tiempo precisa con el momento exacto de la exportación.
      Parameters:
      document - El objeto Document de iText en proceso de construcción.
      empresa - Nombre de la organización a mostrar.
      subtitulo - Texto secundario que describe el tipo de reporte y filtros.
      Throws:
      com.lowagie.text.DocumentException - Si se produce un error al intentar añadir elementos al flujo del documento.
    • configurarPieDePagina

      private void configurarPieDePagina(com.lowagie.text.Document document)
      Configura el pie de página automático para todas las hojas del documento. Incluye el nombre de la aplicación y la numeración de página.
      Parameters:
      document - El objeto Documento al que se le aplicará el pie de página.
    • agregarCeldaCabecera

      private void agregarCeldaCabecera(com.lowagie.text.pdf.PdfPTable table, String texto, Color colorFondo)
      Crea y añade una celda de estilo cabecera a una tabla. Utiliza el color corporativo y texto en blanco con alineación centrada.
      Parameters:
      table - La tabla de iText a la que se añadirá la celda.
      texto - El contenido textual de la cabecera.
      colorFondo - El color de fondo para la celda.
    • agregarCeldaDato

      private void agregarCeldaDato(com.lowagie.text.pdf.PdfPTable table, String texto)
      Crea y añade una celda de datos estándar a la tabla.
      Parameters:
      table - La tabla de destino.
      texto - El valor a insertar en la celda.
    • agregarFilaTotalDetalle

      private void agregarFilaTotalDetalle(com.lowagie.text.pdf.PdfPTable table, long totalMinutos, long totalExtras)
      Añade una fila final a la tabla de detalle con los sumatorios generales de tiempo.
      Parameters:
      table - Tabla de iText en construcción.
      totalMinutos - Suma total de minutos reales trabajados.
      totalExtras - Suma total de minutos extra generados.
    • agregarFilaTotalResumen

      private void agregarFilaTotalResumen(com.lowagie.text.pdf.PdfPTable table, long totalDias, long totalMinutos, long totalExtras)
      Añade una fila de sumatorios finales a la tabla de resumen.
      Parameters:
      table - Tabla de destino.
      totalDias - Suma total de días trabajados reportados.
      totalMinutos - Suma total de minutos reales.
      totalExtras - Suma total de minutos extra.
    • formatearMinutos

      private String formatearMinutos(Long minutosTotales)
      Utilidad para convertir una cantidad de minutos en un formato legible de horas y minutos. Ejemplo: 125 -> "2h 5min"
      Parameters:
      minutosTotales - Cantidad de minutos a formatear.
      Returns:
      String Cadena de texto formateada para el PDF.