/** * Returns array of ReturnOrderLineData * * @param Mage_Sales_Model_Order_Creditmemo $creditMemo * @return array */ protected function _getReturnedItems(Mage_Sales_Model_Order_Creditmemo $creditMemo) { $returnedItems = array(); /** @var $item Mage_Sales_Model_Order_Creditmemo_Item */ foreach ($creditMemo->getItemsCollection() as $item) { if ($item->getQty() == 0 || $item->getPrice() == 0) { continue; } $returnedItems[] = $this->_createReturnOrderLineData($item); } return $returnedItems; }
public function collect(Mage_Sales_Model_Order_Creditmemo $creditmemo) { $creditmemo->setGiftwrapAmount(0); $totalAmount = 0; $giftwrapPrice = 0; $giftcardPrice = 0; $totalQtyOfBox = array(); $totalRefundedOfBox = array(); $itemOfBox = array(); $parentItemChildQty = array(); $giftbox = array(); $parentItemOrderedQty = array(); $prepareQty = array(); $order_id = Mage::app()->getRequest()->getParam('order_id'); $order = $creditmemo->getOrder(); $tax_info = $order->getFullTaxInfo(); $rate = $tax_info[0]['percent']; //get all gitbox of order $giftboxes = Mage::getModel('giftwrap/selection')->getCollection()->addFieldToFilter('order_id', $order_id)->addFieldToFilter('is_invoiced', 1); foreach ($giftboxes as $gbox) { $totalQtyOfBox[$gbox->getId()] = 0; $totalRefundedOfBox[$gbox->getId()] = 0; $giftboxItemCollection = Mage::getModel('giftwrap/selectionitem')->getCollection()->addFieldToFilter('selection_id', $gbox->getId()); foreach ($giftboxItemCollection as $giftboxItem) { $totalQtyOfBox[$gbox->getId()] += (int) $giftboxItem->getQty(); $orderItem = Mage::getModel('sales/order_item')->getCollection()->addFieldToFilter('quote_item_id', $giftboxItem->getItemId())->getFirstItem(); $itemOfBox[$orderItem->getItemId()] = $gbox->getId(); $totalRefundedOfBox[$gbox->getId()] += (int) $orderItem->getQtyRefunded(); } } foreach ($creditmemo->getAllItems() as $item) { $orderItem = Mage::getModel('sales/order_item')->getCollection()->addFieldToFilter('item_id', $item->getOrderItemId())->getFirstItem(); if (!$orderItem->getParentItemId() && $item->getQty() > 0) { if (isset($itemOfBox[$item->getOrderItemId()])) { $prepareQty[$itemOfBox[$item->getOrderItemId()]] += (int) $totalRefundedOfBox[$itemOfBox[$item->getOrderItemId()]] + (int) $item->getQty(); if ($prepareQty[$itemOfBox[$item->getOrderItemId()]] == (int) $totalQtyOfBox[$itemOfBox[$item->getOrderItemId()]]) { $giftwrapPrice = 0; $giftcardPrice = 0; $totalQtyInBox = 0; $selection = Mage::getModel('giftwrap/selection')->load($itemOfBox[$item->getOrderItemId()]); $giftbox[] = $selection->getId(); $giftwrapPrice += (double) Mage::getModel('giftwrap/giftwrap')->load($selection->getStyleId())->getPrice(); if ($selection->getGiftcardId()) { $giftcardPrice += (double) Mage::getModel('giftwrap/giftcard')->load($selection->getGiftcardId())->getPrice(); } if ($selection->getCalculateByItem()) { $totalQtyInBox = $totalQtyOfBox[$selection->getId()]; $totalAmount += $totalQtyInBox * ($giftwrapPrice + $giftcardPrice); } else { $totalAmount += $giftwrapPrice + $giftcardPrice; } } } } else { $parentItemChildQty[$orderItem->getParentItemId()] += (int) $orderItem->getQtyRefunded() + (int) $item->getQty(); $parentItemOrderedQty[$orderItem->getParentItemId()] += (int) $orderItem->getQtyOrdered(); } } if (count($parentItemChildQty) > 0) { foreach ($parentItemChildQty as $orderItemId => $qty) { $orderItem = Mage::getModel('sales/order_item')->load($orderItemId); $quoteItemId = $orderItem->getQuoteItemId(); $selectionItem = Mage::getResourceModel('giftwrap/selectionitem_collection')->addFieldToFilter('item_id', $quoteItemId)->getFirstItem(); $selection = Mage::getModel('giftwrap/selection')->load($selectionItem->getSelectionId()); $giftwrapPrice = 0; $giftcardPrice = 0; $totalQtyInBox = 0; $giftwrapPrice += (double) Mage::getModel('giftwrap/giftwrap')->load($selection->getStyleId())->getPrice(); if ($selection->getGiftcardId()) { $giftcardPrice += (double) Mage::getModel('giftwrap/giftcard')->load($selection->getGiftcardId())->getPrice(); } $key = array_search($selection->getId(), $giftbox); if ($key !== false) { if ($qty != $parentItemOrderedQty[$orderItemId]) { if ($selection->getCalculateByItem()) { $selectionItems = Mage::getResourceModel('giftwrap/selectionitem_collection')->addFieldToFilter('selection_id', $selection->getId()); foreach ($selectionItems as $sItem) { $totalQtyInBox += $sItem->getQty(); } $totalAmount -= $totalQtyInBox * ($giftwrapPrice + $giftcardPrice); } else { $totalAmount -= $giftwrapPrice + $giftcardPrice; } unset($giftbox[$key]); } } else { $qtyToRefund = (int) $qty; if ($qtyToRefund == (int) $parentItemOrderedQty[$orderItemId]) { $giftbox[] = $selection->getId(); if ($selection->getCalculateByItem()) { $selectionItems = Mage::getResourceModel('giftwrap/selectionitem_collection')->addFieldToFilter('selection_id', $selection->getId()); foreach ($selectionItems as $sItem) { $totalQtyInBox += $sItem->getQty(); } $totalAmount += $totalQtyInBox * ($giftwrapPrice + $giftcardPrice); } else { $totalAmount += $giftwrapPrice + $giftcardPrice; } } } } } $giftbox = array_filter($giftbox); Mage::getSingleton('adminhtml/session')->setSubtotalGiftwrap($totalAmount); Mage::getSingleton('adminhtml/session')->setGiftboxRefund($giftbox); $lastId = $creditmemo->getItemsCollection()->getLastItem()->getId(); Mage::getSingleton('adminhtml/session')->setLastId($lastId); $orderGiftwrapAmount = $totalAmount; if (Mage::getStoreConfig('giftwrap/calculation/tax', Mage::app()->getStore(true)->getId())) { if ($rate) { $orderGiftwrapTax = $totalAmount * $rate; } } if ($orderGiftwrapAmount || $orderGiftwrapAmount == 0) { $creditmemo->setGiftwrapAmount($orderGiftwrapAmount); $creditmemo->setGrandTotal($creditmemo->getGrandTotal() + $orderGiftwrapAmount); $creditmemo->setBaseGrandTotal($creditmemo->getBaseGrandTotal() + $orderGiftwrapAmount); if ($orderGiftwrapTax) { $creditmemo->setGiftwrapTax($orderGiftwrapTax); $creditmemo->setGrandTotal($creditmemo->getGrandTotal() + $orderGiftwrapTax); $creditmemo->setBaseGrandTotal($creditmemo->getBaseGrandTotal() + $orderGiftwrapTax); } } return $this; }