示例#1
0
 /**
  * Initialize creation data from existing order Item
  *
  * @param Mage_Sales_Model_Order_Item $orderItem
  * @param int $qty
  * @return Mage_Sales_Model_Quote_Item | string
  */
 public function initFromOrderItem(Mage_Sales_Model_Order_Item $orderItem, $qty = null)
 {
     if (!$orderItem->getId()) {
         return $this;
     }
     $product = Mage::getModel('catalog/product')->setStoreId($this->getSession()->getStoreId())->load($orderItem->getProductId());
     if ($product->getId()) {
         $product->setSkipCheckRequiredOption(true);
         $buyRequest = $orderItem->getBuyRequest();
         if (is_numeric($qty)) {
             $buyRequest->setQty($qty);
         }
         $item = $this->getQuote()->addProduct($product, $buyRequest);
         if (is_string($item)) {
             return $item;
         }
         /*********************************************Set custom price selected starts************************************************************/
         if (!$this->getSession()->getReordered() && $orderItem->getOriginalPrice() != $orderItem->getPrice()) {
             if ($orderItem->getProductType() == 'configurable' || $orderItem->getProductType() == 'bundle') {
                 $productId = $orderItem->getProductId();
                 $quoteItemId = $orderItem->getQuoteItemId();
                 $items = $this->getQuote()->getItemsCollection();
                 foreach ($items as $item) {
                     if ($item->getProduct()->getId() == $productId && !$item->getApplyPriceFlag()) {
                         if ($orderItem->getOriginalPrice() != $orderItem->getPrice()) {
                             $item->setCustomPrice($orderItem->getPrice())->setOriginalCustomPrice($orderItem->getPrice());
                         }
                         //$item->setApplyPriceFlag(true);
                     }
                 }
             } else {
                 $item->setCustomPrice($orderItem->getPrice())->setOriginalCustomPrice($orderItem->getPrice());
             }
         }
         /*********************************************Set custom price selected ends************************************************************/
         if ($additionalOptions = $orderItem->getProductOptionByCode('additional_options')) {
             $item->addOption(new Varien_Object(array('product' => $item->getProduct(), 'code' => 'additional_options', 'value' => serialize($additionalOptions))));
         }
         Mage::dispatchEvent('sales_convert_order_item_to_quote_item', array('order_item' => $orderItem, 'quote_item' => $item));
         return $item;
     }
     return $this;
 }
示例#2
0
 /**
  * Declare order item instance
  *
  * @param   Mage_Sales_Model_Order_Item $item
  * @return  Mage_Sales_Model_Order_Shipment_Item
  */
 public function setOrderItem(Mage_Sales_Model_Order_Item $item)
 {
     $this->_orderItem = $item;
     $this->setOrderItemId($item->getId());
     return $this;
 }
示例#3
0
 public function addItem(Mage_Sales_Model_Order_Item $item)
 {
     $item->setOrder($this);
     if (!$item->getId()) {
         $this->getItemsCollection()->addItem($item);
     }
     return $this;
 }
示例#4
0
文件: Order.php 项目: quyip8818/Mag
 /**
  * Retrieve
  *
  * @param Mage_Sales_Model_Order_Item $item
  * @return unknown
  */
 public function itemToQuoteItem(Mage_Sales_Model_Order_Item $item)
 {
     $quoteItem = Mage::getModel('sales/quote_item')->setStoreId($item->getOrder()->getStoreId())->setQuoteItemId($item->getId())->setProductId($item->getProductId())->setParentProductId($item->getParentProductId());
     Mage::helper('core')->copyFieldset('sales_convert_order_item', 'to_quote_item', $item, $quoteItem);
     return $quoteItem;
 }
示例#5
0
 /**
  * Initialize creation data from existing order Item
  *
  * @param Mage_Sales_Model_Order_Item $orderItem
  * @param int $qty
  * @return Mage_Sales_Model_Quote_Item | string
  */
 public function initFromOrderItem(Mage_Sales_Model_Order_Item $orderItem, $qty = null)
 {
     if (!$orderItem->getId()) {
         return $this;
     }
     $product = Mage::getModel('catalog/product')->setStoreId($this->getSession()->getStoreId())->load($orderItem->getProductId());
     if ($product->getId()) {
         $product->setSkipCheckRequiredOption(true);
         $buyRequest = $orderItem->getBuyRequest();
         if (is_numeric($qty)) {
             $buyRequest->setQty($qty);
         }
         $item = $this->getQuote()->addProduct($product, $buyRequest);
         if (is_string($item)) {
             return $item;
         }
         if ($additionalOptions = $orderItem->getProductOptionByCode('additional_options')) {
             $item->addOption(new Varien_Object(array('product' => $item->getProduct(), 'code' => 'additional_options', 'value' => serialize($additionalOptions))));
         }
         Mage::dispatchEvent('sales_convert_order_item_to_quote_item', array('order_item' => $orderItem, 'quote_item' => $item));
         return $item;
     }
     return $this;
 }
