Example #1
0
 public function collect(Mage_Sales_Model_Order_Creditmemo $creditmemo)
 {
     $store = $creditmemo->getStore();
     $totalTax = 0;
     $baseTotalTax = 0;
     $weeeTaxAmount = 0;
     $baseWeeeTaxAmount = 0;
     foreach ($creditmemo->getAllItems() as $item) {
         $orderItem = $item->getOrderItem();
         if ($orderItem->isDummy()) {
             continue;
         }
         $orderItemQty = $orderItem->getQtyOrdered();
         $weeeRowDiscountAmount = $orderItem->getDiscountAppliedForWeeeTax();
         $weeeDiscountAmount = $creditmemo->roundPrice($weeeRowDiscountAmount / $orderItemQty * $item->getQty(), 'regular', true);
         $baseWeeeRowDiscountAmount = $orderItem->getBaseDiscountAppliedForWeeeTax();
         $baseWeeeDiscountAmount = $creditmemo->roundPrice($baseWeeeRowDiscountAmount / $orderItemQty * $item->getQty(), 'base', true);
         $weeeAmountExclTax = (Mage::helper('weee')->getWeeeTaxInclTax($item) - Mage::helper('weee')->getTotalTaxAppliedForWeeeTax($item)) * $item->getQty();
         $totalTax += $weeeAmountExclTax - $weeeDiscountAmount;
         $baseWeeeAmountExclTax = (Mage::helper('weee')->getBaseWeeeTaxInclTax($item) - Mage::helper('weee')->getBaseTotalTaxAppliedForWeeeTax($item)) * $item->getQty();
         $baseTotalTax += $baseWeeeAmountExclTax - $baseWeeeDiscountAmount;
         $item->setWeeeTaxAppliedRowAmount($weeeAmountExclTax);
         $item->setBaseWeeeTaxAppliedRowAmount($baseWeeeAmountExclTax);
         $weeeTaxAmount += Mage::helper('weee')->getWeeeTaxInclTax($item) * $item->getQty();
         $baseWeeeTaxAmount += Mage::helper('weee')->getBaseWeeeTaxInclTax($item) * $item->getQty();
         $newApplied = array();
         $applied = Mage::helper('weee')->getApplied($item);
         foreach ($applied as $one) {
             $one['base_row_amount'] = $one['base_amount'] * $item->getQty();
             $one['row_amount'] = $one['amount'] * $item->getQty();
             $one['base_row_amount_incl_tax'] = $one['base_amount_incl_tax'] * $item->getQty();
             $one['row_amount_incl_tax'] = $one['amount_incl_tax'] * $item->getQty();
             $one['weee_discount'] = $weeeDiscountAmount;
             $one['base_weee_discount'] = $baseWeeeDiscountAmount;
             $newApplied[] = $one;
         }
         Mage::helper('weee')->setApplied($item, $newApplied);
         $item->setWeeeTaxRowDisposition($item->getWeeeTaxDisposition() * $item->getQty());
         $item->setBaseWeeeTaxRowDisposition($item->getBaseWeeeTaxDisposition() * $item->getQty());
     }
     /*
      * please refer the description in weee - invoice section for reasoning
      */
     if (Mage::helper('weee')->includeInSubtotal($store)) {
         $creditmemo->setSubtotal($creditmemo->getSubtotal() + $totalTax);
         $creditmemo->setBaseSubtotal($creditmemo->getBaseSubtotal() + $baseTotalTax);
     } else {
         $creditmemo->setTaxAmount($creditmemo->getTaxAmount() + $totalTax);
         $creditmemo->setBaseTaxAmount($creditmemo->getBaseTaxAmount() + $baseTotalTax);
     }
     //Increment the subtotal
     $creditmemo->setSubtotalInclTax($creditmemo->getSubtotalInclTax() + $weeeTaxAmount);
     $creditmemo->setBaseSubtotalInclTax($creditmemo->getBaseSubtotalInclTax() + $baseWeeeTaxAmount);
     //Increment the grand total
     $creditmemo->setGrandTotal($creditmemo->getGrandTotal() + $totalTax);
     $creditmemo->setBaseGrandTotal($creditmemo->getBaseGrandTotal() + $baseTotalTax);
     return $this;
 }
