How to get Amount in words in AX 2012

static TempStr numeralsToTxt(real _num, CurrencyCode _currencyCode)
{
    int     numOfPennies = (decRound(frac(_num), 2) * 100) mod 100;
    real    test         = _num - frac(_num);

    int64   numOfTenths;
    str 20  ones[19], tenths[9], hundreds, thousands, lakh, crore;

    int64   temp;
    str 200 returntxt, pennytxt;
    int64   testLoc;
    int     penny;

    Currency    currency = Currency::find(_currencyCode);

    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;

        if (_test >= _power)
        {
            testLoc = real2double(_test);
            numOfPower = testLoc div _power;

            if (numOfPower >= 100)
            {
                temp = numOfPower div 100;
                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 10000000 :
                    returntxt = returntxt + ' ' + crore;
                    _test = modOperator(_test, 10000000);
                    break;
                case 100000 :
                    returntxt = returntxt + ' ' + lakh;
                    _test = modOperator(_test, 100000);
                    break;
                case 1000 :
                    returntxt = 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";
    lakh        = "Lakh";
    crore       = "Crore";


    test = checkPower(test, 10000000);
    test = checkPower(test, 100000);
    test = checkPower(test, 1000);
    test = checkPower(test, 100);

    if (test >= 20)
    {
        testLoc = real2double(test);
        numOfTenths = testLoc div 10;

        returntxt = returntxt + ' ' + tenths[numofTenths];
        numOfTenths = numOfTenths mod 10;
        test = real2int(test) mod 10;
    }
    if (test >= 1)
    {
        numOfTenths = real2int(test);
        returntxt = returntxt + ' ' + ones[numOfTenths];
    }

    if (numOfPennies)
    {
        if (numOfPennies >= 20)
        {
            penny           = numOfPennies div 10;
            pennytxt        = tenths[penny];
            numOfPennies    = numOfPennies mod 10;
        }

        if (numOfPennies >= 1)
        {
            pennytxt = pennytxt + ' ' + ones[numOfPennies];
        }

        returntxt = returntxt + ' ' + currency.Txt + ' ' + "@SYS5534" + ' ' + pennytxt + ' ' + currency.Acx_TxtPaise;
    }

    else
    {
        returntxt = returntxt + ' ' + currency.Txt;
    }

    return returntxt;
}

Comments

Post a Comment