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
' - . ''; - + my @vatNumbers; foreach my $number ( @{ $self->getVATNumbers } ) { - my $deleteUrl = $url->page('shop=tax;method=do;do=deleteVATNumber;vatNumber='.$number->{ vatNumber }); - $output .= - '' - ; + $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 .= '
CountryVAT Number
' - . join( '', - $self->getCountryName( $number->{ countryCode } ), - $number->{ vatNumber }, - $number->{ name }, - $number->{ address }, - $self->isUsableVATNumber( $number ), - qq{delete}, - ) - . '
'; + $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