2012-01-12 15 views
6

Sto cercando di verificare la presenza di nuovi ordini in Magento e, se esistono, inviare una fattura PDF agli amministratori del sito. Tutto è grande tranne il PDF.Generazione fattura PDF in Magento

Quando si tenta di creare esternamente fatture PDF, tutte le informazioni di fatturazione mancano dal PDF sottoposto a rendering. Creare la fattura è abbastanza semplice, ma trovare il motivo per cui mancano i dati di fatturazione è stato impossibile per me. Ecco cosa ho imparato.

Il mio codice per la creazione della fattura PDF reale è di seguito. Questo è lo stesso codice utilizzato nell'impostazione predefinita pdfinvoicesAction per creare PDF per il back-end di amministrazione (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(); 
?> 

Questo crea un PDF valido, contenente tutte le informazioni meno di fatturazione ordine. Isolando la causa di ciò, ho trovato che nel seguente file (predefinito), l'ordine delle informazioni di fatturazione è una stringa vuota - quando recupero la fattura tramite il back-end di Magento restituisce una stringa formattata contenente tutte le informazioni di fatturazione.

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); 

Ecco, questo è quello che accade. Non ho idea di come o perché. Il vero kicker? Nel mio script di cron job, se eseguo quanto segue:

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

Tutte le informazioni di pagamento sono disponibili.

L'ho chiesto nel forum di sviluppo del sito Magento senza fortuna. Spero davvero che qualcuno possa contribuire a far luce su questo problema, in quanto ho esaurito i miei sforzi di debug. Grazie mille.

Modifica: Ho appena scoperto che mentre Mage::helper('payment')->getInfoBlock($order->getPayment())->setIsSecureMode(true)->toHtml() restituisce un codice HTML formattato correttamente. ->toPdf non restituisce ancora nulla.

risposta

2

Beh, spero che questo aiuti qualcun altro. A volte, quando fai una domanda dettagliata, ti viene da pensare in modo più chiaro. Era una soluzione molto semplice, senza un chiaro messaggio di errore che indicava qual era il problema!

Magento utilizza due cartelle per i file modello adminhtml e frontend. Per impostazione predefinita, è disponibile solo un file .phtml per l'azione pdf helper dei dati di pagamento sul back-end . La mia sceneggiatura era in esecuzione sul front-end, non trovando questo file e l'output di una stringa vuota.

Così, in breve, se le fatture in formato PDF in Magento < = 1.6.1 mancano dati di fatturazione, quando rese sul front-end, prendere questo file:

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

Poi copia/incolla per :

app/design/frontend/base/default/template/paygate/info/pdf.phtml (o, se si preferisce, la directory modello personalizzato)

Col senno di poi, probabilmente dovrebbe usare il layout di back-end per i miei script cron.

Modifica: Oggi ho imparato a conoscere il file var/log/system.log in Magento ... (Ricalcando per maggiore chiarezza) Il file /var/log/system.log mi stava dicendo chiaramente qual era il problema, Ho appena omesso di leggerlo.

+0

Ho appena avuto lo stesso problema. Durante l'esecuzione di xdebug, ho notato che il PDF desidera caricare le informazioni di pagamento da questo file modello: frontend/base/default/template/payment/info/pdf/purchaseorder.phtml che non esiste in Magento predefinito. –

0

Ho provato la soluzione di Mahdi.Montgomery, ma non ha mai funzionato per me.

Il mio problema è quasi lo stesso, ma invece di mancare i dati di fatturazione, ho perso il metodo di pagamento. Ma il mio istinto è che la causa principale è la stessa: il modello PDF dell'amministratore e del frontend è diverso, il che non è molto intuitivo. Il mio istinto sembra avere ragione.

ho visto questo link da http://www.magentocommerce.com/boards/v/viewthread/463492/

Rispondendo alla mia domanda, si tratta di un bug di Magento, vedi http://www.magentocommerce.com/boards/{path:viewforum}/viewthread/270256/#t397540

Fix:

in frontend/base/default/template/pagamento/info, crea una cartella pdf e copia tutti i file .phtml.

Spero che questo aiuti qualcuno.

Problemi correlati