.. rst-class:: outdated Basic Usage =========== .. danger:: We're sorry but **this documentation section is outdated**. Please have that in mind when trying to use it. You can help us making documentation up to date via Sylius Github. Thank you! Tax Rate -------- Every tax rate has three identifiers, an ID, code and name. You can access those by calling ``->getId()``, ``->getCode()`` and ``getName()`` respectively. The name and code are mutable, so you can change them by calling ``->setCode('X12XW')`` and ``->setName('EU VAT')`` on the tax rate instance. Setting Tax Amount ~~~~~~~~~~~~~~~~~~ A tax rate has two basic amounts - the *amount* and the *amount as percentage* (by default equal 0). .. code-block:: php setAmount(0.5); $taxRate->getAmount(); // Output will be 0.5 $taxRate->getAmountAsPercentage(); // Output will be 50 Setting Tax Category ~~~~~~~~~~~~~~~~~~~~ Every tax rate can have a tax category. You can simply set or unset it by calling ``->setCategory()``. .. code-block:: php setCategory($taxCategory); $taxRate->getCategory(); // Output will be $taxCategory object $taxRate->setCategory(); $taxRate->getCategory(); // Output will be null Including tax rate in price ~~~~~~~~~~~~~~~~~~~~~~~~~~~ You can mark a tax rate as included in price by calling ``setIncludedInPrice(true)`` (false by default). To check if tax rate is included in price call ``isIncludedInPrice()``. .. hint:: You can read how this property influences on the tax calculation in chapter :ref:`default-calculator`. Setting calculator ~~~~~~~~~~~~~~~~~~ To set type of calculator for your tax rate object call ``setCalculator('nameOfCalculator')``. Notice that nameOfCalculator should be the same as name of your calculator object. .. hint:: To understand meaning of this property go to :ref:`delegating-calculator`. Tax Category ------------ Every tax category has three identifiers, an ID, code and name. You can access those by calling ``->getId()``, ``->getCode()`` and ``getName()`` respectively. The code and name are mutable, so you can change them by calling ``->setCode('X12X')`` and ``->setName('Clothing')`` on the tax category instance. Tax Rate Management ~~~~~~~~~~~~~~~~~~~ The collection of tax rates (Implementing the ``Doctrine\Common\Collections\Collection`` interface) can be obtained using the ``getRates()`` method. To add or remove tax rates, you can use the ``addRate()`` and ``removeRate()`` methods. .. code-block:: php setName('taxRate1'); $taxRate2 = new TaxRate(); $taxRate2->setName('taxRate2'); $taxCategory->addRate($taxRate1); $taxCategory->addRate($taxRate2); $taxCategory->getRates(); //returns a collection of objects that implement the TaxRateInterface $taxCategory->removeRate($taxRate1); $taxCategory->hasRate($taxRate2); // returns true $taxCategory->getRates(); // returns collection with one element Calculators ----------- .. _default-calculator: Default Calculator ~~~~~~~~~~~~~~~~~~ **Default Calculator** gives you the ability to calculate the tax amount for given base amount and tax rate. .. code-block:: php setAmount(0.2); $basicPrice = 100; $defaultCalculator = new DefaultCalculator(); $defaultCalculator->calculate($basicPrice, $taxRate); //return 20 $taxRate->setIncludedInPrice(true); $defaultCalculator->calculate($basicPrice, $taxRate); // return 17, because the tax is now included in price .. _delegating-calculator: Delegating Calculator ~~~~~~~~~~~~~~~~~~~~~ **Delegating Calculator** gives you the ability to delegate the calculation of amount of tax to a correct calculator instance based on a type defined in an instance of **TaxRate** class. .. code-block:: php setAmount(0.2); $base = 100; //set base price to 100 $defaultCalculator = new DefaultCalculator(); $serviceRegistry = new ServiceRegistry(CalculatorInterface::class); $serviceRegistry->register('default', $defaultCalculator); $delegatingCalculator = new DelegatingCalculator($serviceRegistry); $taxRate->setCalculator('default'); $delegatingCalculator->calculate($base, $taxRate); // returns 20 Tax Rate Resolver ----------------- **TaxRateResolver** gives you ability to get information about tax rate for given taxable object and specific criteria. The criteria describes tax rate object. .. code-block:: php setName('TaxableGoods'); $taxableObject = new TaxableObject(); // class which implements TaxableInterface $taxableObject->setTaxCategory($taxCategory); $criteria = array('name' => 'EU VAT'); $taxRateResolver->resolve($taxableObject, $criteria); // returns instance of class TaxRate, which has name 'EU VAT' and category 'TaxableGoods'