Arabic Class in d365 fo x++

 class HA_NumHelper

{


    public Description numToTxt_En(real _amount, str _currency1)


    {


        real decimals, WordReal;

        int intNum;

        str 250 word, decWord, wholeWord;

        int repPos, repPos1, repPoswhole;


        word = Global::numeralsToTxt_EN(_amount);


        repPos = strscan(word, ' and', 1, strlen(word));


        intNum = _amount;


        decimals = _amount - intNum;

        WordReal = _amount - decimals;


        if (decimals == 0.00)


        {


            wholeWord = num2str(WordReal,0,0,0,0);


            wholeWord = Global::numeralsToTxt_EN(str2num(wholeWord));

            wholeWord = strdel(wholeWord, 1, 4);

            repPoswhole = strscan(wholeWord,' and', 1, strlen(wholeWord));

            wholeWord = substr(wholeWord, 1, repPoswhole-1);


            word = strfmt("%1 %2 ",wholeWord,_currency1);


        }


        else


        {


            decWord = substr(num2str(decimals, 0, 2, 1, 1), 3, 2);

            // Info ("test str: " +(num2str(decimals, 0, 2, 1, 1)));

                   

            wholeWord = num2str(WordReal,0,0,0,0);


            decWord = Global::numeralsToTxt_EN(str2num(decWord));

            wholeWord = Global::numeralsToTxt_EN(str2num(wholeWord));


            decWord = strdel(decWord, 1, 4);

            wholeWord = strdel(wholeWord, 1, 4);


            repPos1 = strscan(decWord, 'and', 1, strlen(decWord));

            repPoswhole = strscan(wholeWord, ' and', 1, strlen(wholeWord));


            decWord = substr(decWord, 1, repPos1-1);

            wholeWord = substr(wholeWord, 1, repPoswhole-1);


            word = strfmt("%1 %2 and %3  only",wholeWord,_currency1,decWord);

        }


        return word;

    }


    public str  CurrencyAr(str _currency)


    {

        str comma;

        if(_currency =='EURO')

        {

            comma   = "يورو";

            //comma = "@SYS80142";

        

        }

        else if(_currency =='USD')

        {

            comma   = "دولار";

            //comma = "@SYS80142";

        

        }

        else if(_currency =='SAR')

        {

            comma   = "ريال سعودى";

            //comma = "@SYS80142";

        

        }

        else if(_currency =='EGP')

        {

            comma   = "جنيه مصرى";

            //comma = "@SYS80142";

        

        }

        return comma;

    }


    public TempStr numToTxt_AR(real _num,str _currency)

    {

        real    numOfPennies = decround(frac(_num), 2);

        real    test         = _num - frac(_num);

        str     zero;

        str     comma;

        str     and;

        str     cent;

        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;

        }


        str doubleDigit2ARTxt(real doubledigit,boolean _pennies = false)

        {

            str     txt;

            int     firstDigit;

            real    tempdigit;


            if(_pennies)

            {

                firstDigit = doubledigit * 10;

                doubledigit = doubledigit * 100;

                if(!firstDigit)

                {

                    doubledigit = doubledigit mod 10;

                    //txt = zero + " " + ones[doubledigit];

                    txt = ones[doubledigit];

                    return txt;

                }

            }

            tempdigit = doubledigit;

            if (tempdigit >= 20)

            {

                tempdigit = tempdigit div 10;

                txt = tenths[tempdigit];

                doubledigit = doubledigit mod 10;

            }

            if (doubledigit >= 1)

            {

                txt = txt ?  (ones[doubledigit] + and + txt) : ones[doubledigit];

            }


            return txt;

        }


        real checkPower(real  _test,int64 _power)

