Ejemplo n.º 1
0
 /**
  * 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);
     }
 }
Ejemplo n.º 3
0
 /**
  * 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;
 }
Ejemplo n.º 4
0
 /**
  * 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;
 }