2012-01-12 13 views
6

Estoy tratando de verificar si hay nuevos pedidos en Magento y si existen, envíe una factura en PDF a los administradores del sitio. Todo es genial a excepción del PDF.PDF Generación de facturas en Magento

Al tratar de crear externamente facturas PDF, toda la información de facturación falta en el PDF procesado. La creación de la factura es bastante sencilla, pero encontrar el motivo de la falta de información de facturación ha sido imposible para mí. Esto es lo que aprendí.

Mi código para crear la factura en PDF real se encuentra a continuación. Este es el mismo código utilizado en el predeterminado pdfinvoicesAction para crear archivos PDF para el administrador back-end (app/code/core/Mage/Adminhtml/controllers/Sales/OrderController.php:459).

cron/Invoice.php

<?php 
    /* $order is a valid Mage_Sales_Model_Order object */ 

    $invoices = $order->getInvoiceCollection(); 
    $pdfInvoice = Mage::getModel('sales/order_pdf_invoice'); 
    $pdf = $pdfInvoice->getPdf($invoices); 

    $pdfFile = $pdf->render(); 
?> 

Esto crea un archivo PDF válido, que contiene toda la información para menos de facturación. Aislando la causa de esto, encontré que en el siguiente archivo (predeterminado), la información de facturación de pedido es una cadena vacía: cuando recupero la factura a través del back-end de magento, esto devuelve una cadena formateada que contiene toda la información de facturación.

app/core/Mage/Sales/Model/Order/Pdf/Abstract.php:221

/* Payment */ 
    $paymentInfo = Mage::helper('payment')->getInfoBlock($order->getPayment()) 
     ->setIsSecureMode(true) 
     ->toPdf(); 

    // $paymentInfo is an empty string when rendering a PDF externally, 
    // and formatted as expected when rendering a PDF via the admin panel 

    $payment = explode('{{pdf_row_separator}}', $paymentInfo); 

Así que por qué está sucediendo. No tengo ni idea de cómo ni por qué. ¿El verdadero pateador? En mi script de trabajo cron, si ejecuto lo siguiente:

die(print_r($order->getPayment()->toArray())); 

Toda la información de pago está allí.

Lo he pedido en el foro de desarrollo del sitio web de Magento sin suerte. Realmente espero que alguien pueda ayudar a arrojar luz sobre este tema, ya que he agotado mis esfuerzos de depuración. Muchas gracias.

Editar: Acaba de descubrir que, si bien Mage::helper('payment')->getInfoBlock($order->getPayment())->setIsSecureMode(true)->toHtml() devuelve formato HTML correctamente. ->toPdf todavía no devuelve nada.

Respuesta

2

Bueno, espero que esto ayude a otra persona. A veces, cuando haces una pregunta detallada, te hace pensar con más claridad. ¡Era una solución muy simple, sin mensaje de error claro que indicaba cuál era el problema!

Magento utiliza dos carpetas para los archivos de plantilla adminhtml y frontend. De forma predeterminada, solo hay un archivo .phtml para la acción pdf de ayuda de datos de pago en el back-end. Mi secuencia de comandos era ejecutándose en el front-end, no encontrándose este archivo y generando una cadena vacía.

Así que en resumen, si sus facturas en PDF en Magento < = 1.6.1 faltan datos de facturación cuando se representa en el front-end, tome este archivo:

app/design/adminhtml/default/default/template/paygate/info/pdf.phtml

Luego de copiar/pegar a :

app/design/frontend/base/default/template/paygate/info/pdf.phtml (O si lo prefiere, el directorio de plantilla)

En retrospectiva, probablemente debería usar el diseño de fondo para mis scripts de cron.

Editar: Hoy aprendí sobre el archivo var/log/system.log en Magento ... (Reedición para mayor claridad) El archivo /var/log/system.log claramente me decía cuál era el problema, Simplemente no lo leí.

+0

Acabo de encontrarme con el mismo problema. Al avanzar en xdebug, noté que el PDF quiere cargar la información de pago de este archivo de plantilla: frontend/base/default/template/payment/info/pdf/purchaseorder.phtml que no existe en Magento por defecto. –

0

Probé la solución de @Mahdi.Montgomery, pero nunca funcionó para mí.

Mi problema es casi el mismo, pero en lugar de perder información de facturación, me falta el método de pago. Pero mi intuición es que la causa raíz es la misma: la plantilla PDF del administrador y la interfaz es diferente, lo cual no es muy intuitivo. Mi instinto me parece que está bien.

vi este enlace desde http://www.magentocommerce.com/boards/v/viewthread/463492/

responder a mi propia pregunta, es un error Magento, ver http://www.magentocommerce.com/boards/{path:viewforum}/viewthread/270256/#t397540

Fix:

en frontend/base/default/template/pago/info, crea una carpeta pdf y copia todos los archivos .phtml en ella.

Espero que esto ayude a alguien.

Cuestiones relacionadas