        {

            int64   numOfPower;


            if (_test >= _power)

            {

                numOfPower = _test div _power;

                if (numOfPower >= 100)

                {

                    temp = numOfPower div 100;


                    if(temp > 9)// The validation was previously on 2

                    {

                        returntxt = returntxt ? (returntxt + and + ones[temp] + ' ' + hundreds) :(returntxt + ' ' + ones[temp] + ' ' + hundreds);

                    }


                    else

                    {

                        switch(temp)

                        {


                            Case 1:

                                returntxt = returntxt ? (returntxt + and + hundreds) : (returntxt + ' ' + hundreds);

                                break;

                            Case 2:

                                // TO DO need to insert a label for two hundred in Arabic

                                returntxt = returntxt ? (returntxt + and + "مائتين") :   returntxt + ' ' + "مائتين";

                                break;

                            Case 3:

                                // TO DO need to insert a label for three hundred in Arabic

                                returntxt = returntxt ? (returntxt + and + "ثلاثمائة") :   returntxt + ' ' + 'ثلاثمائة';

                                break;

                            Case 4:

                                // TO DO need to insert a label for four hundred in Arabic

                                returntxt = returntxt ? (returntxt + and + "اربعمائة") :   returntxt + ' ' + "اربعمائة";

                                break;

                            Case 5:

                                // TO DO need to insert a label for five hundred in Arabic

                                returntxt = returntxt ? (returntxt + and + "خمسمائة") :   returntxt + ' ' + "خمسمائة";

                                break;

                            Case 6:

                                // TO DO need to insert a label for six hundred in Arabic

                                returntxt = returntxt ? (returntxt + and + "ستمائة") :   returntxt + ' ' + "ستمائة";

                                break;

                            Case 7:

                                // TO DO need to insert a label for seven hundred in Arabic

                                returntxt = returntxt ? (returntxt + and + "سبعمائة") :   returntxt + ' ' + "سبعمائة";

                                break;

                            Case 8:

                                // TO DO need to insert a label for eight hundred in Arabic

                                returntxt = returntxt ? (returntxt + and + "ثمانمائة") :   returntxt + ' ' + "ثمانمائة";

                                break;

                            Case 9:

                                // TO DO need to insert a label for nine hundred in Arabic

                                returntxt = returntxt ? (returntxt + and + "تسعمائة") :   returntxt + ' ' + "تسعمائة";

                                break;


                        }

                    }

                    numOfPower = numOfPower mod 100;

                }

                if(numOfPower > 2 && _power > 100)

                {

                    returntxt = returntxt ?  (returntxt + and + doubleDigit2ARTxt(real2int(numOfPower))) : (returntxt  + ' ' + doubleDigit2ARTxt(real2int(numOfPower)));

                }

                else

                {

                    if(returntxt && numOfPower)

                    {

                        returntxt = returntxt + and + ' ';

                    }

                }

                switch(_power)

                {

                    case 1000000000000 :

                        {

                            if( numOfPower == 2)

                            {

                                // TO DO need to insert a label for two trillions in Arabic

                                returntxt = returntxt + "تريليونين ";

                            }

                            else

                            {

                                returntxt = numOfPower > 10 ||  numOfPower == 1 || numOfPower == 0 ? (returntxt + ' ' + trillions) : (returntxt + ' ' + "تريليونات");

                            }

                            _test = modOperator(_test, 1000000000000.00);

                            break;

                        }

                    case 1000000000 :

                        {

                            if( numOfPower == 2)

                            {

                                // TO DO need to insert a label for two billions in Arabic

                                returntxt = returntxt + "مليارين";

                            }

                            else

                            {

                                returntxt = numOfPower > 10 ||  numOfPower == 1 || numOfPower == 0 ? (returntxt + ' ' + billions) : (returntxt + ' ' + "مليارات");

                            }

                            _test = modOperator(_test, 1000000000);

                            break;

                        }

                    case 1000000 :

                        {

                            if( numOfPower == 2)

                            {

                                // TO DO need to insert a label for two Millions in Arabic

                                returntxt = returntxt + "مليونين";

                            }

                            else

                            {


                                returntxt = numOfPower > 10 || numOfPower == 1 || numOfPower == 0 ? (returntxt + ' ' + millions) : (returntxt + ' ' + "ملايين");


                            }

                            _test = modOperator(_test, 1000000);

                            break;

                        }

                    case 1000 :

                        {

                            if( numOfPower == 2)

                            {

                                // TO DO need to insert a label for two Thousands' in Arabic

                                returntxt = returntxt + "ألفين";

                            }

                            else

                            {

                                returntxt = numOfPower > 10 ||  numOfPower == 1 || numOfPower == 0  ? (returntxt + ' ' + thousands) : (returntxt + ' ' + "الاف");

                            }

                            _test = modOperator(_test, 1000);

                            break;

                        }

                    case 100 :

                        {

                            switch (numOfPower)

                            {

                                case 2:

                                    returntxt = returntxt + "مائتين";

                                    break;


                                case 3:

                                    returntxt = returntxt +"ثلاثمائة";

                                    break;


                                case 4:

                                    returntxt = returntxt + "اربعمائة";

                                    break;


                                case 5:

                                    returntxt = returntxt + "خمسمائة";

                                    break;


                                case 6:

                                    returntxt = returntxt + "ستمائة";

                                    break;


                                case 7:

                                    returntxt = returntxt + "سبعمائة";

                                    break;


                                case 8:

                                    returntxt = returntxt + "ثمانمائة";

                                    break;


                                case 9:

                                    returntxt = returntxt + "تسعمائة";

                                    break;


                                default:

                                    returntxt = returntxt + ' ' + hundreds;

                            }


                            _test = modOperator(_test, 100);

                            break;

                        }

                }


            }

            return _test;


        }


