/** * Convert quote item to order item. Most part of the code was taken from Mage_Sales_Model_Convert_Quote::itemToOrderItem() * * @param Mage_Sales_Model_Quote_Item_Abstract $item * @param null|Mage_Sales_Model_Order_Item $orderItem * @return Mage_Sales_Model_Order_Item */ public function itemToOrderItem(Mage_Sales_Model_Quote_Item_Abstract $item, $orderItem = null) { if (is_null($orderItem)) { $orderItem = Mage::getModel('sales/order_item'); } $orderItem->setStoreId($item->getStoreId())->setQuoteItemId($item->getId())->setQuoteParentItemId($item->getParentItemId())->setProductId($item->getProductId())->setProductType($item->getProductType())->setQtyBackordered($item->getBackorders())->setProduct($item->getProduct())->setBaseOriginalPrice($item->getBaseOriginalPrice()); $options = $item->getProductOrderOptions(); if (!$options) { $options = $item->getProduct()->getTypeInstance(true)->getOrderOptions($item->getProduct()); } $orderItem->setProductOptions($options); Mage::helper('core')->copyFieldset('sales_convert_quote_item', 'to_order_item', $item, $orderItem); if ($item->getParentItem()) { $orderItem->setQtyOrdered($orderItem->getQtyOrdered() * $item->getParentItem()->getQty()); } if (!$item->getNoDiscount()) { Mage::helper('core')->copyFieldset('sales_convert_quote_item', 'to_order_item_discount', $item, $orderItem); } Mage::dispatchEvent('sales_convert_quote_item_to_order_item', array('order_item' => $orderItem, 'item' => $item)); return $orderItem; }
/** * Inject general item data into the order item payload. * * @return self */ protected function _injectItemData() { $this->_orderItem->setLineNumber($this->_item->getId())->setItemId($this->_item->getSku())->setQuantity((int) $this->_item->getQty())->setDescription($this->_item->getName())->setHtsCode($this->_taxHelper->getProductHtsCodeByCountry($this->_itemProduct, $this->_address->getCountryId()))->setManufacturingCountryCode($this->_itemProduct->getCountryOfManufacture()); return $this; }
/** * build out an ILineItem payload and add it to the ILineItemIterable. * * @param Mage_Sales_Model_Quote_Item_Abstract * @param ILineItemIterable * @param string * @return self */ public function createLineItem(Mage_Sales_Model_Quote_Item_Abstract $item, ILineItemIterable $lineItems, $currencyCode) { $lineItem = $lineItems->getEmptyLineItem(); $lineItem->setName($this->helper->__($item->getProduct()->getName()))->setSequenceNumber($item->getId())->setQuantity($item->getTotalQty())->setCurrencyCode($currencyCode); if ($this->canIncludeAmounts($item)) { $lineItem->setUnitAmount($item->getPrice()); } $lineItems->offsetSet($lineItem, null); }
public function apply(Mage_Sales_Model_Quote_Item_Abstract $item) { # Do not apply any discount if Ext is Disabled if (Mage::helper('referafriend')->getExtDisabled()) { return $this; } $this->_quote = $quote = $item->getQuote(); if ($item instanceof Mage_Sales_Model_Quote_Address_Item) { $address = $item->getAddress(); } elseif ($quote->isVirtual()) { $address = $quote->getBillingAddress(); } else { $address = $quote->getShippingAddress(); } # allow additional discount logic start $hasAdditional = $item->getQuote()->getCouponCode() ? true : false; $helper = Mage::helper('referafriend/referrer'); $baseSubtotal = $address->getBaseSubtotal(); $clearUse = array(); if (!$this->_discount) { Mage::helper('referafriend')->setCustomerDiscount(0); $customer = $quote->getCustomer(); $referrerId = $customer->getId(); $discounts = Mage::getResourceModel('referafriend/discount_collection')->loadByReferrer($referrerId); if (count($discounts)) { foreach ($discounts as $discount) { $rule = Mage::getSingleton('referafriend/rule')->load($discount->getRuleId()); if ($rule->getDiscountUsage() == 0 || $rule->getDiscountUsage() > $discount->getDiscountUsed()) { # allow additional discount logic if ($hasAdditional && $rule->getAllowAdditionalDiscount() || !$hasAdditional) { $this->_discount[$discount->getId()] = $discount; } else { $clearUse[] = $discount->getId(); } } } } } if (!count($this->_discount)) { # Reset used discount $customer = Mage::getSingleton('customer/session'); if ($customer->isLoggedIn()) { $customer->setDiscountUsed(array()); } return $this; } $this->_getCouponCode(); // $this->_couponCode = $this->_getCouponCode(); $customer = Mage::getSingleton('customer/session'); if ($customer->isLoggedIn()) { $discountUsed = (array) $customer->getDiscountUsed(); } $rafDiscount = Mage::helper('referafriend')->getCustomerDiscount(false) ? Mage::helper('referafriend')->getCustomerDiscount(false) : 0; $notUsed = array(); foreach ($this->_discount as $discountId => $discount) { $discountAmount = 0; $baseDiscountAmount = 0; $rule = Mage::getModel('referafriend/rule')->load($discount->getRuleId()); switch ($discount->getType()) { case self::TYPE_PERCENT: $discountPercent = min(100, $discount->getAmount()); $discountAmount = ($item->getRowTotal() - $item->getDiscountAmount()) * $discountPercent / 100; $baseDiscountAmount = ($item->getBaseRowTotal() - $item->getBaseDiscountAmount()) * $discountPercent / 100; $checkDiscountAmount = $baseSubtotal * $discountPercent / 100; if (!($rule->getDiscountGreater() && $checkDiscountAmount < $rule->getDiscountGreater()) && !($rule->getTotalGreater() && $baseSubtotal < $rule->getTotalGreater())) { if (isset($discountUsed)) { if (!isset($discountUsed[$discountId])) { $discountUsed[$discountId] = false; } } $rafDiscount += $baseDiscountAmount; $discountAmount = min($discountAmount + $item->getDiscountAmount(), $item->getRowTotal()); $baseDiscountAmount = min($baseDiscountAmount + $item->getBaseDiscountAmount(), $item->getBaseRowTotal()); //$discountPercent = min(100, $item->getDiscountPercent()+$percentDiscount); $item->setDiscountPercent(min(100, $item->getDiscountPercent() + $discountPercent)); $discountAmount = $quote->getStore()->roundPrice($discountAmount); $baseDiscountAmount = $quote->getStore()->roundPrice($baseDiscountAmount); $item->setDiscountAmount($discountAmount); $item->setBaseDiscountAmount($baseDiscountAmount); } else { $notUsed[] = $discountId; if (isset($discountUsed[$discountId])) { unset($discountUsed[$discountId]); } } break; case self::TYPE_FLATRATE: $discountAmount = min($item->getRowTotal() - $item->getDiscountAmount(), $quote->getStore()->convertPrice($discount->getAmount())); $baseDiscountAmount = min($item->getBaseRowTotal() - $item->getBaseDiscountAmount(), $discount->getAmount()); $checkDiscountAmount = $discount->getAmount(); if (!($rule->getDiscountGreater() && $checkDiscountAmount < $rule->getDiscountGreater()) && !($rule->getTotalGreater() && $baseSubtotal < $rule->getTotalGreater())) { if (isset($discountUsed)) { if (!isset($discountUsed[$discountId])) { $discountUsed[$discountId] = false; } } $rafDiscount += $baseDiscountAmount; $this->_discount[$discountId]->setAmount($discount->getAmount() - $baseDiscountAmount); /*$discountAmount = $quote->getStore()->roundPrice($discountAmount); $baseDiscountAmount = $quote->getStore()->roundPrice($baseDiscountAmount);*/ $discountAmount = min($discountAmount + $item->getDiscountAmount(), $item->getRowTotal()); $baseDiscountAmount = min($baseDiscountAmount + $item->getBaseDiscountAmount(), $item->getBaseRowTotal()); $item->setDiscountAmount($discountAmount); $item->setBaseDiscountAmount($baseDiscountAmount); } else { $notUsed[] = $discountId; if (isset($discountUsed[$discountId])) { unset($discountUsed[$discountId]); } } break; } } $trueDiscounts = Mage::helper('referafriend')->getTrueDiscount(); if (isset($trueDiscounts[$item->getId()]['discounts'][1])) { $item->setDiscountAmount($trueDiscounts[$item->getId()]['discounts'][1]); } Mage::helper('referafriend')->setTrueDiscount($item->getId(), $item->getDiscountAmount()); if (!$this->_couponCode) { $this->_couponCode = $this->_getPostCouponCode($notUsed); } $couponCode = explode(', ', $address->getCouponCode()); $couponCode[] = $helper->getCouponCodeDescription($this->_couponCode); $couponCode = array_unique(array_filter($couponCode)); $address->setCouponCode(implode(', ', $couponCode)); # injectin to Discount Description Array directly if (Mage::helper('referafriend')->checkVersion('1.4.0.0')) { $arr = array(); $arr[1] = implode(', ', $couponCode); $address->setDiscountDescriptionArray($arr); } # put discount amount in session store for future history Mage::helper('referafriend')->setCustomerDiscount($rafDiscount); if (count($clearUse) && $discountUsed && is_array($discountUsed) && count($discountUsed)) { foreach ($clearUse as $discountId) { if (isset($discountUsed[$discountId])) { unset($discountUsed[$discountId]); } } } if (isset($discountUsed)) { $customer->setDiscountUsed($discountUsed); } return $this; }
public function fillOutShippingItem(IOrderItem $itemPayload, Mage_Sales_Model_Quote_Item_Abstract $item, Mage_Customer_Model_Address_Abstract $address) { $shippingMethod = $this->shippingHelper->getUsableMethod($address); $itemPayload->setItemId($item->getSku())->setLineId($item->getAddressItemId() ?: $item->getId())->setQuantity($this->quantityHelper->getRequestedItemQuantity($item))->setGiftWrapRequested($this->isItemGiftWrapped($item))->setAddressLines($address->getStreet(static::ADDRESS_ALL_STREET_LINES))->setAddressCity($address->getCity())->setAddressCountryCode($address->getCountryId())->setShippingMethod($this->shippingHelper->getMethodSdkId($shippingMethod))->setAddressMainDivision($address->getRegionCode())->setAddressPostalCode($address->getPostcode())->setShippingMethodDisplayText($this->shippingHelper->getMethodTitle($shippingMethod)); }
/** * Transfer data from a quote item to a quantity * request item payload. * * @param Mage_Sales_Model_Quote_Item_Abstract * @param IQuantityItem * @return IQuantityItem */ public function itemToQuantityItem(Mage_Sales_Model_Quote_Item_Abstract $item, IQuantityItem $itemPayload) { return $itemPayload->setItemId($this->inventoryHelper->getRomSku($item->getSku()))->setLineId($item->getId()); }
/** * Get quote item id from a passed in sales/quote_item instance. Ensure * that if the passed in quote item has child product that it's the child quote * item id that get returned. * * @param Mage_Sales_Model_Quote_Item_Abstract * @return int */ protected function getQuoteItemId(Mage_Sales_Model_Quote_Item_Abstract $item) { $children = $item->getChildren() ?: []; foreach ($children as $childItem) { return $childItem->getId(); } return $item->getId(); }
/** * Convert quote item to order item * * @param Mage_Sales_Model_Quote_Item_Abstract $item * @return Mage_Sales_Model_Order_Item */ public function itemToOrderItem(Mage_Sales_Model_Quote_Item_Abstract $item) { $orderItem = Mage::getModel('sales/order_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())->setIsQtyDecimal($item->getIsQtyDecimal())->setQtyOrdered($item->getQty())->setOriginalPrice($item->getOriginalPrice())->setAppliedRuleIds($item->getAppliedRuleIds())->setAdditionalData($item->getAdditionalData())->setPrice($item->getCalculationPrice())->setTaxPercent($item->getTaxPercent())->setTaxAmount($item->getTaxAmount())->setRowWeight($item->getRowWeight())->setRowTotal($item->getRowTotal())->setBasePrice($item->getBaseCalculationPrice())->setBaseOriginalPrice($item->getPrice())->setBaseTaxAmount($item->getBaseTaxAmount())->setBaseRowTotal($item->getBaseRowTotal()); if (!$item->getNoDiscount()) { $orderItem->setDiscountPercent($item->getDiscountPercent())->setDiscountAmount($item->getDiscountAmount())->setBaseDiscountAmount($item->getBaseDiscountAmount()); } Mage::dispatchEvent('sales_convert_quote_item_to_order_item', array('order_item' => $orderItem, 'item' => $item)); return $orderItem; }
/** * Convert quote item to order item * * @param Mage_Sales_Model_Quote_Item_Abstract $item * @return Mage_Sales_Model_Order_Item */ public function itemToOrderItem(Mage_Sales_Model_Quote_Item_Abstract $item) { $orderItem = AO::getModel('sales/order_item')->setStoreId($item->getStoreId())->setQuoteItemId($item->getId())->setQuoteParentItemId($item->getParentItemId())->setProductId($item->getProductId())->setProductType($item->getProductType())->setProductOptions($item->getProduct()->getTypeInstance(true)->getOrderOptions($item->getProduct()))->setQtyBackordered($item->getBackorders()); AO::helper('core')->copyFieldset('sales_convert_quote_item', 'to_order_item', $item, $orderItem); if ($item->getParentItem()) { $orderItem->setQtyOrdered($orderItem->getQtyOrdered() * $item->getParentItem()->getQty()); } // ->setSku($item->getSku()) // ->setName($item->getName()) // ->setDescription($item->getDescription()) // ->setWeight($item->getWeight()) // ->setIsQtyDecimal($item->getIsQtyDecimal()) // ->setQtyOrdered($item->getQty()) // ->setOriginalPrice($item->getOriginalPrice()) // ->setAppliedRuleIds($item->getAppliedRuleIds()) // ->setAdditionalData($item->getAdditionalData()) // // ->setPrice($item->getCalculationPrice()) // ->setTaxPercent($item->getTaxPercent()) // ->setTaxAmount($item->getTaxAmount()) // ->setRowWeight($item->getRowWeight()) // ->setRowTotal($item->getRowTotal()) // // ->setBasePrice($item->getBaseCalculationPrice()) // ->setBaseOriginalPrice($item->getPrice()) // ->setBaseTaxAmount($item->getBaseTaxAmount()) // ->setBaseRowTotal($item->getBaseRowTotal()); if (!$item->getNoDiscount()) { AO::helper('core')->copyFieldset('sales_convert_quote_item', 'to_order_item_discount', $item, $orderItem); // $orderItem->setDiscountPercent($item->getDiscountPercent()) // ->setDiscountAmount($item->getDiscountAmount()) // ->setBaseDiscountAmount($item->getBaseDiscountAmount()); } AO::dispatchEvent('sales_convert_quote_item_to_order_item', array('order_item' => $orderItem, 'item' => $item)); return $orderItem; }
/** * @param array $args Must contain key/value for: * - order_item => eBayEnterprise\RetailOrderManagement\Payload\TaxDutyFee\ITaxedOrderItem * - item => Mage_Sales_Model_Quote_Item_Abstract * - address_id => int * - quote_id => int * May contain key/value for: * - tax_factory => EbayEnterprise_Tax_Helper_Factory */ public function __construct(array $args) { list($this->_orderItem, $this->_item, $this->_addressId, $this->_quoteId, $this->_taxFactory) = $this->_checkTypes($args['order_item'], $args['item'], $args['address_id'], $args['quote_id'], $this->_nullCoalesce($args, 'tax_factory', Mage::helper('ebayenterprise_tax/factory'))); $this->_itemId = $this->_item->getId(); }