// 金额转大写（前端公式）：将浮点型数值转换为中文大写
export default {
    execute:function(){
        console.log("进入到金额转大写前端公式");
        if(arguments&&arguments[0]&&arguments[0][0]&&arguments[1]){
            let _fields = arguments[0][0],//选择的字段
               context = arguments[1];

            if( _fields instanceof BillDataNode){ //判断是否为单据字段（双击选择的参数）
                
                
                //配置字段必须为float类型
                 if(_fields.FieldDataType == 10){
                    let _key = _fields.FieldCode;
                    let table = _fields.FieldTableCode;//字段所在表
                    let table_Obj = context.getTableType(table);
                    let float_money = '';

                    if(table_Obj && table_Obj.type == "master"){//如果是主表字段
                         //获取字段对应值
                         float_money =context.getMasterData().getValue(_key);//金额字段值
                    }else{//如果是子表字段
                        //怎样获取光标所在的子表行
                    }

                    let upper_money = '';
                    if(float_money && float_money != 0){
                      //转换后金额    
                      upper_money = this.moneyToUppercase(float_money); 
                      
                    }
                    return upper_money;
                 }else{
                  GAMS.Common.messagePrompt('配置参数必须为当前单据金额字段');
              }
              return '';

            }else{
                GAMS.Common.messagePrompt('配置参数必须为当前单据字段');
            }
            return '';

        }else{
            GAMS.Common.messagePrompt('MoneyToUppercase公式：参数配置有误');
            return '';
        }
    },
    getResultType:function(){
        return FMR.ConstDataTypes.General;
    },

    //代码如下所示：
	moneyToUppercase(money) {
        var cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');	 //汉字的数字
        var cnIntRadice = new Array('', '拾', '佰', '仟'); //基本单位
        var cnIntUnits = new Array('', '万', '亿', '兆');  //对应整数部分扩展单位
        var cnDecUnits = new Array('角', '分', '毫', '厘'); //对应小数部分单位
        var cnInteger = '整';	//整数金额时后面跟的字符			
        var cnIntLast = '元';	//整数完以后的单位
        //最大处理的数字
        var maxNum = 999999999999999.9999;
        var integerNum;	 //金额整数部分
        var decimalNum;	 //金额小数部分
        //输出的中文金额字符串
        var chineseStr = '';
        var parts;		//分离金额后用的数组，预定义
        if (money == '') { return ''; }
        
        money = parseFloat(money);
        if (money >= maxNum) {
          //超出最大处理数字
          return '超出最大处理数字';
        }
        if (money == 0) {
          chineseStr = cnNums[0] + cnIntLast + cnInteger;
          return chineseStr;
        }
        
      //四舍五入保留两位小数,转换为字符串
      money = Math.round(money * 100).toString();
      integerNum = money.substr(0,money.length-2);
      decimalNum = money.substr(money.length-2);
        
        //获取整型部分转换
        if (parseInt(integerNum, 10) > 0) {
          var zeroCount = 0;
          var IntLen = integerNum.length;
          for (var i = 0; i < IntLen; i++) {
            var n = integerNum.substr(i, 1);
            var p = IntLen - i - 1;
            var q = p / 4;
            var m = p % 4;
            if (n == '0') {
              zeroCount++;
            } else {
              if (zeroCount > 0) {
                chineseStr += cnNums[0];
              }
              //归零
              zeroCount = 0;
              chineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
            }
            if (m == 0 && zeroCount < 4) {
              chineseStr += cnIntUnits[q];
            }
          }
          chineseStr += cnIntLast;
        }
        //小数部分
        if (decimalNum != '') {
          var decLen = decimalNum.length; 
          for (var i = 0; i < decLen; i++) {
            var n = decimalNum.substr(i, 1);
            if (n != '0') {
              chineseStr += cnNums[Number(n)] + cnDecUnits[i];
            }
          }
        }
        if (chineseStr == '') {
          chineseStr += cnNums[0] + cnIntLast + cnInteger;
        } else if (decimalNum == '' || /^0*$/.test(decimalNum)) {
          chineseStr += cnInteger;
        }
        return chineseStr;
      }

}