vendor/shopware/core/Checkout/Cart/Tax/TaxCalculator.php line 10

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Checkout\Cart\Tax;
  3. use Shopware\Core\Checkout\Cart\Tax\Struct\CalculatedTax;
  4. use Shopware\Core\Checkout\Cart\Tax\Struct\CalculatedTaxCollection;
  5. use Shopware\Core\Checkout\Cart\Tax\Struct\TaxRule;
  6. use Shopware\Core\Checkout\Cart\Tax\Struct\TaxRuleCollection;
  7. class TaxCalculator
  8. {
  9.     public function calculateGross(float $netPriceTaxRuleCollection $rules): float
  10.     {
  11.         $taxes $this->calculateNetTaxes($netPrice$rules);
  12.         return $netPrice $taxes->getAmount();
  13.     }
  14.     public function calculateGrossTaxes(float $priceTaxRuleCollection $rules): CalculatedTaxCollection
  15.     {
  16.         $taxes = [];
  17.         foreach ($rules as $rule) {
  18.             $taxes[] = $this->calculateTaxFromGrossPrice($price$rule);
  19.         }
  20.         return new CalculatedTaxCollection($taxes);
  21.     }
  22.     public function calculateNetTaxes(float $priceTaxRuleCollection $rules): CalculatedTaxCollection
  23.     {
  24.         $taxes = [];
  25.         foreach ($rules as $rule) {
  26.             $taxes[] = $this->calculateTaxFromNetPrice($price$rule);
  27.         }
  28.         return new CalculatedTaxCollection($taxes);
  29.     }
  30.     public function calculateTaxFromNetPrice(float $netTaxRule $rule): CalculatedTax
  31.     {
  32.         //calculate percentage value of net price
  33.         $net $net 100 $rule->getPercentage();
  34.         $calculatedTax $net * ($rule->getTaxRate() / 100);
  35.         return new CalculatedTax($calculatedTax$rule->getTaxRate(), $net);
  36.     }
  37.     private function calculateTaxFromGrossPrice(float $grossTaxRule $rule): CalculatedTax
  38.     {
  39.         //calculate percentage value of gross price
  40.         $gross $gross 100 $rule->getPercentage();
  41.         $calculatedTax $gross / ((100 $rule->getTaxRate()) / 100) * ($rule->getTaxRate() / 100);
  42.         return new CalculatedTax($calculatedTax$rule->getTaxRate(), $gross);
  43.     }
  44. }