Exemplo n.º 1
0
 public function testTaxDetailsItemMultipleTaxes()
 {
     $appliedTaxDataArray = ['tax_rate_key' => '77', 'percent' => 0.0925, 'amount' => 0.82, 'rates' => [self::$travisCtyRateObjectDataArray, self::$utopiaCtyRateObjectDataArray, self::$noTaxRateObjectDataArray]];
     $taxDetailsItemDataArray = ['code' => 'QWERTY123', 'type' => 'product', 'tax_percent' => 0.0925, 'price' => 4.99, 'price_incl_tax' => 5.45, 'row_total' => 4.99, 'row_tax' => 0.64, 'taxable_amount' => 4.99, 'discount_amount' => 0.0, 'discount_tax_compensation_amount' => 0.0, 'applied_taxes' => [$appliedTaxDataArray]];
     $taxDetailsItemObjectFromArray = $this->taxDetailsItemBuilder->populateWithArray($taxDetailsItemDataArray)->create();
     $taxDetailsItemObjectFromObject = $this->taxDetailsItemBuilder->populate($taxDetailsItemObjectFromArray)->create();
     $this->assertEquals($taxDetailsItemDataArray, $taxDetailsItemObjectFromArray->__toArray());
     $this->assertEquals($taxDetailsItemDataArray, $taxDetailsItemObjectFromObject->__toArray());
     $this->assertEquals($taxDetailsItemObjectFromArray, $taxDetailsItemObjectFromObject);
 }
 /**
  * Callback function that creates a tax details item with applied taxes from a quote details item for testing.
  *
  * @param QuoteDetailsItem $item
  * @return Data\TaxDetails\Item
  */
 public function createTaxDetailsItemWithAppliedTaxes(QuoteDetailsItem $item)
 {
     $appliedTaxRateBuilder = $this->taxDetailsBuilder->getAppliedTaxBuilder();
     $taxRateBuilder = $appliedTaxRateBuilder->getAppliedTaxRateBuilder();
     $rate = $taxRateBuilder->setPercent(self::TAX)->setCode('TAX')->setTitle('Tax')->create();
     $appliedTaxes = $appliedTaxRateBuilder->setAmount($item->getUnitPrice() * self::TAX)->setTaxRateKey('TAX_RATE')->setPercent(self::TAX)->setRates([$rate])->create();
     return $this->taxDetailsItemBuilder->populate($this->createTaxDetailsItem($item))->setAppliedTaxes([$appliedTaxes])->create();
 }
Exemplo n.º 3
0
 /**
  * {@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);
 }
Exemplo n.º 4
0
 /**
  * Create AppliedTax data object based on applied tax rates and tax amount
  *
  * @param float $rowTax
  * @param float $totalTaxRate
  * @param array $appliedRates May contain multiple tax rates when catalog price includes tax
  * example:
  *  [
  *      [
  *          'id' => 'id1',
  *          'percent' => 7.5,
  *          'rates' => [
  *              'code' => 'code1',
  *              'title' => 'title1',
  *              'percent' => 5.3,
  *          ],
  *      ],
  *      [
  *          'id' => 'id2',
  *          'percent' => 8.5,
  *          'rates' => [
  *              'code' => 'code2',
  *              'title' => 'title2',
  *              'percent' => 7.3,
  *          ],
  *      ],
  *  ]
  * @return \Magento\Tax\Service\V1\Data\TaxDetails\AppliedTax[]
  */
 protected function getAppliedTaxes($rowTax, $totalTaxRate, $appliedRates)
 {
     $appliedTaxBuilder = $this->taxDetailsItemBuilder->getAppliedTaxBuilder();
     $appliedTaxRateBuilder = $appliedTaxBuilder->getAppliedTaxRateBuilder();
     /** @var \Magento\Tax\Service\V1\Data\TaxDetails\AppliedTax[] $appliedTaxes */
     $appliedTaxes = [];
     $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;
 }