Ext.QuickTips.init(); Ext.define('erp.controller.fa.ars.Voucher', { extend: 'Ext.app.Controller', FormUtil: Ext.create('erp.util.FormUtil'), BaseUtil: Ext.create('erp.util.BaseUtil'), GridUtil: Ext.create('erp.util.GridUtil'), views:[ 'fa.ars.Voucher','core.form.Panel','core.grid.Panel2','core.toolbar.Toolbar', 'fa.ars.VoucherFlowGrid','fa.ars.DetailAssGrid', 'core.button.Add','core.button.Save','core.button.Close','core.button.Source', 'core.button.Submit','core.button.ResSubmit','core.button.Audit','core.button.ResAudit', 'core.button.Update','core.button.Delete','core.form.YnField','core.button.DeleteDetail', 'core.button.VoucherFlow', 'core.button.CopyAll','core.button.ExportExcelButton','core.button.Print', 'core.trigger.DbfindTrigger','core.grid.YnColumn','core.form.YnField', 'core.trigger.CateTreeDbfindTrigger' ], init:function(){ var me = this; this.control({ 'dbfindtrigger[name=vd_explanation]':{ focus:function(t){ t.autoDbfind = false; } }, '#vo_id': { afterrender: function(f) { var id = f.getValue(); if (Ext.isEmpty(id) || id == 0) { me.getMonth(); } } }, 'erpSaveButton': { click: function(btn){ var form = me.getForm(btn); if(Ext.getCmp(form.codeField).value == null || Ext.getCmp(form.codeField).value == ''){ me.BaseUtil.getRandomNumber();//自动添加编号 } //保存之前的一些前台的逻辑判定 this.beforeSave(); } }, //查看来源 'erpSourceButton': { afterender: function(btn){ var v = Ext.getCmp('vo_source').value; if(v == null || v == ''){ btn.hide(); } }, click: function(){ var id = Ext.getCmp('vo_id').value; if(id != null && id > 0) { me.getSource(id); } } }, 'erpExportExcelButton':{ afterrender:function(btn){ btn.exportCaller="Voucher!DetailAss!Export"; var status = Ext.getCmp('vo_statuscode').value; if(status&&status!='ENTERING'){ btn.hide(); } } }, 'filefield[id=excelfile]':{ change: function(field){ warnMsg('确认要重新导入吗?', function(btn){ if(btn == 'yes'){ if(contains(field.value, "\\", true)){ filename = field.value.substring(field.value.lastIndexOf('\\') + 1); } else { filename = field.value.substring(field.value.lastIndexOf('/') + 1); } field.ownerCt.getForm().submit({ url: basePath + 'common/upload.action?em_code=' + em_code, waitMsg: "正在解析文件信息", success: function(fp,o){ if(o.result.error){ showError(o.result.error); } else { var filePath=o.result.filepath; var keyValue=Ext.getCmp('vo_id').getValue(); Ext.Ajax.request({//拿到form的items url : basePath + 'fa/ars/ImportExcel.action', params:{ id:keyValue, fileId:filePath }, method : 'post', callback : function(options,success,response){ var result=Ext.decode(response.responseText); if(result.success){ Ext.Msg.alert('提示','导入成功!'); window.location.reload(); }else{ if(result.exceptionInfo != null){ showError(res.exceptionInfo);return; } } } }); } } }); } }); } }, 'erpVoucherFlowButton': { click: function(){ this.showVoucherFlow(); } }, 'erpCloseButton': { click: function(btn){ this.FormUtil.beforeClose(this); } }, 'erpCopyButton': { click: function(btn) { this.copy(); } }, 'erpUpdateButton': { click: function(btn){ this.beforeUpdate(); } }, 'erpPrintButton': { click: function(btn) { var reportName = ''; reportName = "vouclist_rmb"; var condition = '{Voucher.vo_id}=' + Ext.getCmp('vo_id').value + ''; var id = Ext.getCmp('vo_id').value; me.FormUtil.onwindowsPrint(id, reportName, condition); } }, 'erpDeleteButton': { click: function(btn){ me.FormUtil.onDelete(Ext.getCmp('vo_id').value); } }, 'erpAddButton': { click: function(){ var tab = me.FormUtil.getActiveTab(); me.FormUtil.onAdd(null, '新增凭证资料', 'jsps/fa/ars/voucher.jsp'); setTimeout(function(){ if(tab) { tab.close(); } }, 200); } }, 'erpSubmitButton': { afterrender: function(btn){ var status = Ext.getCmp('vo_statuscode'); if(status && status.value != 'ENTERING'){ btn.hide(); } }, click: function(btn){ me.FormUtil.onSubmit(Ext.getCmp('vo_id').value); } }, 'erpResSubmitButton': { afterrender: function(btn){ var status = Ext.getCmp('vo_statuscode'); if(status && status.value != 'COMMITED'){ btn.hide(); } }, click: function(btn){ me.FormUtil.onResSubmit(Ext.getCmp('vo_id').value); } }, 'erpAuditButton': { afterrender: function(btn){ var status = Ext.getCmp('vo_statuscode'); if(status && status.value != 'COMMITED'){ btn.hide(); } }, click: function(btn){ me.FormUtil.onAudit(Ext.getCmp('vo_id').value); } }, 'erpResAuditButton': { afterrender: function(btn){ var status = Ext.getCmp('vo_statuscode'); if(status && status.value != 'AUDITED'){ btn.hide(); } }, click: function(btn){ me.FormUtil.onResAudit(Ext.getCmp('vo_id').value); } }, 'field[name=vo_id]': { change: function(f){ var grid = Ext.getCmp('flowgrid'); if(grid) { if(f.value != null && f.value != ''){ grid.getMyData(f.value); } else { if(grid.columns && grid.columns.length > 2){ grid.GridUtil.add10EmptyItems(grid); } else { grid.getMyData(-1); } } } var ff = Ext.getCmp('form_disable'); ff.FormUtil.loadNewStore(ff, {caller: ff.caller, condition: "vo_id=" + f.value}); } }, 'field[name=vo_errstring]': { afterrender: function(f){ if(f.value != null && f.value != ''){ f.inputEl.setStyle({color: 'OrangeRed'}); } else { f.setValue('正常'); f.inputEl.setStyle({color: '#B6E2FF'}); f.originalValue = f.value; } }, change: function(f){ if(f.value != null && f.value != ''){ f.inputEl.setStyle({color: 'OrangeRed'}); } else { f.setValue('正常'); f.inputEl.setStyle({color: '#B6E2FF'}); f.originalValue = f.value; } } }, 'field[name=vo_date]': { change: function(f){ if(f.value == null){ f.setValue(new Date()); } } }, 'field[name=vo_yearmonth]': { afterrender: function(f){ if(f.value == null || f.value == 0){ f.setValue(Ext.Date.format(new Date(), 'Ym')); } } }, 'erpDeleteDetailButton': { afterrender: function(btn){ //将当前行的 借方/贷方 以及外币借方/外币贷方 互换 btn.ownerCt.add({ text: '借贷调换', width: 85, disabled: true, cls: 'x-btn-blue', id: 'replace' }); //当前行的借方 = 其它行的贷方总额-其它行的借方总额 btn.ownerCt.add({ text: '找平', width: 65, disabled: true, cls: 'x-btn-blue', id: 'level' }); //复制一个相同的纪录,id不同, 但借方/贷方 互换 btn.ownerCt.add({ text: '冲红', width: 65, disabled: true, cls: 'x-btn-blue', id: 'bonus' }); //辅助核算 btn.ownerCt.add({ text: '辅助核算', width: 85, disabled: true, cls: 'x-btn-blue', id: 'assdetail' }); }, afterdelete: function(d, r, btn){ //更新凭证状态 Ext.Ajax.request({ url: basePath + 'fa/ars/validVoucher.action', params: { id: d.vd_void }, callback: function(opt, s, r){ var res = Ext.decode(r.responseText); if(res.success) { var f = Ext.getCmp('vo_errstring'); f.setValue((res.errstring || '')); f.dirty = false; f.originalValue = f.value; } } }); } }, 'ExportExcelButton':{ afterrender:function(btn){ btn.caller='Voucher!DetailAss!Export'; } }, 'erpGridPanel2': { reconfigure: function(grid){ var f = Ext.getCmp('vo_currencytype'); if(f) { me.changeCurrencyType(f); } // 非在录入的凭证,直接将辅助核算显示出来,用特殊样式区别 var f = Ext.getCmp('vo_statuscode'); if(f && f.value != 'ENTERING') { if(grid.store.data.items.length < 100) me.showAss(grid); } }, storeloaded: function(grid){ var f = Ext.getCmp('vo_currencytype'); if(f) { me.changeCurrencyType(f); } // 非在录入的凭证,直接将辅助核算显示出来,用特殊样式区别 var f = Ext.getCmp('vo_statuscode'); if(f && f.value != 'ENTERING') { if(grid.store.data.items.length < 100) me.showAss(grid); } }, itemclick: function(selModel, record){ this.GridUtil.onGridItemClick(selModel, record); var btn = Ext.getCmp('replace'); btn.setDisabled(false); btn = Ext.getCmp('level'); btn.setDisabled(false); window.addEventListener('keydown',function(event){ if(event.keyCode == 187){ me.levelButton(Ext.getCmp('level')); } },false); btn = Ext.getCmp('bonus'); btn.setDisabled(false); btn = Ext.getCmp('assdetail'); var ass = record.data['ca_asstype']; if(!Ext.isEmpty(ass)){//辅助核算 btn.setDisabled(false); } else { btn.setDisabled(true); } } }, 'voucherflowgrid': { itemclick: function(selModel, record){ var grid = Ext.getCmp('flowgrid'); var index = record.data[grid.detno]; if(index == grid.store.data.items[grid.store.data.items.length-1].index + 1){ me.GridUtil.add10EmptyItems(grid); } } }, 'field[name=vo_currencytype]': { change: function(c){ me.changeCurrencyType(c); } }, /** * 借调互换 */ 'button[id=replace]': { click: function(btn){ var grid = btn.ownerCt.ownerCt; var record = grid.selModel.lastSelected; if(record){ var v1 = record.data['vd_debit'];//借方 var v2 = record.data['vd_credit'];//贷方 var v3 = record.data['vd_doubledebit'];//原币借方 var v4 = record.data['vd_doublecredit'];//原币贷方 record.set('vd_debit', v2); record.set('vd_credit', v1); record.set('vd_doubledebit', v4); record.set('vd_doublecredit', v3); } } }, /** * 找平 */ 'button[id=level]': { click: me.levelButton }, /** * 冲红 */ 'button[id=bonus]': { click: function(btn){ var grid = btn.ownerCt.ownerCt; var record = grid.selModel.lastSelected; if(record){ var keys = Ext.Object.getKeys(record.data); var values = Ext.Object.getValues(record.data); var o = new Object(); var vd_debit = 0; var vd_credit = 0; Ext.each(keys, function(key, index){ if(key != grid.detno && key != grid.keyField){//排序字段和主键字段的值均不复制 var v = values[index]; if(key == 'vd_debit'){ vd_debit = v; } if(key == 'vd_credit'){ vd_credit = v; } o[key] = v; } }); o.vd_debit = vd_credit;//借方/贷方互换 o.vd_credit = vd_debit; grid.copyData = o;//需要粘贴时,直接取grid.copyData即可 } } }, /** * 辅助核算 */ 'button[id=assdetail]': { click: function(btn){ var grid = btn.ownerCt.ownerCt; var record = grid.selModel.lastSelected; if(record){ var id = me.getRecordIndex(grid, record); if(Ext.getCmp('win')){ Ext.getCmp('win').show(); Ext.getCmp('win-form').removeAll(true); Ext.getCmp('win-form').add(me.createForm(grid)); Ext.getCmp('assgrid').cacheAss[id] = record.data['ca_asstype'].toString(); Ext.getCmp('assgrid').asstype = record.data['ca_asstype'].toString().split('#'); Ext.getCmp('assgrid').getMyData(id, caller); } else { Ext.create('Ext.window.Window', { id: 'win', height: "100%", width: "80%", iconCls: 'x-button-icon-set', closeAction: 'hide', title: '凭证明细辅助核算', maximizable : true, layout : 'anchor', items: [{ anchor: '100% 30%', xtype: 'form', id: 'win-form', layout : 'column', autoScroll: true, labelSeparator : ':', bodyStyle: 'background:#f1f1f1;', fieldDefaults : { labelAlign : "left" }, items: me.createForm(grid), buttonAlign: 'center', buttons: [{ name: 'confirm', cls: 'x-btn-gray', text: $I18N.common.button.erpConfirmButton },{ cls: 'x-btn-gray', text: $I18N.common.button.erpOffButton, handler: function(btn){ btn.ownerCt.ownerCt.ownerCt.close(); } },{ cls: 'x-btn-gray', text: "上一条", handler: function(btn){ me.prev(grid); } },{ cls: 'x-btn-gray', text: "下一条", handler: function(btn){ me.next(grid); } }] },{ anchor: '100% 70%', xtype: 'detailassgrid', asstype: record.data['ca_asstype'].toString().split('#') }] }).show(); Ext.getCmp('assgrid').getMyData(id, caller); } } } }, 'button[name=confirm]': { click: function(btn){ var grid = Ext.getCmp('grid'), record = grid.selModel.lastSelected; var data = new Array(); Ext.each(Ext.getCmp('assgrid').store.data.items, function(){ data.push(this.data); }); if(data.length > 0){ Ext.getCmp('assgrid').cacheStore[me.getRecordIndex(grid, record)] = data; } btn.ownerCt.ownerCt.ownerCt.close(); } }, 'field[name=vd_doubledebit]': {//原币借方 focus : function(f) { var grid = Ext.getCmp('grid'), record = grid.selModel.lastSelected, val = record.get('vd_doublecredit'); if( val != 0 ) { f.setReadOnly(true); } else { f.setReadOnly(false); } }, change: function(f){ if(!f.ownerCt && f.value != null && f.value != 0 ){ var grid = Ext.getCmp('grid'); var record = grid.selModel.lastSelected, rate = record.data['vd_rate']; if(rate != null && rate > 0){ var val = Number((f.value*rate).toFixed(2)); if(record.data['vd_debit'] != val) { record.set('vd_debit', val);//本币 } } } } }, 'field[name=vd_doublecredit]': {//原币贷方 focus : function(f) { var grid = Ext.getCmp('grid'), record = grid.selModel.lastSelected, val = record.get('vd_doubledebit'); if( val != 0 ) { f.setReadOnly(true); } else { f.setReadOnly(false); } }, change: function(f){ if(!f.ownerCt && f.value != null && f.value != 0 ){ var record = Ext.getCmp('grid').selModel.lastSelected, rate = record.data['vd_rate']; if(rate != null && rate > 0){ var val = Number((f.value*rate).toFixed(2)); if(record.data['vd_credit'] != val) { record.set('vd_credit', val);//本币 } } } } }, 'field[name=vd_currency]': { aftertrigger: function(f){ if(f.value != null && f.value != '' ){ var record = Ext.getCmp('grid').selModel.lastSelected; if(record.data['vd_rate'] != null && record.data['vd_rate'] > 0){ if(record.data['vd_doubledebit'] != null){ record.set('vd_debit', (record.data['vd_doubledebit']*record.data['vd_rate']).toFixed(2));//原币计算本币 } if(record.data['vd_doublecredit'] != null){ record.set('vd_credit', (record.data['vd_doublecredit']*record.data['vd_rate']).toFixed(2));//原币计算本币 } } } } }, 'field[name=vd_explanation]': { specialkey: function(f, e){//按ENTER自动把摘要复制到下一行 if (e.getKey() == e.ENTER) { if(f.value != null && f.value != '' ){ var grid = Ext.getCmp('grid'), record = grid.selModel.lastSelected, idx = grid.store.indexOf(record), next = grid.store.getAt(idx + 1); if(next) { var v = next.get('vd_explanation'); if(Ext.isEmpty(v)) next.set('vd_explanation', f.value); } } } }, change: function(f) { if(f.value == '=') { var grid = Ext.getCmp('grid'), record = grid.selModel.lastSelected, idx = grid.store.indexOf(record), prev = grid.store.getAt(idx - 1); if(prev) { var v = prev.get('vd_explanation'); if(!Ext.isEmpty(v)) f.setValue(v); } } } }, 'field[name=vd_debit]': { focus : function(f) { var grid = Ext.getCmp('grid'), record = grid.selModel.lastSelected, val = record.get('vd_credit'); if( val != 0 ) { f.setReadOnly(true); } else { f.setReadOnly(false); } }, specialkey: function(f, e){//按ENTER自动把摘要复制到下一行 if (e.getKey() == e.ENTER) { var grid = Ext.getCmp('grid'), record = grid.selModel.lastSelected, val = record.get('vd_explanation'), idx = grid.store.indexOf(record), next = grid.store.getAt(idx + 1); if(!Ext.isEmpty(val)) { if(next) { var v = next.get('vd_explanation'); if(Ext.isEmpty(v)) next.set('vd_explanation', val); } } } } }, 'field[name=vd_credit]': { focus : function(f) { var grid = Ext.getCmp('grid'), record = grid.selModel.lastSelected, val = record.get('vd_debit'); if( val != 0 ) { f.setReadOnly(true); } else { f.setReadOnly(false); } }, specialkey: function(f, e){//按ENTER自动把摘要复制到下一行 if (e.getKey() == e.ENTER) { var grid = Ext.getCmp('grid'), record = grid.selModel.lastSelected, val = record.get('vd_explanation'), idx = grid.store.indexOf(record), next = grid.store.getAt(idx + 1); if(!Ext.isEmpty(val)) { if(next) { var v = next.get('vd_explanation'); if(Ext.isEmpty(v)) next.set('vd_explanation', val); } } } } }, 'dbfindtrigger[name=vd_catecode]': { aftertrigger: function(f){ var grid = Ext.getCmp('grid'), record = grid.selModel.lastSelected; var ass = record.data['ca_asstype']; var btn = Ext.getCmp('assdetail'); if(!Ext.isEmpty(ass)){ btn.setDisabled(false); } else { btn.setDisabled(true); } var idx = me.getRecordIndex(grid, record); if(Ext.getCmp('assgrid') && Ext.getCmp('assgrid').cacheAss[idx] != ass){//科目改变,对应的辅助核算也置空 Ext.getCmp('assgrid').cacheAss[idx] = ass; Ext.getCmp('assgrid').cacheStore[idx] = null; } }/*, afterrender: function(f){ f.onTriggerClick = function(){ me.showCateTree(f); }; }*/ }, 'cateTreeDbfindTrigger[name=vd_catecode]': { aftertrigger: function(f, d){ var grid = Ext.getCmp('grid'), record = grid.selModel.lastSelected; var ass = d[0].raw.data['ca_asstype']; record.set('ca_asstype', ass); var btn = Ext.getCmp('assdetail'); if(!Ext.isEmpty(ass)){ btn.setDisabled(false); } else { btn.setDisabled(true); } var idx = me.getRecordIndex(grid, record); if(Ext.getCmp('assgrid') && Ext.getCmp('assgrid').cacheAss[idx] != ass){//科目改变,对应的辅助核算也置空 Ext.getCmp('assgrid').cacheAss[idx] = ass; Ext.getCmp('assgrid').cacheStore[idx] = null; } }, afterrender: function(f){ f.onTriggerClick = function(){ me.showCateTree(f); }; } } }); }, getForm: function(btn){ return btn.ownerCt.ownerCt; }, getRecordIndex: function(grid, record) { var me = this, id = record.get(grid.keyField); if(!id || id == 0) { me.rowCounter = me.rowCounter || 0; id = --me.rowCounter; record.set(grid.keyField, id); } return id; }, changeCurrencyType: function(c){ var grid = Ext.getCmp('grid'); if(c.checked){ Ext.each(grid.columns, function(cn){ if(cn.dataIndex == 'vd_doubledebit' || cn.dataIndex == 'vd_doublecredit'){ cn.width = 110; cn.setVisible(true); } if(cn.dataIndex == 'vd_currency' || cn.dataIndex == 'vd_rate'){ cn.width = 60; cn.setVisible(true); } if(cn.dataIndex == 'vd_debit'){ cn.setText('本币借方'); } if(cn.dataIndex == 'vd_credit'){ cn.setText('本币贷方'); } }); } else { Ext.each(grid.columns, function(cn){ if(cn.dataIndex == 'vd_currency' || cn.dataIndex == 'vd_rate' || cn.dataIndex == 'vd_doubledebit' || cn.dataIndex == 'vd_doublecredit'){ cn.setVisible(false); } if(cn.dataIndex == 'vd_debit'){ cn.setText('借方'); } if(cn.dataIndex == 'vd_credit'){ cn.setText('贷方'); } }); } }, 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 flow = Ext.getCmp('flowgrid'); var ass = Ext.getCmp('assgrid'); var param2 = new Array(); if(flow) { param2 = me.GridUtil.getGridStore(flow); } var param3 = ass == null ? '[]' : Ext.encode(ass.getEffectData()); Ext.each(detail.store.data.items, function(item, idx){ if(item.data.vd_id == null || item.data.vd_id == 0){ item.data.vd_id = -idx; } }); var param1 = me.GridUtil.getGridStore(detail); if(detail.necessaryField.length > 0 && (param1.length == 0)){ showError($I18N.common.grid.emptyDetail); return; } var ex = new Array(),d; Ext.each(param1, function(){//摘要未填写 d = Ext.decode(this); if(Ext.isEmpty(d.vd_explanation)) { ex.push(d.vd_detno); } }); if(ex.length > 0) { warnMsg("摘要未填写,序号:" + ex.join(',') + " 是否继续保存?", function(btn){ if(btn == 'yes') { me.onSave(form, param1, param2, param3);; } }); } else { 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 ? [] : "[" + param2.toString().replace(/\\/g,"%") + "]"; param3 = param3 == null ? [] : param3.toString().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(); r.vo_currencytype = Ext.getCmp('vo_currencytype').value ? -1 : 0; r.vo_errstring = r.vo_errstring == '正常' ? '' : r.vo_errstring; me.FormUtil.save(r, param1, param2, param3); }else{ me.FormUtil.checkForm(); } }, beforeUpdate: 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 flow = Ext.getCmp('flowgrid'); var ass = Ext.getCmp('assgrid'); Ext.each(detail.store.data.items, function(item, idx){ if(item.data.vd_id == null || item.data.vd_id == 0){ item.data.vd_id = -idx; } }); var param1 = me.GridUtil.getGridStore(detail); var param2 = new Array(); if(flow) { param2 = me.GridUtil.getGridStore(flow); } var param3 = ass == null ? '[]' : Ext.encode(ass.getEffectData()); if(me.FormUtil.checkFormDirty(form) == '' && detail.necessaryField.length > 0 && (param1.length == 0) && (!flow || (flow.necessaryField.length > 0 && (param2.length == 0))) && (param3.length <= 2)){ showError($I18N.common.grid.emptyDetail); return; } else { param1 = param1 == null ? [] : "[" + param1.toString().replace(/\\/g,"%") + "]"; param2 = param2 == null ? [] : "[" + param2.toString().replace(/\\/g,"%") + "]"; param3 = param3 == null ? [] : param3.toString().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(); r.vo_currencytype = Ext.getCmp('vo_currencytype').value ? -1 : 0; r.vo_errstring = r.vo_errstring == '正常' ? '' : r.vo_errstring; me.FormUtil.update(r, param1, param2, param3); }else{ me.FormUtil.checkForm(); } } }, createForm: function(grid){ var record = grid.selModel.lastSelected; var data = new Object(); if(record){ data = record.data; } var items = new Array(); var item; Ext.each(grid.columns, function(c){ item = new Object(); item.id = c.dataIndex; item.name = c.dataIndex; item.fieldLabel = c.text || c.header; item.value = data[c.dataIndex]; item.columnWidth = .33; item.readOnly = true; item.xtype = 'textfield'; item.fieldStyle = 'background:#f0f0f0;border: 1px solid #8B8970'; item.cls = 'form-field-border'; if(c.hidden){ item.xtype = 'hidden'; item.cls = ""; } if(c.dataIndex == grid.detno){ item.fieldStyle = 'background:#e0f0f0;font-weight:bold;border: 1px solid #8B8970'; } items.push(item); }); return items; }, /** * 明细辅助核算的上一条 */ prev: function(grid, record){ record = record || grid.selModel.lastSelected; if(record){ //先保存当前数据 var me = this, data = new Array(), row = grid.store.indexOf(record); Ext.each(Ext.getCmp('assgrid').store.data.items, function(){ data.push(this.data); }); if(data.length > 0){ Ext.getCmp('assgrid').cacheStore[me.getRecordIndex(grid, record)] = data; } //递归查找上一条,并取到数据 var d = grid.store.getAt(row - 1); if(d){ Ext.getCmp('win-form').getForm().setValues(d.data); var idx = me.getRecordIndex(grid, d); Ext.getCmp('assgrid').cacheAss[idx] = d.data['ca_asstype']; Ext.getCmp('assgrid').asstype = Ext.isEmpty(d.data['ca_asstype']) ? new Array() : d.data['ca_asstype'].toString().split('#'); Ext.getCmp('assgrid').getMyData(idx, caller); grid.selModel.select(d); } else { if(row - 1 > 0){ this.prev(grid, d); } } } }, /** * 明细辅助核算的下一条 */ next: function(grid, record){ record = record || grid.selModel.lastSelected; if(record){ //先保存当前数据 var me = this, data = new Array(), row = grid.store.indexOf(record); Ext.each(Ext.getCmp('assgrid').store.data.items, function(){ data.push(this.data); }); if(data.length > 0){ Ext.getCmp('assgrid').cacheStore[me.getRecordIndex(grid, record)] = data; } //递归查找下一条,并取到数据 var d = grid.store.getAt(row + 1); if(d){ Ext.getCmp('win-form').getForm().setValues(d.data); var idx = me.getRecordIndex(grid, d); Ext.getCmp('assgrid').cacheAss[idx] = d.data['ca_asstype']; Ext.getCmp('assgrid').asstype = Ext.isEmpty(d.data['ca_asstype']) ? new Array() : d.data['ca_asstype'].toString().split('#'); Ext.getCmp('assgrid').getMyData(idx, caller); grid.selModel.select(d); } else { if(row + 1 < grid.store.data.items.length){ this.next(grid, d); } } } }, showVoucherFlow: function(){ var win = Ext.getCmp('flow_win'); var voucherid = Ext.getCmp('vo_id').value; if(!win) { Ext.create('Ext.Window', { id: 'flow_win', height: "100%", width: "80%", iconCls: 'x-button-icon-set', closeAction: 'hide', autoShow: true, title: '现金流', maximizable : true, layout : 'anchor', items: [{ anchor: '100% 100%', xtype: 'voucherflowgrid', listeners: { afterrender: function(grid){ if(formCondition == null || formCondition.toString().trim() == ''){ grid.getMyData(-1); } else { grid.getMyData(voucherid); } } } }], buttonAlign: 'center', buttons: [{ text: $I18N.common.button.erpConfirmButton, iconCls: 'x-button-icon-save', cls: 'x-btn-gray', handler: function(btn){ btn.ownerCt.ownerCt.close(); } }] }); } else { win.show(); } }, /** * 复制凭证 */ copy: function(){ var form = Ext.getCmp('form'); var v = form.down('#vo_id').value; if(v > 0) { form.setLoading(true); Ext.Ajax.request({ url: basePath + 'fa/ars/copyVoucher.action', params: { id: v }, callback: function(opt, s, r){ form.setLoading(false); var res = Ext.decode(r.responseText); if(res.voucher) { showMessage('提示', '复制成功!\n凭证号:<' + res.voucher.vo_number + '>\n流水号:<' + res.voucher.vo_code + '>'); } else { showError(res.exceptionInfo); } } }); } }, getSource: function(id) { var me = this; Ext.Ajax.request({ url : basePath + 'common/getFieldsData.action', params: { caller: 'VoucherBill', fields: 'vb_billcode,vb_vscode', condition: 'vb_void=' + id }, method : 'post', callback : function(options,success,response){ var localJson = new Ext.decode(response.responseText); if(localJson.exceptionInfo){ showError(localJson.exceptionInfo); } else if(localJson.success){ if(localJson.data != null && localJson.data.vb_vscode != null){ me.showSourceList(localJson.data.vb_vscode, localJson.data.vb_billcode); } else { showMessage('提示', '当前凭证没有来源信息!'); } } } }); }, showSourceList: function(vscode, pri) { var me = this, cls = Ext.getCmp('vo_source').value, cfg = me.getSourceConfig(vscode, cls), merge = pri.indexOf(',') > 0 || /SELECT.*FROM.*/.test(pri.toUpperCase()); Ext.Ajax.request({ url : basePath + 'common/getFieldsData.action', params: { caller: 'VoucherStyle', fields: 'vs_datalist,vs_prikey1,vs_pritable,vs_classfield', condition: 'vs_code=\'' + vscode + '\'' }, method : 'post', callback : function(opt, s, res){ var r = new Ext.decode(res.responseText); if (r.exceptionInfo) { showError(r.exceptionInfo); } else if(r.success) { if (r.data != null) { if (merge || !cfg.url) me.showSourceGrid(vscode, r.data.vs_datalist, r.data.vs_prikey1, r.data.vs_pritable, r.data.vs_classfield, cls, pri, cfg); else me.linkSource(vscode, r.data.vs_prikey1, r.data.vs_pritable, r.data.vs_classfield, cls, pri, cfg); } else { showMessage('提示', '当前凭证没有来源信息!', 3000); } } } }); }, linkSource : function(vscode, key, tab, clsfield, cls, pri, cfg) { var me = this, url = cfg.url, k = cfg.keyfield, m = cfg.mainfield; if (url) { Ext.Ajax.request({ url : basePath + 'common/getFieldData.action', async: false, params: { caller: tab, field: k, condition: key + '=' + pri + ' and ' + clsfield + '=\'' + cls + '\'' }, method : 'post', callback : function(opt, s, res){ var r = new Ext.decode(res.responseText); if(r.exceptionInfo){ showError(r.exceptionInfo); } else if(r.success && r.data){ url += url.indexOf('?') > 0 ? '&' : '?'; me.FormUtil.onAdd(null, '来源', url + 'formCondition=' + k + 'IS' + r.data + '&gridCondition=' + m + 'IS' + r.data); } } }); } }, showSourceGrid : function(vscode, cal, key, tab, clsfield, cls, pri, cfg) { var me = this, condition = key + ' in (' + pri + ')'; if('PRODINOUT' == vscode) { condition += ' and pi_class=\'' + cls + '\''; } var w = Ext.isIE ? 800 : '80%', h = Ext.isIE ? 500 : '100%'; var win = Ext.create('Ext.Window', { width: w, height: h, title: '凭证来源', layout: 'anchor', items: [], buttonAlign: 'center', buttons: [{ text: $I18N.common.button.erpExportButton, cls: 'x-btn-blue', iconCls: 'x-button-icon-ecel', handler: function(btn) { me.BaseUtil.exportGrid(btn.ownerCt.ownerCt.down('grid')); btn.ownerCt.ownerCt.close(); } },{ text: $I18N.common.button.erpCloseButton, cls: 'x-btn-blue', iconCls: 'x-button-icon-close', handler: function(btn) { btn.ownerCt.ownerCt.close(); } }] }).show(); var grid = Ext.create('Ext.grid.Panel', { anchor: '100% 100%', columnLines: true, columns: [], store: [] }); win.add(grid); me.GridUtil.getGridColumnsAndStore(grid, 'common/singleGridPanel.action', {caller: cal, condition: condition}); grid.on('itemclick', function(s, r){ me.linkSource(vscode, key, tab, clsfield, cls, "\'" + r.get(key) + "\'", cfg); }); }, getSourceConfig : function(vscode, vdclass) { var url = null, keyfield = null, mainfield = null; if(vscode == 'RecBalance') { keyfield = 'rb_id'; mainfield = 'rbd_rbid'; switch (vdclass) { case '应收冲应付': url = 'jsps/fa/ars/recBalanceAP.jsp?whoami=RecBalance!RRCW'; break; case '收款单': url = 'jsps/fa/ars/recBalance.jsp?whoami=RecBalance!PBIL'; break; case '冲应收款': url = 'jsps/fa/ars/recBalance.jsp?whoami=RecBalance!IMRE'; break; case '预收冲应收': url = 'jsps/fa/ars/recBalancePRDetail.jsp?whoami=RecBalance!PTAR'; break; case '应收票据': url = 'jsps/fa/gs/billAR.jsp'; break; case '应收款转销': url = 'jsps/fa/ars/recBalance.jsp?whoami=RecBalance!ARRM'; break; } } else if(vscode == 'PreRec') { keyfield = 'pr_id'; mainfield = 'prd_prid'; switch (vdclass) { case '预收款': url = 'jsps/fa/ars/preRec.jsp?whoami=PreRec!Ars!DERE'; break; case '预收退款': url = 'jsps/fa/ars/preRec.jsp?whoami=PreRec!Ars!DEPR'; break; } } else if(vscode == 'PrePay') { keyfield = 'pp_id'; mainfield = 'ppd_ppid'; switch (vdclass) { case '预付款': url = 'jsps/fa/arp/prepay.jsp?whoami=PrePay!Arp!PAMT'; break; case '预付退款': url = 'jsps/fa/arp/prepay.jsp?whoami=PrePay!Arp!PAPR'; break; } } else if(vscode == 'PrePaid') { keyfield = 'pp_id'; mainfield = 'pd_ppid'; switch (vdclass) { case '摊销': url = 'jsps/fa/gla/prePaid.jsp'; break; } } else if(vscode == 'PurcFee') { keyfield = 'pi_id'; mainfield = 'pd_piid'; switch (vdclass) { case '采购验收单': url = 'jsps/scm/reserve/prodinout.jsp?whoami=ProdInOut!PurcCheckin'; break; case '采购验退单': url = 'jsps/scm/reserve/prodinout.jsp?whoami=ProdInOut!PurcCheckout'; break; } } else if(vscode == 'PayBalance') { keyfield = 'pb_id'; mainfield = 'pbd_pbid'; switch (vdclass) { case '冲应付款': url = 'jsps/fa/arp/paybalance.jsp?whoami=PayBalance!CAID'; break; case '应付款转销': url = 'jsps/fa/arp/paybalance.jsp?whoami=PayBalance!APRM'; break; case '预付冲应付': url = 'jsps/fa/arp/payBalancePRDetail.jsp?whoami=PayBalance!Arp!PADW'; break; case '付款单': url = 'jsps/fa/arp/paybalance.jsp?whoami=PayBalance'; break; case '应付冲应收': url = 'jsps/fa/arp/paybalance.jsp?whoami=PayBalance!DWRC'; break; } } else if(vscode == 'AccountRegiste') { keyfield = 'ar_id'; mainfield = 'ard_arid'; url = 'jsps/fa/gs/accountRegister.jsp?whoami=AccountRegister!Bank'; } else if(vscode == 'Estimate') { keyfield = 'es_id'; mainfield = 'esd_esid'; url = 'jsps/fa/arp/estimate.jsp?whoami=Estimate'; } else if(vscode == 'GoodsSend') { keyfield = 'gs_id'; mainfield = 'gsd_gsid'; url = 'jsps/fa/ars/goodsSend.jsp?whoami=GoodsSendGs'; } else if(vscode == 'ARBill') { keyfield = 'ab_id'; mainfield = 'abd_abid'; switch (vdclass) { case '其它应收单': url = 'jsps/fa/ars/arbill.jsp?whoami=ARBill!OTRS'; break; case '应收发票': url = 'jsps/fa/ars/arbill.jsp?whoami=ARBill!IRMA'; break; } } else if(vscode == 'APBill') { keyfield = 'ab_id'; mainfield = 'abd_abid'; switch (vdclass) { case '其它应付单': url = 'jsps/fa/ars/apbill.jsp?whoami=APBill!OTDW'; break; case '应付发票': url = 'jsps/fa/ars/apbill.jsp?whoami=APBill!CWIM'; break; } } return {url : url, keyfield : keyfield, mainfield : mainfield}; }, showAss: function(grid) { var data = new Array(), ass = ''; grid.store.each(function(item, idx){ ass = item.data['ca_asstype']; if(!Ext.isEmpty(ass)){ data.push(item.get('vd_id')); } }); if(data.length > 0) { Ext.Ajax.request({ url: basePath + 'common/getFieldsDatas.action', params: { caller: 'VoucherDetailAss', fields: 'vds_vdid,vds_asstype,vds_asscode,vds_assname', condition: 'vds_vdid in (' + Ext.Array.concate(data, ',') + ')' }, callback: function(opt, s, r) { if(s) { var rs = Ext.decode(r.responseText); if(rs.success){ var ds = Ext.decode(rs.data), x, idx = 0; for(var i in ds) { x = ds[i]; for(var j in data) { if(data[j] == x.VDS_VDID) { idx = grid.store.find('vd_id', data[j]); grid.store.insert(idx + 1, { vd_explanation: '