Посмотрим, что происходит.
Как мы видим из URL (www.example.com/index.php/admin/sales_invoice/view/invoice_id/[some_id]/) Mage_Adminhtml_Sales_Order_InvoiceController
view
действие выполнено, и это соответствует <adminhtml_sales_order_invoice_view>
узел макета (app / design / adminhtml / default / default / layout / sales.xml). Там мы можем видеть это:
<adminhtml_sales_order_invoice_view>
<reference name="content">
<block type="adminhtml/sales_order_invoice_view" name="sales_invoice_view">
...
Мы видим, что верхний блок - Mage_Adminhtml_Block_Sales_Order_Invoice_View
. Там мы можем увидеть (в конце __construct()
метод):
if ($this->getInvoice()->getId()) {
$this->_addButton('print', array(
'label' => Mage::helper('sales')->__('Print'),
'class' => 'save',
'onclick' => 'setLocation(\''.$this->getPrintUrl().'\')'
)
);
}
и
public function getPrintUrl()
{
return $this->getUrl('*/*/print', array(
'invoice_id' => $this->getInvoice()->getId()
));
}
Здесь мы видим, что наш PDF-файл счета-фактуры создается из действия print
текущего модуля / контроллера, поэтому давайте снова увидим Mage_Adminhtml_Sales_Order_InvoiceController
и ищем требуемый метод действия:
/**
* Create pdf for current invoice
*/
public function printAction()
{
$this->_initInvoice();
parent::printAction();
}
и у родителя Mage_Adminhtml_Controller_Sales_Invoice
:
public function printAction()
{
if ($invoiceId = $this->getRequest()->getParam('invoice_id')) {
if ($invoice = Mage::getModel('sales/order_invoice')->load($invoiceId)) {
$pdf = Mage::getModel('sales/order_pdf_invoice')->getPdf(array($invoice));
$this->_prepareDownloadResponse('invoice'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').
'.pdf', $pdf->render(), 'application/pdf');
}
}
else {
$this->_forward('noRoute');
}
}
Как мы видим, PDF создается моделью sales/order_pdf_invoice
(или Mage_Sales_Model_Order_Pdf_Invoice
класс) . Внутри getPdf()
метода есть вызов $this->insertTotals($page, $invoice);
, который определен в Mage_Sales_Model_Order_Pdf_Abstract
классе. Я предлагаю переписать класс Mage_Sales_Model_Order_Pdf_Invoice
и определить там собственный метод insertTotals($page, $invoice)
для достижения того, что вам нужно. Я решил дать полную картину ситуации, чтобы вы могли решить, как решить эту задачу.
Полезная ссылка - Переопределение модельного класса в Magento