wdrożenia PrestaShop

Europejski numer VAT - problem z modułem

  • 0 Odpowiedzi
  • 2549 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

*

Offline storecat

  • Nowy
  • *
  • 1
  • 0
  • prestashop
  • PrestaShop: 1.6
  • Status: Programista
Europejski numer VAT - problem z modułem
« dnia: Lipiec 31, 2015, 10:31:21 am »

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:
Cytuj
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:
Cytuj
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