2014-09-01 2 views
1

Я использую это расширение, чтобы предоставить скидку 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(); 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 

ответ

0

Я проверил ваш код, нет ничего плохого. Проблема должна быть где-то в другом месте. Может быть, вы переписали модель заказа клиента? В любом случае попытайтесь найти его, отключив функциональные возможности в файле конфигурации модуля один за другим.

решение
0

Got Заменить следующее:

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(); 
} 

с:

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($discount) + $ratdisc) * $item->getQty()); 
    $item->setBaseDiscountAmount($discount) * $item->getQty())->save(); 
} 

// $ скидка -> вы размер скидки

Смежные вопросы