Skip to content

Commit 8075ac0

Browse files
committed
refactor validator configuration
1 parent e5bb677 commit 8075ac0

19 files changed

Lines changed: 201 additions & 228 deletions

config/config.yaml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@ imports:
66
gewebe_sylius_vat:
77
order:
88
recalculate: true
9-
validate:
10-
is_active: true
11-
country: true
12-
registration: true
139
required:
1410
default: false
1511
company: false
16-
countries:
12+
countries: []
1713
revalidate:
1814
on_login: true
1915
expiration_days: 30
16+
validate:
17+
format: true
18+
country: true
19+
registration: true
20+
on_service_unavailable: false

config/services/event.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ services:
33
Gewebe\SyliusVATPlugin\EventListener\LoginListener:
44
arguments:
55
- '@validator'
6-
- '%gewebe_sylius_vat_plugin.revalidate.on_login%'
7-
- '%gewebe_sylius_vat_plugin.revalidate.expiration_days%'
6+
- '@gewebe_sylius_vat_plugin.vat_number_validator_config'
87
tags:
98
- { name: 'kernel.event_listener', event: 'security.interactive_login' }

config/services/form.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ services:
33
gewebe_sylius_vat_plugin.form.extension.address:
44
class: Gewebe\SyliusVATPlugin\Form\Extension\AddressTypeExtension
55
arguments:
6-
- '%gewebe_sylius_vat_plugin.required.default%'
6+
- '@gewebe_sylius_vat_plugin.vat_number_validator_config'
77
tags:
88
- { name: form.type_extension, extended_type: Sylius\Bundle\AddressingBundle\Form\Type\AddressType }
99

config/services/validator.yaml

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,37 @@
11
services:
22

3-
gewebe_sylius_vat_plugin.validator:
3+
gewebe_sylius_vat_plugin.vat_number_validator:
44
class: Gewebe\SyliusVATPlugin\Validator\Constraints\VatNumberValidator
55
arguments:
6-
- '@gewebe_sylius_vat_plugin.vat_validator_provider'
7-
- '%gewebe_sylius_vat_plugin.validate.is_active%'
8-
- '%gewebe_sylius_vat_plugin.validate.country%'
9-
- '%gewebe_sylius_vat_plugin.validate.registration%'
10-
- '%gewebe_sylius_vat_plugin.required.company%'
11-
- '%gewebe_sylius_vat_plugin.required.countries%'
6+
- '@gewebe_sylius_vat_plugin.vat_number_validator_provider'
7+
- '@gewebe_sylius_vat_plugin.vat_number_validator_config'
128
tags:
139
- { name: validator.constraint_validator }
1410

15-
gewebe_sylius_vat_plugin.vat_validator_provider:
11+
gewebe_sylius_vat_plugin.vat_number_validator_config:
12+
class: Gewebe\SyliusVATPlugin\Config\VatNumberValidatorConfig
13+
arguments:
14+
- '%gewebe_sylius_vat_plugin.required.default%'
15+
- '%gewebe_sylius_vat_plugin.required.company%'
16+
- '%gewebe_sylius_vat_plugin.required.countries%'
17+
- '%gewebe_sylius_vat_plugin.validate.format%'
18+
- '%gewebe_sylius_vat_plugin.validate.country%'
19+
- '%gewebe_sylius_vat_plugin.validate.registration%'
20+
- '%gewebe_sylius_vat_plugin.validate.on_service_unavailable%'
21+
- '%gewebe_sylius_vat_plugin.validate.on_login%'
22+
- '%gewebe_sylius_vat_plugin.validate.expiration_days%'
23+
24+
gewebe_sylius_vat_plugin.vat_number_validator_provider:
1625
class: Gewebe\SyliusVATPlugin\Vat\Number\VatNumberValidatorProvider
1726
arguments:
18-
- !tagged_iterator gewebe_sylius_vat_plugin.vat_validator
27+
- !tagged_iterator gewebe_sylius_vat_plugin.zone_vat_number_validator
1928

20-
gewebe_sylius_vat_plugin.eu_vat_validator:
29+
gewebe_sylius_vat_plugin.eu_vat_number_validator:
2130
class: Gewebe\SyliusVATPlugin\Vat\Number\Validator\EuVatNumberValidator
2231
arguments:
2332
- '@gewebe_sylius_vat_plugin.ibericode_vat.validator'
2433
tags:
25-
- { name: gewebe_sylius_vat_plugin.vat_validator }
34+
- { name: gewebe_sylius_vat_plugin.zone_vat_number_validator }
2635