示例#6
0
 /**
  * Retrieve
  *
  * @param Mage_Sales_Model_Order_Item $item
  * @return unknown
  */
 public function itemToQuoteItem(Mage_Sales_Model_Order_Item $item)
 {
     $quoteItem = AO::getModel('sales/quote_item')->setStoreId($item->getOrder()->getStoreId())->setQuoteItemId($item->getId())->setProductId($item->getProductId())->setParentProductId($item->getParentProductId());
     AO::helper('core')->copyFieldset('sales_convert_order_item', 'to_quote_item', $item, $quoteItem);
     //            ->setSku($item->getSku())
     //            ->setName($item->getName())
     //            ->setDescription($item->getDescription())
     //            ->setWeight($item->getWeight())
     //            ->setCustomPrice($item->getPrice())
     //            ->setDiscountPercent($item->getDiscountPercent())
     //            ->setDiscountAmount($item->getDiscountAmount())
     //            ->setTaxPercent($item->getTaxPercent())
     //            ->setTaxAmount($item->getTaxAmount())
     //            ->setRowWeight($item->getRowWeight())
     //            ->setRowTotal($item->getRowTotal())
     //            ->setAppliedRuleIds($item->getAppliedRuleIds())
     //
     //            ->setBaseDiscountAmount($item->getBaseDiscountAmount())
     //            ->setBaseTaxAmount($item->getBaseTaxAmount())
     //            ->setBaseRowTotal($item->getBaseRowTotal())
     //            ;
     return $quoteItem;
 }
示例#7
0
 /**
  * Calculate refund qty
  * 
  * @param Varien_Object $dataObject
  * @param Mage_Sales_Model_Order_Item $orderItem
  * @return array [not_ship, shipped, total, had_refunded]
  */
 protected function _calculateRefundedQty($dataObject, $orderItem)
 {
     $creditMemo = $dataObject->getCreditmemoObject();
     $order = $dataObject->getOrder();
     $parentItemId = $orderItem->getParentItemId();
     $refundItem = $creditMemo->getItemByOrderId($orderItem->getId());
     $parentItem = $parentItemId ? $creditMemo->getItemByOrderId($parentItemId) : false;
     if (is_bool($refundItem)) {
         $refundQty = $parentItem ? $parentItem->getQty() : 0;
     } else {
         $refundQty = $parentItem ? $parentItem->getQty() * $refundItem->getQty() : $refundItem->getQty();
     }
     $oldCreditmemos = $order->getCreditmemosCollection();
     /* total refuned qty before created this creditmemo */
     $hadRefundedQty = 0;
     if (count($oldCreditmemos)) {
         foreach ($oldCreditmemos as $oldCreditmemo) {
             if ($oldCreditmemo->getId() == $creditMemo->getId()) {
                 continue;
             }
             $item = $oldCreditmemo->getItemByOrderId($orderItem->getId());
             if ($item) {
                 $parentItem = $orderItem->getParentItemId() ? $oldCreditmemo->getItemByOrderId($orderItem->getParentItemId()) : false;
                 $hadRefundedQty += $parentItem ? $parentItem->getQty() * $item->getQty() : $item->getQty();
             }
         }
     }
     /* calculate shipped qty */
     $shippedQty = $orderItem->getQtyShipped();
     if ($orderItem->getParentItemId()) {
         $parentOrderItem = $order->getItemById($orderItem->getParentItemId());
         if ($parentOrderItem && $parentOrderItem->getProduct()->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE) {
             $shippedQty = $parentOrderItem->getQtyShipped();
         }
     }
     /* calculate canceled qty */
     $canceledQty = $orderItem->getQtyCanceled();
     if ($orderItem->getParentItemId()) {
         $parentOrderItem = $order->getItemById($orderItem->getParentItemId());
         if ($parentOrderItem && $parentOrderItem->getProduct()->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE) {
             $canceledQty = $parentOrderItem->getQtyCanceled();
         }
     }
     /* total qty which we need to ship before created this credit memo */
     $needToShipQty = $orderItem->getQtyOrdered() - $shippedQty - $hadRefundedQty - $canceledQty;
     $needToShipQty = $needToShipQty >= 0 ? $needToShipQty : 0;
     /* separate refund qty to qty of not_ship items & qty of shipped items */
     $refundQtys = array('not_ship' => min($refundQty, $needToShipQty), 'shipped' => $refundQty - min($refundQty, $needToShipQty), 'total' => $refundQty, 'had_refunded' => $hadRefundedQty);
     return $refundQtys;
 }
