some customers need amount in invoices and checks with Arabic words
system convert amount to English words as a default,
but if you need to covert in Arabic , you must make some customization.
we will use the same logic in English words.
just go to AOT/classes/Global
you will find a method called numeralsToTxt
just create anther method for Arabic numbers with SAR currency as the following
static TempStr numeralsToTxt_AR(real _num)
{
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" + ' ';
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 = '***' + 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;
}
after that you can call this method ant any place in dynamics AX.
system convert amount to English words as a default,
but if you need to covert in Arabic , you must make some customization.
we will use the same logic in English words.
just go to AOT/classes/Global
you will find a method called numeralsToTxt
just create anther method for Arabic numbers with SAR currency as the following
static TempStr numeralsToTxt_AR(real _num)
{
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" + ' ';
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 = '***' + 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;
}
after that you can call this method ant any place in dynamics AX.
Good job.
ReplyDeleteThanks.