Walidacja pola NIP – polski numer NIP w Prestashop 1.7

Walidacja pola NIP – polski numer NIP w Prestashop 8, 1.7

W dzisiejszym artykule pokażemy w jaki sposób wprowadzić prostą walidację dla pola NIP w Prestashop 1.7. Polski numer NIP to 10 cyfr bez spacji i myślników – wprowadzimy walidację wobec powyższego założenia.

Standardowo w Prestashop 1.7 pole NIP (vat_number) nie jest dobrze walidowane. Doprowadza to do sytuacji gdzie klient podczas realizacji zamówienia może wpisać w to pole cokolwiek. Bardzo często zdarza się, że klienci korzystają z funkcji autouzupełniania danych w przeglądarce i w tym polu lądują zupełnie niepożądane informacje adresowe jak. np. nazwa województwa czy nazwa kraju. Nie jest to pożądana sytuacja w szczególności jeśli korzystamy z integratorów Prestashop 1.7 z różnymi programami księgowymi czy systemami ERP, zamówienia mają wówczas problem z odpowiednim zapisem po stronie takich programów / systemów.

Jedziemy!

Ta dość drobna modyfikacja będzie rozgrywać się w plikach classes/validate.php oraz classes/address.php, Można tutaj pokusić się oczywiście o nadpisania (overrides) tych 2 plików i zrobić to w 100% jak należy, natomiast my wyjątkowo aby uzyskać pożądany efekt edytowaliśmy bezpośrednio te pliki.

W classes/validate.php musimy utworzyć funkcję walidacji dla zmiennej $vat_number.

/**
* Validate VAT Number
*/

public static function isVatNumber($vat_number)
{
return preg_match('/^[0-9]{10}$/', $vat_number);
} 

Wklejamy tą funkcję w całości tuż przed inną funkcją walidującą isSiret.

Natomiast w classes/address.php szukamy i modyfikujemy w całości linijkę kodu dotyczącą pola vat_number, ta linia będzie miała początkowo poniższy kształt:

'vat_number' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName'],

natomiast po naszej modyfikacji będzie wyglądać jak poniżej:

'vat_number' => ['type' => self::TYPE_STRING, 'validate' => 'isVatNumber', 'size' => 10],

Gotowe, Teraz wystarczy wyczyścić pamięć podręczną sklepu i zmiana wejdzie w życie. Od tej pory pole NIP w Prestashop 1.7 jest już poprawnie walidowane zgodnie z polskim standardem (tj. 10 cyfr). To czy walidacja działa możemy sprawdzić wpisując w to pole np. mniejszą ilość cyfr niż 10. Wyświetlona zostanie adnotacja „Nieprawidłowy format”.

UWAGA!
Jeżeli wprowadzasz walidację na istniejącym sklepie powinieneś skorygować wprowadzone już NIP-y klientów w bazie danych sklepu. W tym celu skorzystaj z phpMyAdmin, w tabeli ps_address skoryguj odpowiednie wiersze kolumny vat_number zgodnie z nową formułą. Jeśli tego nie zrobisz a wprowadzisz walidację – starzy klienci z numerami NIP nie spełniającymi warunków nowej walidacji będą mieli problem z edycją swoich adresów (błąd 500) a w dalszym kontekście ze złożeniem zamówienia.

Dlatego, jeśli wprowadzasz walidację na działającym sklepie przed wprowadzeniem walidacji musisz upewnić się, że wszystkie stare rekordy spełniają warunki nowej walidacji.

Zapytania SQL przydatne podczas porządkowania bazy danych w kontekście dostosowania pola vat_number do wprowadzanej walidacji:

Zapytanie, które usunie z bazy danych myślniki z numerów NIP:

UPDATE `ps_address` SET `vat_number` = REPLACE(`vat_number`, '-', '') WHERE `vat_number` LIKE '%-%'

Zapytanie, które usunie z bazy danych numery NIP krótsze niż 10 cyfr – takie numery NIP traktujemy jako nieprawidłowe:

UPDATE `ps_address` SET `vat_number` = "" WHERE `vat_number` REGEXP '^[0-9]{1,9}$'


Przydatne zapytania SQL – szukanie numerów NIP nie spełniających warunków wprowadzonej walidacji:

11 i więcej cyfr – nieprawidłowy NIP – zbyt długi:

SELECT * FROM `ps_address` WHERE `vat_number` REGEXP '^[-+\\/\\s]*([0-9][-+\\/\\s]*){11,}$'

Numer NIP zawierający litery (małe lub duże, ew. polskie znaki) – po co to sprawdzać? często zdarza się, że klienci potrafią wpisywać nieświadomie (autouzupełnianie przeglądarki) w pole NIP np. nazwę województwa, to zapytanie ładnie nam wylistuje takie rekordy:

SELECT * FROM `ps_address` WHERE `vat_number` REGEXP '[a-zA-ZżŻźŹęĘśŚńŃóÓłŁąĄĆć]'

Po zakończeniu prac porządkujących i wprowadzeniu odpowiednich korekt – sprawdź jeszcze raz organoleptycznie wszystkie rekordy na zgodność z nowymi zasadami walidacji – teraz możesz spokojnie uruchomić walidację bez obawy o poprawność działania sklepu dla starych klientów.

Jak widać modyfikacja jest bardzo prosta a uzyskany efekt w 100% spełnia nasze założenia. Dziękujemy za Twoją obecność – bądź na bieżąco, już niebawem kolejne tutoriale Prestashop!

Przewiń do góry