示例#8
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;
 }
示例#9
0
 /**
  * Return the qty of newly paid invoice items for gift card.
  * This method depends on giftcard_paid_invoice_items field in product options array.
  * It also update the field with the newly paid invoice items
  *
  * @param Mage_Sales_Model_Order_Item $item giftcard order item
  * @return int qty of newly paid invoice items
  */
 protected function _getAndUpdatePaidInvoiceItems(Mage_Sales_Model_Order_Item $item)
 {
     $newlyPaidInvoiceItemQty = 0;
     $options = $item->getProductOptions();
     $paidInvoiceItems = isset($options['giftcard_paid_invoice_items']) ? $options['giftcard_paid_invoice_items'] : array();
     // find invoice for this order item
     $invoiceItemCollection = Mage::getResourceModel('sales/order_invoice_item_collection')->addFieldToFilter('order_item_id', $item->getId());
     foreach ($invoiceItemCollection as $invoiceItem) {
         $invoiceId = $invoiceItem->getParentId();
         if (isset($this->_loadedInvoices[$invoiceId])) {
             $invoice = $this->_loadedInvoices[$invoiceId];
         } else {
             $invoice = Mage::getModel('sales/order_invoice')->load($invoiceId);
             $this->_loadedInvoices[$invoiceId] = $invoice;
         }
         // check, if this order item has been paid
         if ($invoice->getState() == Mage_Sales_Model_Order_Invoice::STATE_PAID && !in_array($invoiceItem->getId(), $paidInvoiceItems)) {
             $newlyPaidInvoiceItemQty += $invoiceItem->getQty();
             $paidInvoiceItems[] = $invoiceItem->getId();
         }
     }
     $options['giftcard_paid_invoice_items'] = $paidInvoiceItems;
     $item->setProductOptions($options);
     return $newlyPaidInvoiceItemQty;
 }
示例#10
0
 /**
  * Add new item to quote based on existing order Item
  *
  * @param Mage_Sales_Model_Order_Item $orderItem
  * @return Mage_Sales_Model_Quote_Item
  * @throws Mage_Core_Exception
  */
 public function reorderItem(Mage_Sales_Model_Order_Item $orderItem, $qty = 1)
 {
     if (!$orderItem->getId()) {
         Mage::throwException(Mage::helper('enterprise_checkout')->__('Failed to reorder item'));
     }
     $product = Mage::getModel('catalog/product')->setStoreId($this->getStore()->getId())->load($orderItem->getProductId());
     if ($product->getId()) {
         $info = $orderItem->getProductOptionByCode('info_buyRequest');
         $info = new Varien_Object($info);
         $product->setSkipCheckRequiredOption(true);
         $item = $this->createQuote()->addProduct($product, $info);
         if (is_string($item)) {
             Mage::throwException($item);
         }
         $item->setQty($qty);
         if ($additionalOptions = $orderItem->getProductOptionByCode('additional_options')) {
             $item->addOption(new Varien_Object(array('product' => $item->getProduct(), 'code' => 'additional_options', 'value' => serialize($additionalOptions))));
         }
         Mage::dispatchEvent('sales_convert_order_item_to_quote_item', array('order_item' => $orderItem, 'quote_item' => $item));
         return $item;
     } else {
         Mage::throwException(Mage::helper('enterprise_checkout')->__('Failed to add a product of order item'));
     }
 }
示例#11
0
 /**
  * Retrieve
  *
  * @param Mage_Sales_Model_Order_Item $item
  * @return unknown
  */
 public function itemToQuoteItem(Mage_Sales_Model_Order_Item $item)
 {
     $quoteItem = Mage::getModel('sales/quote_item')->setStoreId($item->getStoreId())->setQuoteItemId($item->getId())->setProductId($item->getProductId())->setSuperProductId($item->getSuperProductId())->setParentProductId($item->getParentProductId())->setSku($item->getSku())->setName($item->getName())->setDescription($item->getDescription())->setWeight($item->getWeight())->setCustomPrice($item->getPrice())->setDiscountPercent($item->getDiscountPercent())->setDiscountAmount($item->getDiscountAmount())->setTaxPercent($item->getTaxPercent())->setTaxAmount($item->getTaxAmount())->setRowWeight($item->getRowWeight())->setRowTotal($item->getRowTotal())->setAppliedRuleIds($item->getAppliedRuleIds())->setBaseDiscountAmount($item->getBaseDiscountAmount())->setBaseTaxAmount($item->getBaseTaxAmount())->setBaseRowTotal($item->getBaseRowTotal());
     return $quoteItem;
 }
