I have added discount from a custom module that i made.I am giving the observer’s code below.Its working fine on the Cart page but tax is not getting added on Checkout Page. Getting paypal error: “PayPal gateway has rejected request. The totals of the cart item amounts do not match order amounts (#10413: Transaction refused because of an invalid argument. See additional error messages for details).” during checkout.
class Hs_Customcartdiscount_Model_Observer { const XML_PATH_MODULE_ENABLE = 'customcartdiscount/customcartdiscount_group/enable'; const XML_PATH_DISCOUNT_AMOUNT = 'customcartdiscount/customcartdiscount_group/discount'; public function setDiscount($ observer) { if(Mage::getStoreConfig(self::XML_PATH_MODULE_ENABLE)){ $ quote = $ observer->getEvent()->getQuote(); $ quoteid = $ quote->getId(); $ discountAmount =floor($ quote->getBaseSubtotal()/100) * Mage::getStoreConfig(self::XML_PATH_DISCOUNT_AMOUNT); 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) { //echo $ address->setDiscountAmount; exit; $ address->setSubtotalWithDiscount((float) $ address->getSubtotalWithDiscount() - $ discountAmount); $ address->setGrandTotal((float) $ address->getGrandTotal() - $ discountAmount); $ address->setBaseSubtotalWithDiscount((float) $ address->getBaseSubtotalWithDiscount() - $ discountAmount); $ address->setBaseGrandTotal((float) $ address->getBaseGrandTotal() - $ discountAmount); if ($ address->getDiscountDescription()) { $ address->setDiscountAmount(-($ address->getDiscountAmount() - $ discountAmount)); $ address->setDiscountDescription($ address->getDiscountDescription() . ', Custom Discount'); $ address->setBaseDiscountAmount(-($ address->getBaseDiscountAmount() - $ discountAmount)); } else { $ address->setDiscountAmount(-($ discountAmount)); $ address->setDiscountDescription('Custom Discount'); $ address->setBaseDiscountAmount(-($ discountAmount)); } $ address->save(); }//end: if } //end: foreach //echo $ quote->getGrandTotal(); 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(); } } } } }
}
two screenshots of cart page and checkout page: cart page checkout page
Please someone help me.