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.


Error: Your Requested widget " ai_widget-6" is not in the widget list.
  • [do_widget_area above-nav-left]
    • [do_widget_area above-nav-right]
      • [do_widget_area footer-1]
        • [do_widget id="wpp-4"]
      • [do_widget_area footer-2]
        • [do_widget id="recent-posts-4"]
      • [do_widget_area footer-3]
        • [do_widget id="recent-comments-3"]
      • [do_widget_area footer-4]
        • [do_widget id="archives-4"]
      • [do_widget_area logo-bar]
        • [do_widget id="oxywidgetwpml-3"]
      • [do_widget_area menu-bar]
        • [do_widget id="search-3"]
      • [do_widget_area sidebar]
        • [do_widget id="search-4"]
        • [do_widget id="ai_widget-2"]
        • [do_widget id="categories-5"]
        • [do_widget id="ai_widget-3"]
        • [do_widget id="ai_widget-4"]
        • [do_widget id="ai_widget-5"]
      • [do_widget_area sub-footer-1]
        • [do_widget id="text-4"]
      • [do_widget_area sub-footer-2]
        • [do_widget_area sub-footer-3]
          • [do_widget_area sub-footer-4]
            • [do_widget_area upper-footer-1]
              • [do_widget id="search-2"]
              • [do_widget id="recent-posts-2"]
              • [do_widget id="recent-comments-2"]
              • [do_widget id="archives-2"]
              • [do_widget id="categories-2"]
              • [do_widget id="meta-2"]
            • [do_widget_area upper-footer-2]
              • [do_widget_area upper-footer-3]
                • [do_widget_area upper-footer-4]
                  • [do_widget_area widgets_for_shortcodes]
                    • [do_widget id="search-5"]
                    • [do_widget id="ai_widget-6"]
                  • [do_widget_area wp_inactive_widgets]
                    • [do_widget id="wpp-2"]
                    • [do_widget id="text-1"]
                    • [do_widget id="recent-posts-3"]
                    • [do_widget id="categories-3"]
                    • [do_widget id="archives-3"]
                    • [do_widget id="icl_lang_sel_widget-3"]

                  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.