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 31-03-2025.
|
08-11-2023 13:02:28 daniel89fg_739 Poder establecer un diseño de plantilla diferente para la empresa, tipo de documento, proveedor o cliente. |
PRO |
08-11-2023 14:17:09 estrategicos_11919 Poder establecer un diseño distinto para cada Serie de Facturacion, a veces una empresa tiene diferentes marcas.(SERIES). Veo que esta dentro de las personalizaciones posibles.No se si es una locura pero yo propongo: establecer un parámetro genérico como el de ->addText() para poder incluir datos que vengan de un plugin o personalizacion, de forma que si personalizamos el footer de una factura o extendemos un cliente con un dato específico podamos establecer la impresion de ese dato como si de una variable general se tratara. (Mierda nos pisariamos unos a otros?) |
|
29-02-2024 12:01:03 daniel89fg_739 Podría ser interesante dejar añadir una cabecera o pie de página diferente para cada página. Por ejemplo la página 1 no tiene cabecera ni footer, pero el resto de páginas si, e incluso que cada página pueda ser diferente, o viceversa. |