Witam szanownych forumowiczów.
Pracuję obecnie nad sklepem dla klienta z Wielkiej Brytanii, który prowadzi sprzedaż głównie dla klientów z Polski.
Szybkie streszczenie sytuacji z podatkami między tymi dwoma krajami:
Klient z Polski, status firmy, posiada aktywny NIP UE -> podatek VAT 0% (sprzedaż wewnątrzwspólnotowa).
Klient z Polski, status firmy, nie posiada aktywnego NIPu UE -> podatek VAT 23%
Klient z Polski, osoba prywatna -> podatek VAT 23%
Klient z Wielkiej Brytanii -> podatek 20% - w każdym przypadku.
Obecnie używam modułu "Europejski numer VAT" (European VAT Number) w wersji 1.7.2,
który sprawdza poprawność numeru NIP w bazie VIES i na tej podstawie przydziela odpowiednią stawkę podatku klientowi (?).
Rozważmy kolejno poniższe scenariusze:
1. W trakcie rejestracji klient podaje aktywny NIP UE (z przedrostkiem PL). Sklep puszcza go dalej i pozwala mu złożyć zamówienie ze stawką VAT 0%. Wszystko pięknie.
2. Osoba prywatna - nie wypełnia pola "firma", nie podaje numeru NIP - rejestracja przebiega poprawnie, przy zamówieniu jest doliczany podatek VAT. Działa jak trzeba
3. Klient z działającą firmą w Polsce, z poprawnym numerem NIP - ale nie aktywnym w VIES (bez przedrostka PL), nie zarejestrowany jako płatnik VAT UE.
Próba rejestracji kończy się wyświetleniem błędu:
Nieprawidłowy numer VAT
Chciałbym żeby w tym przypadku formularz puścił klienta dalej (pozwolił na rejestrację) ale doliczał VAT 23% (zgodnie z powyższym streszczeniem) zamiast w ogóle nie pozwalać na rejestrację.
Próbowałem modyfikować kod modułu vatnumber (Europejski numer NIP) a konkretnie metodę WebServiceCheck komentując miejsce, w którym jest wyświetlany ten błąd:
public static function WebServiceCheck($vat_number)
{
if (empty($vat_number))
return array();
$vat_number = str_replace(' ', '', $vat_number);
$prefix = Tools::substr($vat_number, 0, 2);
/*if (array_search($prefix, self::getPrefixIntracomVAT()) === false)
return array(Tools::displayError('Invalid VAT number'));*/
$vat = Tools::substr($vat_number, 2);
$url = 'http://ec.europa.eu/taxation_customs/vies/viesquer.do?ms='.urlencode($prefix).'&iso='.urlencode($prefix).'&vat='.urlencode($vat);
@ini_set('default_socket_timeout', 2);
for ($i = 0; $i < 3; $i++)
{
if ($page_res = Tools::file_get_contents($url))
{
if (preg_match('/invalid VAT number/i', $page_res))
{
@ini_restore('default_socket_timeout');
return array(Tools::displayError('VAT number not found'));
}
else if (preg_match('/valid VAT number/i', $page_res))
{
@ini_restore('default_socket_timeout');
return array();
}
else
++$i;
}
else
sleep(1);
}
@ini_restore('default_socket_timeout');
return array(Tools::displayError('VAT number validation service unavailable'));
}
Niestety wtedy otrzymuję błąd:
Usługa uwierzytelniania NIP niedostępna.
Do tego drugiego błędu - zgodnie z zaleceniami z innym forów próbowałem zmieniać default_socket_timeout, niestety nic to nie zmieniło.
Czy macie może jakieś pomysły jak to rozwiązać?
Silnik Prestashop 1.6.1.0