Ext.QuickTips.init(); Ext.define('erp.controller.fa.arp.PayBalanceTK', { extend: 'Ext.app.Controller', FormUtil: Ext.create('erp.util.FormUtil'), GridUtil: Ext.create('erp.util.GridUtil'), BaseUtil: Ext.create('erp.util.BaseUtil'), views:[ 'core.form.Panel','fa.arp.PayBalanceTK','core.grid.Panel2','core.toolbar.Toolbar', 'core.form.SeparNumber', 'core.button.Save','core.button.Add','core.button.Close','core.button.Delete','core.button.Update','core.button.DeleteDetail', 'core.trigger.DbfindTrigger','core.trigger.TextAreaTrigger','core.form.YnField','core.button.ResAccounted','core.button.AssMain','core.button.Accounted','core.button.StrikeBalance', 'core.grid.AssPanel','core.window.AssWindow','core.trigger.CateTreeDbfindTrigger','core.trigger.HrOrgTreeDbfindTrigger','core.button.Post','core.button.ResPost','core.button.Print', 'core.button.Submit','core.button.ResAudit','core.button.Audit','core.button.ResSubmit','core.button.AssDetail','core.button.AssMain', 'core.trigger.MultiDbfindTrigger' ], init:function(){ var me = this; me.gridLastSelected = null; this.control({ 'erpGridPanel2': { itemclick:function(selModel, record){ me.onGridItemClick(selModel, record); if(caller == 'PayBalance!TK'){ var btn = Ext.getCmp('assdetail'); var ass = record.data['ca_asstype']; if(!Ext.isEmpty(ass)){ btn.setDisabled(false); } else { btn.setDisabled(true); } } } }, 'erpAssMainButton':{ afterrender:function(btn){ if(caller == 'PayBalance!TK'){ if(Ext.getCmp('ca_asstype').getValue()==null||Ext.getCmp('ca_asstype').getValue()==""){ btn.setDisabled(true); }else{ btn.setDisabled(false); } } } }, 'erpSaveButton': { click: function(btn){ var form = me.getForm(btn); if(Ext.getCmp(form.codeField).value == null || Ext.getCmp(form.codeField).value == ''){ me.BaseUtil.getRandomNumber(); } me.getApamount(); //保存之前的一些前台的逻辑判定 //this.beforeSavePayBalance(); me.beforeSave(this); } }, 'erpDeleteDetailButton': { afterrender: function(btn){ if(caller == 'PayBalance!TK'){ //辅助核算 btn.ownerCt.add({ xtype:'erpAssDetailButton', disabled:true }); } } }, 'erpPostButton' : { afterrender: function(btn){ var status = Ext.getCmp(me.getForm(btn).statusCode); if(status && status.value == 'UNPOST'){ btn.show(); }else{ btn.hide(); } }, click: function(btn){ me.beforePost(btn); } }, 'erpResPostButton' : { afterrender: function(btn){ var status = Ext.getCmp(me.getForm(btn).statusCode); if(status && status.value == 'POSTED'){ btn.show(); }else{ btn.hide(); } }, click: function(btn){ me.FormUtil.onResPost(Ext.getCmp('pb_id').value); } }, 'erpDeleteButton' : { click: function(btn){ me.FormUtil.onDelete(Ext.getCmp('pb_id').value); } }, 'erpUpdateButton': { click: function(btn){ me.getApamount(); me.beforeUpdate(); } }, 'erpAddButton': { click: function(){ var form = Ext.getCmp('form'); var title = '新增'; if(form){ if(form.title){ title = title+form.title; } } me.FormUtil.onAdd('addPayBalance', title, 'jsps/fa/arp/paybalanceTK.jsp?whoami='+caller); } }, 'erpCloseButton': { click: function(btn){ me.FormUtil.beforeClose(me); } }, 'erpSubmitButton': { afterrender: function(btn){ var auditStatus = Ext.getCmp(me.getForm(btn).auditStatusCode); if(auditStatus && auditStatus.value != 'ENTERING'){ btn.hide(); } }, click: function(btn){ me.beforeSubmit(btn); me.FormUtil.onSubmit(Ext.getCmp('pb_id').value); } }, 'erpResSubmitButton': { afterrender: function(btn){ var auditStatus = Ext.getCmp(me.getForm(btn).auditStatusCode); if(auditStatus && auditStatus.value != 'COMMITED'){ btn.hide(); } }, click: function(btn){ me.FormUtil.onResSubmit(Ext.getCmp('pb_id').value); } }, 'erpAuditButton': { afterrender: function(btn){ var auditStatus = Ext.getCmp(me.getForm(btn).auditStatusCode); if(auditStatus && auditStatus.value != 'COMMITED'){ btn.hide(); } }, click: function(btn){ me.FormUtil.onAudit(Ext.getCmp('pb_id').value); } }, 'erpResAuditButton': { afterrender: function(btn){ var auditStatus = Ext.getCmp(me.getForm(btn).auditStatusCode); if(auditStatus && auditStatus.value != 'AUDITED'){ btn.hide(); } }, click: function(btn){ me.FormUtil.onResAudit(Ext.getCmp('pb_id').value); } }, 'erpPrintButton': { click: function(btn){ var reportName="APPay"; var condition = '{PayBalance.pb_id}=' + Ext.getCmp('pb_id').value + ''; var id = Ext.getCmp('pb_id').value; me.FormUtil.onwindowsPrint(id, reportName, condition); } }, 'numberfield[name=pb_amount]':{ beforerender:function(num){ num.minValue = Number.NEGATIVE_INFINITY; num.setMinValue(num.minValue); b = num.baseChars+""; b += num.decimalSeparator; b += "-"; b = Ext.String.escapeRegex(b); num.maskRe = new RegExp("[" + b + "]"); }, change: function(f) { var v1 = (f.value || 0), v2 = (Ext.getCmp('pb_vmamount').value || 0); if(v1 == 0) { Ext.getCmp('pb_vmrate').setValue(0); } else { Ext.getCmp('pb_vmrate').setValue(Ext.Number.toFixed(v2/v1, 8)); } } }, 'numberfield[name=pb_vmamount]':{ beforerender:function(num){ num.minValue = Number.NEGATIVE_INFINITY; num.setMinValue(num.minValue); b = num.baseChars+""; b += num.decimalSeparator; b += "-"; b = Ext.String.escapeRegex(b); num.maskRe = new RegExp("[" + b + "]"); }, change: function(f) { var v1 = (Ext.getCmp('pb_amount').value || 0), v2 = (f.value || 0); if(v1 == 0) { Ext.getCmp('pb_vmrate').setValue(0); } else { Ext.getCmp('pb_vmrate').setValue(Ext.Number.toFixed(v2/v1, 8)); } } }, 'numberfield[name=pb_apamount]':{ beforerender:function(num){ num.minValue = Number.NEGATIVE_INFINITY; num.setMinValue(num.minValue); b = num.baseChars+""; b += num.decimalSeparator; b += "-"; b = Ext.String.escapeRegex(b); num.maskRe = new RegExp("[" + b + "]"); } }, 'cateTreeDbfindTrigger[name=pb_catecode]':{ aftertrigger:function(trigger, data){ Ext.getCmp('pb_catename').setValue(data[0].raw.data.ca_name); if (caller == 'PayBalance!TK'){ var asstype = data[0].raw.data.ca_asstype; var btn = Ext.getCmp("assmainbutton"); if(Ext.isEmpty(asstype)) { btn.setDisabled(true); } else { btn.setDisabled(false); } } } }, 'field[name=pbd_ordercode]':{ afterrender:function(t){ t.gridKey="pb_vendcode"; t.mappinggirdKey="ab_vendcode"; t.gridErrorMessage="请先选择供应商"; }, aftertrigger:function(){ var grid = Ext.getCmp('grid'); var record = grid.selModel.lastSelected; if(typeof record.data.pbd_orderamount != "undefined") { var data = record.get('pbd_orderamount')-record.get('pbd_havepay'); record.set('pbd_nowbalance',data); } } }, 'textfield[name=pb_amount]':{ change:function(t){ if(caller == 'PayBalance!TK'){ var pb_amount = Ext.Number.from(Ext.getCmp('pb_amount').getValue(),0);//付款金额 var pb_vmrate = Ext.Number.from(Ext.getCmp('pb_vmrate').getValue(),0); //冲账汇率 var pb_vmamount = pb_amount*pb_vmrate; // 冲账金额 pb_vmamount = Ext.util.Format.number(pb_vmamount,'0.00'); Ext.getCmp('pb_vmamount').setValue(pb_vmamount); } } }, 'textfield[name=pb_vmrate]':{ change:function(t){ if(caller == 'PayBalance!TK'){ var pb_amount = Ext.Number.from(Ext.getCmp('pb_amount').getValue(),0);//付款金额 var pb_vmrate = Ext.Number.from(Ext.getCmp('pb_vmrate').getValue(),0); //冲账汇率 var pb_vmamount = pb_amount*pb_vmrate; // 冲账金额 pb_vmamount = Ext.util.Format.number(pb_vmamount,'0.00'); Ext.getCmp('pb_vmamount').setValue(pb_vmamount); } } } }); }, beforeSubmit: function(){ var me = this; if(caller == 'PayBalance!TK'){ var grid = Ext.getCmp('grid'),items=grid.store.data.items; var sameCurrency = true; var amount = Number(Ext.getCmp('pb_amount').getValue()); var vmamount =Number(Ext.getCmp('pb_vmamount').getValue()); var vmcurrency = Ext.getCmp('pb_vmcurrency').getValue(); var vmrate = Number(Ext.getCmp('pb_vmrate').getValue()); var detailamount = 0; var currency = Ext.getCmp('pb_currency').getValue(); if(amount != 0 && vmamount != 0){ if(Ext.Number.toFixed(vmrate, 8)!= Ext.Number.toFixed(vmamount/amount, 8)){ showError('冲账汇率不正确,不能提交!'); return; } } if(currency == vmcurrency){ if(vmrate != 1){ showError('币别相同,冲账汇率不等于1,不能提交!'); return; } } if(currency != vmcurrency){ if(vmrate == 1){ showError('币别不相同,冲账汇率等于1,不能提交!'); return; } } Ext.each(items,function(item,index){ if(!me.GridUtil.isBlank(grid, item.data)){ detailamount = detailamount+Number(item.data['pbd_nowbalance']); if(vmcurrency!=item.data['pbd_currency']){ //从表币别有与主表币别不同的 //抛出异常 sameCurrency = false; } } }); if(!sameCurrency){ //从表币别有与主表币别不同的 //抛出异常 showError('明细行币别与冲账币别不同,不能提交');return; } if(Math.abs(vmamount-detailamount)>0.01){ //冲账金额与明细行本次结算总和不等 //抛出异常 showError('明细行本次结算与冲账金额不等,不能提交');return; } me.FormUtil.onSubmit(Ext.getCmp('pb_id').value); }else{ me.FormUtil.onSubmit(Ext.getCmp('pb_id').value); } }, beforePost:function(btn){ var me = this; if(caller == 'PayBalance!TK'){ var grid = Ext.getCmp('grid'),items=grid.store.data.items; var sameCurrency = true; var amount = Number(Ext.getCmp('pb_amount').getValue()); var vmamount =Number(Ext.getCmp('pb_vmamount').getValue()); var vmcurrency = Ext.getCmp('pb_vmcurrency').getValue(); var vmrate = Number(Ext.getCmp('pb_vmrate').getValue()); var detailamount = 0; var currency = Ext.getCmp('pb_currency').getValue(); if(amount != 0 && vmamount != 0){ if(Ext.Number.toFixed(vmrate, 8)!= Ext.Number.toFixed(vmamount/amount, 8)){ showError('冲账汇率不正确,不能过账!'); return; } } if(currency == vmcurrency){ if(vmrate != 1){ showError('币别相同,冲账汇率不等于1,不能过账!'); return; } } if(currency != vmcurrency){ if(vmrate == 1){ showError('币别不相同,冲账汇率等于1,不能过账!'); return; } } Ext.each(items,function(item,index){ if(!me.GridUtil.isBlank(grid, item.data)){ detailamount = detailamount+Number(item.data['pbd_nowbalance']); if(vmcurrency!=item.data['pbd_currency']){ //从表币别有与主表币别不同的 //抛出异常 sameCurrency = false; } } }); // if(Ext.Number.toFixed(vmamount, 2)!= Ext.Number.toFixed(amount*vmrate, 2)){ if(!sameCurrency){ //从表币别有与主表币别不同的 //抛出异常 showError('明细行币别与冲账币别不同,不能过账');return; } if(Math.abs(vmamount-detailamount)>0.01){ //冲账金额与明细行本次结算总和不等 //抛出异常 showError('明细行本次结算与冲账金额不等,不能过账');return; } me.FormUtil.onPost(Ext.getCmp('pb_id').value); }else{ me.FormUtil.onPost(Ext.getCmp('pb_id').value); } }, getApamount: function(){ var grid = Ext.getCmp('grid'); var items = grid.store.data.items; var apamount = 0; Ext.each(items,function(item,index){ if(item.data['pbd_ordercode']!=null&&item.data['pbd_ordercode']!=""){ apamount= apamount + Number(item.data['pbd_nowbalance']); } }); Ext.getCmp('pb_apamount').setValue(Ext.util.Format.number(apamount,'0.00')); }, onGridItemClick: function(selModel, record){//grid行选择 this.gridLastSelected = record; var grid = Ext.getCmp('grid'); if(record.data[grid.necessaryField] == null || record.data[grid.necessaryField] == ''){ this.gridLastSelected.findable = true;//空数据可以在输入完code,并移开光标后,自动调出该条数据 } else { this.gridLastSelected.findable = false; } this.GridUtil.onGridItemClick(selModel, record); }, getForm: function(btn){ return btn.ownerCt.ownerCt; }, beforeSavePayBalance: function(){ var me = this; var grid = Ext.getCmp('grid'); var bool = true; var warnStr=''; bool = true; if(bool){ me.beforeSave(this); }else{ if(warnStr != ''||warnStr.length>0){ showError('明细表第'+warnStr+'行 已付金额与本次结算额的合计超过发票金额,不能保存');return; } } }, beforeSave:function(){ var me = this; var form = Ext.getCmp('form'); if(! me.FormUtil.checkForm()){ return; } if(Ext.getCmp(form.keyField).value == null || Ext.getCmp(form.keyField).value == ''){ me.FormUtil.getSeqId(form); } var detail = Ext.getCmp('grid'); var param2 = new Array(); var param3 = new Array(); if(Ext.getCmp('assdetail')){ Ext.each(Ext.Object.getKeys(Ext.getCmp('assdetail').cacheStoreGrid), function(key){ Ext.each(Ext.getCmp('assdetail').cacheStoreGrid[key], function(d){ d['dass_condid'] = key; param2.push(d); }); }); } if(Ext.getCmp('assmainbutton')){ Ext.each(Ext.Object.getKeys(Ext.getCmp('assmainbutton').cacheStoreForm), function(key){ Ext.each(Ext.getCmp('assmainbutton').cacheStoreForm[key], function(d){ d['ass_conid'] = key; param3.push(d); }); }); } Ext.each(detail.store.data.items, function(item){ if(item.data.prd_id == null || item.data.prd_id == 0){ item.data.prd_id = -item.index; } }); var param1 = me.GridUtil.getGridStore(detail); /*if(detail.necessaryField.length > 0 && (param1.length == 0)){ showError($I18N.common.grid.emptyDetail); return; }*/ me.onSave(form, param1, param2,param3); }, onSave: function(form, param1, param2,param3) { var me = this; param1 = param1 == null ? [] : "[" + param1.toString().replace(/\\/g,"%") + "]"; param2 = param2 == null ? [] : Ext.encode(param2).replace(/\\/g,"%"); param3 = param3 == null ? [] : Ext.encode(param3).replace(/\\/g,"%"); if(form.getForm().isValid()){ Ext.each(form.items.items, function(item){ if(item.xtype == 'numberfield'){ if(item.value == null || item.value == ''){ item.setValue(0); } } }); var r = form.getValues(); form.getForm().getFields().each(function(){ if(this.logic == 'ignore') { delete r[this.name]; } }); me.FormUtil.save(r, param1, param2,param3); }else{ me.FormUtil.checkForm(); } }, beforeUpdate: function(){ var me = this; var grid = Ext.getCmp('grid'), key = Ext.getCmp('pb_id').value; var warn = new Array(); grid.store.each(function(item){ if(item.dirty) { item.set('pbd_pbid', key); if(!grid.necessaryField || !Ext.isEmpty(item.get(grid.necessaryField))){ var apamount = item.get('pbd_apamount'); //订单金额 var havepay = item.get('pbd_havepay'); //已预收金额 var nowbalance = item.get('pbd_nowbalance'); //本次预收额 //订单金额>=已预收金额+本次预收额 if(apamount > 0 && havepay + nowbalance > apamount){//此种情况不能进行保存 warn.push(item.get('pbd_detno')); } } } }); if(warn.length == 0){ me.onUpdate(); } else{ showError('明细第' + warn.join(',') + '行 已付金额与本次结算额的合计超过发票金额,不能保存!'); } }, onUpdate: function(){ var me = this; var form = Ext.getCmp('form'); if(! me.FormUtil.checkForm()){ return; } var detail = Ext.getCmp('grid'); Ext.each(detail.store.data.items, function(item){ if(item.data.prd_id == null || item.data.prd_id == 0){ item.data.prd_id = -item.index; } }); var param1 = me.GridUtil.getGridStore(detail); var param2 = new Array(); var param3 = new Array(); if(Ext.getCmp('assdetail')){ Ext.each(Ext.Object.getKeys(Ext.getCmp('assdetail').cacheStoreGrid), function(key){ Ext.each(Ext.getCmp('assdetail').cacheStoreGrid[key], function(d){ d['dass_condid'] = key; param2.push(d); }); }); } if(Ext.getCmp('assmainbutton')){ Ext.each(Ext.Object.getKeys(Ext.getCmp('assmainbutton').cacheStoreForm), function(key){ Ext.each(Ext.getCmp('assmainbutton').cacheStoreForm[key], function(d){ d['ass_conid'] = key; param3.push(d); }); }); } if(Ext.isEmpty(me.FormUtil.checkFormDirty(form)) && (param1.length == 0) && param2.length == 0 && param3.length == 0){ showError($I18N.common.grid.emptyDetail); return; } else { param1 = param1 == null ? [] : "[" + param1.toString().replace(/\\/g,"%") + "]"; param2 = param2 == null ? [] : Ext.encode(param2).replace(/\\/g,"%"); param3 = param3 == null ? [] : Ext.encode(param3).replace(/\\/g,"%"); if(form.getForm().isValid()){ Ext.each(form.items.items, function(item){ if(item.xtype == 'numberfield'){ if(item.value == null || item.value == ''){ item.setValue(0); } } }); var r = form.getValues(); form.getForm().getFields().each(function(){ if(this.logic == 'ignore') { delete r[this.name]; } }); me.FormUtil.update(r, param1, param2,param3); }else{ me.FormUtil.checkForm(); } } } });