示例#1
0
 /**
  * Check if no dummy order item can be refunded
  *
  * @param Mage_Sales_Model_Order_Item $item
  * @param array $invoiceQtysRefundLimits
  * @return bool
  */
 protected function _canRefundNoDummyItem($item, $invoiceQtysRefundLimits = array())
 {
     if ($item->getQtyToRefund() < 0) {
         return false;
     }
     if (isset($invoiceQtysRefundLimits[$item->getId()])) {
         return $invoiceQtysRefundLimits[$item->getId()] > 0;
     }
     return true;
 }
示例#2
0
 /**
  * Check if order item can be refunded
  *
  * @param Mage_Sales_Model_Order_Item $item
  * @param array $qtys
  * @return bool
  */
 protected function _canRefundItem($item, $qtys = array())
 {
     if ($item->isDummy()) {
         if ($item->getHasChildren()) {
             foreach ($item->getChildrenItems() as $child) {
                 if (empty($qtys)) {
                     if ($child->getQtyToRefund() > 0) {
                         return true;
                     }
                 } else {
                     if (isset($qtys[$child->getId()]) && $qtys[$child->getId()] > 0) {
                         return true;
                     }
                 }
             }
             return false;
         } else {
             if ($item->getParentItem()) {
                 $parent = $item->getParentItem();
                 if (empty($qtys)) {
                     return $parent->getQtyToRefund() > 0;
                 } else {
                     return isset($qtys[$parent->getId()]) && $qtys[$parent->getId()] > 0;
                 }
             }
         }
     } else {
         return $item->getQtyToRefund() > 0;
     }
 }
示例#3
0
 /**
  * Remove specific qty of order item from order
  *
  * @param Mage_Sales_Model_Order      $order
  * @param Mage_Sales_Model_Order_Item $orderItem
  * @param null                        $qtyToReturn
  * @return $this
  */
 public function returnOrderItem(Mage_Sales_Model_Order $order, Mage_Sales_Model_Order_Item $orderItem, $qtyToReturn = null)
 {
     if (is_null($qtyToReturn)) {
         $qtyToReturn = $orderItem->getQtyToRefund() + $orderItem->getQtyToCancel();
     }
     if ($qtyToReturn > 0 && $orderItem->getQtyToCancel() > 0) {
         $qtyToCancel = min($qtyToReturn, $orderItem->getQtyToCancel());
         $qtyToReturn -= $qtyToCancel;
         $this->cancelOrderItem($orderItem, $qtyToCancel);
     }
     if ($qtyToReturn > 0 && $orderItem->getQtyToRefund() > 0) {
         $creditMemo = $this->refundOrderItem($order, $orderItem, $qtyToReturn);
     }
     return $this;
 }
 /**
  * update quantity to refund
  * 
  * @param Mage_Sales_Model_Order_Item $item
  * @param array() $dataQty
  * @param int $keepQty
  * @return array() $dataQty
  */
 private function _refundItem($item, $dataQty, $keepQty = 0)
 {
     $refundQty = $item->getQtyToRefund() - $keepQty;
     if ($refundQty > 0) {
         // set quantity to refund
         $dataQty[$item->getId()] = $refundQty;
         // search child to by refund as well
         $childItems = $item->getChildrenItems();
         foreach ($childItems as $child) {
             $dataQty = $this->_refundItem($child, $dataQty, $keepQty);
         }
     }
     return $dataQty;
 }