2736
gewebe_sylius_vat_plugin.ibericode_vat.validator:
2837
class: Ibericode\Vat\Validator
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Gewebe\SyliusVATPlugin\Config;
6+
7+
final readonly class VatNumberValidatorConfig
8+
{
9+
public function __construct(
10+
public bool $isRequired = false,
11+
public bool $isRequiredForCompany = true,
12+
public array $requiredForCountries = [],
13+
public bool $validateFormat = true,
14+
public bool $validateCountry = true,
15+
public bool $validateRegistration = true,
16+
public bool $validateOnServiceUnavailable = false,
17+
public bool $revalidateOnLogin = true,
18+
public int $expirationDays = 30,
19+
) {
20+
}
21+
}

src/DependencyInjection/Configuration.php

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,29 +17,50 @@ public function getConfigTreeBuilder(): TreeBuilder
1717
->children()
1818
->arrayNode('order')
1919
->children()
20-
->booleanNode('recalculate')->defaultValue(true)->end()
20+
->booleanNode('recalculate')->defaultValue(true)
21+
->info('Order will be recalculated without taxes if possible.')
22+
->end()
2123
->end()
2224
->end() // order
23-
->arrayNode('validate')
24-
->children()
25-
->booleanNode('is_active')->defaultValue(true)->end()
26-
->booleanNode('country')->defaultValue(true)->end()
27-
->booleanNode('registration')->defaultValue(true)->end()
28-
->end()
29-
->end() // validation
3025
->arrayNode('required')
3126
->children()
32-
->booleanNode('default')->defaultValue(true)->end()
33-
->booleanNode('company')->defaultValue(true)->end()
27+
->booleanNode('default')->defaultValue(false)
28+
->info('VAT number is required by default.')
29+
->end()
30+
->booleanNode('company')->defaultValue(true)
31+
->info('VAT number is required for a company address.')
32+
->end()
3433
->arrayNode('countries')
3534
->scalarPrototype()->end()
35+
->info('VAT number is required for the specified countries.')
3636
->end()
3737
->end()
3838
->end() // required
39+
->arrayNode('validate')
40+
->children()
41+
->booleanNode('format')->defaultValue(true)
42+
->info('Verify the country-specific VAT number format.')
43+
->end()
44+
->booleanNode('country')->defaultValue(true)
45+
->info('Verify that the VAT number matches the selected country.')
46+
->end()
47+
->booleanNode('registration')->defaultValue(true)
48+
->info('Verify that the VAT number is successfully registered online.')
49+
->end()
50+
->booleanNode('on_service_unavailable')->defaultValue(false)
51+
->info('Validation will not fail if the VAT service is unavailable, '
52+
. 'but the VAT number is not verified, which can be tried again later.')
53+
->end()
54+
->end()
55+
->end() // validate
3956
->arrayNode('revalidate')
4057
->children()
41-
->booleanNode('on_login')->defaultValue(true)->end()
42-
->integerNode('expiration_days')->defaultValue(30)->end()
58+
->booleanNode('on_login')->defaultValue(true)
59+
->info('VAT number will be revalidated again on login.')
60+
->end()
61+
->integerNode('expiration_days')->defaultValue(30)
62+
->info('Number of days after which the VAT number will be revalidated.')
63+
->end()
4364
->end()
4465
->end() // revalidate
4566
;

src/DependencyInjection/GewebeSyliusVATExtension.php

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,16 @@ public function load(array $configs, ContainerBuilder $container): void
3131
$definition = $container->getDefinition('gewebe_sylius_vat_plugin.order_processor');
3232
$definition->replaceArgument(3, $configs['order']['recalculate']);
3333

34-
$definition = $container->getDefinition('gewebe_sylius_vat_plugin.validator');
35-
$definition->replaceArgument(1, $configs['validate']['is_active']);
36-
$definition->replaceArgument(2, $configs['validate']['country']);
37-
$definition->replaceArgument(3, $configs['validate']['registration']);
38-
$definition->replaceArgument(4, $configs['required']['company']);
39-
$definition->replaceArgument(5, $configs['required']['countries']);
40-
41-
$definition = $container->getDefinition('gewebe_sylius_vat_plugin.form.extension.address');
34+
$definition = $container->getDefinition('gewebe_sylius_vat_plugin.vat_number_validator_config');
4235
$definition->replaceArgument(0, $configs['required']['default']);
43-
44-
$definition = $container->getDefinition('Gewebe\SyliusVATPlugin\EventListener\LoginListener');
45-
$definition->replaceArgument(1, $configs['revalidate']['on_login']);
46-
$definition->replaceArgument(2, $configs['revalidate']['expiration_days']);
36+
$definition->replaceArgument(1, $configs['required']['company']);
37+
$definition->replaceArgument(2, $configs['required']['countries']);
38+
$definition->replaceArgument(3, $configs['validate']['format']);
39+
$definition->replaceArgument(4, $configs['validate']['country']);
40+
$definition->replaceArgument(5, $configs['validate']['registration']);
41+
$definition->replaceArgument(6, $configs['validate']['on_service_unavailable']);
42+
$definition->replaceArgument(7, $configs['revalidate']['on_login']);
43+
$definition->replaceArgument(8, $configs['revalidate']['expiration_days']);
4744
}
4845