Example #2
0
 /**
  * Collect Creditmemo subtotal
  *
  * @param   Mage_Sales_Model_Order_Creditmemo $creditmemo
  * @return  Mage_Sales_Model_Order_Creditmemo_Total_Subtotal
  */
 public function collect(Mage_Sales_Model_Order_Creditmemo $creditmemo)
 {
     $subtotal = 0;
     $baseSubtotal = 0;
     $subtotalInclTax = 0;
     $baseSubtotalInclTax = 0;
     foreach ($creditmemo->getAllItems() as $item) {
         if ($item->getOrderItem()->isDummy()) {
             continue;
         }
         $item->calcRowTotal();
         $subtotal += $item->getRowTotal();
         $baseSubtotal += $item->getBaseRowTotal();
         $subtotalInclTax += $item->getRowTotalInclTax();
         $baseSubtotalInclTax += $item->getBaseRowTotalInclTax();
     }
     $creditmemo->setSubtotal($subtotal);
     $creditmemo->setBaseSubtotal($baseSubtotal);
     $creditmemo->setSubtotalInclTax($subtotalInclTax);
     $creditmemo->setBaseSubtotalInclTax($baseSubtotalInclTax);
     $creditmemo->setGrandTotal($creditmemo->getGrandTotal() + $subtotal);
     $creditmemo->setBaseGrandTotal($creditmemo->getBaseGrandTotal() + $baseSubtotal);
     return $this;
 }
