Я хочу установить фиксированную ставку до промежуточного итога, который по умолчанию ниже промежуточного итога.Как установить фиксированную ставку до промежуточного итога во время проверки в magento
ответ
Как добавить дополнительную комиссию или скидку или оплату любого вида на заказ всего процесса оформления пурпурного торга В типичном порядке сумма заказов обычно включает в себя: Суб Всего, Стоимость доставки, Налоги, Скидка, на основании эти значения вычисляются общей суммой заказов. Эта дополнительная плата, которую мы добавляем в общей сложности будет отражать в
заказ Страница заказа Всего, Корзина Страница заказа Всего, Мои данные заказа Просмотр страницы, Print Order PDF, Заказать EMAILS, Администратор Заказать Просмотр/Электронная почта/PDF, Просмотр счета-фактуры администратора/Email/PDF, Просмотр кредитного кредита администратора/электронная почта/PDF.
Оформить заказ Страница Всего заказов Всего оснований Мы посмотрим, как добавить итоговые значения только на страницу оформления. Все итоговые позиции, отображающие страницу проверки, поступают из файлов, расположенных в папке Mage \ Sales \ Model \ Quote \ Address \ Total.
В пурпуре перед размещением заказа все данные заказа хранятся в объекте котировки и после его размещения он передается объекту заказа. Итоговые котировки следуют шаблону коллектора, и мы можем добавлять коллекторы как многие коллекционные классы. Для того, чтобы добавить коллектор к цитате объекту в нашем config.xml мы добавим линию
<global>
<sales>
<quote>
<totals>
<fee>
<class>fee/sales_quote_address_total_fee</class>
</fee>
</totals>
</quote>
</sales>
Это означает, что всякий раз, когда итоговые суммы рассчитываются для цитаты, это также называет этот класс.
Все коллекторы вызываются функцией collectTotals() в модели Quote.
В нашем классе коллектора мы помещаем в коде
<?php class Excellence_Fee_Model_Sales_Quote_Address_Total_Fee
расширяет Mage_Sales_Model_Quote_Address_Total_Abstract { защищенного $ _code = 'платы';
public function collect(Mage_Sales_Model_Quote_Address $address)
{
parent::collect($address);
$this->_setAmount(0);
$this->_setBaseAmount(0);
$items = $this->_getAddressItems($address);
if (!count($items)) {
return $this; //this makes only address type shipping to come through
}
$quote = $address->getQuote();
if(Excellence_Fee_Model_Fee::canApply($address)){ //your business logic
$exist_amount = $quote->getFeeAmount();
$fee = Excellence_Fee_Model_Fee::getFee();
$balance = $fee - $exist_amount;
$address->setFeeAmount($balance);
$address->setBaseFeeAmount($balance);
$quote->setFeeAmount($balance);
$address->setGrandTotal($address->getGrandTotal() + $address->getFeeAmount());
$address->setBaseGrandTotal($address->getBaseGrandTotal() + $address->getBaseFeeAmount());
}
}
public function fetch(Mage_Sales_Model_Quote_Address $address)
{
$amt = $address->getFeeAmount();
$address->addTotal(array(
'code'=>$this->getCode(),
'title'=>Mage::helper('fee')->__('Fee'),
'value'=> $amt
));
return $this;
}
} Здесь мы используем два поля FEE_AMOUNT и base_fee_amount, которые содержат нашу сумму гонорара. Мы должны видеть, сохранить эти два поля в базе данных, поэтому в нашем файле установщика модуля мы добавим этот код
ALTER TABLE `".$this->getTable('sales/quote_address')."` ADD `fee_amount` DECIMAL(10, 2) NOT NULL;
ALTER TABLE `".$this->getTable('sales/quote_address')."` ADD `base_fee_amount` DECIMAL(10, 2) NOT NULL;
Заказать страницу До сих пор весь код написан было сделано только для цитатой объекта. Но после размещения заказа нам нужно передать всю информацию в объект заказа. Как вы видели выше, мы используем два поля fee_amount и base_fee_amount, теперь нам нужно также сохранить эти два поля в таблице заказов. Чтобы сделать все вышеизложенное, нам нужно сделать две вещи. Во-первых, в файле config.xml добавьте этот код в закладке глобального,
<fieldsets>
<sales_convert_quote_address>
<fee_amount><to_order>*</to_order></fee_amount>
<base_fee_amount><to_order>*</to_order></base_fee_amount>
</sales_convert_quote_address>
</fieldsets>
в нашем модуле Установочный файл
ALTER TABLE `".$this->getTable('sales/order')."` ADD `fee_amount` DECIMAL(10, 2) NOT NULL;
ALTER TABLE `".$this->getTable('sales/order')."` ADD `base_fee_amount` DECIMAL(10, 2) NOT NULL;