diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt
index f10a6d825..5abfa1285 100644
--- a/docs/changelog/7.x.x.txt
+++ b/docs/changelog/7.x.x.txt
@@ -2,6 +2,7 @@
- rfe #10061: Use email as username at registration
- Added WebGUI community statistics question to the site setup wizard.
- Added Ogone payment plugin ( Martin Kamerbeek / Oqapi )
+ - Improved VAT number management for admins ( Martin Kamerbeek / Oqapi )
7.7.6
- Added mobile style template. If enabled in settings, will serve alternate style templates
diff --git a/docs/upgrades/packages-7.7.7/root_import_default-eu-user-screen.wgpkg b/docs/upgrades/packages-7.7.7/root_import_default-eu-user-screen.wgpkg
new file mode 100644
index 000000000..9538d5300
Binary files /dev/null and b/docs/upgrades/packages-7.7.7/root_import_default-eu-user-screen.wgpkg differ
diff --git a/lib/WebGUI/Shop/TaxDriver/EU.pm b/lib/WebGUI/Shop/TaxDriver/EU.pm
index cf82ac5d4..b2f82e339 100644
--- a/lib/WebGUI/Shop/TaxDriver/EU.pm
+++ b/lib/WebGUI/Shop/TaxDriver/EU.pm
@@ -312,6 +312,12 @@ sub getConfigurationScreen {
hoverHelp => 'The country where your shop resides.',
options => \%countryOptions,
);
+ $f->template(
+ name => 'userTemplateId',
+ value => $self->get('userTemplateId'),
+ label => 'User screen template',
+ namespace => 'TaxDriver/EU/User',
+ );
$f->yesNo(
name => 'automaticViesApproval',
value => $self->get( 'automaticViesApproval' ),
@@ -606,27 +612,21 @@ Returns the screen for entering per user configuration for this tax driver.
sub getUserScreen {
my $self = shift;
my $url = $self->session->url;
+ my $var = {};
+
+ $var->{ errorMessage } = $self->session->stow->get( 'userTaxError' );
- my $output = 'VAT Numbers
'
- . '
| Country | VAT Number |
';
-
+ my @vatNumbers;
foreach my $number ( @{ $self->getVATNumbers } ) {
- my $deleteUrl = $url->page('shop=tax;method=do;do=deleteVATNumber;vatNumber='.$number->{ vatNumber });
- $output .=
- '| '
- . join( ' | ',
- $self->getCountryName( $number->{ countryCode } ),
- $number->{ vatNumber },
- $number->{ name },
- $number->{ address },
- $self->isUsableVATNumber( $number ),
- qq{delete},
- )
- . ' |
'
- ;
+ $number->{ deleteUrl } =
+ $url->page('shop=tax;method=do;do=deleteVATNumber;vatNumber='.$number->{ vatNumber });
+ $number->{ countryName } = $self->getCountryName( $number->{ countryCode } ),
+ $number->{ isUsable } = $self->isUsableVATNumber( $number ),
+
+ push @vatNumbers, $number;
}
- $output .= '
';
+ $var->{ vatNumber_loop } = \@vatNumbers;
my $f = WebGUI::HTMLForm->new( $self->session );
$f->hidden(
@@ -648,9 +648,12 @@ sub getUserScreen {
$f->submit(
value => 'Add',
);
- $output .= $f->print;
- return $output;
+ $var->{ addVatNumber_form } = $f->print;
+
+ my $template = WebGUI::Asset::Template->new( $self->session, $self->get('userTemplateId') );
+
+ return $template->process( $var );
}
#-------------------------------------------------------------------
@@ -864,12 +867,12 @@ sub www_addVATNumber {
my $vatNumber = uc $form->process( 'vatNumber' );
my ($countryCode, $number) = $vatNumber =~ m/^([A-Z]{2})([A-Z0-9]+)$/;
- return 'Illegal country code' unless isIn( $countryCode, keys %EU_COUNTRIES );
+ my $errorMessage;
+ $errorMessage = 'Illegal country code' unless isIn( $countryCode, keys %EU_COUNTRIES );
+ $errorMessage = 'You already have a VAT number for this country.' if @{ $self->getVATNumbers( $countryCode ) };
+ $errorMessage = $self->addVATNumber( $vatNumber ) unless $errorMessage;
- return 'You already have a VAT number for this country.' if @{ $self->getVATNumbers( $countryCode ) };
-
- #### TODO: Handle errorMessage.
- my $errorMessage = $self->addVATNumber( $vatNumber );
+ $self->session->stow->set( 'userTaxError', $errorMessage );
my $instance = WebGUI::Content::Account->createInstance($session,"shop");
return $instance->displayContent( $instance->callMethod("manageTaxData", [], $session->user->userId) );
@@ -1035,6 +1038,7 @@ sub www_saveConfiguration {
shopCountry => $form->process( 'shopCountry', 'selectBox' ),
automaticViesApproval => $form->process( 'automaticViesApproval', 'yesNo' ),
acceptOnViesUnavailable => $form->process( 'acceptOnViesUnavailable', 'yesNo' ),
+ userTemplateId => $form->process( 'userTemplateId', 'template' ),
} );
return '';
diff --git a/t/Shop/TaxDriver/EU.t b/t/Shop/TaxDriver/EU.t
index f31c5063c..c41029672 100644
--- a/t/Shop/TaxDriver/EU.t
+++ b/t/Shop/TaxDriver/EU.t
@@ -152,15 +152,17 @@ SKIP: {
userId => $taxUser->userId,
countryCode => 'NL',
vatNumber => $testVAT_NL,
- approved => 1,
+ viesValidated => 1,
viesErrorCode => undef,
+ approved => 0,
};
my $expectBE = {
userId => $taxUser->userId,
countryCode => 'BE',
vatNumber => $testVAT_BE,
- approved => 1,
+ approved => 0,
viesErrorCode => undef,
+ viesValidated => 1,
};
my $vatNumbers = $taxer->getVATNumbers( undef, $taxUser );
@@ -257,6 +259,7 @@ SKIP: {
#
#######################################################################
+ $taxer->update( { 'automaticViesApproval' => 1 } );
my $book = WebGUI::Shop::AddressBook->create($session);
# setup address in EU but not in residential country of merchant