public function collect(Mage_Sales_Model_Order_Creditmemo $creditmemo) { $creditmemo->setGrandTotal($creditmemo->getGrandTotal() + $creditmemo->getPaymentFeeAmount() + $creditmemo->getPaymentFeeTax()); $creditmemo->setBaseGrandTotal($creditmemo->getBaseGrandTotal() + $creditmemo->getBasePaymentFeeAmount() + $creditmemo->getBasePaymentFeeTax()); return $this; }
public function collect(Mage_Sales_Model_Order_Creditmemo $creditmemo) { /** * Only option to receive the payment fee entered to modify the creditMemo refund fee. */ $order = $creditmemo->getOrder(); $data = $this->_getRequest('creditmemo'); // add Refunded amount to refunded $basePaymentFeeAmountRefunded = $order->getPayment()->getAdditionalInformation("base_payment_fee_amount_refunded"); $paymentFeeAmountRefunded = $order->getPayment()->getAdditionalInformation("payment_fee_amount_refunded"); $isPaymentFeeInclTax = Mage::getSingleton('adyen_fee/tax_config')->displaySalesPaymentFeeInclTax($order->getStoreId()); if ($this->_isLoggedIn()) { if ($data) { if (isset($data['adyen_fee_payment_fee_refund'])) { if ($data['adyen_fee_payment_fee_refund'] == '') { $data['adyen_fee_payment_fee_refund'] = 0; } $store = $order->getStore(); $refundAmount = $data['adyen_fee_payment_fee_refund']; $baseRefundAmount = $store->convertPrice($refundAmount, false); // if refundAmount is set to empty set amount to zero if ($refundAmount == 0 || $refundAmount == "") { $creditmemo->setPaymentFeeAmount(0); $creditmemo->setPaymentFeeTax(0); $creditmemo->setBasePaymentFeeAmount(0); $creditmemo->setBasePaymentFeeTax(0); $creditmemo->setGrandTotal($creditmemo->getGrandTotal() + $creditmemo->getPaymentFeeAmount() + $creditmemo->getPaymentFeeTax()); $creditmemo->setBaseGrandTotal($creditmemo->getBaseGrandTotal() + $creditmemo->getBasePaymentFeeAmount() + $creditmemo->getBasePaymentFeeTax()); return $this; } /* * if payment fee is incl tax remove the tax from the amount */ if ($isPaymentFeeInclTax && $refundAmount > 0) { $refundAmountInclTax = $refundAmount; $baseRefundAmountInclTax = $baseRefundAmount; // calculate tax // get base tax rate $basePaymentFeeAmount = Mage::app()->getStore()->roundPrice($order->getBasePaymentFeeAmount()); $basePaymentFeeTax = Mage::app()->getStore()->roundPrice($order->getBasePaymentFeeTax()); // get tax rate $paymentFeeAmount = Mage::app()->getStore()->roundPrice($order->getPaymentFeeAmount()); $paymentFeeTax = Mage::app()->getStore()->roundPrice($order->getPaymentFeeTax()); // tax rate $baseRate = $basePaymentFeeTax / $basePaymentFeeAmount; // rate is already in the amount so + 1 because example 21% = 121% = 1.21 $baseRate = $baseRate + 1; $rate = $paymentFeeTax / $paymentFeeAmount; // rate is already in the amount so + 1 because example 21% = 121% = 1.21 $rate = $rate + 1; // tax amount $baseRefundAmount = $baseRefundAmountInclTax / $baseRate; $refundAmount = $refundAmountInclTax / $rate; $baseRefundAmount = $store->convertPrice($baseRefundAmount, false); // tax amount $taxAmount = $refundAmountInclTax - $refundAmount; $baseTaxAmount = $baseRefundAmountInclTax - $baseRefundAmount; $creditmemo->setPaymentFeeAmount($refundAmount); $creditmemo->setBasePaymentFeeAmount($baseRefundAmount); $creditmemo->setGrandTotal($creditmemo->getGrandTotal() + $creditmemo->getPaymentFeeAmount() + $taxAmount); $creditmemo->setBaseGrandTotal($creditmemo->getBaseGrandTotal() + $creditmemo->getBasePaymentFeeAmount() + $baseTaxAmount); } else { // set amount $creditmemo->setPaymentFeeAmount($refundAmount); $baseRefundAmount = $store->convertPrice($refundAmount, false); $creditmemo->setBasePaymentFeeAmount($baseRefundAmount); // get base tax rate $basePaymentFeeAmount = Mage::app()->getStore()->roundPrice($order->getBasePaymentFeeAmount()); $basePaymentFeeTax = Mage::app()->getStore()->roundPrice($order->getBasePaymentFeeTax()); // get tax rate $paymentFeeAmount = Mage::app()->getStore()->roundPrice($order->getPaymentFeeAmount()); $paymentFeeTax = Mage::app()->getStore()->roundPrice($order->getPaymentFeeTax()); // tax rate $baseRate = $basePaymentFeeTax / $basePaymentFeeAmount; $rate = $paymentFeeTax / $paymentFeeAmount; // tax amount $baseTaxAmount = $refundAmount * $baseRate; $taxAmount = $refundAmount * $rate; $creditmemo->setGrandTotal($creditmemo->getGrandTotal() + $creditmemo->getPaymentFeeAmount() + $taxAmount); $creditmemo->setBaseGrandTotal($creditmemo->getBaseGrandTotal() + $creditmemo->getBasePaymentFeeAmount() + $baseTaxAmount); } // add fee to refunded variable so it can be substracten from open amount if ($basePaymentFeeAmountRefunded > 0) { $order->getPayment()->setAdditionalInformation("base_payment_fee_amount_refunded", $basePaymentFeeAmountRefunded + $baseRefundAmount); } else { $order->getPayment()->setAdditionalInformation("base_payment_fee_amount_refunded", $baseRefundAmount); } if ($paymentFeeAmountRefunded > 0) { $order->getPayment()->setAdditionalInformation("payment_fee_amount_refunded", $paymentFeeAmountRefunded + $refundAmount); } else { $order->getPayment()->setAdditionalInformation("payment_fee_amount_refunded", $refundAmount); } // do not do other logic return $this; } } } // Substract the already refunded amount off the GrandTotal and paymentFee amount. if ($basePaymentFeeAmountRefunded > 0) { $allowedRefundedAmount = $creditmemo->getPaymentFeeAmount() - $paymentFeeAmountRefunded; $allowedBasePaymentFeeAmount = $creditmemo->getBasePaymentFeeAmount() - $basePaymentFeeAmountRefunded; $creditmemo->setPaymentFeeAmount($allowedRefundedAmount); $creditmemo->setBasePaymentFeeAmount($allowedBasePaymentFeeAmount); $creditmemo->setGrandTotal($creditmemo->getGrandTotal() + $allowedRefundedAmount + $creditmemo->getPaymentFeeTax()); $creditmemo->setBaseGrandTotal($creditmemo->getBaseGrandTotal() + $allowedBasePaymentFeeAmount + $creditmemo->getBasePaymentFeeTax()); } else { $creditmemo->setGrandTotal($creditmemo->getGrandTotal() + $creditmemo->getPaymentFeeAmount() + $creditmemo->getPaymentFeeTax()); $creditmemo->setBaseGrandTotal($creditmemo->getBaseGrandTotal() + $creditmemo->getBasePaymentFeeAmount() + $creditmemo->getBasePaymentFeeTax()); } return $this; }