/** * Get an estimated delivery message for a quote item. * * @param Mage_Sales_Model_Quote_Item_Abstract * @return string */ public function getEddMessage(Mage_Sales_Model_Quote_Item_Abstract $item) { /** @var string $singularOrPluralItem */ $singularOrPluralItem = (int) $item->getQty() > 1 ? 's' : ''; /** @var EbayEnterprise_Inventory_Model_Details_Item | Varien_Object | null $eddItem */ $eddItem = $this->detailService->getDetailsForItem($item) ?: $this->inventoryHelper->getStreetDateForBackorderableItem($item); return $eddItem ? $this->inventoryHelper->__($this->getEddTemplate(), $singularOrPluralItem, $eddItem->getDeliveryWindowFromDate()->format('m/d/y'), $eddItem->getDeliveryWindowToDate()->format('m/d/y')) : ''; }
/** * Calculate tax for each product * * @param Mage_Sales_Model_Quote_Item_Abstract $item * @param type $rate * @return Magestore_Customerreward_Model_Total_Quote_Tax */ protected function _calcUnitTaxAmount(Mage_Sales_Model_Quote_Item_Abstract $item, $rate) { $discount = $item->getDiscountAmount(); $baseDiscount = $item->getBaseDiscountAmount(); $item->setDiscountAmount($discount + $item->getAffiliateplusAmount() + $item->getCustomerrewardAmount()); $item->setBaseDiscountAmount($baseDiscount + $item->getBaseAffiliateplusAmount() + $item->getBaseCustomerrewardAmount()); parent::_calcUnitTaxAmount($item, $rate); $item->setDiscountAmount($discount); $item->setBaseDiscountAmount($baseDiscount); return $this; }
/** * Calculate tax for each product * * @param Mage_Sales_Model_Quote_Item_Abstract $item * @param type $rate * @return Magestore_Customerreward_Model_Total_Quote_Tax */ protected function _calcUnitTaxAmount(Mage_Sales_Model_Quote_Item_Abstract $item, $rate, &$taxGroups = null, $taxId = null, $recalculateRowTotalInclTax = false) { $discount = $item->getDiscountAmount(); $baseDiscount = $item->getBaseDiscountAmount(); /* hainh add this for calculating discount base on incl or excl tax price 22-04-2014 */ if (!$this->_discountIncludeTax()) { $item->setDiscountAmount($discount + $item->getAffiliateplusAmount() + $item->getCustomerrewardAmount()); $item->setBaseDiscountAmount($baseDiscount + $item->getBaseAffiliateplusAmount() + $item->getBaseCustomerrewardAmount()); } parent::_calcUnitTaxAmount($item, $rate, $taxGroups, $taxId, $recalculateRowTotalInclTax); $item->setDiscountAmount($discount); $item->setBaseDiscountAmount($baseDiscount); return $this; }
protected function _beforeSave() { parent::_beforeSave(); if ($this->getAddress()) { $this->setQuoteAddressId($this->getAddress()->getId()); } return $this; }
/** * Add additional amounts to discount calculation prices * * @param Mage_Sales_Model_Quote_Item_Abstract $item * @param float $basePrice * @param float $price * @return Mage_SalesRule_Helper_Data */ public function addItemDiscountPrices(Mage_Sales_Model_Quote_Item_Abstract $item, $basePrice, $price) { $discountPrice = $item->getDiscountCalculationPrice(); $baseDiscountPrice = $item->getBaseDiscountCalculationPrice(); if ($discountPrice || $baseDiscountPrice || $basePrice || $price) { $discountPrice = $discountPrice ? $discountPrice : $item->getCalculationPrice(); $baseDiscountPrice = $baseDiscountPrice ? $baseDiscountPrice : $item->getBaseCalculationPrice(); $this->setItemDiscountPrices($item, $baseDiscountPrice + $basePrice, $discountPrice + $price); } return $this; }
public function process(Mage_Sales_Model_Quote_Item_Abstract $item) { $item->setDiscountAmount(0); $item->setBaseDiscountAmount(0); $item->setDiscountPercent(0); $quote = $item->getQuote(); $address = $this->_getAddress($item); $qty = $item->getTotalQty(); $itemPrice = $this->_getItemPrice($item); $baseItemPrice = $this->_getItemBasePrice($item); $itemOriginalPrice = $this->_getItemOriginalPrice($item); $baseItemOriginalPrice = $this->_getItemBaseOriginalPrice($item); if ($itemPrice < 0) { return $this; } if ($this->_totaldiscountpay > 0) { if ($this->_rulesItemTotalspay['giftcardpay']['items_count'] <= 1) { $quoteAmount = $quote->getStore()->convertPrice($this->_totaldiscountpay); $baseDiscountAmount = min($baseItemPrice * $qty, $this->_totaldiscountpay); } else { $discountRate = $baseItemPrice * $qty / $this->_rulesItemTotalspay['giftcardpay']['base_items_price']; $maximumItemDiscount = $this->_totaldiscountpay * $discountRate; $quoteAmount = $quote->getStore()->convertPrice($maximumItemDiscount); $baseDiscountAmount = min($baseItemPrice * $qty, $maximumItemDiscount); $this->_rulesItemTotalspay['giftcardpay']['items_count']--; } $discountAmount = min($itemPrice * $qty, $quoteAmount); $discountAmount = $quote->getStore()->roundPrice($discountAmount); $baseDiscountAmount = $quote->getStore()->roundPrice($baseDiscountAmount); //get discount for original price $originalDiscountAmount = min($itemOriginalPrice * $qty, $quoteAmount); $baseOriginalDiscountAmount = $quote->getStore()->roundPrice($baseItemOriginalPrice); $this->_totaldiscountpay -= $baseDiscountAmount; } $itemDiscountAmount = $item->getDiscountAmount(); $itemBaseDiscountAmount = $item->getBaseDiscountAmount(); $discountAmount = min($itemDiscountAmount + $discountAmount, $itemPrice * $qty); $baseDiscountAmount = min($itemBaseDiscountAmount + $baseDiscountAmount, $baseItemPrice * $qty); $item->getGiftCardEarn($discountAmount); $item->getGiftCardBaseEarn($discountAmount); $baseTaxableAmount = $item->getBaseTaxableAmount(); $taxableAmount = $item->getTaxableAmount(); $item->setBaseTaxableAmount(max(0, $baseTaxableAmount - $discountAmount)); $item->setTaxableAmount(max(0, $taxableAmount - $discountAmount)); return $this; }
/** * Clone quote item * * @return Mage_Sales_Model_Quote_Item */ public function __clone() { parent::__clone(); $options = $this->getOptions(); $this->_quote = null; $this->_options = array(); $this->_optionsByCode = array(); foreach ($options as $option) { $this->addOption(clone $option); } return $this; }
/** * Check for the item to have gifting data. * * @param bool */ protected function _itemHasGifting() { return $this->_item->getGwId() && $this->_item->getGwPrice(); }
/** * Return discount item qty * * @param Mage_Sales_Model_Quote_Item_Abstract $item * @param Mage_SalesRule_Model_Rule $rule * @return int */ protected function _getItemQty($item, $rule) { $qty = $item->getTotalQty(); return $rule->getDiscountQty() ? min($qty, $rule->getDiscountQty()) : $qty; }
/** * Getter for nominal total item details * * @param Mage_Sales_Model_Quote_Item_Abstract $quoteItem * @return array */ public function getTotalItemDetails(Mage_Sales_Model_Quote_Item_Abstract $quoteItem) { return $quoteItem->getNominalTotalDetails(); }
protected function getAddress_new(Mage_Sales_Model_Quote_Item_Abstract $item) { if ($item instanceof Mage_Sales_Model_Quote_Address_Item) { $address = $item->getAddress(); } elseif ($item->getQuote()->isVirtual()) { $address = $item->getQuote()->getBillingAddress(); } else { $address = $item->getQuote()->getShippingAddress(); } return $address; }
/** * 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('Mage_Sales_Model_Order_Item')->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()->getOrderOptions($item->getProduct()); } $orderItem->setProductOptions($options); Mage::helper('Mage_Core_Helper_Data')->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('Mage_Core_Helper_Data')->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; }
/** * return true if the item is giftwrapped; false otherwise. * * @param Mage_Sales_Model_Quote_Item_Abstract * @return bool */ protected function isItemGiftWrapped(Mage_Sales_Model_Quote_Item_Abstract $item) { return (bool) $item->getGwId() || $item->getAddress() && $item->getAddress()->getGwId(); }
/** * Request shipping rates for entire address or specified address item * Returns true if current selected shipping method code corresponds to one of the found rates * * @param Mage_Sales_Model_Quote_Item_Abstract $item * @return bool */ public function requestShippingRates(Mage_Sales_Model_Quote_Item_Abstract $item = null) { /** @var $request Mage_Shipping_Model_Rate_Request */ $request = Mage::getModel('shipping/rate_request'); $request->setAllItems($item ? array($item) : $this->getAllItems()); $request->setDestCountryId($this->getCountryId()); $request->setDestRegionId($this->getRegionId()); $request->setDestRegionCode($this->getRegionCode()); /** * need to call getStreet with -1 * to get data in string instead of array */ $request->setDestStreet($this->getStreet(-1)); $request->setDestCity($this->getCity()); $request->setDestPostcode($this->getPostcode()); $request->setPackageValue($item ? $item->getBaseRowTotal() : $this->getBaseSubtotal()); $packageValueWithDiscount = $item ? $item->getBaseRowTotal() - $item->getBaseDiscountAmount() : $this->getBaseSubtotalWithDiscount(); $request->setPackageValueWithDiscount($packageValueWithDiscount); $request->setPackageWeight($item ? $item->getRowWeight() : $this->getWeight()); $request->setPackageQty($item ? $item->getQty() : $this->getItemQty()); /** * Need for shipping methods that use insurance based on price of physical products */ $packagePhysicalValue = $item ? $item->getBaseRowTotal() : $this->getBaseSubtotal() - $this->getBaseVirtualAmount(); $request->setPackagePhysicalValue($packagePhysicalValue); $request->setFreeMethodWeight($item ? 0 : $this->getFreeMethodWeight()); /** * Store and website identifiers need specify from quote */ /*$request->setStoreId(Mage::app()->getStore()->getId()); $request->setWebsiteId(Mage::app()->getStore()->getWebsiteId());*/ $request->setStoreId($this->getQuote()->getStore()->getId()); $request->setWebsiteId($this->getQuote()->getStore()->getWebsiteId()); $request->setFreeShipping($this->getFreeShipping()); /** * Currencies need to convert in free shipping */ $request->setBaseCurrency($this->getQuote()->getStore()->getBaseCurrency()); $request->setPackageCurrency($this->getQuote()->getStore()->getCurrentCurrency()); $request->setLimitCarrier($this->getLimitCarrier()); $request->setBaseSubtotalInclTax($this->getBaseSubtotalInclTax()); $result = Mage::getModel('shipping/shipping')->collectRates($request)->getResult(); $found = false; if ($result) { $shippingRates = $result->getAllRates(); // ============ Apply shipping on order minimum value after discount specific to coupon code only ================= if (!Mage::app()->getStore()->isAdmin()) { foreach ($shippingRates as $i => $r) { if ($r->getMethod() == 'freeshipping') { unset($shippingRates[$i]); } } } $isfree = true; $minimum_purchange_amount = Mage::getStoreConfig('sales/minimum_order_custom/minimum_purchange_amount'); $minimum_purchange_amount_status = Mage::getStoreConfig('sales/minimum_order_custom/minimum_purchange_amount_status'); if ($minimum_purchange_amount_status == '1' && $minimum_purchange_amount > 0) { $minPurchaseAmt = Mage::helper('common')->checkMinPurchageAmount($minimum_purchange_amount); if ($minPurchaseAmt) { foreach ($shippingRates as $i => $r) { if ($r->getMethod() == 'standard') { $shippingRates[$i]->setPrice(0); $shippingRates[$i]->setCost(0); $isfree = true; } } } } // ========================================================================================== foreach ($shippingRates as $shippingRate) { $rate = Mage::getModel('sales/quote_address_rate')->importShippingRate($shippingRate); if (!$item) { $this->addShippingRate($rate); } if ($this->getShippingMethod() == $rate->getCode()) { if ($item) { $item->setBaseShippingAmount($rate->getPrice()); } else { /** * possible bug: this should be setBaseShippingAmount(), * see Mage_Sales_Model_Quote_Address_Total_Shipping::collect() * where this value is set again from the current specified rate price * (looks like a workaround for this bug) */ $this->setShippingAmount($rate->getPrice()); } $found = true; } } } return $found; }
public function process(Mage_Sales_Model_Quote_Item_Abstract $item) { $item->setFreeShipping(false); $item->setDiscountAmount(0); $item->setBaseDiscountAmount(0); $item->setDiscountPercent(0); $quote = $item->getQuote(); $address = $item->getAddress(); if (!$address) { $address = $item->getQuote()->getShippingAddress(); } $customerId = $quote->getCustomerId(); $ruleCustomer = Mage::getModel('salesrule/rule_customer'); $appliedRuleIds = array(); foreach ($this->_rules as $rule) { /** * already tried to validate and failed */ if ($rule->getIsValid() === false) { continue; } if ($rule->getIsValid() !== true) { /** * too many times used in general */ if ($rule->getUsesPerCoupon() && $rule->getTimesUsed() >= $rule->getUsesPerCoupon()) { $rule->setIsValid(false); continue; } /** * too many times used for this customer */ if ($ruleId = $rule->getId()) { $ruleCustomer->loadByCustomerRule($customerId, $ruleId); if ($ruleCustomer->getId()) { if ($ruleCustomer->getTimesUsed() >= $rule->getUsesPerCustomer()) { continue; } } } $rule->afterLoad(); /** * quote does not meet rule's conditions */ if (!$rule->validate($address)) { $rule->setIsValid(false); continue; } /** * passed all validations, remember to be valid */ $rule->setIsValid(true); } /** * although the rule is valid, this item is not marked for action */ if (!$rule->getActions()->validate($item)) { continue; } $qty = $rule->getDiscountQty() ? min($item->getQty(), $rule->getDiscountQty()) : $item->getQty(); $rulePercent = $rule->getDiscountAmount(); switch ($rule->getSimpleAction()) { case 'to_percent': $rulePercent = max(0, 100 - $rule->getDiscountAmount()); //no break; //no break; case 'by_percent': $discountAmount = $qty * $item->getCalculationPrice() * $rulePercent / 100; $baseDiscountAmount = $qty * $item->getBaseCalculationPrice() * $rulePercent / 100; if (!$rule->getDiscountQty()) { $discountPercent = min(100, $item->getDiscountPercent() + $rulePercent); $item->setDiscountPercent($discountPercent); } break; case 'to_fixed': $quoteAmount = $quote->getStore()->convertPrice($rule->getDiscountAmount()); $discountAmount = $qty * ($item->getCalculationPrice() - $quoteAmount); $baseDiscountAmount = $qty * ($item->getBaseCalculationPrice() - $rule->getDiscountAmount()); break; case 'by_fixed': $quoteAmount = $quote->getStore()->convertPrice($rule->getDiscountAmount()); $discountAmount = $qty * $quoteAmount; $baseDiscountAmount = $qty * $rule->getDiscountAmount(); break; } $discountAmount = $quote->getStore()->roundPrice($discountAmount); $baseDiscountAmount = $quote->getStore()->roundPrice($baseDiscountAmount); $discountAmount = min($discountAmount, $item->getRowTotal()); $baseDiscountAmount = min($baseDiscountAmount, $item->getBaseRowTotal()); $item->setDiscountAmount($discountAmount); $item->setBaseDiscountAmount($baseDiscountAmount); switch ($rule->getSimpleFreeShipping()) { case Mage_SalesRule_Model_Rule::FREE_SHIPPING_ITEM: $item->setFreeShipping($rule->getDiscountQty() ? $rule->getDiscountQty() : true); break; case Mage_SalesRule_Model_Rule::FREE_SHIPPING_ADDRESS: $address->setFreeShipping(true); break; } $appliedRuleIds[$rule->getRuleId()] = $rule->getRuleId(); if ($rule->getStopRulesProcessing()) { break; } if ($rule->getCouponCode() && $rule->getCouponCode() == $this->getCouponCode()) { $address->setCouponCode($this->getCouponCode()); } } $item->setAppliedRuleIds(join(',', $appliedRuleIds)); $address->setAppliedRuleIds($this->mergeIds($address->getAppliedRuleIds(), $appliedRuleIds)); $quote->setAppliedRuleIds($this->mergeIds($quote->getAppliedRuleIds(), $appliedRuleIds)); return $this; }
/** * Recalculate parent item amounts base on children data * * @param Mage_Sales_Model_Quote_Item_Abstract $item * @return Mage_Tax_Model_Sales_Total_Quote */ protected function _recalculateParent(Mage_Sales_Model_Quote_Item_Abstract $item) { $rowTaxAmount = 0; $baseRowTaxAmount = 0; foreach ($item->getChildren() as $child) { $rowTaxAmount += $child->getTaxAmount(); $baseRowTaxAmount += $child->getBaseTaxAmount(); } $item->setTaxAmount($rowTaxAmount); $item->setBaseTaxAmount($baseRowTaxAmount); return $this; }
protected function resetItem(Mage_Sales_Model_Quote_Item_Abstract $item) { $item->setDiscountAmount(0.0); $item->setBaseDiscountAmount(0.0); $item->setRowTotalWithDiscount($item->getRowTotal()); $item->setBaseRowTotalWithDiscount($item->getBaseRowTotal()); $item->setDiscountPercent(0); $item->setAppliedRuleIds(''); $item->setFreeShipping(false); }
/** * Get tax rate based on store shipping origin address settings * This rate can be used for conversion store price including tax to * store price excluding tax * * @param Mage_Sales_Model_Quote_Item_Abstract $item * @param null|Mage_Core_Model_Store $store * @return float */ public function getStoreRateForItem($item, $store = null) { $storeRequest = $this->getRateOriginRequest($store)->setProductClassId($item->getProduct()->getTaxClassId()); return $this->getRate($storeRequest); }
/** * Whether the item row total may be compouded with others * * @param Mage_Sales_Model_Quote_Item_Abstract $item * @return bool */ public function getIsItemRowTotalCompoundable(Mage_Sales_Model_Quote_Item_Abstract $item) { if ($item->getData("skip_compound_{$this->_itemRowTotalKey}")) { return false; } return true; }
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; }
/** * Prevent compounding nominal subtotal in case if the trial payment exists * * @see Mage_Sales_Model_Quote_Address_Total_Nominal_Subtotal * @param Mage_Sales_Model_Quote_Address $address * @param Mage_Sales_Model_Quote_Item_Abstract $item */ protected function _afterCollectSuccess($address, $item) { $item->setData('skip_compound_row_total', true); }
/** * Calculate the total quantity requested of a given item. All items in the * quote with the same SKU as the given item will be counted toward the * total quantity. * * @param Mage_Sales_Model_Quote_Item_Abstract * @param Mage_Sales_Model_Quote_Item_Abstract[] * @return int */ public function calculateTotalQuantityRequested(Mage_Sales_Model_Quote_Item_Abstract $item, array $allItems) { $sku = $item->getSku(); $quantitiesBySku = $this->calculateTotalQuantitiesBySku($allItems); return isset($quantitiesBySku[$sku]) ? $quantitiesBySku[$sku] : 0; }
/** * return true if the item's manage stock setting is on * * @param Mage_Sales_Model_Quote_Item_Abstract * @return bool */ public function isStockManaged(Mage_Sales_Model_Quote_Item_Abstract $item) { $stock = $item->getProduct()->getStockItem(); return (bool) $stock->getManageStock(); }
/** * Recalculate row information for item based on children calculation * * @param Mage_Sales_Model_Quote_Item_Abstract $item * @return Mage_Tax_Model_Sales_Total_Quote_Subtotal */ protected function _recalculateParent(Mage_Sales_Model_Quote_Item_Abstract $item) { $price = 0; $basePrice = 0; $rowTotal = 0; $baseRowTotal = 0; $priceInclTax = 0; $basePriceInclTax = 0; $rowTotalInclTax = 0; $baseRowTotalInclTax = 0; foreach ($item->getChildren() as $child) { $price += $child->getPrice() * $child->getQty(); $basePrice += $child->getBasePrice() * $child->getQty(); $rowTotal += $child->getRowTotal(); $baseRowTotal += $child->getBaseRowTotal(); $priceInclTax += $child->getPriceInclTax() * $child->getQty(); $basePriceInclTax += $child->getBasePriceInclTax() * $child->getQty(); $rowTotalInclTax += $child->getRowTotalInclTax(); $baseRowTotalInclTax += $child->getBaseRowTotalInclTax(); } /** * * Customisation To make the custom price work with configurable items * **/ if ($item->getCustomPrice()) { $customPrice = $item->getCustomPrice(); $price = $customPrice; $basePrice = $customPrice; $rowTotal = $customPrice * $item->getQty(); $baseRowTotal = $customPrice * $item->getQty(); $priceInclTax = $customPrice; $basePriceInclTax = $customPrice; $rowTotalInclTax = $customPrice * $item->getQty(); $baseRowTotalInclTax = $customPrice * $item->getQty(); } $item->setConvertedPrice($price); $item->setPrice($basePrice); $item->setRowTotal($rowTotal); $item->setBaseRowTotal($baseRowTotal); $item->setPriceInclTax($priceInclTax); $item->setBasePriceInclTax($basePriceInclTax); $item->setRowTotalInclTax($rowTotalInclTax); $item->setBaseRowTotalInclTax($baseRowTotalInclTax); return $this; }
/** * Get a passed in item product stock item. * * @param Mage_Sales_Model_Quote_Item_Abstract * @return Mage_CatalogInventory_Model_Stock_Item */ protected function getItemProductStockItem(Mage_Sales_Model_Quote_Item_Abstract $quoteItem) { return $quoteItem->getProduct()->getStockItem(); }
/** * determine if the item's amounts should be put into the request. * * @param Mage_Sales_Model_Quote_Item_Abstract * @return bool */ protected function canIncludeAmounts(Mage_Sales_Model_Quote_Item_Abstract $item) { return !($item->getProduct()->getTypeId() === Mage_Catalog_Model_Product_Type::TYPE_BUNDLE && $item->isChildrenCalculated()); }
/** * Request shipping rates for entire address or specified address item * Returns true if current selected shipping method code corresponds to one of the found rates * * @param Mage_Sales_Model_Quote_Item_Abstract $item * @return bool */ public function requestShippingRates(Mage_Sales_Model_Quote_Item_Abstract $item = null) { //Mage::log("requestShippingRates"); /** @var $request Mage_Shipping_Model_Rate_Request */ $request = Mage::getModel('shipping/rate_request'); $request->setAllItems($item ? array($item) : $this->getAllItems()); $request->setDestCountryId($this->getCountryId()); $request->setDestRegionId($this->getRegionId()); $request->setDestRegionCode($this->getRegionCode()); /** * need to call getStreet with -1 * to get data in string instead of array */ $request->setDestStreet($this->getStreet(-1)); $request->setDestCity($this->getCity()); $request->setDestPostcode($this->getPostcode()); $request->setPackageValue($item ? $item->getBaseRowTotal() : $this->getBaseSubtotal()); $packageValueWithDiscount = $item ? $item->getBaseRowTotal() - $item->getBaseDiscountAmount() : $this->getBaseSubtotalWithDiscount(); $request->setPackageValueWithDiscount($packageValueWithDiscount); $request->setPackageWeight($item ? $item->getRowWeight() : $this->getWeight()); $request->setPackageQty($item ? $item->getQty() : $this->getItemQty()); /** * Need for shipping methods that use insurance based on price of physical products */ $packagePhysicalValue = $item ? $item->getBaseRowTotal() : $this->getBaseSubtotal() - $this->getBaseVirtualAmount(); $request->setPackagePhysicalValue($packagePhysicalValue); $request->setFreeMethodWeight($item ? 0 : $this->getFreeMethodWeight()); /** * Store and website identifiers need specify from quote */ /*$request->setStoreId(Mage::app()->getStore()->getId()); $request->setWebsiteId(Mage::app()->getStore()->getWebsiteId());*/ $request->setStoreId($this->getQuote()->getStore()->getId()); $request->setWebsiteId($this->getQuote()->getStore()->getWebsiteId()); $request->setFreeShipping($this->getFreeShipping()); /** * Currencies need to convert in free shipping */ $request->setBaseCurrency($this->getQuote()->getStore()->getBaseCurrency()); $request->setPackageCurrency($this->getQuote()->getStore()->getCurrentCurrency()); $request->setLimitCarrier($this->getLimitCarrier()); $result = Mage::getModel('shipping/shipping')->collectRatesWithAddress($request, $this)->getResult(); $found = false; if ($result) { $shippingRates = $result->getAllRates(); foreach ($shippingRates as $shippingRate) { $rate = Mage::getModel('sales/quote_address_rate')->importShippingRate($shippingRate); if (!$item) { $this->addShippingRate($rate); } if ($this->getShippingMethod() == $rate->getCode()) { if ($item) { $item->setBaseShippingAmount($rate->getPrice()); } else { /** * possible bug: this should be setBaseShippingAmount(), * see Mage_Sales_Model_Quote_Address_Total_Shipping::collect() * where this value is set again from the current specified rate price * (looks like a workaround for this bug) */ $this->setShippingAmount($rate->getPrice()); } $found = true; } } } return $found; }
/** * Recollect item price and row total using after taxes subtract. * Declare item price including tax attributes * * @deprecated after 1.4.1 * * @param Mage_Sales_Model_Quote_Address $address * @param Mage_Sales_Model_Quote_Item_Abstract $item * * @return Mage_Tax_Model_Sales_Total_Quote_Subtotal */ protected function _recollectItem($address, Mage_Sales_Model_Quote_Item_Abstract $item) { $store = $address->getQuote()->getStore(); $request = $this->_getStoreTaxRequest($address); $request->setProductClassId($item->getProduct()->getTaxClassId()); $rate = $this->_calculator->getRate($request); $qty = $item->getTotalQty(); $price = $taxPrice = $item->getCalculationPriceOriginal(); $basePrice = $baseTaxPrice = $item->getBaseCalculationPriceOriginal(); $subtotal = $taxSubtotal = $item->getRowTotal(); $baseSubtotal = $baseTaxSubtotal = $item->getBaseRowTotal(); if ($this->_config->discountTax($store)) { $item->setDiscountCalculationPrice($price); $item->setBaseDiscountCalculationPrice($basePrice); } /** * Use original price for tax calculation */ if ($item->hasCustomPrice() && !$this->_helper->applyTaxOnCustomPrice($store)) { $taxPrice = $item->getOriginalPrice(); $baseTaxPrice = $item->getBaseOriginalPrice(); $taxSubtotal = $taxPrice * $qty; $baseTaxSubtotal = $baseTaxPrice * $qty; } if ($this->_areTaxRequestsSimilar) { $item->setRowTotalInclTax($subtotal); $item->setBaseRowTotalInclTax($baseSubtotal); $item->setPriceInclTax($price); $item->setBasePriceInclTax($basePrice); $item->setTaxCalcPrice($taxPrice); $item->setBaseTaxCalcPrice($baseTaxPrice); $item->setTaxCalcRowTotal($taxSubtotal); $item->setBaseTaxCalcRowTotal($baseTaxSubtotal); } $this->_subtotalInclTax += $subtotal; $this->_baseSubtotalInclTax += $baseSubtotal; if ($this->_config->getAlgorithm($store) == Mage_Tax_Model_Calculation::CALC_UNIT_BASE) { $taxAmount = $this->_calculator->calcTaxAmount($taxPrice, $rate, true); $baseTaxAmount = $this->_calculator->calcTaxAmount($baseTaxPrice, $rate, true); $unitPrice = $this->_calculator->round($price - $taxAmount); $baseUnitPrice = $this->_calculator->round($basePrice - $baseTaxAmount); $subtotal = $this->_calculator->round($unitPrice * $qty); $baseSubtotal = $this->_calculator->round($baseUnitPrice * $qty); } else { $taxAmount = $this->_calculator->calcTaxAmount($taxSubtotal, $rate, true, false); $baseTaxAmount = $this->_calculator->calcTaxAmount($baseTaxSubtotal, $rate, true, false); $unitPrice = ($subtotal - $taxAmount) / $qty; $baseUnitPrice = ($baseSubtotal - $baseTaxAmount) / $qty; $subtotal = $this->_calculator->round($subtotal - $taxAmount); $baseSubtotal = $this->_calculator->round($baseSubtotal - $baseTaxAmount); } if ($item->hasCustomPrice()) { $item->setCustomPrice($unitPrice); $item->setBaseCustomPrice($baseUnitPrice); } $item->setPrice($baseUnitPrice); $item->setOriginalPrice($unitPrice); $item->setBasePrice($baseUnitPrice); $item->setRowTotal($subtotal); $item->setBaseRowTotal($baseSubtotal); return $this; }
/** * Aggregate item discount information to address data and related properties * * @param Mage_Sales_Model_Quote_Item_Abstract $item * @return Mage_SalesRule_Model_Quote_Discount */ protected function _aggregateItemDiscount($item) { $this->_addAmount(-$item->getDiscountAmount()); $this->_addBaseAmount(-$item->getBaseDiscountAmount()); return $this; }
/** * Sets applied weee taxes * * @param Mage_Sales_Model_Quote_Item_Abstract $item * @param array $value * @return Mage_Weee_Helper_Data */ public function setApplied($item, $value) { $item->setWeeeTaxApplied(serialize($value)); return $this; }