/** * Calculate item fixed tax and prepare information for discount and recular taxation * * @param Mage_Sales_Model_Quote_Address $address * @param Mage_Sales_Model_Quote_Item_Abstract $item * @return Mage_Weee_Model_Total_Quote_Weee */ protected function _process(Mage_Sales_Model_Quote_Address $address, $item) { if (!$this->_helper->isEnabled($this->_store)) { return $this; } $attributes = $this->_helper->getProductWeeeAttributes($item->getProduct(), $address, $address->getQuote()->getBillingAddress(), $this->_store->getWebsiteId()); $applied = array(); $productTaxes = array(); $totalValue = 0; $baseTotalValue = 0; $totalRowValue = 0; $baseTotalRowValue = 0; foreach ($attributes as $k => $attribute) { $baseValue = $attribute->getAmount(); $value = $this->_store->convertPrice($baseValue); $rowValue = $value * $item->getTotalQty(); $baseRowValue = $baseValue * $item->getTotalQty(); $title = $attribute->getName(); $totalValue += $value; $baseTotalValue += $baseValue; $totalRowValue += $rowValue; $baseTotalRowValue += $baseRowValue; $productTaxes[] = array('title' => $title, 'base_amount' => $baseValue, 'amount' => $value, 'row_amount' => $rowValue, 'base_row_amount' => $baseRowValue, 'base_amount_incl_tax' => $baseValue, 'amount_incl_tax' => $value, 'row_amount_incl_tax' => $rowValue, 'base_row_amount_incl_tax' => $baseRowValue); $applied[] = array('id' => $attribute->getCode(), 'percent' => null, 'hidden' => $this->_helper->includeInSubtotal($this->_store), 'rates' => array(array('base_real_amount' => $baseRowValue, 'base_amount' => $baseRowValue, 'amount' => $rowValue, 'code' => $attribute->getCode(), 'title' => $title, 'percent' => null, 'position' => 1, 'priority' => -1000 + $k))); } $item->setWeeeTaxAppliedAmount($totalValue)->setBaseWeeeTaxAppliedAmount($baseTotalValue)->setWeeeTaxAppliedRowAmount($totalRowValue)->setBaseWeeeTaxAppliedRowAmount($baseTotalRowValue); $this->_processTaxSettings($item, $totalValue, $baseTotalValue, $totalRowValue, $baseTotalRowValue)->_processTotalAmount($address, $totalRowValue, $baseTotalRowValue); $this->_helper->setApplied($item, array_merge($this->_helper->getApplied($item), $productTaxes)); if ($applied) { $this->_saveAppliedTaxes($address, $applied, $item->getWeeeTaxAppliedAmount(), $item->getBaseWeeeTaxAppliedAmount(), null); } }
/** * Calculate item fixed tax and prepare information for discount and recular taxation * * @param Mage_Sales_Model_Quote_Address $address * @param Mage_Sales_Model_Quote_Item_Abstract $item * @return Mage_Weee_Model_Total_Quote_Weee */ protected function _process(Mage_Sales_Model_Quote_Address $address, $item) { if (!$this->_helper->isEnabled($this->_store)) { return $this; } $attributes = $this->_helper->getProductWeeeAttributes($item->getProduct(), $address, $address->getQuote()->getBillingAddress(), $this->_store->getWebsiteId()); $applied = array(); $productTaxes = array(); $totalValue = 0; $baseTotalValue = 0; $totalRowValue = 0; $baseTotalRowValue = 0; $totalExclTaxValue = 0; $baseTotalExclTaxValue = 0; $totalExclTaxRowValue = 0; $baseTotalExclTaxRowValue = 0; $customerRatePercentage = $this->_customerRatePercent($address, $item); foreach ($attributes as $k => $attribute) { $baseValue = $attribute->getAmount(); $baseValueExclTax = $baseValue; if ($customerRatePercentage && $this->_helper->isTaxIncluded($this->_store)) { //Remove the customer tax. This in general applies to EU scenario $baseValueExclTax = $this->_getCalculator()->round($baseValue * 100 / (100 + $customerRatePercentage)); } $value = $this->_store->convertPrice($baseValue); $rowValue = $value * $item->getTotalQty(); $baseRowValue = $baseValue * $item->getTotalQty(); //Get the values excluding tax $valueExclTax = $this->_store->convertPrice($baseValueExclTax); $rowValueExclTax = $valueExclTax * $item->getTotalQty(); $baseRowValueExclTax = $baseValueExclTax * $item->getTotalQty(); $title = $attribute->getName(); //Calculate the Wee value $totalValue += $value; $baseTotalValue += $baseValue; $totalRowValue += $rowValue; $baseTotalRowValue += $baseRowValue; //Calculate the Wee without tax $totalExclTaxValue += $valueExclTax; $baseTotalExclTaxValue += $baseValueExclTax; $totalExclTaxRowValue += $rowValueExclTax; $baseTotalExclTaxRowValue += $baseRowValueExclTax; /* * Note: including Tax does not necessarily mean it includes all the tax * *_incl_tax only holds the tax associated with Tax included products */ $productTaxes[] = array('title' => $title, 'base_amount' => $baseValueExclTax, 'amount' => $valueExclTax, 'row_amount' => $rowValueExclTax, 'base_row_amount' => $baseRowValueExclTax, 'base_amount_incl_tax' => $baseValue, 'amount_incl_tax' => $value, 'row_amount_incl_tax' => $rowValue, 'base_row_amount_incl_tax' => $baseRowValue); $applied[] = array('id' => $attribute->getCode(), 'percent' => null, 'hidden' => $this->_helper->includeInSubtotal($this->_store), 'rates' => array(array('base_real_amount' => $baseRowValue, 'base_amount' => $baseRowValue, 'amount' => $rowValue, 'code' => $attribute->getCode(), 'title' => $title, 'percent' => null, 'position' => 1, 'priority' => -1000 + $k))); } //We set the TAX exclusive value $item->setWeeeTaxAppliedAmount($totalExclTaxValue); $item->setBaseWeeeTaxAppliedAmount($baseTotalExclTaxValue); $item->setWeeeTaxAppliedRowAmount($totalExclTaxRowValue); $item->setBaseWeeeTaxAppliedRowAmount($baseTotalExclTaxRowValue); $this->_processTaxSettings($item, $totalExclTaxValue, $baseTotalExclTaxValue, $totalExclTaxRowValue, $baseTotalExclTaxRowValue)->_processTotalAmount($address, $totalExclTaxRowValue, $baseTotalExclTaxRowValue); $this->_helper->setApplied($item, array_merge($this->_helper->getApplied($item), $productTaxes)); if ($applied) { $this->_saveAppliedTaxes($address, $applied, $item->getWeeeTaxAppliedAmount(), $item->getBaseWeeeTaxAppliedAmount(), null); } }
/** * Collect printed card total for quote * * @param Mage_Sales_Model_Quote_Address $address * @return Enterprise_GiftWrapping_Model_Total_Quote_Giftwrapping */ protected function _collectPrintedCard($address) { $printedCardBasePrice = false; $printedCardPrice = false; if ($this->_quoteEntity->getGwAddCard()) { $printedCardBasePrice = Mage::helper('enterprise_giftwrapping')->getPrintedCardPrice($this->_store); $printedCardPrice = $this->_store->convertPrice($printedCardBasePrice); } $address->setGwCardBasePrice($printedCardBasePrice); $address->setGwCardPrice($printedCardPrice); return $this; }
/** * Apply item tax * * @param Mage_Sales_Model_Quote_Address $address * @param Mage_Core_Model_Store|int $store * @param OnePica_AvaTax_Model_Action_Calculator $calculator * @return $this */ protected function _applyItemTax(Mage_Sales_Model_Quote_Address $address, $calculator, $store) { /** @var Mage_Sales_Model_Quote_Item $item */ foreach ($address->getAllItems() as $item) { $item->setAddress($address); $baseAmount = $calculator->getItemTax($item); $giftBaseTaxTotalAmount = $calculator->getItemGiftTax($item); $this->_itemTaxGroups[$item->getId()] = $calculator->getItemTaxGroup($item); $giftTaxTotalAmount = $store->convertPrice($giftBaseTaxTotalAmount); $giftBaseTaxAmount = $this->_getDataHelper()->roundUp($giftBaseTaxTotalAmount / $item->getTotalQty(), 4); $giftTaxAmount = $store->convertPrice($giftBaseTaxAmount); $amount = $store->convertPrice($baseAmount); $percent = $calculator->getItemRate($item); $item->setTaxAmount($amount); $item->setBaseTaxAmount($baseAmount); $item->setTaxPercent($percent); $item->setGwBaseTaxAmount($giftBaseTaxAmount); $item->setGwTaxAmount($giftTaxAmount); $address->setGwItemsTaxAmount($address->getGwItemsTaxAmount() + $giftTaxTotalAmount); $address->setGwItemsBaseTaxAmount($address->getGwItemsBaseTaxAmount() + $giftBaseTaxTotalAmount); if ($this->_getTaxDataHelper()->priceIncludesTax($store)) { $basePriceIncTax = $item->getBasePrice(); $priceIncTax = $item->getCalculationPrice(); $baseRowTotalIncTax = $item->getBaseRowTotal(); $rowTotalIncTax = $item->getRowTotal(); $item->setPrice($item->getPrice() - $baseAmount / $item->getTotalQty()); $item->setBasePrice($item->getBasePrice() - $baseAmount / $item->getTotalQty()); $item->setBaseRowTax($baseAmount); $item->setRowTax($amount); $this->_calcItemRowTotal($item); $address->setGwItemsBasePrice($address->getGwItemsBasePrice() - $giftBaseTaxTotalAmount); $address->setGwItemsPrice($address->getGwItemsPrice() - $giftTaxTotalAmount); $item->setGwBasePrice($item->getGwBasePrice() - $giftBaseTaxAmount); $item->setGwPrice($item->getGwPrice() - $giftTaxAmount); $address->setBaseGrandTotal($address->getBaseGrandTotal() - $giftBaseTaxTotalAmount); $address->setGrandTotal($address->getGrandTotal() - $giftTaxTotalAmount); $item->setBasePriceInclTax($basePriceIncTax); $item->setPriceInclTax($priceIncTax); $item->setBaseRowTotalInclTax($baseRowTotalIncTax); $item->setRowTotalInclTax($rowTotalIncTax); } else { $item->setBasePriceInclTax($item->getBasePrice() + $baseAmount / $item->getTotalQty()); $item->setPriceInclTax($item->getCalculationPrice() + $amount / $item->getTotalQty()); $item->setBaseRowTotalInclTax($item->getBaseRowTotal() + $baseAmount); $item->setRowTotalInclTax($item->getRowTotal() + $amount); } if (!$calculator->isProductCalculated($item)) { $this->_addAmount($amount); $this->_addBaseAmount($baseAmount); } $this->_addAmount($giftTaxTotalAmount); $this->_addBaseAmount($giftBaseTaxTotalAmount); if (!$item->getParentItem()) { $this->_addSubtotalAmount($address, $item); } } return $this; }