Exemplo n.º 1
0
 /**
  * Prepare order creditmemo based on invoice items and requested requested params
  *
  * @param array $data
  * @return Mage_Sales_Model_Order_Creditmemo
  */
 public function prepareInvoiceCreditmemo($invoice, $data = array())
 {
     $totalQty = 0;
     $qtys = isset($data['qtys']) ? $data['qtys'] : array();
     $creditmemo = $this->_convertor->toCreditmemo($this->_order);
     $creditmemo->setInvoice($invoice);
     foreach ($invoice->getAllItems() as $invoiceItem) {
         $orderItem = $invoiceItem->getOrderItem();
         if (!$this->_canRefundItem($orderItem, $qtys)) {
             continue;
         }
         $item = $this->_convertor->itemToCreditmemoItem($orderItem);
         if ($orderItem->isDummy()) {
             $qty = 1;
         } else {
             if (isset($qtys[$orderItem->getId()])) {
                 $qty = (double) $qtys[$orderItem->getId()];
             } elseif (!count($qtys)) {
                 $qty = $orderItem->getQtyToRefund();
             } else {
                 continue;
             }
         }
         $qty = min($qty, $invoiceItem->getQty());
         $totalQty += $qty;
         $item->setQty($qty);
         $creditmemo->addItem($item);
     }
     $creditmemo->setTotalQty($totalQty);
     $this->_initCreditmemoData($creditmemo, $data);
     if (!isset($data['shipping_amount'])) {
         $order = $invoice->getOrder();
         $baseAllowedAmount = $order->getBaseShippingAmount() - $order->getBaseShippingRefunded();
         $creditmemo->setBaseShippingAmount(min($baseAllowedAmount, $invoice->getBaseShippingAmount()));
     }
     $creditmemo->collectTotals();
     return $creditmemo;
 }
Exemplo n.º 2
0
 /**
  * Prepare order creditmemo based on invoice items and requested requested params
  *
  * @param array $data
  * @return Mage_Sales_Model_Order_Creditmemo
  */
 public function prepareInvoiceCreditmemo($invoice, $data = array())
 {
     $totalQty = 0;
     $qtys = isset($data['qtys']) ? $data['qtys'] : array();
     $creditmemo = $this->_convertor->toCreditmemo($this->_order);
     $creditmemo->setInvoice($invoice);
     $invoiceQtysRefunded = array();
     foreach ($invoice->getOrder()->getCreditmemosCollection() as $createdCreditmemo) {
         if ($createdCreditmemo->getState() != Mage_Sales_Model_Order_Creditmemo::STATE_CANCELED && $createdCreditmemo->getInvoiceId() == $invoice->getId()) {
             foreach ($createdCreditmemo->getAllItems() as $createdCreditmemoItem) {
                 $orderItemId = $createdCreditmemoItem->getOrderItem()->getId();
                 if (isset($invoiceQtysRefunded[$orderItemId])) {
                     $invoiceQtysRefunded[$orderItemId] += $createdCreditmemoItem->getQty();
                 } else {
                     $invoiceQtysRefunded[$orderItemId] = $createdCreditmemoItem->getQty();
                 }
             }
         }
     }
     $invoiceQtysRefundLimits = array();
     foreach ($invoice->getAllItems() as $invoiceItem) {
         $invoiceQtyCanBeRefunded = $invoiceItem->getQty();
         $orderItemId = $invoiceItem->getOrderItem()->getId();
         if (isset($invoiceQtysRefunded[$orderItemId])) {
             $invoiceQtyCanBeRefunded = $invoiceQtyCanBeRefunded - $invoiceQtysRefunded[$orderItemId];
         }
         $invoiceQtysRefundLimits[$orderItemId] = $invoiceQtyCanBeRefunded;
     }
     foreach ($invoice->getAllItems() as $invoiceItem) {
         $orderItem = $invoiceItem->getOrderItem();
         if (!$this->_canRefundItem($orderItem, $qtys, $invoiceQtysRefundLimits)) {
             continue;
         }
         $item = $this->_convertor->itemToCreditmemoItem($orderItem);
         if ($orderItem->isDummy()) {
             $qty = 1;
         } else {
             if (isset($qtys[$orderItem->getId()])) {
                 $qty = (double) $qtys[$orderItem->getId()];
             } elseif (!count($qtys)) {
                 $qty = $orderItem->getQtyToRefund();
             } else {
                 continue;
             }
             if (isset($invoiceQtysRefundLimits[$orderItem->getId()])) {
                 $qty = min($qty, $invoiceQtysRefundLimits[$orderItem->getId()]);
             }
         }
         $qty = min($qty, $invoiceItem->getQty());
         $totalQty += $qty;
         $item->setQty($qty);
         $creditmemo->addItem($item);
     }
     $creditmemo->setTotalQty($totalQty);
     $this->_initCreditmemoData($creditmemo, $data);
     if (!isset($data['shipping_amount'])) {
         $order = $invoice->getOrder();
         $isShippingInclTax = Mage::getSingleton('tax/config')->displaySalesShippingInclTax($order->getStoreId());
         if ($isShippingInclTax) {
             $baseAllowedAmount = $order->getBaseShippingInclTax() - $order->getBaseShippingRefunded() - $order->getBaseShippingTaxRefunded();
         } else {
             $baseAllowedAmount = $order->getBaseShippingAmount() - $order->getBaseShippingRefunded();
             $baseAllowedAmount = min($baseAllowedAmount, $invoice->getBaseShippingAmount());
         }
         $creditmemo->setBaseShippingAmount($baseAllowedAmount);
     }
     $creditmemo->collectTotals();
     return $creditmemo;
 }