Неустранимая ошибка: Вызов функции-члена getPdf() для не-объекта в controllersMageAdminhtmlSalesOrderController.php


Я получаю следующую ошибку в модуле, который разрабатывается для печати пользовательского счета-фактуры/pdf. Код работает до части контроллера, но когда он пытается вызвать модель, там возникает ошибка.

Я не собираюсь перезаписывать основную модель, поскольку предполагается, что старый счет-фактура должен работать как есть, а новая печать складского заказа массового действия должна генерировать новый тип PDF. Пожалуйста, помогите со следующим кодом, я застрял без подсказок!

Fatal error: Call to a member function getPdf() on a non-object in C:\wamp\www\Goku\app\code\local\Goku\Ordersexporter\controllers\Mage\Adminhtml\Sales\OrderController.php on line 332

Структура модуль

app-
  |-code
    |-local
        |-Goku
            |-Ordersexporter
                |-Block
                |   |-Mage
                |       |-Adminhtml
                |           |-Sales
                |               |-Order
                |                   |-Grid.php
                |-controllers
                |   |-Mage
                |       |-Adminhtml
                |           |-Sales
                |               |-OrderController.php
                |-etc
                |   |-config.xml
                |-Model
                    |-Order
                        |-Pdf
                            |-Invoice.php

1) grid.php

class Goku_Ordersexporter_Block_Mage_Adminhtml_Sales_Order_Grid extends Mage_Adminhtml_Block_Sales_Order_Grid
{
    public function __construct()
    {
        parent::__construct();
    }

    protected function _prepareMassaction()
    {

        $this->getMassactionBlock()->addItem('Goku_warehouseOrderPrint', array(
            'label' => Mage::helper('sales')->__('Warehouse Order Sheet'),
            'url' => $this->getUrl('*/sales_order/Goku_warehouseOrderPrint'),
        ));

        parent::_prepareMassaction();
        return $this;
    }
}

2) OrderController.php

$defController = Mage::getBaseDir()
    . DS . 'app' . DS . 'code' . DS . 'core'
    . DS . 'Mage' . DS . 'Adminhtml' . DS . 'controllers'
    . DS . 'Sales' . DS . 'OrderController.php';

require_once $defController;

class Goku_Ordersexporter_Mage_Adminhtml_Sales_OrderController extends Mage_Adminhtml_Sales_OrderController
{
    public function Goku_warehouseOrderPrintAction()
    {
        $orderIds = $this->getRequest()->getPost('order_ids');
        $flag = false;
        if (!empty($orderIds)) {
            foreach ($orderIds as $orderId) {
                $invoices = Mage::getResourceModel('sales/order_invoice_collection')
                    ->setOrderFilter($orderId)
                    ->load();
                if ($invoices->getSize() > 0) {
                    $flag = true;
                    if (!isset($pdf)) {
                        $pdf = Mage::getModel('Goku_Ordersexporter/order_pdf_invoice')->getPdf($invoices);
                    } else {
                        $pages = Mage::getModel('Goku_Ordersexporter/order_pdf_invoice')->getPdf($invoices);
                        $pdf->pages = array_merge($pdf->pages, $pages->pages);
                    }
                }
            }
            if ($flag) {
                return $this->_prepareDownloadResponse(
                    'invoice' . Mage::getSingleton('core/date')->date('Y-m-d_H-i-s') . '.pdf', $pdf->render(),
                    'application/pdf'
                );
            } else {
                $this->_getSession()->addError($this->__('There are no printable documents related to selected orders.'));
                $this->_redirect('*/*/');
            }
        }
        $this->_redirect('*/*/');
    }
}

3) config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Goku_Ordersexporter>
            <version>1.0.0.0</version>
        </Goku_Ordersexporter>
    </modules>

    <global>
        <blocks>
            <adminhtml>
                <rewrite>
                    <sales_order_grid>Goku_Ordersexporter_Block_Mage_Adminhtml_Sales_Order_Grid</sales_order_grid>
                </rewrite>
            </adminhtml>
        </blocks>
        <models>
            <Goku_Ordersexporter>
                <class>Goku_Ordersexporter_Model</class>
            </Goku_Ordersexporter>
        </models>
    </global>

    <admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <Goku_Ordersexporter before="Mage_Adminhtml">Goku_Ordersexporter_Mage_Adminhtml</Goku_Ordersexporter>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>

</config>

4) Invoice.php

class Goku_Ordersexporter_Mage_Sales_Model_Order_Pdf_Invoice extends Mage_Sales_Model_Order_Pdf_Invoice
{
    public function getPdf($invoices = array())
    {
        $this->_beforeGetPdf();
        $this->_initRenderer('invoice');

        $pdf = new Zend_Pdf();
        $this->_setPdf($pdf);
        $style = new Zend_Pdf_Style();
        $this->_setFontBold($style, 10);

        foreach ($invoices as $invoice) {
            if ($invoice->getStoreId()) {
                Mage::app()->getLocale()->emulate($invoice->getStoreId());
                Mage::app()->setCurrentStore($invoice->getStoreId());
            }
            $page  = $this->newPage();
            $order = $invoice->getOrder();
            /* Add image */
            $this->insertLogo($page, $invoice->getStore());
            /* Add address */
            $this->insertAddress($page, $invoice->getStore());
            /* Add head */
            $this->insertOrder(
                $page,
                $order,
                Mage::getStoreConfigFlag(self::XML_PATH_SALES_PDF_INVOICE_PUT_ORDER_ID, $order->getStoreId())
            );
            /* Add document text and number */
            $this->insertDocumentNumber(
                $page,
                Mage::helper('sales')->__('Invoice # ') . $invoice->getIncrementId()
            );
            /* Add table */
            $this->_drawHeader($page);
            /* Add body */
            foreach ($invoice->getAllItems() as $item){
                if ($item->getOrderItem()->getParentItem()) {
                    continue;
                }
                /* Draw item */
                $this->_drawItem($item, $page, $order);
                $page = end($pdf->pages);
            }
            /* Add totals */
            $this->insertTotals($page, $invoice);
            if ($invoice->getStoreId()) {
                Mage::app()->getLocale()->revert();
            }
        }
        $this->_afterGetPdf();
        return $pdf;
    }

    public function newPage(array $settings = array())
    {
        /* Add new table head */
        $page = $this->_getPdf()->newPage(Zend_Pdf_Page::SIZE_A4);
        $this->_getPdf()->pages[] = $page;
        $this->y = 800;
        if (!empty($settings['table_header'])) {
            $this->_drawHeader($page);
        }
        return $page;
    }
}
Author: Keshav Gupta, 2014-09-27

1 answers

Класс в Invoice.php не создавался экземпляр. При изменении структуры каталогов модуля я забыл изменить имя класса в Invoice.php

Решение было: измененный-> класс Goku_Ordersexporter_Mage_Sales_Model_Order_Pdf_Invoice расширяет класс mage_sales_model_order_pdf_invoice

Для -> класс Goku_Ordersexporter_Model_Order_Pdf_Invoice расширяет возможности mage_sales_model_order_pdf_invoice

И это сработало:) Надеюсь, это кому-нибудь поможет.

 0
Author: Keshav Gupta, 2014-09-27 08:48:54