Jump to content
maranc

poprawiony moduł VATNUMBER

Recommended Posts

Witam, irytacja narasta z każdym dniem jak pracuję nad Prestą :). Ostatnio wziąłem się za moduł VATNUMBER. Moduł ogólnie nie spełniał swojej funkcji, gdyż:

- przy wyłączonej walidacji online pozwala na wprowadzenie czegokolwiek w pole vat_number (NIP w polskim tłumaczeniu) no i ceny dla klienta z poza Polski (dowolny kraj EU) zawsze wyświetlają się netto (bez VAT)

- nie sprawdza prefiksu w VAT (NIP) z kodem kraju - możesz sobie wprowadzić adres np. w Niemczech, podać polski NIP (zarejestrowany jako VAT EU) no i ceny będą bez VAT

- przy włączonej walidacji z uwagi że wiele osób wykorzystuje ten moduł do wprowadzania pola NIP żaden polski klient nie mógłby wprowadzić NIP, gdyż NIP (dla 99% klientów nie będących przedsiębiorcami z aktywnym VAT EU) generowałby komunikat że jest niepoprawny (no bo skąd przysłowiowy Kowalski ma mieć NIP EU?).

 

W zasadzie te problemy przekreślają użyteczność modułu. Podstawowa wada modułu to jednak brak "logiki". Moim zdaniem z założenia moduł powinien działać następująco:

- klient z Polski (lub klient z kraju sklepu) wprowadza NIP i tyle, walidacja tylko offline (czyli sprawdzamy ile cyfr, dopuszczamy myślniki itd). Błędny numer NIP - komunikat z błędem

- klient z poza Polski wprowadza swój NIP (czyli VAT EU), gdyż jest zarejestrowanym płatnikiem VAT EU, skrypt sprawdza poprawność NIP (offline przez PHP i online na webeservice) i zmienia ceny na netto, gdy poprawny

- klient z poza Polski nie jest płatnikiem VAT EU, ale mimo tego chce fakturę - w tym wypadku powinna być przeprowadzona walidacja tylko w samym skrypcie PHP, bez walidacji online - ceny wyświetlają się brutto.

 

Z grubsza tak bym to widział... Zmieniłem trochę linijek kodu i po zmianach działa to tak:

- dodałem walidację NIP (lub VAT EU) w kodzie PHP - każdy klient z Polski  jest sprawdzany wyłącznie pod kątem poprawności NIP, czyli numer NIP może być zapisany jako 9 cyfr lub 9 cyfr rozdzielonych myslnikami, opcjonalnie z kodem PL z przodu, wyłączona walidacja online

- każdy klient z poza Polski musi wprowadzić poprawny VAT EU (jeżeli zaznaczone opcje w module). Walidacja jest rozdzielona na dwie metody: najpierw sprawdzamy offline, jak numer jest ok, walidujemy online. Oczywiście jak nie zaznaczymy opcji walidacji w module, każdy VAT EU (lub NIP) przejdzie dalej ... no i ceny będą netto. Przy włączonej walidacji klient nie wprowadzi niepoprawnego numeru.

- klient nie może podać innego prefiksu VAT EU (NIP) niż kraj w adresie- błąd o którym pisałem wyżej...

- zmieniłem sposób sprawdzania online (dla programistów - file_get_content na curl - jest znacznie szybsza...)

- nowe komunikaty są przetłumaczone na język polski

 

A teraz prośba - proszę nie pytać dlaczego tak a nie inaczej, co zrobić żeby itd.... Założenie było proste - zmieniamy moduł, bez modyfikacji core sklepu lub szablonów tpl. Mógłbym zrobić wszystko na tip top ale żeby działało to ok trzeba zmienić min. klika linijek w  plikach klas i w templatkach tpl. Nie moja wina że moduł został "zakorzeniony" w core, a że 

ktoś sobie wymyślił if( !empy($vat_number) ) jako jedyną walidację ... 

 

 

PS. Tłumaczenia błędów proszę zrobić indywidualnie z panelu administracyjnym. Modułu nie trzeba instalować, proszę skopiować pliki do obecnego modułu VATNUMBER

 

 

vatnumber.zip

  • Like 1

Share this post


Link to post
Share on other sites

1. Pierwsza i zasadnicza uwaga, to co ma wspólnego EU VAT z krajowym numerem NIP?

Od razu odpowiem. Tyle co piernik z wiatrakiem. Większość użytkowników miesza ze sobą te dwa różne pojęcia.

Dla krajowych NIP, DNI, NIF, USt-IdNr. itd. itp. w prestashop przeznaczone jest pole "dni", natomiast pole "vat_number" jest przeznaczone dla europejskiego numeru VAT.

Jednak pole 'dni' jest źle walidowane w preście, bo można je w ustawieniach kraju tylko włączyć lub wyłączyć i niezależnie od typu klienta jest polem obowiązkowym.

I jeśli już robić poprawki presty, to tylko w walidacji tego pola.

 

2. Włączanie modułu "Europejski numer VAT' przez polskie firmy uważam za skrajną głupotę, bo może to pociągnąć za sobą duuuuże koszty.

- wymogiem polskich US, aby wystawiać faktury z 0% VAT dla wewnątrzwspólnotowego nabycia, jest posiadanie od kontrachenta PAPIERU z jego urzędu podatkowego z potwierdzeniem rejestracji numeru EU VAT,

