Я использую это расширение, чтобы предоставить скидку 5% всем подписчикам на рассылку новостей, его работающий штраф, но единственная ошибка, которую я получил, - это когда я смотрю заказ в magento backend, это говорит Итого в £ 0,01, а также в мировой истории оплаты транзакций это говорит общая сумма заказа £ 5,43Общее количество недействительных платежей в magento, имеющих Total Due £ 0,01
Итого £ 2,85 Доставка & Handling £ 2,59 Скидка (5% скидкой Итог) £ 2,71 налога на £ 0,14 Гранд Всего £ 5,44 Общая сумма оплаченных £ 5,43 Общая сумма возмещения £ 0,00 Всего должностей £ 0,01
Ниже приведен код для расширения я использую:
<?php
class Sugarcode_Customdiscount_Model_Observer
{
public function setDiscount($observer)
{
if(isset($_SESSION["subscribed_customer"]))
{
$subscriber = Mage::getModel('newsletter/subscriber')->loadByEmail($_SESSION["subscribed_customer"]);
$isSubscribed = "";
if($subscriber->getId())
{
$isSubscribed = $subscriber->getData('subscriber_status') == Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED;
if($isSubscribed)
{
$quote = $observer->getEvent()->getQuote();
$quoteid = $quote->getId();
//$total = $quote->getGrandTotal();
$total = $quote->getSubtotal();
$discountAmount = number_format(($total - $total/1.05), 2);
if($quoteid)
{
if($discountAmount > 0)
{
$total = $quote->getBaseSubtotal();
$quote->setSubtotal(0);
$quote->setBaseSubtotal(0);
$quote->setSubtotalWithDiscount(0);
$quote->setBaseSubtotalWithDiscount(0);
$quote->setGrandTotal(0);
$quote->setBaseGrandTotal(0);
$canAddItems = $quote->isVirtual() ? ('billing') : ('shipping');
foreach($quote->getAllAddresses() as $address)
{
$address->setSubtotal(0);
$address->setBaseSubtotal(0);
$address->setGrandTotal(0);
$address->setBaseGrandTotal(0);
$address->collectTotals();
$quote->setSubtotal((float) $quote->getSubtotal() + $address->getSubtotal());
$quote->setBaseSubtotal((float) $quote->getBaseSubtotal() + $address->getBaseSubtotal());
$quote->setSubtotalWithDiscount((float) $quote->getSubtotalWithDiscount() + $address->getSubtotalWithDiscount());
$quote->setBaseSubtotalWithDiscount((float) $quote->getBaseSubtotalWithDiscount() + $address->getBaseSubtotalWithDiscount());
$quote->setGrandTotal((float) $quote->getGrandTotal() + $address->getGrandTotal());
$quote->setBaseGrandTotal((float) $quote->getBaseGrandTotal() + $address->getBaseGrandTotal());
$quote->save();
$quote->setGrandTotal($quote->getBaseSubtotal() - $discountAmount)
->setBaseGrandTotal($quote->getBaseSubtotal() - $discountAmount)
->setSubtotalWithDiscount($quote->getBaseSubtotal() - $discountAmount)
->setBaseSubtotalWithDiscount($quote->getBaseSubtotal() - $discountAmount)
->save();
if($address->getAddressType() == $canAddItems)
{
$address->setSubtotalWithDiscount((float) $address->getSubtotalWithDiscount() - $discountAmount);
$address->setGrandTotal((float) $address->getGrandTotal() - $discountAmount);
$address->setBaseSubtotalWithDiscount((float) $address->getBaseSubtotalWithDiscount() - $discountAmount);
$address->setBaseGrandTotal((float) $address->getBaseGrandTotal() - $discountAmount);
// When Mageno Promo Code is used
if($address->getDiscountDescription())
{
$address->setDiscountAmount(($address->getDiscountAmount() - $discountAmount));
//$address->setDiscountAmount($total - $discountAmount);
$address->setDiscountDescription($address->getDiscountDescription());
//$address->setBaseDiscountAmount($total - $discountAmount);
$address->setBaseDiscountAmount(-($address->getBaseDiscountAmount() - $discountAmount));
}
// When Subscribed Customer 5% discount is used
else
{
//$address->setDiscountAmount(-($discountAmount));
$address->setDiscountAmount($total - $discountAmount);
$address->setDiscountDescription("5% Discounted Subtotal");
$address->setBaseDiscountAmount($total - $discountAmount);
//$address->setBaseDiscountAmount(-($discountAmount));
}
$address->save();
}
}
foreach($quote->getAllItems() as $item)
{
//We apply discount amount based on the ratio between the GrandTotal and the RowTotal
$rat = $item->getPriceInclTax()/$total;
$ratdisc = $discountAmount * $rat;
$item->setDiscountAmount(($item->getDiscountAmount() + $ratdisc) * $item->getQty());
$item->setBaseDiscountAmount(($item->getBaseDiscountAmount() + $ratdisc) * $item->getQty())->save();
}
}
}
}
}
}
}
}