/** * Sets all variations of price on final totals for use with standard items. Not the parent bundle/configurable. * * @param Mage_Sales_Model_Quote_Item $item * @param Webshopapps_Wsacommon_Model_Totals $finalTotals */ protected function setStandardPrices($item, &$finalTotals) { $finalTotals->setBasePrice($finalTotals->getBasePrice() + $item->getBaseRowTotal()); $finalTotals->setPrice($finalTotals->getPrice() + $item->getRowTotal()); $finalTotals->setPriceInclTax($finalTotals->getPriceInclTax() + $item->getRowTotalInclTax()); $finalTotals->setBasePriceInclTax($finalTotals->getBasePriceInclTax() + $item->getBaseRowTotalInclTax()); $finalTotals->setDiscountedPrice($finalTotals->getDiscountedPrice() + ($item->getRowTotal() - $item->getDiscountAmount())); $finalTotals->setBaseDiscountedPrice($finalTotals->getBaseDiscountedPrice() + ($item->getBaseRowTotal() - $item->getBaseDiscountAmount())); $finalTotals->setDiscountedPriceInclTax($finalTotals->getDiscountedPriceInclTax() + ($item->getRowTotalInclTax() - $item->getDiscountAmount())); $finalTotals->setBaseDiscountedPriceInclTax($finalTotals->getBaseDiscountedPriceInclTax() + ($item->getBaseRowTotalInclTax() - $item->getBaseDiscountAmount())); }
/** * Fetches the item price that should be used for calculating max catalog points spending * for the given item. Uses the following check hierarchy: * CustomPrice * > if not set use item price * > if not set use product final price * > if not set use * * @param Mage_Sales_Model_Quote_Item $item */ public function getItemProductPrice($item) { // Prepare data from item and initalize counters $store_currency = (double) $this->getCurrencyRate($item->getQuote()); if ($item->hasCustomPrice()) { $product_price = (double) $item->getCustomPrice() * $store_currency; } elseif (Mage::helper('tax')->priceIncludesTax() && ($item->getRowTotalBeforeRedemptions() && $item->getRowTotal())) { $rt = (double) $item->getRowTotal(); $item->setRowTotal($item->getRowTotalBeforeRedemptions()); $product_price = (double) Mage::helper('checkout')->getPriceInclTax($item); $item->setRowTotal($rt); } else { // item doesn't have a price, use the item product final price $item_price = (double) $item->getPrice(); $item_price = !empty($item_price) ? $item->getPrice() : $item->getProduct()->getFinalPrice(); $product_price = (double) $item_price * $store_currency; } return $product_price; }
/** * Returns the item's row total with any discount and also with any tax * * @param Mage_Sales_Model_Quote_Item $item * @return string */ public function displayRowTotalWithDiscountInclTax($item) { $tax = $item->getTaxAmount() ? $item->getTaxAmount() : 0; return $this->formatPrice($item->getRowTotal() - $item->getDiscountAmount() + $tax); }
/** * Add row total item amount to subtotal * * @param Mage_Sales_Model_Quote_Address $address * @param Mage_Sales_Model_Quote_Item $item * @return $this */ protected function _addSubtotalAmount(Mage_Sales_Model_Quote_Address $address, $item) { if ($this->_getTaxDataHelper()->priceIncludesTax($item->getStoreId())) { $subTotal = $item->getRowTotalInclTax() - $item->getRowTax(); $baseSubTotal = $item->getBaseRowTotalInclTax() - $item->getBaseRowTax(); $address->setTotalAmount('subtotal', $address->getTotalAmount('subtotal') + $subTotal); $address->setBaseTotalAmount('subtotal', $address->getBaseTotalAmount('subtotal') + $baseSubTotal); } else { $address->setTotalAmount('subtotal', $address->getTotalAmount('subtotal') + $item->getRowTotal()); $address->setBaseTotalAmount('subtotal', $address->getBaseTotalAmount('subtotal') + $item->getBaseRowTotal()); } $address->setSubtotalInclTax($address->getSubtotalInclTax() + $item->getRowTotalInclTax()); $address->setBaseSubtotalInclTax($address->getBaseSubtotalInclTax() + $item->getBaseRowTotalInclTax()); return $this; }
/** * Returns a total discount on the cart from the provided items * * @param Mage_Sales_Model_Quote_Item $item * @param Mage_Sales_Model_Quote_Address $address * @param TBT_Rewards_Model_Sales_Rule $rule * @param array() &$cartRules * @param int $qty max discount qty or unlimited if null * @return array($discountAmount, $baseDiscountAmount) */ protected function _getTotalPercentDiscountOnitem($item, $address, $rule, &$cartRules, $qty = null) { $quote = $item->getQuote(); $store = $item->getQuote()->getStore(); $qty = empty($qty) ? $item->getQty() : (int) $qty; $quoteAmount = $quote->getStore()->convertPrice($cartRules[$rule->getId()]); $quoteAmountBase = $cartRules[$rule->getId()]; if (Mage::helper('tax')->discountTax($store) && !Mage::helper('tax')->applyTaxAfterDiscount($store)) { $tax_amount = $item->getTaxAmount() / $item->getQty() * $qty; $base_tax_amount = $item->getBaseTaxAmount() / $item->getQty() * $qty; $quoteAmount += $tax_amount; // $cartItem->getTaxAmount(); $quoteAmountBase += $base_tax_amount; // $cartItem->getTaxAmount(); } else { $tax_amount = $base_tax_amount = 0; } $shipping_amount = $address->getShippingAmount(); $base_shipping_amount = $address->getBaseShippingAmount(); $add_shipping = $rule->getApplyToShipping() ? $shipping_amount : 0; $add_base_shipping = $rule->getApplyToShipping() ? $base_shipping_amount : 0; $discountAmount = min($item->getRowTotal() / $item->getQty() * $qty - $item->getDiscountAmount() + $add_shipping + $tax_amount, $quoteAmount); $baseDiscountAmount = min($item->getBaseRowTotal() / $item->getQty() * $qty - $item->getBaseDiscountAmount() + $add_base_shipping + $base_tax_amount, $quoteAmountBase); return array($discountAmount, $baseDiscountAmount); }
/** * * @param Mage_Sales_Model_Quote_Item $item */ public function resetItemDiscounts($item) { if (!$item) { return $this; } if ($item->getRowTotalBeforeRedemptions() == 0) { $item->setRowTotalBeforeRedemptions($item->getRowTotal()); $item->setRowTotalBeforeRedemptionsInclTax($item->getRowTotalInclTax()); } elseif ($item->getRowTotalBeforeRedemptions() < $item->getRowTotal()) { $item->setRowTotal($item->getRowTotalBeforeRedemptions()); $item->setRowTotalInclTax($item->getRowTotalBeforeRedemptionsInclTax()); } else { // do nothing } return $this; }
/** * 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; }
/** * * @param Mage_Sales_Model_Quote_Item $item */ public function resetItemDiscounts($item) { if (!$item) { return $this; } if ($item->getRowTotalBeforeRedemptions() == 0) { $item->setRowTotalBeforeRedemptions($item->getRowTotal()); $item->setRowTotalBeforeRedemptionsInclTax($item->getRowTotalInclTax()); } elseif ($item->getRowTotalBeforeRedemptions() < $item->getRowTotal()) { $item->setRowTotal($item->getRowTotalBeforeRedemptions()); $item->setRowTotalInclTax($item->getRowTotalBeforeRedemptionsInclTax()); } else { // do nothing } if (!Mage::helper('rewards')->isBaseMageVersionAtLeast('1.4')) { // only happens in Magento 1.3 $rowTotalInclTax = $item->getRowTotalBeforeRedemptions() * (1 + $item->getTaxPercent() / 100); $item->setRowTotalBeforeRedemptionsInclTax($rowTotalInclTax); } return $this; }