GNU/Linux, Open Source, Cloud Computing, DevOps y más...

Emisión de facturas en PDF con Zend_Pdf en OpenCart – Spanisland

No hay comentarios

OpenCart logo    Zend Framework logo

Cliente: Spanisland, S.L.

Spanisland OpenCart ecommerce website

Este trabajo consistió en integrar la clase Zend_Pdf de Zend Framework en la aplicación de comercio electrónico OpenCart para poder emitir facturas en PDF totalmente personalizadas y adaptadas a la imagen corporativa del cliente. Añadí un botón «Factura PDF» al listado de órdenes de compra de OpenCart del área de administración y también dentro de la vista individual de cada orden. Al ser pulsado generaba una factura a partir de la plantilla de la siguiente imagen y la rellenaba automáticamente con todos los datos relevantes de dicha orden (se han omitido estos datos por razones de confidencialidad).

Spanisland PDF Invoice Template

El usuario sólo tenía que guardar así el fichero PDF y enviárselo al cliente de forma manual, pues no se llegó a implementar ninguna funcionalidad de envío automático de las facturas al cliente que realizaba la compra. Al nombre del fichero PDF se le añadió el número de factura, el número de orden, el nombre del cliente y la fecha de facturación para que fuera totalmente descriptivo y más fácil de gestionar.

A continuación se muestra un pequeño fragmento de la función myinvoice() que se añadió a OpenCart para generar las facturas usando Zend_Pdf:

/**
* Generates the PDF invoice
*
* @return   void
*/
public function myinvoice() {

    // Load Zend_Pdf class
    set_include_path ( get_include_path().":". DIR_SYSTEM . "external/" );
    require_once( DIR_SYSTEM . 'external/Zend/Pdf.php');

    $encoding = "UTF-8";
    $templateName = "factura_spanisland";
    $templatesDir = DIR_TEMPLATE . 'sale/';
    $templateVersion = $this->_getLastPdfTemplateVersion($templateName, $templatesDir);

    // Load PDF document from a file.
    $pdfTemplate = $templatesDir . $templateName . '_v'. $templateVersion . '.pdf';
    $pdf = Zend_Pdf::load($pdfTemplate);

    $page = $pdf->pages[0];

    // Apply style
    $style = $this->_getPdfTemplateStyle();
    $page->setStyle($style);

    // Define fonts
    $font1 = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA_BOLD);
    $font2 = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
    $font3 = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA_BOLD);

    $this->load->language('sale/order');

    /////////////////////////
    /// LOAD INVOICE DATA ///
    /////////////////////////

    $this->load->model('sale/order');

    $this->data['orders'] = array();

    $orders = array();

    if (isset($this->request->post['selected'])) {
        $orders = $this->request->post['selected'];
    } elseif (isset($this->request->get['order_id'])) {
        $orders[] = $this->request->get['order_id'];
    }

    foreach ($orders as $order_id) {
        $order_info = $this->model_sale_order->getOrder($order_id);
			
    if ($order_info) {
        if ($order_info['invoice_id']) {
            $invoice_id = $order_info['invoice_prefix'] . sprintf("%04d", $order_info['invoice_id']);
	} else {
            $invoice_id = $this->model_sale_order->generateInvoiceId($order_id);
	    $order_info = $this->model_sale_order->getOrder($order_id);
	    $invoice_id = $order_info['invoice_prefix'] . sprintf("%04d", $order_info['invoice_id']);
	}

	$product_data = array();

	$products = $this->model_sale_order->getOrderProducts($order_id);

...
...
...


 

Sobre el autor

Daniel López Azaña
Arquitecto de soluciones Cloud AWS & Linux Sysadmin Freelance

Emprendedor, generador de ideas y mente inquieta. Apasionado de las nuevas tecnologías, especialmente de los sistemas Linux y del software libre. Me gusta escribir además sobre actualidad tecnológica, Cloud Computing, AWSi, DevOps, DevSecOps, seguridad, desarrollo web y programación, SEO, ciencia, innovación, emprendimiento, etc.

DanielEmisión de facturas en PDF con Zend_Pdf en OpenCart – Spanisland

Deja una respuesta

Tu dirección de correo electrónico no será publicada.