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.CreateTemplate',
'core.button.Add','core.button.Save','core.button.Close','core.button.Source','core.button.ExportTemplate',
'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({
'erpFormPanel': {
afterload: function(form) {
Ext.defer(function(){// 非手工做的、有来源的凭证,不能改凭证字
var lead = Ext.getCmp('vo_lead'), sr = Ext.getCmp('vo_source'),
sc = Ext.getCmp('vo_sourcecode');
if(lead && ((sr && !Ext.isEmpty(sr.getValue())) ||
(sc && !Ext.isEmpty(sc.getValue()))))
lead.setReadOnly(true);
}, 200);
}
},
'#vo_id': {
afterrender: function(f) {
Ext.defer(function(){
var id = f.getValue();
me.getMonth(function(data){
if (Ext.isEmpty(id) || id == 0) {
Ext.getCmp('vo_yearmonth').setValue(data.PD_DETNO);
Ext.getCmp('vo_date').setValue(new Date(data.PD_ENDDATE));
} else {
var ym = Ext.getCmp('vo_yearmonth').getValue() || Ext.Date.format(new Date(), 'Ym');
if(ym < data.PD_DETNO) {
form.readOnly = true;
Ext.getCmp('grid').readOnly = true;
}
}
});
}, 20);
},
change: function(f){
var grid = Ext.getCmp('flowgrid');
if(grid) {
if(!Ext.isEmpty(f.value) && f.value != 0){
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});
}
},
'erpSaveButton': {
click: function(btn){
var form = me.getForm(btn);
if(Ext.getCmp(form.codeField).value == null || Ext.getCmp(form.codeField).value == ''){
me.BaseUtil.getRandomNumber();//自动添加编号
}
//保存之前的一些前台的逻辑判定
var grid = Ext.getCmp('grid'), items = grid.store.data.items;
Ext.each(items,function(item,index){
if(!Ext.isEmpty(item.data['vd_catecode']) || !Ext.isEmpty(item.data['vd_explanation'])){
if((Ext.isEmpty(item.data['vd_debit']) || item.data['vd_debit'] == 0) && (Ext.isEmpty(item.data['vd_credit']) || item.data['vd_credit'] == 0)){
showError('明细表第' + item.data['vd_detno'] + '行借、贷方金额均未填写!');
}
}
});
this.beforeSave();
}
},
//查看来源
'erpSourceButton': {
afterender: function(btn){
Ext.defer(function(){
var v = Ext.getCmp('vo_source').value;
if(v == null || v == ''){
btn.hide();
}
}, 200);
},
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";
btn.exportCaller="Voucher!DetailandAss!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{
var err = result.exceptionInfo || result.error;
if(err != null){
showError(err);
}
}
}
});
}
}
});
}
});
}
},
'erpVoucherFlowButton': {
click: function(){
this.showVoucherFlow();
}
},
'erpCloseButton': {
click: function(btn){
this.FormUtil.beforeClose(this);
}
},
'erpCopyButton': {
click: function(btn) {
this.copy();
}
},
'erpUpdateButton': {
click: function(btn){
var grid = Ext.getCmp('grid'), items = grid.store.data.items;
Ext.each(items,function(item,index){
if(!Ext.isEmpty(item.data['vd_catecode']) || !Ext.isEmpty(item.data['vd_explanation'])){
if((Ext.isEmpty(item.data['vd_debit']) || item.data['vd_debit'] == 0) && (Ext.isEmpty(item.data['vd_credit']) || item.data['vd_credit'] == 0)){
showError('明细表第' + item.data['vd_detno'] + '行借、贷方金额均未填写!');
}
}
});
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': {
afterrender: function(btn){
Ext.defer(function(){
var source = Ext.getCmp('vo_source'),
sourceCode = Ext.getCmp('vo_sourcecode');
if((source && source.value) || (sourceCode && sourceCode.value)){
btn.hide();
}
}, 200);
},
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){
var grid = Ext.getCmp('grid'), items = grid.store.data.items;
Ext.each(items,function(item,index){
if(!Ext.isEmpty(item.data['vd_catecode']) || !Ext.isEmpty(item.data['vd_explanation'])){
if((Ext.isEmpty(item.data['vd_debit']) || item.data['vd_debit'] == 0) && (Ext.isEmpty(item.data['vd_credit']) || item.data['vd_credit'] == 0)){
showError('明细表第' + item.data['vd_detno'] + '行借、贷方金额均未填写!');
return;
}
}
});
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){
var grid = Ext.getCmp('grid'), items = grid.store.data.items;
Ext.each(items,function(item,index){
if(!Ext.isEmpty(item.data['vd_catecode']) || !Ext.isEmpty(item.data['vd_explanation'])){
if((Ext.isEmpty(item.data['vd_debit']) || item.data['vd_debit'] == 0) && (Ext.isEmpty(item.data['vd_credit']) || item.data['vd_credit'] == 0)){
showError('明细表第' + item.data['vd_detno'] + '行借、贷方金额均未填写!');
return;
}
}
});
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_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-gray',
id: 'replace'
});
//当前行的借方 = 其它行的贷方总额-其它行的借方总额
btn.ownerCt.add({
text: '找平',
width: 65,
disabled: true,
cls: 'x-btn-gray',
id: 'level'
});
},
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': {
afterrender: function(grid){
grid.plugins[0].on('beforeedit', function(args) {
var iscashflow = Ext.getCmp('vo_iscashflow');
if(iscashflow && iscashflow.value != 0){
if (args.field == "vd_flowcode") {
var bool = false;
if (args.record.get('ca_cashflow') == 0){
bool = true;
}
}
return bool;
} else {
if (args.field == "vd_flowcode") {
return false;
}
}
if (args.field == "vd_debit") {
var bool = true;
if (args.record.get('vd_credit') != null && args.record.get('vd_credit') > 0){
bool = false;
}
if (args.record.get('vd_doublecredit') != null && args.record.get('vd_doublecredit') > 0){
bool = false;
}
return bool;
}
if (args.field == "vd_credit") {
var bool = true;
if (args.record.get('vd_debit') != null && args.record.get('vd_debit') > 0){
bool = false;
}
if (args.record.get('vd_doubledebit') != null && args.record.get('vd_doubledebit') > 0){
bool = false;
}
return bool;
}
if (args.field == "vd_doubledebit") {
var bool = true;
if (args.record.get('vd_doublecredit') != null && args.record.get('vd_doublecredit') > 0){
bool = false;
}
if (args.record.get('vd_credit') != null && args.record.get('vd_credit') > 0){
bool = false;
}
return bool;
}
if (args.field == "vd_doublecredit") {
var bool = true;
if (args.record.get('vd_doubledebit') != null && args.record.get('vd_doubledebit') > 0){
bool = false;
}
if (args.record.get('vd_debit') != null && args.record.get('vd_debit') > 0){
bool = false;
}
return bool;
}
});
var f = Ext.getCmp('vo_currencytype');
if(f) {
Ext.defer( function(){
me.changeCurrencyType(f);
},200);
}
Ext.defer(function(){
Ext.EventManager.addListener(document.body, 'keydown', function(e){
if(e.getKey() == 187 && ['vd_debit', 'vd_credit'].indexOf(e.target.name) > -1) {
me.levelOut(e.target);
}
});
}, 200);
},
/*storeloaded: function(grid){
var f = Ext.getCmp('vo_currencytype');
if(f) {
me.changeCurrencyType(f);
}
},*/
itemclick: function(selModel, record){
var grid = selModel.ownerCt;
if(!grid.readOnly) {
this.GridUtil.onGridItemClick(selModel, record);
var btn = Ext.getCmp('replace');
btn.setDisabled(false);
btn = Ext.getCmp('level');
btn.setDisabled(false);
}
}
},
'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.levelOut
},
'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 = me.BaseUtil.numberFormat(me.BaseUtil.multiply(f.value, rate), 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 = me.BaseUtil.numberFormat(me.BaseUtil.multiply(f.value, rate), 2);
if(record.data['vd_credit'] != val) {
record.set('vd_credit', val);//本币
}
}
}
}
},
'field[name=vd_currency]': {
afterrender: function(f){
f.mappingKey = 'cm_yearmonth';
f.dbKey = 'vo_yearmonth';
},
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',
me.BaseUtil.numberFormat(me.BaseUtil.multiply(record.get('vd_doubledebit'), record.get('vd_rate')), 2));//原币计算本币
}
if(record.data['vd_doublecredit'] != null){
record.set('vd_credit',
me.BaseUtil.numberFormat(me.BaseUtil.multiply(record.get('vd_doublecredit'), record.get('vd_rate')), 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自动把摘要复制到下一行
console.log(e);
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 type = record.get('ca_assname'), ass = record.get('ass') || [];
if(!Ext.isEmpty(type)){
var oldType = Ext.Array.concate(ass, '#', 'vds_asstype');
if(type != oldType) {
var idx = me.getRecordIndex(grid, record), dd = [];
Ext.Array.each(type.split('#'), function(t){
dd.push({
vds_vdid: idx,
vds_asstype: t
});
});
record.set('ass', dd);
var view = grid.view, idx = grid.store.indexOf(record), rowNode = view.getNode(idx),
expander = grid.plugins[2], row = Ext.fly(rowNode, '_rowExpander'),
isCollapsed = row.hasCls(expander.rowCollapsedCls);
if(isCollapsed)
expander.toggleRow(idx, record);
}
} else
record.set('ass', null);
}
},
'cateTreeDbfindTrigger[name=vd_catecode]': {
aftertrigger: function(f, d){
var grid = Ext.getCmp('grid'),
record = grid.selModel.lastSelected;
var type = record.get('ca_assname'), ass = record.get('ass') || [];
if(!Ext.isEmpty(type)){
var oldType = Ext.Array.concate(ass, '#', 'vds_asstype');
if(type != oldType) {
var idx = me.getRecordIndex(grid, record), dd = [];
Ext.Array.each(type.split('#'), function(t){
dd.push({
vds_vdid: idx,
vds_asstype: t
});
});
record.set('ass', dd);
}
} else
record.set('ass', null);
},
afterrender: function(f){
f.onTriggerClick = function(){
me.showCateTree(f);
};
}
},
/**
* 导入凭证模板
*/
'erpExportTemplateButton': {
click: function() {
me.showTp();
}
},
/**
* 添加到模板
*/
'erpCreateTemplateButton': {
click: function() {
me.createTp();
}
}
});
},
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(grid) {
var cols = grid.headerCt.getGridColumns();
if(c.checked){
Ext.each(cols, 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(cols, 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'), id = Ext.getCmp(form.keyField).value;
if(! me.FormUtil.checkForm()){
return;
}
if(Ext.isEmpty(id) || id == 0 || id == '0'){
me.FormUtil.getSeqId(form);
}
var detail = Ext.getCmp('grid');
var flow = Ext.getCmp('flowgrid');
var ass = [];
detail.store.each(function(record){
if(record.get('ca_assname')) {
var s = record.get('ass') || [];
Ext.Array.each(s, function(t, i){
t.vds_id = t.vds_id || 0;
t.vds_detno = i + 1;
t.vds_vdid = String(t.vds_vdid);
ass.push(t);
});
}
});
var param2 = new Array();
if(flow) {
param2 = me.GridUtil.getGridStore(flow);
}
var param3 = Ext.encode(ass);
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 param1 = me.GridUtil.getGridStore(detail);
var param2 = new Array();
if(flow) {
param2 = me.GridUtil.getGridStore(flow);
}
var ass = [];
detail.store.each(function(record){
if(record.get('ca_assname')) {
var s = record.get('ass') || [];
Ext.Array.each(s, function(t, i){
t.vds_id = t.vds_id || 0;
t.vds_detno = i + 1;
t.vds_vdid = String(t.vds_vdid);
ass.push(t);
});
}
});
var param3 = Ext.encode(ass);
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;
}
// 摘要未填写判断
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.onUpdate(form, param1, param2, param3);;
}
});
} else {
me.onUpdate(form, param1, param2, param3);
}
},
onUpdate: 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.update(r, param1, param2, param3);
}else{
me.FormUtil.checkForm();
}
},
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) {
if(r.data.vs_datalist)
me.showSourceGrid(vscode, r.data.vs_datalist, r.data.vs_prikey1,
r.data.vs_pritable, r.data.vs_classfield, cls, pri, cfg);
else
showError('凭证公式未配置列表参数,无法显示来源!');
} 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 + (clsfield ? (' 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-gray',
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-gray',
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;
case '应收退款单':
url = 'jsps/fa/ars/recBalanceTK.jsp?whoami=RecBalance!TK';
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;
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;
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;
case '应付退款单':
url = 'jsps/fa/arp/paybalanceTK.jsp?whoami=PayBalance!TK';
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;
}
} else if(vscode == 'BillOut') {
keyfield = 'bi_id';
mainfield = 'ard_biid';
url = 'jsps/fa/ars/billOut.jsp';
} else if(vscode == 'BillOutAP') {
keyfield = 'bi_id';
mainfield = 'ard_biid';
url = 'jsps/fa/arp/billOutAP.jsp';
} else if(vscode == 'AssetsCard') {
keyfield = 'ac_id';
url = 'jsps/fa/fix/assetsCard.jsp';
} else if(vscode == 'Depreciation') {
keyfield = 'de_id';
mainfield = 'dd_deid';
switch (vdclass) {
case '折旧单':
url = 'jsps/fa/fix/assetsDepreciation.jsp?whoami=AssetsDepreciation';
break;
case '资产增加单':
url = 'jsps/fa/fix/assetsDepreciation.jsp?whoami=AssetsDepreciation!Add';
break;
case '资产减少单':
url = 'jsps/fa/fix/assetsDepreciation.jsp?whoami=AssetsDepreciation!Reduce';
break;
}
} else if(vscode == 'PRODINOUT') {
keyfield = 'pi_id';
mainfield = 'pd_piid';
url = 'jsps/scm/reserve/prodInOut.jsp';
var call;
switch (vdclass) {
case '采购验收单':
call = 'ProdInOut!PurcCheckin';
break;
case '采购验退单':
call = 'ProdInOut!PurcCheckout';
break;
case '出货单':
call = 'ProdInOut!Sale';
break;
case '拨入单':
call = 'ProdInOut!AppropriationIn';
break;
case '销售拨出单':
call = 'ProdInOut!SaleAppropriationOut';
break;
case '销售退货单':
call = 'ProdInOut!SaleReturn';
break;
case '拨出单':
call = 'ProdInOut!AppropriationOut';
break;
case '不良品入库单':
call = 'ProdInOut!DefectIn';
break;
case '不良品出库单':
call = 'ProdInOut!DefectOut';
break;
case '委外领料单':
call = 'ProdInOut!OutsidePicking';
break;
case '委外退料单':
call = 'ProdInOut!OutsideReturn';
break;
case '委外验收单':
call = 'ProdInOut!OutsideCheckIn';
break;
case '委外验退单':
call = 'ProdInOut!OutesideCheckReturn';
break;
case '借货归还单':
call = 'ProdInOut!OutReturn';
break;
case '研发采购验收单':
call = 'ProdInOut!PurcCheckin!PLM';
break;
case '研发采购验退单':
call = 'ProdInOut!PurcCheckout!PLM';
break;
case '换货入库单':
call = 'ProdInOut!ExchangeIn';
break;
case '换货出库单':
call = 'ProdInOut!ExchangeOut';
break;
case '生产补料单':
call = 'ProdInOut!Make!Give';
break;
case '完工入库单':
call = 'ProdInOut!Make!In';
break;
case '生产退料单':
call = 'ProdInOut!Make!Return';
break;
case '生产报废单':
call = 'ProdInOut!Make!Useless';
break;
case '无订单出货单':
call = 'ProdInOut!NoSale';
break;
case '委外补料单':
call = 'ProdInOut!OSMake!Give';
break;
case '其它入库单':
call = 'ProdInOut!OtherIn';
break;
case '其它出库单':
call = 'ProdInOut!OtherOut';
break;
case '其它采购入库单':
call = 'ProdInOut!OtherPurcIn';
break;
case '其它采购出库单':
call = 'ProdInOut!OtherPurcOut';
break;
case '拆件入库单':
call = 'ProdInOut!PartitionStockIn';
break;
case '生产领料单':
call = 'ProdInOut!Picking';
break;
case '库存初始化':
call = 'ProdInOut!ReserveInitialize';
break;
case '借货出货单':
call = 'ProdInOut!SaleBorrow';
break;
case '销售拨入单':
call = 'ProdInOut!SaleAppropriationIn';
break;
case '盘亏调整单':
call = 'ProdInOut!StockLoss';
break;
case '盘盈调整单':
call = 'ProdInOut!StockProfit';
break;
case '报废单':
call = 'ProdInOut!StockScrap';
break;
case '研发退料单':
call = 'ProdInOut!YFIN';
break;
case '研发领料单':
call = 'ProdInOut!YFOUT';
break;
case '成本调整单':
call = 'ProdInOut!CostChange';
break;
}
call && (url += '?whoami=' + call);
} else if(vscode == 'BillAR') {
url = 'jsps/fa/gs/billAR.jsp';
keyfield = 'bar_id';
} else if(vscode == 'BillAP') {
url = 'jsps/fa/gs/billAP.jsp';
keyfield = 'bap_id';
} else if(vscode == 'BillARChange') {
url = 'jsps/fa/gs/billARChange.jsp';
keyfield = 'brc_id';
mainfield = 'brd_brcid';
} else if(vscode == 'BillAPChange') {
url = 'jsps/fa/gs/billAPChange.jsp';
keyfield = 'bpc_id';
mainfield = 'bpd_bpcid';
}
return {url : url, keyfield : keyfield, mainfield : mainfield};
},
levelOut:function (target){
var grid = Ext.getCmp('grid'), me = this;
var record = grid.selModel.lastSelected;
if(record){
var f = Ext.getCmp('vo_currencytype');
var debit = 0;
var credit = 0;
var rate = record.get('vd_rate');
rate = rate == 0 ? 1 : rate;
grid.getStore().each(function(item){
if(item.id != record.id){
debit += item.get('vd_debit');
credit += item.get('vd_credit');
}
});
var targetName = target.name;
if(record.get('vd_debit') != 0)
targetName = 'vd_debit';
else if(record.get('vd_credit') != 0)
targetName = 'vd_credit';
if(targetName && typeof targetName == 'string') {
if(targetName == 'vd_debit') {
debit = credit - debit;
record.set('vd_debit', me.BaseUtil.numberFormat(debit, 4));
if(f.checked) {
record.set('vd_doubledebit', me.BaseUtil.numberFormat(debit/rate, 4));
}
} else if(targetName == 'vd_credit'){
credit = debit - credit;
record.set('vd_credit', me.BaseUtil.numberFormat(credit, 4));
if(f.checked) {
record.set('vd_doublecredit', me.BaseUtil.numberFormat(credit/rate, 4));
}
}
if(target.name == targetName)
target.value = record.get(targetName);
} else {
if(credit > debit) {
record.set('vd_debit', credit - debit);
if(f.checked) {
record.set('vd_doubledebit', me.BaseUtil.numberFormat((credit - debit)/rate, 4));
}
} else {
record.set('vd_credit', debit - credit);
if(f.checked) {
record.set('vd_doublecredit', me.BaseUtil.numberFormat((debit - credit)/rate, 4));
}
}
}
}
},
showCateTree: function(f) {
var cawin = Ext.getCmp('cawin');
if(!cawin) {
cawin = new Ext.window.Window({
id : 'cawin',
title: '科目查找',
height: "100%",
width: "80%",
maximizable : true,
buttonAlign : 'center',
layout : 'anchor',
modal:true,
items: [{
tag : 'iframe',
frame : true,
anchor : '100% 100%',
layout : 'fit',
html : ''
}],
buttons : [{
text : '确 认',
iconCls: 'x-button-icon-save',
cls: 'x-btn-gray',
handler : function(btn){
var contentwindow = Ext.getCmp('cawin').body.dom.getElementsByTagName('iframe')[0].contentWindow;
var tree = contentwindow.Ext.getCmp('tree-panel');
var data = tree.getChecked(), record = Ext.getCmp('grid').selModel.lastSelected;
var dbfinds = Ext.getCmp('grid').dbfinds;
if(dbfinds != null && record){
Ext.each(dbfinds, function(dbfind,index){
record.set(dbfind.field, data[0].raw.data[dbfind.dbGridField]);
});
}
f.fireEvent('aftertrigger', f, data);
btn.ownerCt.ownerCt.hide();
}
},{
text : '关 闭',
iconCls: 'x-button-icon-close',
cls: 'x-btn-gray',
handler : function(btn){
btn.ownerCt.ownerCt.hide();
}
}]
});
}
cawin.show();
},
getMonth: function(callback) {
Ext.Ajax.request({
url: basePath + 'fa/getMonth.action',
params: {
votype: 'GL'
},
callback: function(opt, s, r) {
var rs = Ext.decode(r.responseText);
if(rs.data) {
callback.call(null, rs.data);
}
}
});
},
/**
* 显示模板
*/
showTp: function() {
var me = this, win = me.tpWin;
if(!win) {
win = me.tpWin = new Ext.window.Window({
id: 'tp-win',
width: '84%',
height: '100%',
title: '选择模板',
layout: 'anchor',
closeAction: 'hide',
items: [{
xtype: 'container',
anchor: '100% 100%',
html: ''
}],
listeners: {
'itemselect': function(scope, data) {
me.loadTp(data.vo_id);
scope.hide();
},
'close': function(scope) {
scope.hide();
}
}
});
}
win.show();
},
/**
* 加载模板
*/
loadTp: function(id) {
Ext.Ajax.request({
url: basePath + 'fa/gla/getvotp.action',
params: {
id: id
},
callback: function(opt, s, r) {
var rs = Ext.decode(r.responseText);
if(rs.data) {
var form = Ext.getCmp('form'), grid = Ext.getCmp('grid');
form.getForm().setValues(rs.data.voucher);
grid.store.loadData(rs.data.voucherdetail);
var store = grid.store, i = 0, exp = grid.plugins[2];
grid.store.each(function(record){
exp.toggleRow(i++);
record.dirty = true;
});
} else {
showError(rs.exceptionInfo);
}
}
});
},
/**
* 添加到凭证模板
*/
createTp: 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/gla/copyvotp.action',
params: {
id: v
},
callback: function(opt, s, r){
form.setLoading(false);
var res = Ext.decode(r.responseText);
if(res.data) {
showMessage('提示', '添加成功! \n流水号:<' + res.data.vo_code + '>');
} else {
showError(res.exceptionInfo);
}
}
});
}
}
});