Magento - Общая сумма будет выставлена ​​на счет - PullRequest
1 голос
/ 27 июля 2011

Когда покупатель покупает что-то в магазине Magento, он получает подтверждение по электронной почте, которое содержит строку внизу «Общая сумма, подлежащая оплате». Показывает итоги в базовой валюте магазинов.

Я хотел бы добавить эту цифру к счетам, которые распечатываются из бэкэнда. Как это можно сделать?

Ответы [ 2 ]

3 голосов
/ 08 июля 2012

Посмотрим, что происходит. Как мы видим из 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

2 голосов
/ 09 июля 2012

Короче говоря, все, что вам нужно сделать, это добавить немного XML:

<global>
    <pdf>
       <totals>
            <mygrand_total translate="title">
                <title>Grand Total To Be Charged</title>
                <source_field>base_grand_total</source_field>
                <font_size>8</font_size>
                <display_zero>1</display_zero>
                <sort_order>705</sort_order>
            </mygrand_total>
       </totals>
    </pdf>
</global>

Я бы создал отдельный модуль в app/code/local/Yourcompanyname/PDFBasetotal и включил бы его через etc/modules/, после чего создал бы config.xml файл в Yourcompanyname/PDFBasetotal/etc/, здесь я бы добавил приведенный выше XML, чтобы избежать какого-либо касания основных функций. 1008 *

Относительно того, почему это работает, см. Метод из файла ниже: app/code/core/Mage/Sales/Model/Order/Pdf/Abstract.php

Обратите внимание на $totals = Mage::getConfig()->getNode('global/pdf/totals')->asArray();, поскольку это то, что зацикливается при создании общего вывода.

protected function _getTotalsList($source)
{
    $totals = Mage::getConfig()->getNode('global/pdf/totals')->asArray();
    usort($totals, array($this, '_sortTotalsList'));
    $totalModels = array();
    foreach ($totals as $index => $totalInfo) {
        if (!empty($totalInfo['model'])) {
            $totalModel = Mage::getModel($totalInfo['model']);
            if ($totalModel instanceof Mage_Sales_Model_Order_Pdf_Total_Default) {
                $totalInfo['model'] = $totalModel;
            } else {
                Mage::throwException(
                    Mage::helper('sales')->__('PDF total model should extend Mage_Sales_Model_Order_Pdf_Total_Default')
                );
            }
        } else {
            $totalModel = Mage::getModel($this->_defaultTotalModel);
        }
        $totalModel->setData($totalInfo);
        $totalModels[] = $totalModel;
    }

    return $totalModels;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...