Хорошо, я создал пользовательский класс Total для добавления специальной скидки, и все, кажется, работает нормально, за исключением того, что по какой-то причине я не могу найти, мой итог рассчитывается дважды!Это приводит к двойной сумме скидки и неверной итоговой сумме.Теперь это происходит на странице корзины и на страницах оформления заказа ... НО ... когда я выполняю заказ, общая сумма рассчитывается только один раз, а общая сумма - в порядке.
Странно, что метод сбора вызывается дважды для страниц корзины, но только один раз при завершении заказа, но я могу «отследить, где все это происходит и почему.
пропустите ненужный код, я вставлю только важные
<sales>
<quote>
<totals>
<mydiscount>
<class>ucon_mydiscount/total_mydiscount</class>
<before>subtotal</before>
</mydiscount>
</totals>
</quote>
</sales>
и методы сборщика
public function collect(Mage_Sales_Model_Quote_Address $address)
{
parent::collect($address);
$quote = $address->getQuote();
$quoteId = $quote->getEntityId();
$items = $quote->getAllItems();
if (!count($items)) {
return $this;
}
$discount = 0;
$productId = 2556;
foreach($items as $item)
{
if($item->getProduct()->getId() == $productId)
{
$qty = $item->getQty();
$totalPrice = round(($item->getRowTotal()+$item->getTaxAmount()),2);
//discount 10%
$discount = round($totalPrice * 0.1,2);
$discount = 0 - $discount;
}
}
if($discount == 0)
return $this;
$this->_setAmount($discount);
$this->_setBaseAmount($discount);
return $this;
}
и сборщик
public function fetch(Mage_Sales_Model_Quote_Address $address)
{
$amount = $address->getMydiscountAmount();
if ($amount != 0) {
$title = Mage::helper('ucon_mydiscount')->__('My discount');
$address->addTotal(array(
'code' => $this->getCode(),
'title' => $title,
'value' => $amount
));
}
return $this;
}
редактировать: еще одна вещь, которую янайти очень странно - я делаю setValue в моем методе collect, а не addValue, поэтому даже если метод вызывается дважды, он не должен быть двойным значением, он просто должен дважды установить правильное значение.