Cliente: Spanisland, S.L.
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).
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); ... ... ...
Deja una respuesta