Ext.QuickTips.init(); Ext.define('erp.controller.fa.ars.BatchDeal', { extend: 'Ext.app.Controller', requires: ['erp.util.FormUtil', 'erp.util.GridUtil', 'erp.util.BaseUtil', 'erp.util.RenderUtil'], views:[ 'fa.ars.ProdToARBill.Viewport','fa.ars.ProdToARBill.Form','fa.ars.ProdToARBill.GridPanel', 'core.button.VastDeal','core.button.VastPrint','core.button.VastAnalyse','core.button.GetVendor', 'core.button.VastTurnPurc','core.button.DealMake','core.button.MakeOccur','core.button.SaleOccur', 'core.button.AllThrow','core.button.SelectThrow','core.button.VastTurnARAPCheck', 'core.trigger.DbfindTrigger','core.form.FtField','core.form.FtFindField','core.form.ConDateField', 'core.form.MonthDateField','core.button.ByAmount','core.trigger.TextAreaTrigger','core.form.YnField', 'core.trigger.AddDbfindTrigger','core.grid.YnColumn' ], init:function(){ var me = this; this.control({ 'erpProdToARBillGridPanel': { afterrender: function(grid){ grid.plugins[0].on('beforeedit',function(e){ Ext.each(grid.columns,function(column,index){ if(column.dataIndex=='pd_thisvoqty'){ column.renderer = null; } }); }); grid.plugins[0].on('afteredit',function(e){ grid.selModel.countAmount(); }); var form = Ext.getCmp('dealform'); if(form && form.items.items.length > 0){ //根据form字段的多少来调节form所占高度 var height = window.innerHeight; if(Ext.isIE){ height = screen.height*0.75; } var cw = 0; Ext.each(form.items.items, function(){ cw += this.columnWidth; }); cw = Math.ceil(cw); if(cw == 0){ cw = 5; } else if(cw > 2 && cw <= 5){ cw -= 1; } else if(cw > 5 && cw < 8){ cw = 4; } cw = Math.min(cw, 5); form.setHeight(height*cw/10 + 10); grid.setHeight(height*(10 - cw)/10 - 10); } } }, 'erpVastDealButton': { click: function(btn){ me.beforeVastDeal(btn); } }, 'erpVastAnalyseButton': { click: function(btn){ me.vastDeal(btn.ownerCt.ownerCt.dealUrl); } }, 'erpVastPrintButton': { click: function(btn){ me.vastDeal(btn.ownerCt.ownerCt.dealUrl); } }, 'erpByAmountButton':{ click: function(btn){ //提取grid中的数据 查看数据中的客户编号是否与FORM中的一致 一致则可执行 不一直需要提示 var grid =Ext.getCmp('batchDealGridPanel'); var items = grid.store.data.items; var custcode = '', field = 'pi_arcode'; if(caller =='ProdInOut!ToARBill!Deal!ars'){ custcode = Ext.getCmp('pi_arcode').getValue(); } else if(caller =='ProdInOut!ToAPBill!Deal!ars'){ custcode = Ext.getCmp('pi_receivecode').getValue(); field = 'pi_receivecode'; } var bool = true; if(custcode==''||custcode == null){ bool = false; }else{ Ext.each(items,function(item,index){ if(item.data[field]!=custcode){ bool = false; } }); } if(bool){ me.amountButton(); }else{ if(caller =='ProdInOut!ToARBill!Deal!ars'){ Ext.Msg.alert("提示","请按客户筛选结果!"); }else if(caller =='ProdInOut!ToAPBill!Deal!ars'){ Ext.Msg.alert("提示","请按供应商筛选结果"); } } } }, //应付的 'field[name=differ]': { change: function(field){ var d = field.value || 0; var _v = Ext.getCmp('taxsum')._val || 0; Ext.getCmp('taxsum').setValue(Ext.util.Format.number(d + _v,'0.00')); } }, //应收的 'field[name=ab_differ]': { change: function(field){ var d = field.value || 0; var _v = Ext.getCmp('ab_taxamount')._val || 0; Ext.getCmp('ab_taxamount').setValue(Ext.util.Format.number(d + _v,'0.00')); } } }); }, beforeVastDeal:function(btn){ //panduan 币别是否一致 //判断客户是否一致 var me = this; me.vastDeal(btn.ownerCt.ownerCt.dealUrl); }, formOnQuery:function(){ var me = this; var grid = Ext.getCmp('batchDealGridPanel'); var form = Ext.getCmp('dealform'); var condition = grid.defaultCondition || ''; Ext.each(form.items.items, function(f){ // console.log(contains(f.logic, 'to:', true)); if(f.logic != null && f.logic != ''){ if(f.xtype == 'checkbox' && f.value == true){ if(condition == ''){ condition += f.logic; } else { condition += ' AND ' + f.logic; } } else if(f.xtype == 'datefield' && f.value != null&&!contains(f.logic, 'to:', true)){ var v = Ext.Date.format(new Date(f.value), 'Y-m-d'); if(condition == ''){ condition += f.logic + "=to_date('" + v + "', 'yyyy-MM-dd')"; } else { condition += ' AND ' + f.logic + "=to_date('" + v + "', 'yyyy-MM-dd')"; } } else if(f.xtype == 'datetimefield' && f.value != null){ var v = Ext.Date.format(new Date(f.value), 'Y-m-d H:i:s'); if(condition == ''){ condition += f.logic + "=to_date('" + v + "', 'yyyy-MM-dd HH24:mi:ss')"; } else { condition += ' AND ' + f.logic + "=to_date('" + v + "', 'yyyy-MM-dd HH24:mi:ss')"; } } else if(f.xtype == 'numberfield' && f.value != null && f.value != ''){ if(condition == ''){ condition += f.logic + '=' + f.value; } else { condition += ' AND ' + f.logic + '=' + f.value; } } else { //一般情况下,在执行批量处理时,是不需要把form的数据传回去, //但某些情况下,需要将form的某些字段的值也传回去 //例如 请购批量转采购,如果指定了采购单号,就要把采购单号传回去 if(contains(f.logic, 'to:', true)){ if(!grid.toField){ grid.toField = new Array(); } grid.toField.push(f.logic.split(':')[1]); } else { if(f.value != null && f.value != ''){ if(contains(f.value, 'BETWEEN', true) && contains(f.value, 'AND', true)){ if(condition == ''){ condition += f.logic + " " + f.value; } else { condition += ' AND (' + f.logic + " " + f.value + ")"; } } else if(contains(f.value, '||', true)){ var str = ''; Ext.each(f.value.split('||'), function(v){ if(v != null && v != ''){ if(str == ''){ str += f.logic + "='" + v + "'"; } else { str += ' OR ' + f.logic + "='" + v + "'"; } } }); if(condition == ''){ condition += str; } else { condition += ' AND (' + str + ")"; } } else { if(condition == ''){ condition += f.logic + "='" + f.value + "'"; } else { condition += ' AND (' + f.logic + "='" + f.value + "')"; } } } } } } }); var gridParam = {caller: caller, condition: condition}; grid.getGridColumnsAndStore(grid, 'common/singleGridPanel.action', gridParam, ""); Ext.getCmp('pi_counttotal').setValue('0'); Ext.getCmp('pi_amounttotal').setValue('0'); // me.amountButton(); }, //点击按金额开票按钮后的功能 amountButton:function(){ var totalStr = Ext.getCmp("pi_total").getValue(); var grid = Ext.getCmp('batchDealGridPanel'); var selectArray = new Array(); //前面需要打勾的数据 var total = Ext.Number.from(totalStr,0); //开票金额field 中的数据 // pd_thisvoqty pd_thisvoprice var total2 =0; var ar = 0; if(total>0){ Ext.each(grid.store.data.items,function(item,index){ //此方法是所选的金额总和刚好大于输入的金额 if(item.data['pd_thisvoqty']>0){ var oneitemtotal =Ext.Number.from(item.data['pd_thisvoprice'],0); var itemtotal = 0; if(caller =='ProdInOut!ToAPBill!Deal!ars'){ itemtotal = (item.data['pd_inqty']-item.data['pd_invoqty'])*item.data['pd_thisvoprice']; }else if(caller =='ProdInOut!ToARBill!Deal!ars'){ itemtotal = (item.data['pd_outqty']-item.data['pd_invoqty'])*item.data['pd_thisvoprice']; } if(total2total){ if(oneitemtotal!=0){ ar = (total-total2)/oneitemtotal; if(ar>parseInt(ar)){ ar = parseInt(ar)+1; }else{ ar = parseInt(ar); } } } } // if(ar !=0){ // return false; // }else{ total2 = total2+itemtotal; // } } //下面的计算方式是所选的金额总和小于输入的金额 /* //发货数量大于0 代表可以开票 if(item.data['pd_thisvoqty']>0){ var oneitemtotal =Ext.Number.from(item.data['pd_thisvoprice'],0); //本次开票数量 = 发货数量-已转发票数 //当初始化的时候 本次开票数 为最大可开票数量 var itemtotal = (item.data['pd_outqty']-item.data['pd_invoqty'])*item.data['pd_thisvoprice']; if(total2+oneitemtotal<=total){ selectArray.push(item); if(total2+itemtotal>total){ if(oneitemtotal!=0){ ar = (total-total2)/oneitemtotal; //取最后一条的数量 取整数 比如:如果开票金额里填写5000 则ar个*单价 加前面所勾选的合计<=5000 (ar+1)*单价 加前面所勾选的合计>5000 ar = parseInt(ar); } } } if(ar !=0){ return false; }else{ total2 = total2+itemtotal; } } */}); } grid.selModel.select(selectArray); //在符合条件的数据前面打勾 if(grid.selModel.lastSelected){ grid.selModel.lastSelected.set('pd_thisvoqty',ar); //为最后一条数据中的数量赋值 } //自动计算发票书的金额总和 //相应的方法在此BatchDeal中GRID对应的view 中 grid.selModel.countAmount(); }, countGrid: function(){ //重新计算合计栏值 var grid = Ext.getCmp('batchDealGridPanel'); Ext.each(grid.columns, function(column){ if(column.summary){ var sum = 0; Ext.each(grid.store.data.items, function(item){ if(item.value != null && item.value != ''){ sum += Number(item.value); } }); Ext.getCmp(column.dataIndex + '_sum').setText(column.text + '(sum):' + sum); } else if(column.average) { var average = 0; Ext.each(grid.store.data.items, function(item){ if(item.value != null && item.value != ''){ average += Number(item.value); } }); average = average/grid.store.data.items.length; Ext.getCmp(column.dataIndex + '_average').setText(column.text + '(average):' + average); } else if(column.count) { var count = 0; Ext.each(grid.store.data.items, function(item){ if(item.value != null && item.value != ''){ count++; } }); Ext.getCmp(column.dataIndex + '_count').setText(column.text + '(count):' + count); } }); }, vastDeal: function(url){ var grid = Ext.getCmp('batchDealGridPanel'); var records = grid.selModel.getSelection(); var form = Ext.getCmp('dealform'); if(records.length > 0){ var params = new Object(); params.caller = caller; var data = new Array(); var bool = false; Ext.each(records, function(record, index){ var f = form.fo_detailMainKeyField; if((grid.keyField && this.data[grid.keyField] != null && this.data[grid.keyField] != '' && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0) ||(f && this.data[f] != null && this.data[f] != '' && this.data[f] != '0' && this.data[f] != 0)){ bool = true; var o = new Object(); if(grid.keyField){ o[grid.keyField] = record.data[grid.keyField]; } else { params.id[index] = record.data[form.fo_detailMainKeyField]; } if(grid.toField){ Ext.each(grid.toField, function(f, index){ var v = Ext.getCmp(f).value; if(v != null && v.toString().trim() != '' && v.toString().trim() != 'null'){ if(!Ext.isDate(v)){ v = String(v); } o[f] = v; } }); } if(grid.necessaryFields){ Ext.each(grid.necessaryFields, function(f, index){ var v = record.data[f]; if(Ext.isDate(v)){ v = Ext.Date.toString(v); } else { v = String(v); } o[f] = v; }); } data.push(o); } }); if(bool){ params.data = Ext.encode(data); var main = parent.Ext.getCmp("content-panel"); main.getActiveTab().setLoading(true);//loading... Ext.Ajax.request({ url : basePath + url, params: params, method : 'post', callback : function(options,success,response){ main.getActiveTab().setLoading(false); var localJson = new Ext.decode(response.responseText); if(localJson.exceptionInfo){ showError(localJson.exceptionInfo); return ""; } if(localJson.success){ if(localJson.log){ showMessage("提示", localJson.log); } Ext.Msg.alert("提示", "处理成功!", function(){ Ext.getCmp('dealform').onQuery(); }); } } }); } else { showError("没有需要处理的数据!"); } } } });