Magento: добавление пошлин / налогов к цитате во время проверки - PullRequest
7 голосов
/ 02 февраля 2011

Мне нужно позвонить в сторонний API, чтобы узнать последние пошлины / налоги на международную доставку на этапе проверки процесса оформления заказа. У меня есть готовый вызов API, однако мне не хватает способа добавить возвращенные пошлины и налоги в предложение.

Есть ли встроенный способ сделать это?

я надеюсь, что есть что-то вроде

$quote->addCostComponent("Duties", 5.0);

1 Ответ

15 голосов
/ 02 февраля 2011

Вам необходимо выполнить следующие шаги:

  1. Прежде всего вам нужно создать атрибуты для ваших таможенных пошлин / налогов для их отображения по порядку, а не просто добавить к общему итогу,Должно быть не менее двух атрибутов: один для значения в валюте веб-сайта (используется при захвате платежа и должен иметь префикс base_) и одно значение в отображаемой валюте (используется только для отображения суммы в желаемой валюте для клиента).Эти атрибуты должны быть добавлены к каждому объекту с финансовой частью (quote_address, order, invoice).Например, это должно быть: base_your_attribute_code и your_attribute_code с десятичным типом.

  2. Затем вам нужно создать вашу общую модель коллектора, которая должна быть расширена из Mage_Sales_Model_Quote_Address_Total_Abstract и реализовать методы сбора и выборки, такие какв этом примере:

    /**
     * Your custom total model
     *
     */
    class Your_Module_Model_Total_Custom extends Mage_Sales_Model_Quote_Address_Total_Abstract
    {
        /** 
         * Constructor that should initiaze 
         */
        public function __construct()
        {
            $this->setCode('your_attribute_code');
        }
    
        /**
         * Used each time when collectTotals is invoked
         * 
         * @param Mage_Sales_Model_Quote_Address $address
         * @return Your_Module_Model_Total_Custom
         */
        public function collect(Mage_Sales_Model_Quote_Address $address)
        {
            parent::collect($address);
    
            // ... Some your api calls to retrive amount ...
    
            // Set base amount of your custom fee
            $this->_setBaseAmount($calculatedAmount);
    
            // Set amount of your custom fee in displayed currency
            $this->_setAmount(
                $address->getQuote()->getStore()->convertPrice($calculatedAmount, false)
            );
    
            return $this;
        }
    
        /**
         * Used each time when totals are displayed
         * 
         * @param Mage_Sales_Model_Quote_Address $address
         * @return Your_Module_Model_Total_Custom
         */
        public function fetch(Mage_Sales_Model_Quote_Address $address)
        {
            // Display total only if it is not zero
            if ($address->getYourAttributeCode() != 0) {
                $address->addTotal(array(
                    'code' => $this->getCode(),
                    'title' => 'My Custom Duty',
                    'value' => $address->getYourAttributeCode()
                ));
            }
        }
    }
    
  3. После создания модели коллектора необходимо добавить ее в конфигурацию:

    <config>
        <global>
            <sales>
                <quote>
                    <totals>
                        <your_total_code>
                            <class>your_module/total_custom</class>
                            <before>grand_total</before>
                            <after>shipping</after>
                        </your_total_code>
                    </totals>
                </quote>
            </sales>
        </global>
    </config>
    
    • class *Узел 1022 * содержит псевдоним класса вашей модели коллектора
    • до и после узлы указывают порядок вызовов вашего коллектора.
  4. Вам необходимо добавить свои общие атрибуты в наборы полей, которые будут использоваться для копирования рассчитанных данных в заказ или счет:

    <config>
        <global>
            <fieldsets>
                <!-- copies data from quote address to order during the order placement -->
                <sales_convert_quote_address>
                    <base_your_attribute_code><to_order>*</to_order></base_your_attribute_code>
                    <your_attribute_code><to_order>*</to_order></your_attribute_code>
                </sales_convert_quote_address>
    
                <!-- copies data from order to invoice/shipment/creditmemo during their creation -->
                <sales_convert_order>
                    <base_your_attribute_code><to_invoice>*</to_invoice><to_shipment>*</to_shipment><to_cm>*</to_cm></base_your_attribute_code>
                    <your_attribute_code><to_invoice>*</to_invoice><to_shipment>*</to_shipment><to_cm>*</to_cm></your_attribute_code>
                </sales_convert_order>
    
            </fieldsets>
        </global>
    </config>
    
  5. После выполнения этих действий вы будетебыть в состоянии увидеть ваш таможенный сбор в сумме заказа

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