Esempio n. 1
0
 /**
  * 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;
 }
Esempio n. 2
0
 /**
  * Return item price
  *
  * @param Mage_Sales_Model_Quote_Item_Abstract $item
  * @return float
  */
 protected function _getItemPrice($item)
 {
     $price = $item->getDiscountCalculationPrice();
     $calcPrice = $item->getCalculationPrice();
     return $price !== null ? $price : $calcPrice;
 }
Esempio n. 3
0
 /**
  * Return item original price
  *
  * @param Mage_Sales_Model_Quote_Item_Abstract $item
  * @return float
  */
 protected function _getItemOriginalPrice($item)
 {
     $price = $item->getDiscountCalculationPrice();
     return ($price !== null) ? $price : $item->getCalculationPrice();
 }
Esempio n. 4
0
 /**
  * Return item price in currently active for quote currency
  *
  * @param Mage_Sales_Model_Quote_Item_Abstract $item
  * @return float
  */
 private function _getItemPrice($item)
 {
     $price = $item->getDiscountCalculationPrice();
     return $price !== null ? $price : $item->getCalculationPrice();
 }
 /**
  * Calculate unit tax anount based on unit price
  *
  * @param   Mage_Sales_Model_Quote_Item_Abstract $item
  * @param   float $rate
  * @return  Mage_Tax_Model_Sales_Total_Quote
  */
 protected function _calcUnitTaxAmount(Mage_Sales_Model_Quote_Item_Abstract $item, $rate)
 {
     $store = $item->getStore();
     $inclTax = $this->_usePriceIncludeTax($store);
     $extra = $item->getExtraTaxableAmount();
     $baseExtra = $item->getBaseExtraTaxableAmount();
     if ($inclTax) {
         $price = $store->roundPrice($item->getTaxCalcPrice()) + $extra;
         $basePrice = $store->roundPrice($item->getBaseTaxCalcPrice()) + $baseExtra;
     } else {
         if ($item->hasCustomPrice() && $this->_helper->applyTaxOnCustomPrice($store)) {
             $price = $store->roundPrice($item->getCalculationPrice()) + $extra;
             $basePrice = $store->roundPrice($item->getBaseCalculationPrice()) + $baseExtra;
         } else {
             $price = $store->roundPrice($item->getOriginalPrice()) + $item->getExtraTaxableAmount();
             $basePrice = $store->roundPrice($item->getBaseOriginalPrice()) + $item->getBaseExtraTaxableAmount();
         }
     }
     $discountAmount = $item->getDiscountAmount();
     $baseDiscountAmount = $item->getBaseDiscountAmount();
     $qty = $item->getTotalQty();
     $item->setTaxPercent($rate);
     $rate = $rate / 100;
     $calculationSequence = $this->_config->getCalculationSequence($store);
     switch ($calculationSequence) {
         case Mage_Tax_Model_Calculation::CALC_TAX_BEFORE_DISCOUNT_ON_EXCL:
             $unitTax = $this->_calculator->calcTaxAmount($price, $rate, $inclTax);
             $baseUnitTax = $this->_calculator->calcTaxAmount($basePrice, $rate, $inclTax);
             break;
         case Mage_Tax_Model_Calculation::CALC_TAX_BEFORE_DISCOUNT_ON_INCL:
             $unitTax = $this->_calculator->calcTaxAmount($price, $rate, $inclTax);
             $baseUnitTax = $this->_calculator->calcTaxAmount($basePrice, $rate, $inclTax);
             if ($inclTax) {
                 $item->setDiscountCalculationPrice($price);
                 $item->setBaseDiscountCalculationPrice($basePrice);
             } else {
                 $item->setDiscountCalculationPrice($price + $unitTax);
                 $item->setBaseDiscountCalculationPrice($basePrice + $baseUnitTax);
             }
             break;
         case Mage_Tax_Model_Calculation::CALC_TAX_AFTER_DISCOUNT_ON_EXCL:
         case Mage_Tax_Model_Calculation::CALC_TAX_AFTER_DISCOUNT_ON_INCL:
             $unitTax = $this->_calculator->calcTaxAmount($price - $discountAmount / $qty, $rate, $inclTax);
             $baseUnitTax = $this->_calculator->calcTaxAmount($basePrice - $baseDiscountAmount / $qty, $rate, $inclTax);
             break;
     }
     $totalTax = $store->roundPrice($qty * $unitTax);
     $totalBaseTax = $store->roundPrice($qty * $baseUnitTax);
     /**
      * Renew item amounts in case if we are working with price include tax
      */
     if ($inclTax) {
         if ($item->hasCustomPrice()) {
             $item->setCustomPrice($item->getPriceInclTax() - $unitTax);
             $item->setBaseCustomPrice($item->getBasePriceInclTax() - $baseUnitTax);
         } else {
             $item->setOriginalPrice($item->getPriceInclTax() - $unitTax);
             $item->setPrice($item->getBasePriceInclTax() - $baseUnitTax);
             $item->setBasePrice($item->getBasePriceInclTax() - $baseUnitTax);
         }
         $item->setRowTotal($item->getRowTotalInclTax() - $totalTax);
         $item->setBaseRowTotal($item->getBaseRowTotalInclTax() - $totalBaseTax);
     }
     $item->setTaxAmount($totalTax);
     $item->setBaseTaxAmount($totalBaseTax);
     return $this;
 }
Esempio n. 6
0
 /**
  * Return item price
  *
  * @param Mage_Sales_Model_Quote_Item_Abstract $item
  *
  * @return float
  */
 public function getItemPrice(Mage_Sales_Model_Quote_Item_Abstract $item)
 {
     $price = $item->getDiscountCalculationPrice();
     $calcPrice = $item->getCalculationPrice();
     return $price !== null ? $price : $calcPrice;
 }
Esempio n. 7
0
 /**
  * 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_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->getCalculationPrice();
     $basePrice = $baseTaxPrice = $item->getBaseCalculationPrice();
     $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;
 }
Esempio n. 8
0
 /**
  * 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;
 }