Skocz do zawartości

storacet

Members
  • Zawartość

    2
  • Rejestracja

  • Ostatnia wizyta

  1. Europejski numer VAT - problem z dostosowaniem modułu

    Problem został częściowo rozwiązany. Na chwilę obecną wszystko działa jak powinno, ale mam wątpliwości co do sposobu w jaki to zostało zrobione. Pewnie należałoby zrobić to na zasadzie modułu: klikasz, instalujesz, masz z głowy... Niestety nie znam się aż tak na Prestashopie a ostatnio trochę brakuje czasu żeby się w to zagłębiać... Zauważyłem, że Presta ma tak jakby dwa pola związane z podatkami: vat_number i DNI. vat_number jest używane przez moduł Europejski Numer NIP (vatnumber), a DNI to chyba domyślne pole wykorzystywane przed instalacją modułu vatnumber (???) w każdym razie też ma coś wspólnego z podatkami Pole vat_number umożliwia naliczenie 0% VATu ale tylko wtedy kiedy NIP jest poprawny - inaczej wyrzuca błąd rejestracji. Ewentualnie jeśli nie zostanie w ogóle wypełnione to nalicza podatek 23%. Pole DNI łyka każdy NIP i nalicza wtedy podatek 23%. Zazwyczaj wyświetlane jest jedno z nich (oba są tłumaczone jako "NIP") Pomysł opiera się na wykorzystaniu tej zależności: bazujmy na vat_number ale oprócz tego użyjmy jeszcze DNI na wypadek gdyby NIP nie był poprawny. Tylko skąd klient ma wiedzieć który wypełnić? Trzeba zrobić to za niego. Domyślnie wyświetlam vat_number, a kiedy klient go wypełni - sprawdzam po cichu w swoim własnym skrypcie (bazującym na module vatnumber) czy NIP jest poprawny. Jeśli jest poprawny to wszystko fajnie, nic już nie robię - rejestracja przejdzie. Jeśli nie jest, to biorę ten NIP z pola vat_number, wsadzam go w pole DNI, chowam i czyszczę zawartość pola vat_number, wyświetlam pole DNI. W ten sposób sklep puści rejestrację z niepoprawnym NIPem i naliczy prawidłowy podatek. Trzeba jeszcze obsłużyć to samo w drugą stronę - jeśli klient pomyli się w NIPie, i za chwilę poprawi na prawidłowy. Trochę dłubania w javascripcie i ajaxowe odpytywanie swojego skryptu bazującego na module "vatnumber". Nie modyfikuję ani nie zastępuję modułu "vatnumber" swoim modułem. Zrobiłem tylko obejście, które pozwoli dostarczyć modułowi "vatnumber" prawidłowe dane... A później na dobicie Kiedy klient się zaloguje i zechce zmienić swoje dane, zmieni NIP, to znowu zobaczy błąd...Przy edycji "Moich danych" jest ten sam problem, więc trzeba zrobić to wszystko jeszcze raz w szablonie do edycji. Wiem, że to nie jest idealne rozwiązanie, ale tak jak mówiłem nie znam zbyt dobrze zasad działania backendu Prestashop - zrobiłem jak umiałem, na razie działa...
  2. 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: 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: 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
×