- pole walidacji "vat_number" mogę łatwo oszukać wstawiając jakiś istniejący EU VAT, przykład: jestem sobie niemcem, zakładam w twoim sklepie sobie konto z niemieckim adresem, a w pole "vat_number" wstawiam DE149145247 (numer eu vat firmy BASF), kupuję wszystko z 0% VAT. Co się dzieje potem? Ano przychodzi do Ciebie US i musisz cały vat za mnie zapłacić i to jeszcze z karnymi odsetkami. :)

Edited by Yabber

Share this post


Link to post
Share on other sites

To, że krajowy NIP nie ma nic wspólnego z VAT EU to doskonale wiem, bo sam prowadzę działalność gospodarczą i jestem zarejestrowanym płatnikiem VAT EU.

Tak jak piszesz najlepsza opcja to użycie DNI (chociaż dla twojej informacji - francuski DNI to też nie jest odpowiednik polskiego NIP). A że włączenie DNI (w tłumaczeniach NIP) powoduje obowiązek wprowadzania go w formularzu danych adresowych to już inna bajka. Oczywiście trzeba poszperać w kilku szablonach poprawić i będzie działać też DNI.

 

Praktyka - jak trochę poczytałem różne fora jest - taka że polscy "prestowicze" nagminnie wykorzystują moduł VAT EU jako pole NIP w swoich sklepach. I to dla nich ta poprawka. 

Jak ktoś nie chce - nie musisz przecież instalować tej poprawki.

 

Co do drugiego tematu, tak, masz rację można użyć zarejestrowanego VAT EU jakiejś firmy i kupić w cenach netto. Ale pokaż mi osobę, która prowadzi działalność i wyśle towar do kraju EU bez uzyskania kopii nadania VAT EU z rodzimego kraju nabywcy. Ja bym nie wysłał, bo takie są przepisy, więc i tak kontrahent musiałby dopłacić równowartość VAT. 

No chyba że ktoś jest idiotą i ochoczo wyśle bez kopii dokumentu rejestracyjnego... no ale idąc tą drogą myślenia równie dobrze trzeba byłoby zakazać sprzedaży noży, bo jeszcze ktoś się potnie albo kogoś dźgnie :)

Share this post


Link to post
Share on other sites

Praktyka - jak trochę poczytałem różne fora jest - taka że polscy "prestowicze" nagminnie wykorzystują moduł VAT EU jako pole NIP w swoich sklepach.

 

Też to zauważyłem. A prawdopodobnie większość z nich nie ma zielonego pojęcia jak działa ten moduł i jakie niesie to konsekwencje.

 

Naklepią sprzedaży z zerową stawką VAT do UE, a potem będzie płacz i zgrzytanie zębów. :D

Share this post


Link to post
Share on other sites

"Ignorantia iuris nocet" jak mawiali starożytni Rzymianie..... Jak ktoś się bierze za sprzedaż do EU to powinien znać przepisy prawa. 

Ja zrobiłem te poprawki w dobrej wierze, a jak ktoś sobie zrobi krzywdę z własnej głupoty to jego problem.....

 

Ale żeby nie było że to jedyne rozwiązanie dla uzyskania NIP na fakturze, obiecuje, że jak znajdę czas to zajmę się walidacją DNI.

A co do modułu VATNUMBER to i tak uważam że moje poprawki są lepsze niż to co było w oryginale. Bo nawet w podawanym przez Ciebie przykładzie z numerem firmy BASF to w oryginale można było wklepać adres z Hiszpanii, podać VAT EU jakiejś firmy z Niemiec i przeszłoby elegancko nawet walidację online. Dla testów sam tak robiłem, podawałem adres litewski, kraj Litwa wbijałem swój VAT EU i ceny były już netto. Tak więc przynajmniej taki będzie plus z mojego rozwiązania.....Dodatkowo dla mniej przezornych nie zaznaczenie walidacji online zawsze zwróci "false", co jest bardzie logiczne niż to co było pierwotnie w module (walidacja online wyłączona to wynik zawsze "true") i klient mógł sobie klepać herezje.....

Share this post


Link to post
Share on other sites

A co do modułu VATNUMBER to i tak uważam że moje poprawki są lepsze niż to co było w oryginale.

 

 

Tu się oczywiście z Tobą zgadzam, bo orygnalny moduł to bubel. :(

Prawidłowo zrobiony ten moduł powinien walidować tylko adres płatnika.

Przykład:

Mam trzy firmy, w Polsce, w USA i w Niemczech, Zamówienie robię jako polska firma, jako płatnika wybieram niemiecka firmę, a wysyłkę życzę sobie do USA.

Oczywiście niemiecka firma ma numer EU VAT.

Jaki powinien być VAT na fakturze?

Oczywiście, że 0% VAT, bo sprzedaż nastąpiła do państwa EU.

Share this post


Link to post
Share on other sites

Przepraszam z góry za odgrzanie starego tematu.

Bardzo pomocna modyfikacja! Jedynie z czym mam problem, to po zastosowaniu stawki 0% nie odlicza mi podatku od kosztów przesyłki, odlicza tylko od produktów. 

Jak mogę to poprawić? Moduł oryginalny od Prestashop odlicza poprawnie.

 

Mała uwaga: nie odlicza podatku od ceny przesyłki tylko jeśli w ustawieniach modułu opcja "Włącz sprawdzanie VAT online (tylko klienci z krajów EU)" jest włączona.

Edited by Kolar

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More