Search code examples
prestashopprestashop-1.6

Prestashop: duplicate Invoice PDF with new tpl


How can I duplicate the Generate Invoice PDF Process in Prestashop? I want to use a different tpl file, but the rest should stay the same.

Let me explain, what I already did:

  1. HTMLTemplateInvoice as HTMLTemplateMahnung and changed Class Name.
  2. Added: const TEMPLATE_MAHNUNG = 'Mahnung'; to the file classes/pdf/PDF.php
  3. Created file mahnung.tpl in root/pdf folder
  4. Added to AdminPdfController.php:

    public function processGenerateMahnungPdf() {
    if (Tools::isSubmit('id_order')) {
        $this->generateMahnungPDFByIdOrder(Tools::getValue('id_order'));
    } elseif (Tools::isSubmit('id_order_invoice')) {
        $this->generateInvoicePDFByIdOrderInvoice(Tools::getValue('id_order_invoice'));
    } else {
        die(Tools::displayError('The order ID -- or the invoice order ID -- is missing.'));
    }}
    

AND

public function generateMahnungPDFByIdOrder($id_order)
{
    $order = new Order((int)$id_order);
    if (!Validate::isLoadedObject($order)) {
        die(Tools::displayError('The order cannot be found within your database.'));
    }

    $order_invoice_list = $order->getInvoicesCollection();
    Hook::exec('actionPDFInvoiceRender', array('order_invoice_list' => $order_invoice_list));
    $this->generatePDF($order_invoice_list, PDF::TEMPLATE_MAHNUNG);
}

But it's not working. It just doesn't generate the PDF.

Any help?

UPDATE

I had to include the class: require_once _PS_ROOT_DIR_ . '/classes/pdf/HTMLTemplateMahnung.php';

Now its working. Anybody knows why I had to this? I don't see any includes of Core Files :S


Solution

  • Pretashop uses the file cache/class_index.php to keep track of the classes it needs.

    Everytime you add a new override, or even a class or controller, you need to delete (or rename) this file. If it doesn't find it, Prestashop will recreate indexing all files in set folders (classes, controllers, overrides, and others).