Thêm tổng mới vào tổng số lớn bằng cách sử dụng trình quan sát trong Magento?


9

Tôi muốn thêm một số tiền vào tổng Grand trong Magento. Vì vậy, trong trang thanh toán, phần đánh giá đơn hàng sẽ như thế này:

nhập mô tả hình ảnh ở đây Phụ phí này sẽ phụ thuộc vào một số điều kiện.

Câu hỏi của tôi là: Làm thế nào tôi có thể thay đổi tổng số lớn trong trang thanh toán? Đối với điều này, những gì tôi đã làm là: Tôi tạo ra một mô-đun. Vui lòng xem mã của tôi:

ứng dụng / mã / cục bộ / Locwiseship / Customprice / etc / config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Locwiseship_Customprice>
            <version>1.0.10</version>
        </Locwiseship_Customprice>
    </modules>
    <global>
        <events>
            <!-- Création éventuelle du lien de parrainage lors de la commande -->
            <sales_quote_collect_totals_after>
                <observers>
                    <set_custom_price_locwiseship>
                        <type>singleton</type>
                        <class>Locwiseship_Customprice_Model_Sales_Quote_Address_Total_Mytotal</class>
                        <method>collect</method>
                        <method>fetch</method>
                    </set_custom_price_locwiseship>
                </observers>
            </sales_quote_collect_totals_after>
        </events>
    </global>
</config>

ứng dụng / mã / cục bộ / Locwiseship / Customprice / Model / Observer.php

<?php

/**
 * @category   Locwiseship
 * @package    Locwiseship_Customprice
 */
class Locwiseship_Customprice_Model_Sales_Quote_Address_Total_Mytotal
    extends Mage_Sales_Model_Quote_Address_Total_Abstract
{
    public function __construct()
    {
        $this->setCode('mytotal');
    }

    public function collect(Mage_Sales_Model_Quote_Address $address)
    {
        parent::collect($address);

        foreach ($this->_getAddressItems($address) as $item) {
            // These two lines represent whatever logic you're 
            // using to calculate these amounts
            $baseAmt = 10;
            $amt = 10;

            // Set the item's total
            $item->setBaseMytotalAmount($baseAmt);
            $item->setMytotalAmount($amt);

            // These methods automatically take care of summing 
            // "mytotal_amount" on the quote address
            $this->_addBaseAmount($baseAmt);
            $this->_addAmount($amt);
        }
        return $this;
    }

    public function fetch(Mage_Sales_Model_Quote_Address $address)
    {
        // Naturally, this exists on the quote address because "collect" ran already
        $amt = $address->getMytotalAmount();

        if ($amt != 0) {
            $address->addTotal(array(
                'code' => $this->getCode(),
                'title' => Mage::helper('Locwiseship_Customprice')->__('My Total'),
                'value' => $amt
            ));
        }
        return $this;
    }
}

ứng dụng / etc / mô-đun / Locwiseship_Customprice.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Locwiseship_Customprice>
            <active>true</active>
            <codePool>local</codePool>
        </Locwiseship_Customprice>
    </modules>
</config>

Người Thái là mã của tôi. Nhưng không có gì xảy ra .. Điều này không hiệu quả .. Đây có phải là cách tiếp cận chính xác? Làm thế nào tôi có thể làm cho điều này làm việc? Xin hãy giúp tôi .. Tôi đang sử dụng Magento 1.9.0.1


1
vui lòng làm theo các bước như trên excellencemagentoblog.com/magento-add-fee-discount-order-total
Abdul

Câu trả lời:


1

Tôi sẽ không đề nghị làm điều này với một người quan sát. Bạn nên thêm tổng số mới này dưới dạng một cột mới sales_flat_quotesales_flat_order(bạn cũng có thể thêm cột mới này vào hóa đơn và tín dụng).

Đây là những gì tôi đã làm khi tôi cần thêm tổng cộng để hiển thị tín dụng của khách hàng. Trong config.xmlbạn cần thêm điều này:

<blocks>
    <customercredit>
        <class>Company_Customercredit_Block</class>
    </customercredit>

    <adminhtml>
        <rewrite>
            <sales_order_totals>Company_Customercredit_Block_Adminhtml_Sales_Order</sales_order_totals>
            <sales_order_invoice_totals>Company_Customercredit_Block_Adminhtml_Sales_Invoice</sales_order_invoice_totals>
            <sales_order_creditmemo_totals>Company_Customercredit_Block_Adminhtml_Sales_Creditmemo</sales_order_creditmemo_totals>
        </rewrite>
    </adminhtml>

    <sales>
        <rewrite>
            <order_totals>Company_Customercredit_Block_Sales_Order</order_totals>
            <order_invoice_totals>Company_Customercredit_Block_Sales_Invoice</order_invoice_totals>
            <order_creditmemo_totals>Company_Customercredit_Block_Sales_Creditmemo</order_creditmemo_totals>
        </rewrite>
    </sales>
</blocks>

<fieldsets>
    <sales_convert_quote_address>
        <base_customer_credit>
            <to_order>*</to_order>
        </base_customer_credit>
        <customer_credit>
            <to_order>*</to_order>
        </customer_credit>
    </sales_convert_quote_address>
</fieldsets>

<sales>
    <quote>
        <totals>
            <customer_credit>
                <class>Company_Customercredit_Model_Sales_Credit</class>
                <after>subtotal,discount,shipping,tax</after>
                <before>grand_total</before>
            </customer_credit>
        </totals>
    </quote>

    <order_invoice>
        <totals>
            <customer_credit>
                <class>Company_Customercredit_Model_Sales_Invoice</class>
                <after>subtotal</after>
            </customer_credit>
        </totals>
    </order_invoice>

    <order_creditmemo>
        <totals>
            <customer_credit>
                <class>Company_Customercredit_Model_Sales_Creditmemo</class>
                <after>subtotal</after>
            </customer_credit>
        </totals>
    </order_creditmemo>
</sales>

Sau đó, các lớp khối của bạn sẽ trông như thế này:

class Company_Customercredit_Block_Adminhtml_Sales_Order extends Mage_Sales_Block_Order_Totals
{
    protected $_code = 'credit';

    protected function _initTotals()
    {
        $helper = $this->getCreditsHelper();
        parent::_initTotals();
        $creditAmount = $this->getOrder()->getCustomerCredit();
        $baseAmount = $this->getOrder()->getBaseCustomerCredit();

        if ($creditAmount != 0)
        {
            $this->addTotal(
                new Varien_Object(
                    array(
                        'code' => $this->_code,
                        'value' => -$creditAmount,
                        'base_value' => -$baseAmount,
                        'label' => $helper->__('Company Credit'),
                    )
                ));
        }
        return $this;
    }

    /**
     * Get credits helper.
     * @return Company_Customercredits_Helper_Data
     */
    protected function getCreditsHelper()
    {
        return Mage::helper('customercredit');
    }

}

Ở đây bạn có một số liên kết đẹp với một khám phá chi tiết hơn: http://www.classyllama.com/blog/unravelling-magentos-collecttotals-example http://astrio.net/blog/magento-development-add-total-row -Thủ tục thanh toán/

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.