La clase ExportManager, que combina la generación de PDF, CSV y Excel fue una mala idea. Estos formatos son demasiando diferentes como para unificarlos. En su lugar se deben crear clases independientes para cada uno.
Necesitamos una nueva clase ExportPDF que permita:
newPage()
.addImage()
.addText()
.setLang()
.setOrientation()
.setSize()
.setComany()
.setData($key, $value)
.La nueva clase iría en la carpeta Core/Lib, dado su uso habitual. La interfaz o contrato a implementar por las clases iría en la carpeta Core/Contract.
// devuelve el contenido del pdf de una factura
return ExportPDF::create()
->addModel($factura)
->output();
// genera y guarda en pdf una factura
ExportPDF::create()
->addModel($factura)
->save('factura_1230');
// devuelve un pdf con dos tablas de datos que tenemos en dos arrays, un texto y una imagen
return ExportPDF::create()
->addTable($data1)
->addTable($data2)
->newPage()
->addText('bla, bla, bla..')
->addImage($imagePath)
->output();
// genera la factura en inglés
ExportPDF::create()
->setLang('en_EN')
->addModel($factura)
->save('factura_1230');
Creo que fue un error mezclar el envío de emails con la exportación, de la forma en que lo hicimos, es decir, poniendo email como una opción de exportación. El envío de emails debería ser un botón independiente en los formularios y no una opción de exportación.
Sin embargo, si que necesitamos una herramienta potente para el envío de emails que cubra nuestras necesidades. Más detalles.
Del mismo modo que hacemos con la clase Calculator y con los AjaxForms, deberíamos poder añadir mods al ExportPDF, para poder reemplazar algunas llamadas o ejecutar código tras ciertas llamadas.
ExportPDF::addMod(new MyCustomExportPDFMod());
ExportPDF::create()
->addModel($fproduct)
->save('producto_1230');
Personalizaciones posibles:
Necesitamos poder desactivar, en algunos casos, la cabecera o el pié de página.
ExportPDF::create()
->disableHeader()
->disableFooter()
->addText('bla, bla, bla..')
->addTable($data1)
->output();
Esta tarea fue aprobada el 11-11-2023 y está pendiente para comenzar el desarrollo el 21-11-2024.