4946
public function prepend(ContainerBuilder $container): void

src/EventListener/LoginListener.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Gewebe\SyliusVATPlugin\EventListener;
66

7+
use Gewebe\SyliusVATPlugin\Config\VatNumberValidatorConfig;
78
use Gewebe\SyliusVATPlugin\Entity\VatNumberAddressInterface;
89
use Gewebe\SyliusVATPlugin\Validator\Constraints\VatNumber;
910
use Sylius\Component\Core\Model\CustomerInterface;
@@ -14,15 +15,14 @@
1415
class LoginListener
1516
{
1617
public function __construct(
17-
private ValidatorInterface $validator,
18-
private bool $revalidateOnLogin,
19-
private int $expirationDays,
18+
private readonly ValidatorInterface $validator,
19+
private readonly VatNumberValidatorConfig $vatNumberValidatorConfig,
2020
) {
2121
}
2222

2323
public function onSecurityInteractiveLogin(InteractiveLoginEvent $event): void
2424
{
25-
if ($this->revalidateOnLogin === false) {
25+
if ($this->vatNumberValidatorConfig->revalidateOnLogin === false) {
2626
return;
2727
}
2828

@@ -45,7 +45,7 @@ public function onSecurityInteractiveLogin(InteractiveLoginEvent $event): void
4545
return;
4646
}
4747

48-
$revalidationDate = new \DateTime($this->expirationDays . ' days ago');
48+
$revalidationDate = new \DateTime($this->vatNumberValidatorConfig->expirationDays . ' days ago');
4949

5050
if (null === $address->getVatValidatedAt() || $address->getVatValidatedAt() < $revalidationDate) {
5151
$violations = $this->validator->validate($address, new VatNumber());

src/Form/Extension/AddressTypeExtension.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Gewebe\SyliusVATPlugin\Form\Extension;
66

7+
use Gewebe\SyliusVATPlugin\Config\VatNumberValidatorConfig;
78
use Sylius\Bundle\AddressingBundle\Form\Type\AddressType;
89
use Symfony\Component\Form\AbstractTypeExtension;
910
use Symfony\Component\Form\Extension\Core\Type\TextType;
@@ -12,7 +13,7 @@
1213
class AddressTypeExtension extends AbstractTypeExtension
1314
{
1415
public function __construct(
15-
private bool $isRequired,
16+
private readonly VatNumberValidatorConfig $vatNumberValidatorConfig,
1617
) {
1718
}
1819

@@ -23,7 +24,7 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
2324
TextType::class,
2425
[
2526
'label' => 'gewebe_sylius_vat_plugin.ui.vat_number',
26-
'required' => $this->isRequired,
27+
'required' => $this->vatNumberValidatorConfig->isRequired,
2728
],
2829
);
2930
}

src/Validator/Constraints/VatNumber.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@ class VatNumber extends Constraint
1717

1818
public string $messageRequiredForCompany = 'gewebe_sylius_vat_plugin.address.vat_number.required_for_company';
1919

20-
public string $messageFormat = 'gewebe_sylius_vat_plugin.address.vat_number.invalid_format';
20+
public string $messageInvalidFormat = 'gewebe_sylius_vat_plugin.address.vat_number.invalid_format';
2121

22-
public string $messageCountry = 'gewebe_sylius_vat_plugin.address.vat_number.invalid_country';
22+
public string $messageInvalidCountry = 'gewebe_sylius_vat_plugin.address.vat_number.invalid_country';
2323

24-
public string $messageVerified = 'gewebe_sylius_vat_plugin.address.vat_number.not_verified';
24+
public string $messageInvalidRegistration = 'gewebe_sylius_vat_plugin.address.vat_number.invalid_registration';
25+
26+
public string $messageServiceUnavailable = 'gewebe_sylius_vat_plugin.address.vat_number.service_unavailable';
2527

2628
public string $vatNumberPath = 'vatNumber';
2729

0 commit comments

Comments
 (0)