"Niektórzy ludzie, kiedy napotkają problem, myślą: 'Wiem, użyję wyrażeń regularnych'.
I teraz mają dwa problemy."

Jamie Zawinski

czwartek, 2 grudnia 2010

Dynamics AX: Walidacja NIP

W kolejnym artykule dotyczącym systemu Dynamics AX (Axapta) postaram przedstawić budowę brakującej cegiełki systemu w lokalizacji polskiej. Jakież było moje zdziwienie, kiedy zobaczyłem, że w systemie ERP sprzedawanym na polskim rynku nie ma walidacji podstawowego numeru wykorzystywanego w celu identyfikacji podatkowej - NIP.


Jest jednak na to rada. W DAX istnieje klasa o nazwie TaxVATNumValidate, która posiada klasy potomne dla poszczególnych krajów (Polski brak). W celu zlokalizowania weryfikatora należy utworzyć klasę TaxVATNumValidatePL:

class TaxVATNumValidatePL extends TaxVATNumValidate
{

} 

następnie przeciążyć metodę validateVATNum:

// implementacja w x++ wg ogolnodostepnych algorytmow
boolean validateVATNum(VATNum _VATNum)
{
    int idx;
    int w[9];
    int wk;
    int i;
    int k;
    int len = strlen(VATNum);
    ;

    if (len && !(len < 10 || len > 13))
    {
 
        while(strfind(_VATNum, '-', 1, strlen(_VATNum)))
        {
            idx = strfind(_VATNum, '-', 1, strlen(_VATNum));
            nip = strdel(_VATNum, idx, 1);
        }

         if(_VATNum == "")
            return false;

        //obliczamy sume kontrolna
        w[1] = 6;
        w[2] = 5;
        w[3] = 7;
        w[4] = 2;
        w[5] = 3;
        w[6] = 4;
        w[7] = 5;
        w[8] = 6;
        w[9] = 7;

        wk = 0;

        for (i = 1; i <= 9; i++)
        {
            wk = (wk + str2int(substr(_VATNum, i, 1)) * w[i]) mod 11;
        }
        k = wk mod 11;
        
        if (str2int(substr(_VATNum, 10, 1)) == k) 
            return true;

    }

    return false;
    
}

Metoda walidująca już jest. Teraz trzeba spowodować, żeby była wykorzystywana przez Dynamicsa. W tym celu zaingerujemy w klasę bazową TaxVATNumValidate i metodę construct. Należy tam dodać wywołanie nowo stworzonej klasy, kiedy krajem walidacji będzie Polska:

// ...
case #isoPL :
   taxVATNumValidate = new TaxVATnumValidatePL();
   break;
// ...

Ostatnim etapem jest włączenie walidacji. Należy wejść w Podstawowe => Ustawienia => Adresy => Kraj / Region, wybrać kraj PL i na zakładce Ogólne zaznaczyć opcję "Sprawdź numer identyfikacji podatkowej":



Od tego momentu możemy się cieszyć sprawdzaniem numeru NIP w "polskich warunkach" :)

Brak komentarzy:

Prześlij komentarz