Мне нужно позвонить в сторонний API, чтобы получить актуальность Обязанности / налоги для международной доставки в течение этапа обзора процесса оформления заказа. У меня есть API-вызов, готовый к работе, но мне не хватает способа добавить возвращенные пошлины и налоги в цитату.
Есть ли встроенный способ сделать это?
я надеюсь, что есть что-то вроде
$quote->addCostComponent("Duties", 5.0);
Вам необходимо выполнить следующие действия:
Прежде всего, вам нужно создать атрибуты для ваших таможенных пошлин / налогов для их отображения в порядке, а не только добавить к общей сумме. Должно быть не менее двух атрибутов для значения в валюте сайта (используется при base_
платежа, и у него должен быть префикс base_
) и одно значение в отображаемой валюте (используется только для отображения суммы в желаемой валюте для клиента). Эти атрибуты должны быть добавлены к каждому объекту с финансовой частью (quote_address, order, invoice). Например, это должно быть: base_your_attribute_code
и your_attribute_code
с десятичным типом.
Затем вам нужно создать общую модель коллекционера, которая должна быть расширена с 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() )); } } }
После создания модели коллектора вам необходимо добавить ее в конфигурацию:
<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>
тем<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>
тем<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>
Вам нужно добавить свои общие атрибуты к наборам полей, которые будут использоваться для копирования данных в заказ или счет-фактуру:
<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>
После выполнения этих шагов вы сможете увидеть свой таможенный сбор в порядке сумм