Freigeben über


Bank Checks do not display the correct numerals when using the Italian Language

Bank Checks do not display the correct numerals when using the Italian Language

Scenario:

If you print an Accounts Payable check using the Italian language the check numerals may print incorrectly.

Resolution:

To resolve this issue you can modify the Global class adding an Italian specific method to return the correct check printing.

1. In the AOT >> expand classes >> locate the Global Class.

2. Right Click the Global Class >> Choose New Method

3. Add the below code example which translates the Italian language

static TempStr numeralsToTxt_IT(real _num)

{

    int numOfPennies = (decround(frac(_num), 2) * 100) mod 100;

    real test = _num - frac(_num);

    int numOfTenths;

    str 20 ones[19], tenths[9], hundreds, thousands, millions, billions, trillions;

    int64 temp;

    str 200 returntxt;

    real modOperator(real a1, real a2)

    {

    int tmpi;

    real tmp1, tmp2;

    tmp1 = a1 / a2;

    tmpi = real2int(tmp1);

    tmp2 = tmpi;

    return (tmp1 - tmp2)*a2;

    }

    real checkPower(real _test, int64 _power)

    {

        int64 numOfPower,numOfPowerOrig;

        if (_test >= _power)

        {

            numOfPower = _test div _power;

            numOfPowerOrig = numOfPower;

         if (numOfPower == 1 && _power > 1000)

            {

                returntxt = returntxt + ' ' + substr("@SYS5437",0,2);

            }

            if (numOfPower >= 100)

            {

                temp = numOfPower div 100;

                if(temp == 1 && _power >= 1000)

                {

                    returntxt = returntxt + ' ' + hundreds;

                }

                else

                {

                    returntxt = returntxt + ' ' + ones[temp] + ' ' + hundreds;

                }

                numOfPower = numOfPower mod 100;

            }

            if (numOfPower >= 20)

            {

                temp = numOfPower div 10;

                returntxt = returntxt + ' ' + tenths[temp];

                numOfPower = numOfPower mod 10;

            }

            if (numOfPower > 1)

            {

                returntxt = returntxt + ' ' + ones[numOfPower];

                numOfPower = numOfPower mod 10;

            }

            switch(_power)

            {

                case 1000000000 :

                {

                     returntxt = numOfPowerOrig == 1 ? returntxt + ' ' + billions : returntxt + ' ' + "miliardi";

                    _test = modOperator(_test, 1000000000);

                    break;

                }

      case 1000000 :

                {

                    returntxt = numOfPowerOrig == 1 ? returntxt + ' ' + millions : returntxt + ' ' + "milioni" ;

                    _test = modOperator(_test, 1000000);

                    break;

                }

                case 1000 :

                {

                    returntxt = numOfPowerOrig == 1 ? "mile" : returntxt + ' ' + thousands ;

                    _test = modOperator(_test, 1000);

                    break;

                }

                case 100 :

                {

                    returntxt = returntxt + ' ' + hundreds;

                    _test = modOperator(_test, 100);

                    break;

                }

            }

        }

        return _test;

    }

    ones[1] = "@SYS26620";

    ones[2] = "@SYS26621";

    ones[3] = "@SYS26622";

    ones[4] = "@SYS26626";

    ones[5] = "@SYS26627";

    ones[6] = "@SYS26628";

    ones[7] = "@SYS26629";

    ones[8] = "@SYS26630";

    ones[9] = "@SYS26631";

    ones[10] = "@SYS26632";

    ones[11] = "@SYS26633";

    ones[12] = "@SYS26634";

    ones[13] = "@SYS26635";

    ones[14] = "@SYS26636";

    ones[15] = "@SYS26637";

    ones[16] = "@SYS26638";

    ones[17] = "@SYS26639";

    ones[18] = "@SYS26640";

    ones[19] = "@SYS26641";

    tenths[1] = 'Not used';

    tenths[2] = "@SYS26643";

    tenths[3] = "@SYS26644";

    tenths[4] = "@SYS26645";

    tenths[5] = "@SYS26646";

    tenths[6] = "@SYS26647";

    tenths[7] = "@SYS26648";

    tenths[8] = "@SYS26649";

    tenths[9] = "@SYS26650";

    hundreds = "@SYS26651";

    thousands = "@SYS26652";

    millions = "@SYS26653";

    billions = "@SYS26654";

    trillions = "@SYS101697";

    test = checkPower(test, 1000000000);

    test = checkPower(test, 1000000);

    test = checkPower(test, 1000);

    test = checkPower(test, 100);

    if (test >= 20)

    {

        numOfTenths = test div 10;

        returntxt = returntxt + ' ' + tenths[numofTenths];

        numOfTenths = numOfTenths mod 10;

        test = test mod 10;

    }

    if (test >= 1)

    {

        numOfTenths = real2int(test);

        returntxt = returntxt + ' ' + ones[numOfTenths];

    }

    if (numOfPennies)

    {

        returntxt = '***' + returntxt + ' ' + "@SYS5534" + ' ' + num2str(numOfPennies,0,0,0,0) + '/100';

    }

    else

    {

        returntxt = '***' + returntxt + ' ' + "@SYS5534" + ' ' + '00/100';

    }

    return returntxt;

}

4. Add the below code in bold to the Classes\Global\numeralsToTxt

                case 100 :

                {

                    returntxt = returntxt + ' ' + hundreds;

                    _test = modOperator(_test, 100);

                    break;

                }

            }

        }

        return _test;

    }

    if(substr(xUserInfo::find().Language, 1, 2) !='it')

    {

        returntxt = Global::numeralsToTxt_IT(test);

        return returntxt;

    }

5. Save and Compile the code.

Comments

  • Anonymous
    July 06, 2010
    Hi, in the last 4 lines of code i think that the if test code it should be : if(substr(xUserInfo::find().Language, 1, 2) =='it')    {        returntxt = Global::numeralsToTxt_IT(test);        return returntxt;    } instead of : if(substr(xUserInfo::find().Language, 1, 2) !='it')    {        returntxt = Global::numeralsToTxt_IT(test);        return returntxt;    }