- New fields for VAT number and validation status at
Address
entity - Validate VAT numbers (by format, country and existence)
- Using VIES API for EU VAT number validation
- Revalidate customers VAT numbers after a given time
- Installer for EU VAT rates with countries and zones
- Placing an order in the EU without VAT if
- Customers billing country is different from shop billing data
- VAT number validation was successful
composer require gewebe/sylius-vat-plugin
# config/bundles.php
return [
# ...
Gewebe\SyliusVATPlugin\GewebeSyliusVATPlugin::class => ['all' => true],
];
# config/packages/_sylius.yaml
imports:
# ...
- { resource: '@GewebeSyliusVATPlugin/config/app/config.yml'}
Copy customized templates to your templates directory (e.g templates/bundles/
):
mkdir -p templates/bundles/SyliusAdminBundle/
cp -R vendor/gewebe/sylius-vat-plugin/src/templates/SyliusAdminBundle/* templates/bundles/SyliusAdminBundle/
mkdir -p templates/bundles/SyliusShopBundle/
cp -R vendor/gewebe/sylius-vat-plugin/src/templates/SyliusShopBundle/* templates/bundles/SyliusShopBundle/
- If you use
annotations
mapping:
# src/Entity/Addressing/Address.php
namespace App\Entity\Addressing;
use Doctrine\ORM\Mapping as ORM;
use Gewebe\SyliusVATPlugin\Entity\VatNumberAddressInterface;
use Gewebe\SyliusVATPlugin\Entity\VatNumberAwareTrait;
use Sylius\Component\Core\Model\Address as BaseAddress;
/**
* @ORM\Entity
* @ORM\Table(name="sylius_address")
*/
class Address extends BaseAddress implements VatNumberAddressInterface
{
use VatNumberAwareTrait;
- If you use
yaml
mapping add also:
# config/doctrine/Address.orm.yaml
App\Entity\Addressing\Address:
type: entity
table: sylius_address
fields:
vatNumber:
type: string
column: vat_number
nullable: true
vatValid:
type: boolean
column: vat_valid
vatValidatedAt:
type: datetime
column: vat_validated_at
nullable: true
bin/console doctrine:migrations:diff
bin/console doctrine:migrations:migrate
# EU VAT on digital services (MOSS scheme)
bin/console vat:install:eu
# EU with French VAT (cross-border)
bin/console vat:install:eu FR
# EU with French VAT and passed threshold in Spain and Portugal (cross-border)
bin/console vat:install:eu FR -t ES,PT
# EU with French VAT included in price
bin/console vat:install:eu FR -i
# EU with German standard and reduced VAT categories
bin/console vat:install:eu DE -c standard,reduced
Setup Traditional
$ composer install
$ cd tests/Application
$ yarn install
$ yarn build
$ bin/console assets:install public -e test
$ bin/console doctrine:schema:create -e test
$ export APP_ENV=test
$ symfony server:start --port=8080 --dir=public
Setup Docker
$ docker compose up -d
$ docker compose exec app make init
Run Tests
$ vendor/bin/behat
$ vendor/bin/phpspec run
$ vendor/bin/phpstan analyse -c phpstan.neon -l max src/
$ vendor/bin/psalm
Coding Standard
$ vendor/bin/ecs check