number to text arabic

 [ExtensionOf(classStr(Global))]

final static class Global_BI_KSA_EInvoice_D365Integration_Extension

{

    static TempStr numeralsToTxt_AR(real _num)

    {

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

       int numOfPennies = real2int(decround(frac(_num) * 100, 0));

        real    test         = abs(_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" + ' ';

        comma   = "ريـال";

        //comma = "@SYS80142";

        zero    = "@SYS2068";

        cent    = "هللــه";


        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 = strFmt("%1 %2 و %3 %4 فقط لاغير",

           returntxt,

           comma,

           doubleDigit2ARTxt(numOfPennies),

           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 =  strFmt("%1 %2 فقط لاغير", (returntxt), comma);;


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

        }




        return returntxt;

    }


}

Comments

Popular posts from this blog

Microsoft D365 FO - Test OData API/Web Services by using POSTMAN

Microsoft D365 FO - Registration of an application on Azure Portal For API