Files

80 lines
3.4 KiB
PHP

<?php
namespace Lts\Taxjar\Model\Tax;
use Lts\Taxjar\Helper\ResaleCertificate as ResaleCertificateHelper;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Tax\Api\Data\AppliedTaxInterfaceFactory;
use Magento\Tax\Api\Data\AppliedTaxRateInterfaceFactory;
use Magento\Tax\Api\Data\QuoteDetailsItemInterface;
use Magento\Tax\Api\Data\TaxDetailsInterfaceFactory;
use Magento\Tax\Api\Data\TaxDetailsItemInterfaceFactory;
use Magento\Tax\Api\TaxClassManagementInterface;
use Magento\Tax\Model\Calculation;
use Magento\Tax\Model\Calculation\CalculatorFactory;
use Magento\Tax\Model\Config;
class TaxCalculation extends \Taxjar\SalesTax\Model\Tax\TaxCalculation
{
public function __construct(
Calculation $calculation,
CalculatorFactory $calculatorFactory,
Config $config,
TaxDetailsInterfaceFactory $taxDetailsDataObjectFactory,
TaxDetailsItemInterfaceFactory $taxDetailsItemDataObjectFactory,
StoreManagerInterface $storeManager,
TaxClassManagementInterface $taxClassManagement,
\Magento\Framework\Api\DataObjectHelper $dataObjectHelper,
\Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency,
AppliedTaxInterfaceFactory $appliedTaxDataObjectFactory,
AppliedTaxRateInterfaceFactory $appliedTaxRateDataObjectFactory,
protected ResaleCertificateHelper $resaleCertificateHelper,
) {
parent::__construct($calculation, $calculatorFactory, $config, $taxDetailsDataObjectFactory, $taxDetailsItemDataObjectFactory, $storeManager, $taxClassManagement, $dataObjectHelper, $priceCurrency, $appliedTaxDataObjectFactory, $appliedTaxRateDataObjectFactory);
}
protected function processItemDetails(
QuoteDetailsItemInterface $item,
$useBaseCurrency,
$scope
) {
$price = $this->priceCurrency->round($item->getUnitPrice());
$quantity = $this->getTotalQuantity($item);
$extensionAttributes = $item->getExtensionAttributes();
$isResaleCertificate = $this->resaleCertificateHelper->isResaleCertificate();
if ($isResaleCertificate) {
$extensionAttributes->setTaxCollectable(0);
$extensionAttributes->setCombinedTaxRate(0);
}
$taxCollectable = $extensionAttributes ? $extensionAttributes->getTaxCollectable() : 0;
$taxPercent = $extensionAttributes ? $extensionAttributes->getCombinedTaxRate() : 0;
if (!$useBaseCurrency) {
$taxCollectable = $this->priceCurrency->convert($taxCollectable, $scope);
}
$rowTotal = $price * $quantity;
$rowTotalInclTax = $rowTotal + $taxCollectable;
$priceInclTax = $this->priceCurrency->round($rowTotalInclTax / $quantity);
$discountTaxCompensationAmount = 0;
$appliedTaxes = $this->getAppliedTaxes($item, $scope);
return $this->taxDetailsItemDataObjectFactory->create()
->setCode($item->getCode())
->setType($item->getType())
->setRowTax($taxCollectable)
->setPrice($price)
->setPriceInclTax($priceInclTax)
->setRowTotal($rowTotal)
->setRowTotalInclTax($rowTotalInclTax)
->setDiscountTaxCompensationAmount($discountTaxCompensationAmount)
->setAssociatedItemCode($item->getAssociatedItemCode())
->setTaxPercent($taxPercent)
->setAppliedTaxes($appliedTaxes);
}
}