        infolog.language("AR");


        and     = ' ' + "@SYS5534" + ' ';


        if(_currency =='EURO')

        {

            comma   = "يورو";

            //comma = "@SYS80142";

        

        }

        else if(_currency =='USD')

        {

            comma   = "دولار";

            //comma = "@SYS80142";

        

        }

        else if(_currency =='SAR')

        {

            comma   = "ريال سعودى";

            //comma = "@SYS80142";

        

        }

        else if(_currency =='EGP')

        {

            comma   = "جنيه مصرى";

            //comma = "@SYS80142";

        

        }


        zero    = "@SYS2068";

        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";


        if(test == 0)

        {

            returntxt = zero;

        }

        else

        {

            test = checkPower(test, 1000000000000);

            test = checkPower(test, 1000000000);

            test = checkPower(test, 1000000);

            test = checkPower(test, 1000);

            test = checkPower(test, 100);

        }


        if(returntxt && test)

        {

            returntxt = returntxt + and + doubleDigit2ARTxt(real2int(test));

        }

        else

        {

            returntxt = returntxt + ' ' + doubleDigit2ARTxt(real2int(test));

        }


        if(numOfPennies)

        {

            //Removing the stars and addin the pound and cent wording to fullfil the Egyptian requierment

            returntxt = ' فقط ' + returntxt + ' ' + comma + ' ' + and + doubleDigit2ARTxt(numOfPennies,true) + ' ' + cent + ' لاغير ';

            //returntxt = '***' + returntxt + ' ' + comma + ' ' + doubleDigit2ARTxt(numOfPennies,true);


        }

        else

        {

            //Removing the stars and the zeros if no cents to fullfil the Egyptian requierment

            returntxt = ' فقط ' + returntxt + ' ' + comma + ' لاغير ';


            //returntxt = '***' + returntxt + ' ' + comma + ' ' + zero + ' ' + zero;

        }




        return returntxt;

    }


    TempStr ArabicNum(str  numeralsTxt)

    {


        #DEFINE.NumDec(2)


        str    1        digit;

        str  250        characters;


        

        characters= "";


        while (numeralsTxt)

        {

            digit  = subStr(numeralsTxt,1,1);

            numeralsTxt= strDel(numeralsTxt,1,1);


            switch(digit)

            {

                case '0': characters+= '.';

                    break;

                case '1': characters+= '۱';

                    break;

                case '2': characters+= '۲';

                    break;

                case '3': characters+= '۳';

                    break;

                case '4': characters+= '٤';

                    break;

                case '5': characters+= '٥';

                    break;

                case '6': characters+= '٦';

                    break;

                case '7': characters+= '٧';

                    break;

                case '8': characters+= '۸';

                    break;

                case '9': characters+= '۹';

                    break;

                case '.': characters+= ',';

                    break;

                case '-': characters+= '-';

                    break;

  

            }

            characters+= ' ';

        }

        return characters;

    }


}

Comments

Popular posts from this blog

Get Current Worker data in d365 fo x++

Table Level Event Handler in d365 fo x++