Я создал итоговый заказ, который дает скидку в определенных ситуациях.Общая сумма всегда получается правильной, однако при расчете налога с продаж моя скидка не учитывается при расчете (поэтому, если я предоставлял скидку в размере 10 долларов США, сумма налога с продаж рассчитывалась на всю сумму до моей скидки).
Возьмем, к примеру, следующее:
Subtotal: $856.49
Multi Unit Discounts: -$22.50
Shipping: $10.96
Tax: $52.05
Grand Total: $897.00
Моя специальная скидка - это скидки на несколько единиц.Ставка налога составляет 6%.Как вы можете видеть, итоговая сумма является правильной на основе всех позиций, но сама сумма налога не является правильной (она основана на всех позициях, кроме моей скидки).
В моем файле config.xmlУ меня есть следующее, чтобы получить мой общий заказ, работающий в системе:
<sales>
<quote>
<totals>
<mud>
<class>Wpe_Multiunitdiscount_Model_Multiunitdiscount</class>
<before>tax</before>
</mud>
</totals>
</quote>
</sales>
Ниже приводится содержание моего общего класса заказов:
class Wpe_Multiunitdiscount_Model_Multiunitdiscount extends Mage_Sales_Model_Quote_Address_Total_Abstract {
public function collect(Mage_Sales_Model_Quote_Address $address) {
if ($address->getData('address_type')=='billing') return $this;
$items = $address->getAllItems();
$total_discount = 0;
foreach($items as $item) {
$product_discounts = Mage::helper("multiunitdiscount")->findDiscounts($item);
if($product_discounts > 0) {
$total_discount += $product_discounts;
}
}
$address->setMudAmount($total_discount);
$address->setGrandTotal($address->getGrandTotal() - $address->getMudAmount() );
$address->setBaseGrandTotal($address->getBaseGrandTotal() - $address->getMudAmount());
return $this;
}
public function fetch(Mage_Sales_Model_Quote_Address $address) {
if ($address->getData('address_type')=='billing') return $this;
if($address->getMudAmount() > 0) {
$address->addTotal(array(
'code' => $this->getCode(),
'title' => Mage::helper('sales')->__('Multi Unit Discounts'),
'value' => -$address->getMudAmount(),
));
}
return $this;
}
}
Чтобы не размещать здесь огромный кусок кода, в котором я не уверен, что это необходимо, я могу вам сказать, что помощник в приведенном выше коде просто возвращает сумму денег, на которую предоставляется скидка для этого конкретного элемента в цитате.
Может ли кто-нибудь помочь мне указать правильное направление для правильного расчета налога с продаж?
РЕДАКТИРОВАТЬ:
Для простоты я удалил большую часть своихлогика расчета скидки, и теперь я пытаюсь просто взять 10 $ от общей суммы заказа в качестве скидки.Как и предполагалось, я не изменил общую сумму адреса и теперь только устанавливаю сумму скидки и базовую сумму скидки.Теперь налог с продаж не складывается, и общая сумма не учитывается.Может быть, если есть хороший учебник, на который кто-то может указать мне, поможет?Кажется, я не понимаю, как все суммы ордеров взаимодействуют друг с другом.
public function collect(Mage_Sales_Model_Quote_Address $address) {
if ($address->getData('address_type')=='billing') return $this;
$address->setMudDiscount(10);
$address->setDiscountAmount($address->getDiscountAmount() + $address->getMudDiscount());
$address->setBaseDiscountAmount($address->getBaseDiscountAmount() + $address->getMudDiscount());
return $this;
}
public function fetch(Mage_Sales_Model_Quote_Address $address) {
if ($address->getData('address_type')=='billing') return $this;
$address->addTotal(array(
'code' => $this->getCode(),
'title' => Mage::helper('sales')->__('Multi Unit Discounts'),
'value' => -$address->getMudDiscount(),
));
return $this;
}