Example #3
0
 public function collect(Mage_Sales_Model_Order_Creditmemo $creditmemo)
 {
     $order = $creditmemo->getOrder();
     $paymentMethod = $order->getPayment()->getMethod();
     if ($this->getHelper()->isBillpayPayment($paymentMethod)) {
         $action = Mage::app()->getRequest()->getActionName();
         switch ($action) {
             case 'updateQty':
             case 'new':
                 $gross = $order->getBillpayChargedFee();
                 $net = $order->getBillpayChargedFeeNet();
                 $baseGross = $order->getBaseBillpayChargedFee();
                 $baseNet = $order->getBaseBillpayChargedFeeNet();
                 $refundable = $order->getBillpayChargedFee() - $order->getBillpayChargedFeeRefunded();
                 $baseRefundable = $order->getBaseBillpayChargedFee() - $order->getBaseBillpayChargedFeeRefunded();
                 $refundableTax = $refundable - ($order->getBillpayChargedFeeNet() - $order->getBillpayChargedFeeRefundedNet());
                 $baseRefundableTax = $baseRefundable - ($order->getBaseBillpayChargedFeeNet() - $order->getBaseBillpayChargedFeeRefundedNet());
                 // increase tax amount
                 $creditmemo->setTaxAmount($creditmemo->getTaxAmount() + $refundableTax);
                 $creditmemo->setBaseTaxAmount($creditmemo->getBaseTaxAmount() + $baseRefundableTax);
                 // increase grand total
                 $creditmemo->setGrandTotal($creditmemo->getGrandTotal() + $refundable);
                 $creditmemo->setBaseGrandTotal($creditmemo->getBaseGrandTotal() + $baseRefundable);
                 // We have to set the value for subtotal incl. tax here when a fee tax is present
                 // Otherwise the value will be calculated wrongly in Mage_Tax_Block_Sales_Order_Tax::_initSubtotal
                 if (!$creditmemo->getSubtotalInclTax() && $refundableTax > 0) {
                     $subtotalInclTax = $creditmemo->getSubtotal() + $creditmemo->getTaxAmount() - $creditmemo->getShippingTaxAmount() - $refundableTax;
                     $creditmemo->setSubtotalInclTax($subtotalInclTax);
                 }
                 break;
             case 'save':
                 $data = Mage::app()->getRequest()->getPost('creditmemo');
                 if (isset($data)) {
                     if (array_key_exists('billpay_charged_fee_refund', $data)) {
                         $storeId = $creditmemo->getOrder()->getStore()->getStoreId();
                         $baseChargedFeeRefunded = Mage::app()->getStore()->roundPrice($data['billpay_charged_fee_refund']);
                         if ($baseChargedFeeRefunded < 0) {
                             Mage::throwException('Refunded billpay fee must not be smaller than zero');
                         }
                         $baseOrderGross = $order->getBaseBillpayChargedFee();
                         $baseOrderNet = $order->getBaseBillpayChargedFeeNet();
                         $orderGross = $order->getBillpayChargedFee();
                         $orderNet = $order->getBillpayChargedFeeNet();
                         $baseAllowedRefund = $baseOrderGross - $order->getBaseBillpayChargedFeeRefunded();
                         if ((string) (double) $baseChargedFeeRefunded > (string) (double) $baseAllowedRefund) {
                             $baseAllowedRefund = $order->formatBasePrice($baseAllowedRefund);
                             Mage::throwException("Maximum billpay fee amount to refund is: {$baseAllowedRefund}");
                         }
                         if ($baseOrderGross > 0 && $baseOrderNet > 0) {
                             if ($this->getHelper()->getConfigData('fee/display_incl_tax_admin', $storeId)) {
                                 $part = $baseChargedFeeRefunded / $baseOrderGross;
                                 $baseChargedFeeRefundedNet = Mage::app()->getStore()->roundPrice($baseOrderNet * $part);
                             } else {
                                 $part = $baseChargedFeeRefunded / $baseOrderNet;
                                 $baseChargedFeeRefundedNet = $baseChargedFeeRefunded;
                                 $baseChargedFeeRefunded = Mage::app()->getStore()->roundPrice($baseOrderGross * $part);
                             }
                             $chargedFeeRefunded = Mage::app()->getStore()->roundPrice($orderGross * $part);
                             $chargedFeeRefundedNet = Mage::app()->getStore()->roundPrice($orderNet * $part);
                             $allowedRefund = $orderGross - $order->getBillpayChargedFeeRefunded();
                             $allowedRefundNet = $orderNet - $order->getBillpayChargedFeeRefundedNet();
                             if ($chargedFeeRefunded > $allowedRefund) {
                                 $chargedFeeRefunded = $allowedRefund;
                             }
                             if ($chargedFeeRefundedNet > $allowedRefundNet) {
                                 $chargedFeeRefundedNet = $allowedRefundNet;
                             }
                             $order->setBaseBillpayChargedFeeRefunded($order->getBaseBillpayChargedFeeRefunded() + $baseChargedFeeRefunded);
                             $order->setBaseBillpayChargedFeeRefundedNet($order->getBaseBillpayChargedFeeRefundedNet() + $baseChargedFeeRefundedNet);
                             $order->setBillpayChargedFeeRefunded($order->getBillpayChargedFeeRefunded() + $chargedFeeRefunded);
                             $order->setBillpayChargedFeeRefundedNet($order->getBillpayChargedFeeRefundedNet() + $chargedFeeRefundedNet);
                             $creditmemo->setBillpayChargedFeeRefunded($chargedFeeRefunded);
                             $creditmemo->setBillpayChargedFeeRefundedNet($chargedFeeRefundedNet);
                             $creditmemo->setBaseBillpayChargedFeeRefunded($baseChargedFeeRefunded);
                             $creditmemo->setBaseBillpayChargedFeeRefundedNet($baseChargedFeeRefundedNet);
                             $creditmemo->setBaseGrandTotal($creditmemo->getBaseGrandTotal() + $baseChargedFeeRefunded);
                             $creditmemo->setGrandTotal($creditmemo->getGrandTotal() + $chargedFeeRefunded);
                             $creditmemo->setTaxAmount($creditmemo->getTaxAmount() + ($chargedFeeRefunded - $chargedFeeRefundedNet));
                             $creditmemo->setBaseTaxAmount($creditmemo->getBaseTaxAmount() + ($baseChargedFeeRefunded - $baseChargedFeeRefundedNet));
                         }
                     }
                 }
                 break;
         }
     }
     return $this;
 }