示例#12
0
 /**
  * Refund specific qty of order item
  *
  * @param Mage_Sales_Model_Order      $order
  * @param Mage_Sales_Model_Order_Item $orderItem
  * @param                             $qtyToRefund
  * @return $this
  */
 public function refundOrderItem(Mage_Sales_Model_Order $order, Mage_Sales_Model_Order_Item $orderItem, $qtyToRefund)
 {
     $cmModel = Mage::getSingleton('mageworx_orderspro/edit_creditmemo');
     $cmModel->addItemToRefund($orderItem->getId(), $qtyToRefund);
     if ($orderItem->getProductType() == 'bundle') {
         $orderItem->setQtyRefunded($qtyToRefund);
     }
     return $this;
 }
示例#13
0
 /**
  * Returns SimpleOrderLineData record
  *
  * @param Mage_Sales_Model_Order_Item $item
  * @return array
  */
 protected function _createSimpleOrderLineData(Mage_Sales_Model_Order_Item $item)
 {
     /** @var $product Mage_Catalog_Model_Product */
     $product = Mage::getModel('catalog/product')->setStoreId($item->getStoreId())->load($item->getProductId());
     $data = array('orderLineId' => null, 'itemId' => (string) $item->getId(), 'orderNumber' => (string) $this->getOrderNumber(), 'quantity' => (double) $item->getQtyOrdered(), 'productSku' => (string) $item->getSku(), 'itemDescription' => (string) ($product->getShortDescription() ? $product->getShortDescription() : $product->getDescription()), 'unitPrice' => $this->_createOrderLinePrice($item, $item->getQtyOrdered()), 'totalTaxAmount' => $this->_createCurrencyAmount($item->getTaxAmount()), 'status' => $this->_createOrderItemStatus($item), 'price' => $this->_createCurrencyAmount($item->getBaseRowTotal()), 'allDiscounts' => null, 'dateCancelled' => null, 'dateDelivered' => null, 'dateShipped' => null, 'dateReturned' => null, 'dateInvoiced' => null, 'destination' => $this->_createShipTo($item->getOrder()->getShippingAddress()), 'shipmentId' => null, 'offerId' => null, 'offerUrl' => null);
     return $data;
 }
 /**
  * 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;
 }
 /**
  * @param Mage_Sales_Model_Order_Item $orderItem
  * @return array
  */
 public function getAssignedSerials(Mage_Sales_Model_Order_Item $orderItem)
 {
     $gpSku = $this->getGpSkuFromProductId($orderItem->getProductId());
     $select = $this->getSelect()->reset(Zend_Db_Select::COLUMNS)->columns('serial')->where('enabled = ?', true)->where('order_item_id = ?', $orderItem->getId())->where('gp_sku = ?', $gpSku);
     $assignedSerials = array();
     foreach ($this->getConnection()->fetchAll($select) as $serial) {
         $assignedSerials[] = $serial['serial'];
     }
     return $assignedSerials;
 }
示例#16
0
 /**
  * Returns the total accumulated catalog discounts on an item
  * @param Mage_Sales_Model_Quote_Item|Mage_Sales_Model_Order_Item $item
  * @return int negative discount amount
  */
 protected function _getTotalItemCatalogDiscount($item)
 {
     if (!$item->getQuoteId() || !$item->getId()) {
         return 0;
     }
     $row_total_before_disc = $item->getRowTotalBeforeRedemptions();
     $row_total = $item->getRowTotal();
     if ($item->getRewardsCatalogDiscount()) {
         $total_discount = $item->getRewardsCatalogDiscount();
     } else {
         if (empty($row_total_before_disc)) {
             $item->setRowTotal($item->getRowTotalBeforeRedemptions());
             $item->setRowTotalInclTax($item->getRowTotalBeforeRedemptionsInclTax());
             $total_discount = $this->_getRedeemer()->getTotalCatalogDiscount($item);
         } else {
             $total_discount = $item->getRowTotalBeforeRedemptions() - $item->getRowTotal();
         }
     }
     return $total_discount;
 }