本文整理汇总了PHP中Magento\Weee\Helper\Data::getApplied方法的典型用法代码示例。如果您正苦于以下问题:PHP Data::getApplied方法的具体用法?PHP Data::getApplied怎么用?PHP Data::getApplied使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Magento\Weee\Helper\Data
的用法示例。
在下文中一共展示了Data::getApplied方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: collect
/**
* Collect Weee amounts for the credit memo
*
* @param Creditmemo $creditmemo
* @return $this
*/
public function collect(Creditmemo $creditmemo)
{
$store = $creditmemo->getStore();
$totalTax = 0;
$baseTotalTax = 0;
$weeeTaxAmount = 0;
$baseWeeeTaxAmount = 0;
foreach ($creditmemo->getAllItems() as $item) {
if ($item->getOrderItem()->isDummy()) {
continue;
}
$weeeAmountExclTax = ($this->_weeeData->getWeeeTaxInclTax($item) - $this->_weeeData->getTotalTaxAppliedForWeeeTax($item)) * $item->getQty();
$totalTax += $weeeAmountExclTax;
$baseWeeeAmountExclTax = ($this->_weeeData->getBaseWeeeTaxInclTax($item) - $this->_weeeData->getBaseTotalTaxAppliedForWeeeTax($item)) * $item->getQty();
$baseTotalTax += $baseWeeeAmountExclTax;
$item->setWeeeTaxAppliedRowAmount($weeeAmountExclTax);
$item->setBaseWeeeTaxAppliedRowAmount($baseWeeeAmountExclTax);
$weeeTaxAmount += $this->_weeeData->getWeeeTaxInclTax($item) * $item->getQty();
$baseWeeeTaxAmount += $this->_weeeData->getBaseWeeeTaxInclTax($item) * $item->getQty();
$newApplied = array();
$applied = $this->_weeeData->getApplied($item);
foreach ($applied as $one) {
$one['base_row_amount'] = $one['base_amount'] * $item->getQty();
$one['row_amount'] = $one['amount'] * $item->getQty();
$one['base_row_amount_incl_tax'] = $one['base_amount_incl_tax'] * $item->getQty();
$one['row_amount_incl_tax'] = $one['amount_incl_tax'] * $item->getQty();
$newApplied[] = $one;
}
$this->_weeeData->setApplied($item, $newApplied);
$item->setWeeeTaxRowDisposition($item->getWeeeTaxDisposition() * $item->getQty());
$item->setBaseWeeeTaxRowDisposition($item->getBaseWeeeTaxDisposition() * $item->getQty());
}
if ($this->_weeeData->includeInSubtotal($store)) {
$creditmemo->setSubtotal($creditmemo->getSubtotal() + $totalTax);
$creditmemo->setBaseSubtotal($creditmemo->getBaseSubtotal() + $baseTotalTax);
}
$creditmemo->setSubtotalInclTax($creditmemo->getSubtotalInclTax() + $weeeTaxAmount);
$creditmemo->setBaseSubtotalInclTax($creditmemo->getBaseSubtotalInclTax() + $baseWeeeTaxAmount);
$creditmemo->setGrandTotal($creditmemo->getGrandTotal() + $totalTax);
$creditmemo->setBaseGrandTotal($creditmemo->getBaseGrandTotal() + $baseTotalTax);
return $this;
}
示例2: process
/**
* Calculate item fixed tax and prepare information for discount and regular taxation
*
* @param \Magento\Quote\Model\Quote\Address $address
* @param \Magento\Quote\Model\Quote\Address\Total $total
* @param \Magento\Quote\Model\Quote\Item\AbstractItem $item
* @return void|$this
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
* @SuppressWarnings(PHPMD.UnusedLocalVariable)
*/
protected function process(\Magento\Quote\Model\Quote\Address $address, \Magento\Quote\Model\Quote\Address\Total $total, $item)
{
$attributes = $this->weeeData->getProductWeeeAttributes($item->getProduct(), $address, $address->getQuote()->getBillingAddress(), $this->_store->getWebsiteId());
$productTaxes = [];
$totalValueInclTax = 0;
$baseTotalValueInclTax = 0;
$totalRowValueInclTax = 0;
$baseTotalRowValueInclTax = 0;
$totalValueExclTax = 0;
$baseTotalValueExclTax = 0;
$totalRowValueExclTax = 0;
$baseTotalRowValueExclTax = 0;
$associatedTaxables = $item->getAssociatedTaxables();
if (!$associatedTaxables) {
$associatedTaxables = [];
} else {
// remove existing weee associated taxables
foreach ($associatedTaxables as $iTaxable => $taxable) {
if ($taxable[CommonTaxCollector::KEY_ASSOCIATED_TAXABLE_TYPE] == self::ITEM_TYPE) {
unset($associatedTaxables[$iTaxable]);
}
}
}
foreach ($attributes as $key => $attribute) {
$title = $attribute->getName();
$baseValueExclTax = $baseValueInclTax = $attribute->getAmount();
$valueExclTax = $valueInclTax = $this->priceCurrency->round($this->priceCurrency->convert($baseValueExclTax, $this->_store));
$rowValueInclTax = $rowValueExclTax = $this->priceCurrency->round($valueInclTax * $item->getTotalQty());
$baseRowValueInclTax = $this->priceCurrency->round($baseValueInclTax * $item->getTotalQty());
$baseRowValueExclTax = $baseRowValueInclTax;
$totalValueInclTax += $valueInclTax;
$baseTotalValueInclTax += $baseValueInclTax;
$totalRowValueInclTax += $rowValueInclTax;
$baseTotalRowValueInclTax += $baseRowValueInclTax;
$totalValueExclTax += $valueExclTax;
$baseTotalValueExclTax += $baseValueExclTax;
$totalRowValueExclTax += $rowValueExclTax;
$baseTotalRowValueExclTax += $baseRowValueExclTax;
$productTaxes[] = ['title' => $title, 'base_amount' => $baseValueExclTax, 'amount' => $valueExclTax, 'row_amount' => $rowValueExclTax, 'base_row_amount' => $baseRowValueExclTax, 'base_amount_incl_tax' => $baseValueInclTax, 'amount_incl_tax' => $valueInclTax, 'row_amount_incl_tax' => $rowValueInclTax, 'base_row_amount_incl_tax' => $baseRowValueInclTax];
if ($this->weeeData->isTaxable($this->_store)) {
$weeeItemCode = self::ITEM_CODE_WEEE_PREFIX . $this->getNextIncrement();
$weeeItemCode .= '-' . $title;
$associatedTaxables[] = [CommonTaxCollector::KEY_ASSOCIATED_TAXABLE_TYPE => self::ITEM_TYPE, CommonTaxCollector::KEY_ASSOCIATED_TAXABLE_CODE => $weeeItemCode, CommonTaxCollector::KEY_ASSOCIATED_TAXABLE_UNIT_PRICE => $valueExclTax, CommonTaxCollector::KEY_ASSOCIATED_TAXABLE_BASE_UNIT_PRICE => $baseValueExclTax, CommonTaxCollector::KEY_ASSOCIATED_TAXABLE_QUANTITY => $item->getTotalQty(), CommonTaxCollector::KEY_ASSOCIATED_TAXABLE_TAX_CLASS_ID => $item->getProduct()->getTaxClassId()];
$this->weeeCodeToItemMap[$weeeItemCode] = $item;
}
}
$item->setAssociatedTaxables($associatedTaxables);
$item->setWeeeTaxAppliedAmount($totalValueExclTax)->setBaseWeeeTaxAppliedAmount($baseTotalValueExclTax)->setWeeeTaxAppliedRowAmount($totalRowValueExclTax)->setBaseWeeeTaxAppliedRowAmnt($baseTotalRowValueExclTax);
$item->setWeeeTaxAppliedAmountInclTax($totalValueInclTax)->setBaseWeeeTaxAppliedAmountInclTax($baseTotalValueInclTax)->setWeeeTaxAppliedRowAmountInclTax($totalRowValueInclTax)->setBaseWeeeTaxAppliedRowAmntInclTax($baseTotalRowValueInclTax);
$this->processTotalAmount($total, $totalRowValueExclTax, $baseTotalRowValueExclTax, $totalRowValueInclTax, $baseTotalRowValueInclTax);
$this->weeeData->setApplied($item, array_merge($this->weeeData->getApplied($item), $productTaxes));
}
示例3: testGetAppliedBundle
public function testGetAppliedBundle()
{
$testArray1 = ['key1' => 'value1'];
$testArray2 = ['key2' => 'value2'];
$testArray = array_merge($testArray1, $testArray2);
$itemProductSimple1 = $this->getMock('\\Magento\\Quote\\Model\\Quote\\Item', ['getWeeeTaxApplied'], [], '', false);
$itemProductSimple2 = $this->getMock('\\Magento\\Quote\\Model\\Quote\\Item', ['getWeeeTaxApplied'], [], '', false);
$itemProductSimple1->expects($this->any())->method('getWeeeTaxApplied')->will($this->returnValue(\Zend_Json::encode($testArray1)));
$itemProductSimple2->expects($this->any())->method('getWeeeTaxApplied')->will($this->returnValue(\Zend_Json::encode($testArray2)));
$itemProductBundle = $this->getMock('\\Magento\\Quote\\Model\\Quote\\Item', ['getHasChildren', 'isChildrenCalculated', 'getChildren'], [], '', false);
$itemProductBundle->expects($this->any())->method('getHasChildren')->will($this->returnValue(true));
$itemProductBundle->expects($this->any())->method('isChildrenCalculated')->will($this->returnValue(true));
$itemProductBundle->expects($this->any())->method('getChildren')->will($this->returnValue([$itemProductSimple1, $itemProductSimple2]));
$this->assertEquals($testArray, $this->helperData->getApplied($itemProductBundle));
}
示例4: collect
/**
* Collect Weee amounts for the credit memo
*
* @param Creditmemo $creditmemo
* @return $this
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
* @SuppressWarnings(PHPMD.NPathComplexity)
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
* @SuppressWarnings(PHPMD.UnusedLocalVariable)
*/
public function collect(Creditmemo $creditmemo)
{
$store = $creditmemo->getStore();
$totalWeeeAmount = 0;
$baseTotalWeeeAmount = 0;
$totalWeeeAmountInclTax = 0;
$baseTotalWeeeAmountInclTax = 0;
$totalTaxAmount = 0;
$baseTotalTaxAmount = 0;
foreach ($creditmemo->getAllItems() as $item) {
$orderItem = $item->getOrderItem();
$orderItemQty = $orderItem->getQtyOrdered();
if (!$orderItemQty || $orderItem->isDummy() || $item->getQty() < 0) {
continue;
}
$ratio = $item->getQty() / $orderItemQty;
$orderItemWeeeAmountExclTax = $orderItem->getWeeeTaxAppliedRowAmount();
$orderItemBaseWeeeAmountExclTax = $orderItem->getBaseWeeeTaxAppliedRowAmnt();
$weeeAmountExclTax = $creditmemo->roundPrice($orderItemWeeeAmountExclTax * $ratio);
$baseWeeeAmountExclTax = $creditmemo->roundPrice($orderItemBaseWeeeAmountExclTax * $ratio, 'base');
$orderItemWeeeAmountInclTax = $this->_weeeData->getRowWeeeTaxInclTax($orderItem);
$orderItemBaseWeeeAmountInclTax = $this->_weeeData->getBaseRowWeeeTaxInclTax($orderItem);
$weeeAmountInclTax = $creditmemo->roundPrice($orderItemWeeeAmountInclTax * $ratio);
$baseWeeeAmountInclTax = $creditmemo->roundPrice($orderItemBaseWeeeAmountInclTax * $ratio, 'base');
$itemTaxAmount = $weeeAmountInclTax - $weeeAmountExclTax;
$itemBaseTaxAmount = $baseWeeeAmountInclTax - $baseWeeeAmountExclTax;
$weeeAmountAvailable = $this->_weeeData->getWeeeAmountInvoiced($orderItem) - $this->_weeeData->getWeeeAmountRefunded($orderItem);
$baseWeeeAmountAvailable = $this->_weeeData->getBaseWeeeAmountInvoiced($orderItem) - $this->_weeeData->getBaseWeeeAmountRefunded($orderItem);
$weeeTaxAmountAvailable = $this->_weeeData->getWeeeTaxAmountInvoiced($orderItem) - $this->_weeeData->getWeeeTaxAmountRefunded($orderItem);
$baseWeeeTaxAmountAvailable = $this->_weeeData->getBaseWeeeTaxAmountInvoiced($orderItem) - $this->_weeeData->getBaseWeeeTaxAmountRefunded($orderItem);
if ($item->isLast()) {
$weeeAmountExclTax = $weeeAmountAvailable;
$baseWeeeAmountExclTax = $baseWeeeAmountAvailable;
$itemTaxAmount = $weeeTaxAmountAvailable;
$itemBaseTaxAmount = $baseWeeeTaxAmountAvailable;
} else {
$weeeAmountExclTax = min($weeeAmountExclTax, $weeeAmountAvailable);
$baseWeeeAmountExclTax = min($baseWeeeAmountExclTax, $baseWeeeAmountAvailable);
$itemTaxAmount = min($itemTaxAmount, $weeeTaxAmountAvailable);
$itemBaseTaxAmount = min($itemBaseTaxAmount, $baseWeeeTaxAmountAvailable);
}
$totalWeeeAmount += $weeeAmountExclTax;
$baseTotalWeeeAmount += $baseWeeeAmountExclTax;
$item->setWeeeTaxAppliedRowAmount($weeeAmountExclTax);
$item->setBaseWeeeTaxAppliedRowAmount($baseWeeeAmountExclTax);
$totalTaxAmount += $itemTaxAmount;
$baseTotalTaxAmount += $itemBaseTaxAmount;
//Set the ratio of the tax amount in invoice item compared to tax amount in order item
//This information is needed to calculate tax per tax rate later
$orderItemTaxAmount = $orderItemWeeeAmountInclTax - $orderItemWeeeAmountExclTax;
if ($orderItemTaxAmount != 0) {
$taxRatio = [];
if ($item->getTaxRatio()) {
$taxRatio = unserialize($item->getTaxRatio());
}
$taxRatio[\Magento\Weee\Model\Total\Quote\Weee::ITEM_TYPE] = $itemTaxAmount / $orderItemTaxAmount;
$item->setTaxRatio(serialize($taxRatio));
}
$totalWeeeAmountInclTax += $weeeAmountInclTax;
$baseTotalWeeeAmountInclTax += $baseWeeeAmountInclTax;
$newApplied = [];
$applied = $this->_weeeData->getApplied($orderItem);
foreach ($applied as $one) {
$title = (string) $one['title'];
$one['base_row_amount'] = $creditmemo->roundPrice($one['base_row_amount'] * $ratio, $title . '_base');
$one['row_amount'] = $creditmemo->roundPrice($one['row_amount'] * $ratio, $title);
$one['base_row_amount_incl_tax'] = $creditmemo->roundPrice($one['base_row_amount_incl_tax'] * $ratio, $title . '_base');
$one['row_amount_incl_tax'] = $creditmemo->roundPrice($one['row_amount_incl_tax'] * $ratio, $title);
$newApplied[] = $one;
}
$this->_weeeData->setApplied($item, $newApplied);
// Update order item
$newApplied = [];
$applied = $this->_weeeData->getApplied($orderItem);
foreach ($applied as $one) {
if (isset($one[WeeeHelper::KEY_BASE_WEEE_AMOUNT_REFUNDED])) {
$one[WeeeHelper::KEY_BASE_WEEE_AMOUNT_REFUNDED] = $one[WeeeHelper::KEY_BASE_WEEE_AMOUNT_REFUNDED] + $baseWeeeAmountExclTax;
} else {
$one[WeeeHelper::KEY_BASE_WEEE_AMOUNT_REFUNDED] = $baseWeeeAmountExclTax;
}
if (isset($one[WeeeHelper::KEY_WEEE_AMOUNT_REFUNDED])) {
$one[WeeeHelper::KEY_WEEE_AMOUNT_REFUNDED] = $one[WeeeHelper::KEY_WEEE_AMOUNT_REFUNDED] + $weeeAmountExclTax;
} else {
$one[WeeeHelper::KEY_WEEE_AMOUNT_REFUNDED] = $weeeAmountExclTax;
}
if (isset($one[WeeeHelper::KEY_BASE_WEEE_TAX_AMOUNT_REFUNDED])) {
$one[WeeeHelper::KEY_BASE_WEEE_TAX_AMOUNT_REFUNDED] = $one[WeeeHelper::KEY_BASE_WEEE_TAX_AMOUNT_REFUNDED] + $itemBaseTaxAmount;
} else {
$one[WeeeHelper::KEY_BASE_WEEE_TAX_AMOUNT_REFUNDED] = $itemBaseTaxAmount;
}
//.........这里部分代码省略.........
示例5: collect
/**
* Collect Weee amounts for the invoice
*
* @param \Magento\Sales\Model\Order\Invoice $invoice
* @return $this
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
* @SuppressWarnings(PHPMD.NPathComplexity)
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
*/
public function collect(\Magento\Sales\Model\Order\Invoice $invoice)
{
$store = $invoice->getStore();
$order = $invoice->getOrder();
$totalWeeeAmount = 0;
$baseTotalWeeeAmount = 0;
$totalWeeeAmountInclTax = 0;
$baseTotalWeeeAmountInclTax = 0;
$totalWeeeTaxAmount = 0;
$baseTotalWeeeTaxAmount = 0;
/** @var \Magento\Sales\Model\Order\Invoice\Item $item */
foreach ($invoice->getAllItems() as $item) {
$orderItem = $item->getOrderItem();
$orderItemQty = $orderItem->getQtyOrdered();
if (!$orderItemQty || $orderItem->isDummy() || $item->getQty() <= 0) {
continue;
}
$ratio = $item->getQty() / $orderItemQty;
$orderItemWeeeAmount = $orderItem->getWeeeTaxAppliedRowAmount();
$orderItemBaseWeeeAmount = $orderItem->getBaseWeeeTaxAppliedRowAmnt();
$weeeAmount = $invoice->roundPrice($orderItemWeeeAmount * $ratio);
$baseWeeeAmount = $invoice->roundPrice($orderItemBaseWeeeAmount * $ratio, 'base');
$orderItemWeeeInclTax = $this->_weeeData->getRowWeeeTaxInclTax($orderItem);
$orderItemBaseWeeeInclTax = $this->_weeeData->getBaseRowWeeeTaxInclTax($orderItem);
$weeeAmountInclTax = $invoice->roundPrice($orderItemWeeeInclTax * $ratio);
$baseWeeeAmountInclTax = $invoice->roundPrice($orderItemBaseWeeeInclTax * $ratio, 'base');
$orderItemWeeeTax = $orderItemWeeeInclTax - $orderItemWeeeAmount;
$itemWeeeTax = $weeeAmountInclTax - $weeeAmount;
$itemBaseWeeeTax = $baseWeeeAmountInclTax - $baseWeeeAmount;
if ($item->isLast()) {
$weeeAmount = $orderItemWeeeAmount - $this->_weeeData->getWeeeAmountInvoiced($orderItem);
$baseWeeeAmount = $orderItemBaseWeeeAmount - $this->_weeeData->getBaseWeeeAmountInvoiced($orderItem);
$itemWeeeTax = $orderItemWeeeTax - $this->_weeeData->getWeeeTaxAmountInvoiced($orderItem);
$itemBaseWeeeTax = $orderItemWeeeTax - $this->_weeeData->getBaseWeeeTaxAmountInvoiced($orderItem);
}
$totalWeeeTaxAmount += $itemWeeeTax;
$baseTotalWeeeTaxAmount += $itemBaseWeeeTax;
//Set the ratio of the tax amount in invoice item compared to tax amount in order item
//This information is needed to calculate tax per tax rate later
if ($orderItemWeeeTax != 0) {
$taxRatio = [];
if ($item->getTaxRatio()) {
$taxRatio = unserialize($item->getTaxRatio());
}
$taxRatio[\Magento\Weee\Model\Total\Quote\Weee::ITEM_TYPE] = $itemWeeeTax / $orderItemWeeeTax;
$item->setTaxRatio(serialize($taxRatio));
}
$item->setWeeeTaxAppliedRowAmount($weeeAmount);
$item->setBaseWeeeTaxAppliedRowAmount($baseWeeeAmount);
$newApplied = [];
$applied = $this->_weeeData->getApplied($orderItem);
foreach ($applied as $one) {
$title = (string) $one['title'];
$one['base_row_amount'] = $invoice->roundPrice($one['base_row_amount'] * $ratio, $title . '_base');
$one['row_amount'] = $invoice->roundPrice($one['row_amount'] * $ratio, $title);
$one['base_row_amount_incl_tax'] = $invoice->roundPrice($one['base_row_amount_incl_tax'] * $ratio, $title . '_base');
$one['row_amount_incl_tax'] = $invoice->roundPrice($one['row_amount_incl_tax'] * $ratio, $title);
$newApplied[] = $one;
}
$this->_weeeData->setApplied($item, $newApplied);
//Update order item
$newApplied = [];
$applied = $this->_weeeData->getApplied($orderItem);
foreach ($applied as $one) {
if (isset($one[WeeeHelper::KEY_BASE_WEEE_AMOUNT_INVOICED])) {
$one[WeeeHelper::KEY_BASE_WEEE_AMOUNT_INVOICED] = $one[WeeeHelper::KEY_BASE_WEEE_AMOUNT_INVOICED] + $baseWeeeAmount;
} else {
$one[WeeeHelper::KEY_BASE_WEEE_AMOUNT_INVOICED] = $baseWeeeAmount;
}
if (isset($one[WeeeHelper::KEY_WEEE_AMOUNT_INVOICED])) {
$one[WeeeHelper::KEY_WEEE_AMOUNT_INVOICED] = $one[WeeeHelper::KEY_WEEE_AMOUNT_INVOICED] + $weeeAmount;
} else {
$one[WeeeHelper::KEY_WEEE_AMOUNT_INVOICED] = $weeeAmount;
}
if (isset($one[WeeeHelper::KEY_BASE_WEEE_TAX_AMOUNT_INVOICED])) {
$one[WeeeHelper::KEY_BASE_WEEE_TAX_AMOUNT_INVOICED] = $one[WeeeHelper::KEY_BASE_WEEE_TAX_AMOUNT_INVOICED] + $itemWeeeTax;
} else {
$one[WeeeHelper::KEY_BASE_WEEE_TAX_AMOUNT_INVOICED] = $itemWeeeTax;
}
if (isset($one[WeeeHelper::KEY_WEEE_TAX_AMOUNT_INVOICED])) {
$one[WeeeHelper::KEY_WEEE_TAX_AMOUNT_INVOICED] = $one[WeeeHelper::KEY_WEEE_TAX_AMOUNT_INVOICED] + $itemBaseWeeeTax;
} else {
$one[WeeeHelper::KEY_WEEE_TAX_AMOUNT_INVOICED] = $itemBaseWeeeTax;
}
$newApplied[] = $one;
}
$this->_weeeData->setApplied($orderItem, $newApplied);
$item->setWeeeTaxRowDisposition($item->getWeeeTaxDisposition() * $item->getQty());
$item->setBaseWeeeTaxRowDisposition($item->getBaseWeeeTaxDisposition() * $item->getQty());
$totalWeeeAmount += $weeeAmount;
$baseTotalWeeeAmount += $baseWeeeAmount;
//.........这里部分代码省略.........
示例6: _process
/**
* Calculate item fixed tax and prepare information for discount and regular taxation
*
* @param \Magento\Sales\Model\Quote\Address $address
* @param \Magento\Sales\Model\Quote\Item\AbstractItem $item
* @return void|$this
*/
protected function _process(\Magento\Sales\Model\Quote\Address $address, $item)
{
if (!$this->_weeeData->isEnabled($this->_store)) {
return $this;
}
$attributes = $this->_weeeData->getProductWeeeAttributes($item->getProduct(), $address, $address->getQuote()->getBillingAddress(), $this->_store->getWebsiteId());
$applied = array();
$productTaxes = array();
$defaultRateRequest = $this->_calculator->getRateOriginRequest($this->_store);
$rateRequest = $this->_calculator->getRateRequest($address, $address->getQuote()->getBillingAddress(), $address->getQuote()->getCustomerTaxClassId(), $this->_store);
$totalValueInclTax = 0;
$baseTotalValueInclTax = 0;
$totalRowValueInclTax = 0;
$baseTotalRowValueInclTax = 0;
$totalValueExclTax = 0;
$baseTotalValueExclTax = 0;
$totalRowValueExclTax = 0;
$baseTotalRowValueExclTax = 0;
$priceIncludesTax = $this->_taxData->priceIncludesTax($this->_store);
$calculationAlgorithm = $this->_taxData->getCalculationAgorithm($this->_store);
$defaultPercent = $currentPercent = 0;
//when FPT is not taxable
foreach ($attributes as $key => $attribute) {
$title = $attribute->getName();
$baseValue = $attribute->getAmount();
$value = $this->_store->convertPrice($baseValue);
$value = $this->_store->roundPrice($value);
if ($this->_weeeData->isTaxable($this->_store)) {
$defaultPercent = $this->_calculator->getRate($defaultRateRequest->setProductClassId($item->getProduct()->getTaxClassId()));
$currentPercent = $this->_calculator->getRate($rateRequest->setProductClassId($item->getProduct()->getTaxClassId()));
}
if ($priceIncludesTax) {
//Make sure that price including tax is rounded first
$baseValueInclTax = $baseValue / (100 + $defaultPercent) * (100 + $currentPercent);
$baseValueInclTax = $this->_store->roundPrice($baseValueInclTax);
$valueInclTax = $value / (100 + $defaultPercent) * (100 + $currentPercent);
$valueInclTax = $this->_store->roundPrice($valueInclTax);
$baseValueExclTax = $baseValueInclTax / (100 + $currentPercent) * 100;
$valueExclTax = $valueInclTax / (100 + $currentPercent) * 100;
if ($calculationAlgorithm == Calculation::CALC_UNIT_BASE) {
$baseValueExclTax = $this->_store->roundPrice($baseValueExclTax);
$valueExclTax = $this->_store->roundPrice($valueExclTax);
}
} else {
$valueExclTax = $value;
$baseValueExclTax = $baseValue;
$valueInclTax = $valueExclTax * (100 + $currentPercent) / 100;
$baseValueInclTax = $baseValueExclTax * (100 + $currentPercent) / 100;
if ($calculationAlgorithm == Calculation::CALC_UNIT_BASE) {
$baseValueInclTax = $this->_store->roundPrice($baseValueInclTax);
$valueInclTax = $this->_store->roundPrice($valueInclTax);
}
}
$rowValueInclTax = $this->_store->roundPrice($valueInclTax * $item->getTotalQty());
$baseRowValueInclTax = $this->_store->roundPrice($baseValueInclTax * $item->getTotalQty());
$rowValueExclTax = $this->_store->roundPrice($valueExclTax * $item->getTotalQty());
$baseRowValueExclTax = $this->_store->roundPrice($baseValueExclTax * $item->getTotalQty());
//Now, round the unit price just in case
$valueExclTax = $this->_store->roundPrice($valueExclTax);
$baseValueExclTax = $this->_store->roundPrice($baseValueExclTax);
$valueInclTax = $this->_store->roundPrice($valueInclTax);
$baseValueInclTax = $this->_store->roundPrice($baseValueInclTax);
$totalValueInclTax += $valueInclTax;
$baseTotalValueInclTax += $baseValueInclTax;
$totalRowValueInclTax += $rowValueInclTax;
$baseTotalRowValueInclTax += $baseRowValueInclTax;
$totalValueExclTax += $valueExclTax;
$baseTotalValueExclTax += $baseValueExclTax;
$totalRowValueExclTax += $rowValueExclTax;
$baseTotalRowValueExclTax += $baseRowValueExclTax;
$productTaxes[] = array('title' => $title, 'base_amount' => $baseValueExclTax, 'amount' => $valueExclTax, 'row_amount' => $rowValueExclTax, 'base_row_amount' => $baseRowValueExclTax, 'base_amount_incl_tax' => $baseValueInclTax, 'amount_incl_tax' => $valueInclTax, 'row_amount_incl_tax' => $rowValueInclTax, 'base_row_amount_incl_tax' => $baseRowValueInclTax);
//This include FPT as applied tax, since tax on FPT is calculated separately, we use value excluding tax
$applied[] = array('id' => $attribute->getCode(), 'percent' => null, 'hidden' => $this->_weeeData->includeInSubtotal($this->_store), 'rates' => array(array('base_real_amount' => $baseRowValueExclTax, 'base_amount' => $baseRowValueExclTax, 'amount' => $rowValueExclTax, 'code' => $attribute->getCode(), 'title' => $title, 'percent' => null, 'position' => 1, 'priority' => -1000 + $key)));
}
$item->setWeeeTaxAppliedAmount($totalValueExclTax)->setBaseWeeeTaxAppliedAmount($baseTotalValueExclTax)->setWeeeTaxAppliedRowAmount($totalRowValueExclTax)->setBaseWeeeTaxAppliedRowAmnt($baseTotalRowValueExclTax);
$item->setWeeeTaxAppliedAmountInclTax($totalValueInclTax)->setBaseWeeeTaxAppliedAmountInclTax($baseTotalValueInclTax)->setWeeeTaxAppliedRowAmountInclTax($totalRowValueInclTax)->setBaseWeeeTaxAppliedRowAmntInclTax($baseTotalRowValueInclTax);
if ($priceIncludesTax) {
$this->_processTaxSettings($item, $totalValueInclTax, $baseTotalValueInclTax, $totalRowValueInclTax, $baseTotalRowValueInclTax);
} else {
$this->_processTaxSettings($item, $totalValueExclTax, $baseTotalValueExclTax, $totalRowValueExclTax, $baseTotalRowValueExclTax);
}
$this->_processTotalAmount($address, $totalRowValueExclTax, $baseTotalRowValueExclTax, $totalRowValueInclTax, $baseTotalRowValueInclTax);
$this->_weeeData->setApplied($item, array_merge($this->_weeeData->getApplied($item), $productTaxes));
//Update the applied taxes for the quote
if ($applied) {
$this->_saveAppliedTaxes($address, $applied, $item->getWeeeTaxAppliedAmount(), $item->getBaseWeeeTaxAppliedAmount(), null);
}
}