Example #1
0
 /**
  * {@inheritdoc}
  */
 protected function _setDataValues(array $data)
 {
     if (isset($data[Item::KEY_APPLIED_TAXES])) {
         $appliedTaxDataObjects = [];
         $appliedTaxes = $data[Item::KEY_APPLIED_TAXES];
         foreach ($appliedTaxes as $appliedTax) {
             $appliedTaxDataObjects[] = $this->appliedTaxBuilder->populateWithArray($appliedTax)->create();
         }
         $data[Item::KEY_APPLIED_TAXES] = $appliedTaxDataObjects;
     }
     return parent::_setDataValues($data);
 }
 /**
  * {@inheritdoc}
  */
 public function _setDataValues(array $data)
 {
     if (isset($data[TaxDetails::KEY_APPLIED_TAXES])) {
         $appliedTaxDataObjects = [];
         $appliedTaxes = $data[TaxDetails::KEY_APPLIED_TAXES];
         foreach ($appliedTaxes as $appliedTax) {
             $appliedTaxDataObjects[] = $this->appliedTaxBuilder->populateWithArray($appliedTax)->create();
         }
         $data[TaxDetails::KEY_APPLIED_TAXES] = $appliedTaxDataObjects;
     }
     if (isset($data[TaxDetails::KEY_ITEMS])) {
         $taxDetailItemDataObjects = [];
         $taxDetailItems = $data[TaxDetails::KEY_ITEMS];
         foreach ($taxDetailItems as $taxDetailItem) {
             $taxDetailItemDataObjects[] = $this->taxDetailsItemBuilder->populateWithArray($taxDetailItem)->create();
         }
         $data[TaxDetails::KEY_ITEMS] = $taxDetailItemDataObjects;
     }
     return parent::_setDataValues($data);
 }
 /**
  * Create AppliedTax data object based on applied tax rates and tax amount
  *
  * @param \Magento\Tax\Service\V1\Data\TaxDetails\AppliedTaxBuilder $appliedTaxBuilder
  * @param float $rowTax
  * @param float $totalTaxRate
  * @param array $appliedRates May contain multiple tax rates when catalog price includes tax
  * @return \Magento\Tax\Service\V1\Data\TaxDetails\AppliedTax[]
  */
 protected function getAppliedTaxes($appliedTaxBuilder, $rowTax, $totalTaxRate, $appliedRates)
 {
     /** @var \Magento\Tax\Service\V1\Data\TaxDetails\AppliedTax[] $appliedTaxes */
     $appliedTaxes = [];
     $appliedTaxRateBuilder = $appliedTaxBuilder->getAppliedTaxRateBuilder();
     $totalAppliedAmount = 0;
     foreach ($appliedRates as $appliedRate) {
         if ($appliedRate['percent'] == 0) {
             continue;
         }
         $appliedAmount = $rowTax / $totalTaxRate * $appliedRate['percent'];
         //Use delta rounding to split tax amounts for each tax rates between items
         $appliedAmount = $this->deltaRound($appliedAmount, $appliedRate['id'], true, self::KEY_APPLIED_TAX_DELTA_ROUNDING);
         if ($totalAppliedAmount + $appliedAmount > $rowTax) {
             $appliedAmount = $rowTax - $totalAppliedAmount;
         }
         $totalAppliedAmount += $appliedAmount;
         $appliedTaxBuilder->setAmount($appliedAmount);
         $appliedTaxBuilder->setPercent($appliedRate['percent']);
         $appliedTaxBuilder->setTaxRateKey($appliedRate['id']);
         /** @var  AppliedTaxRate[] $rateDataObjects */
         $rateDataObjects = [];
         foreach ($appliedRate['rates'] as $rate) {
             $appliedTaxRateBuilder->setPercent($rate['percent']);
             $appliedTaxRateBuilder->setCode($rate['code']);
             $appliedTaxRateBuilder->setTitle($rate['title']);
             //Skipped position, priority and rule_id
             $rateDataObjects[$rate['code']] = $appliedTaxRateBuilder->create();
         }
         $appliedTaxBuilder->setRates($rateDataObjects);
         $appliedTax = $appliedTaxBuilder->create();
         $appliedTaxes[$appliedTax->getTaxRateKey()] = $appliedTax;
     }
     return $appliedTaxes;
 }