Voucher.js 44 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.fa.ars.Voucher', {
  3. extend: 'Ext.app.Controller',
  4. FormUtil: Ext.create('erp.util.FormUtil'),
  5. BaseUtil: Ext.create('erp.util.BaseUtil'),
  6. GridUtil: Ext.create('erp.util.GridUtil'),
  7. views:[
  8. 'fa.ars.Voucher','core.form.Panel','core.grid.Panel2','core.toolbar.Toolbar',
  9. 'fa.ars.VoucherFlowGrid','fa.ars.DetailAssGrid',
  10. 'core.button.Add','core.button.Save','core.button.Close','core.button.Source',
  11. 'core.button.Submit','core.button.ResSubmit','core.button.Audit','core.button.ResAudit',
  12. 'core.button.Update','core.button.Delete','core.form.YnField','core.button.DeleteDetail',
  13. 'core.button.VoucherFlow', 'core.button.CopyAll','core.button.ExportExcelButton','core.button.Print',
  14. 'core.trigger.DbfindTrigger','core.grid.YnColumn','core.form.YnField', 'core.trigger.CateTreeDbfindTrigger'
  15. ],
  16. init:function(){
  17. var me = this;
  18. this.control({
  19. 'dbfindtrigger[name=vd_explanation]':{
  20. focus:function(t){
  21. t.autoDbfind = false;
  22. }
  23. },
  24. '#vo_id': {
  25. afterrender: function(f) {
  26. var id = f.getValue();
  27. if (Ext.isEmpty(id) || id == 0) {
  28. me.getMonth();
  29. }
  30. }
  31. },
  32. 'erpSaveButton': {
  33. click: function(btn){
  34. var form = me.getForm(btn);
  35. if(Ext.getCmp(form.codeField).value == null || Ext.getCmp(form.codeField).value == ''){
  36. me.BaseUtil.getRandomNumber();//自动添加编号
  37. }
  38. //保存之前的一些前台的逻辑判定
  39. this.beforeSave();
  40. }
  41. },
  42. //查看来源
  43. 'erpSourceButton': {
  44. afterender: function(btn){
  45. var v = Ext.getCmp('vo_source').value;
  46. if(v == null || v == ''){
  47. btn.hide();
  48. }
  49. },
  50. click: function(){
  51. var id = Ext.getCmp('vo_id').value;
  52. if(id != null && id > 0) {
  53. me.getSource(id);
  54. }
  55. }
  56. },
  57. 'erpExportExcelButton':{
  58. afterrender:function(btn){
  59. btn.exportCaller="Voucher!DetailAss!Export";
  60. var status = Ext.getCmp('vo_statuscode').value;
  61. if(status&&status!='ENTERING'){
  62. btn.hide();
  63. }
  64. }
  65. },
  66. 'filefield[id=excelfile]':{
  67. change: function(field){
  68. warnMsg('确认要重新导入吗?', function(btn){
  69. if(btn == 'yes'){
  70. if(contains(field.value, "\\", true)){
  71. filename = field.value.substring(field.value.lastIndexOf('\\') + 1);
  72. } else {
  73. filename = field.value.substring(field.value.lastIndexOf('/') + 1);
  74. }
  75. field.ownerCt.getForm().submit({
  76. url: basePath + 'common/upload.action?em_code=' + em_code,
  77. waitMsg: "正在解析文件信息",
  78. success: function(fp,o){
  79. if(o.result.error){
  80. showError(o.result.error);
  81. } else {
  82. var filePath=o.result.filepath;
  83. var keyValue=Ext.getCmp('vo_id').getValue();
  84. Ext.Ajax.request({//拿到form的items
  85. url : basePath + 'fa/ars/ImportExcel.action',
  86. params:{
  87. id:keyValue,
  88. fileId:filePath
  89. },
  90. method : 'post',
  91. callback : function(options,success,response){
  92. var result=Ext.decode(response.responseText);
  93. if(result.success){
  94. Ext.Msg.alert('提示','导入成功!');
  95. window.location.reload();
  96. }else{
  97. if(result.exceptionInfo != null){
  98. showError(res.exceptionInfo);return;
  99. }
  100. }
  101. }
  102. });
  103. }
  104. }
  105. });
  106. }
  107. });
  108. }
  109. },
  110. 'erpVoucherFlowButton': {
  111. click: function(){
  112. this.showVoucherFlow();
  113. }
  114. },
  115. 'erpCloseButton': {
  116. click: function(btn){
  117. this.FormUtil.beforeClose(this);
  118. }
  119. },
  120. 'erpCopyButton': {
  121. click: function(btn) {
  122. this.copy();
  123. }
  124. },
  125. 'erpUpdateButton': {
  126. click: function(btn){
  127. this.beforeUpdate();
  128. }
  129. },
  130. 'erpPrintButton': {
  131. click: function(btn) {
  132. var reportName = '';
  133. reportName = "vouclist_rmb";
  134. var condition = '{Voucher.vo_id}=' + Ext.getCmp('vo_id').value + '';
  135. var id = Ext.getCmp('vo_id').value;
  136. me.FormUtil.onwindowsPrint(id, reportName, condition);
  137. }
  138. },
  139. 'erpDeleteButton': {
  140. click: function(btn){
  141. me.FormUtil.onDelete(Ext.getCmp('vo_id').value);
  142. }
  143. },
  144. 'erpAddButton': {
  145. click: function(){
  146. var tab = me.FormUtil.getActiveTab();
  147. me.FormUtil.onAdd(null, '新增凭证资料', 'jsps/fa/ars/voucher.jsp');
  148. setTimeout(function(){
  149. if(tab) {
  150. tab.close();
  151. }
  152. }, 200);
  153. }
  154. },
  155. 'erpSubmitButton': {
  156. afterrender: function(btn){
  157. var status = Ext.getCmp('vo_statuscode');
  158. if(status && status.value != 'ENTERING'){
  159. btn.hide();
  160. }
  161. },
  162. click: function(btn){
  163. me.FormUtil.onSubmit(Ext.getCmp('vo_id').value);
  164. }
  165. },
  166. 'erpResSubmitButton': {
  167. afterrender: function(btn){
  168. var status = Ext.getCmp('vo_statuscode');
  169. if(status && status.value != 'COMMITED'){
  170. btn.hide();
  171. }
  172. },
  173. click: function(btn){
  174. me.FormUtil.onResSubmit(Ext.getCmp('vo_id').value);
  175. }
  176. },
  177. 'erpAuditButton': {
  178. afterrender: function(btn){
  179. var status = Ext.getCmp('vo_statuscode');
  180. if(status && status.value != 'COMMITED'){
  181. btn.hide();
  182. }
  183. },
  184. click: function(btn){
  185. me.FormUtil.onAudit(Ext.getCmp('vo_id').value);
  186. }
  187. },
  188. 'erpResAuditButton': {
  189. afterrender: function(btn){
  190. var status = Ext.getCmp('vo_statuscode');
  191. if(status && status.value != 'AUDITED'){
  192. btn.hide();
  193. }
  194. },
  195. click: function(btn){
  196. me.FormUtil.onResAudit(Ext.getCmp('vo_id').value);
  197. }
  198. },
  199. 'field[name=vo_id]': {
  200. change: function(f){
  201. var grid = Ext.getCmp('flowgrid');
  202. if(grid) {
  203. if(f.value != null && f.value != ''){
  204. grid.getMyData(f.value);
  205. } else {
  206. if(grid.columns && grid.columns.length > 2){
  207. grid.GridUtil.add10EmptyItems(grid);
  208. } else {
  209. grid.getMyData(-1);
  210. }
  211. }
  212. }
  213. var ff = Ext.getCmp('form_disable');
  214. ff.FormUtil.loadNewStore(ff, {caller: ff.caller, condition: "vo_id=" + f.value});
  215. }
  216. },
  217. 'field[name=vo_errstring]': {
  218. afterrender: function(f){
  219. if(f.value != null && f.value != ''){
  220. f.inputEl.setStyle({color: 'OrangeRed'});
  221. } else {
  222. f.setValue('正常');
  223. f.inputEl.setStyle({color: '#B6E2FF'});
  224. f.originalValue = f.value;
  225. }
  226. },
  227. change: function(f){
  228. if(f.value != null && f.value != ''){
  229. f.inputEl.setStyle({color: 'OrangeRed'});
  230. } else {
  231. f.setValue('正常');
  232. f.inputEl.setStyle({color: '#B6E2FF'});
  233. f.originalValue = f.value;
  234. }
  235. }
  236. },
  237. 'field[name=vo_date]': {
  238. change: function(f){
  239. if(f.value == null){
  240. f.setValue(new Date());
  241. }
  242. }
  243. },
  244. 'field[name=vo_yearmonth]': {
  245. afterrender: function(f){
  246. if(f.value == null || f.value == 0){
  247. f.setValue(Ext.Date.format(new Date(), 'Ym'));
  248. }
  249. }
  250. },
  251. 'erpDeleteDetailButton': {
  252. afterrender: function(btn){
  253. //将当前行的 借方/贷方 以及外币借方/外币贷方 互换
  254. btn.ownerCt.add({
  255. text: '借贷调换',
  256. width: 85,
  257. disabled: true,
  258. cls: 'x-btn-blue',
  259. id: 'replace'
  260. });
  261. //当前行的借方 = 其它行的贷方总额-其它行的借方总额
  262. btn.ownerCt.add({
  263. text: '找平',
  264. width: 65,
  265. disabled: true,
  266. cls: 'x-btn-blue',
  267. id: 'level'
  268. });
  269. //复制一个相同的纪录,id不同, 但借方/贷方 互换
  270. btn.ownerCt.add({
  271. text: '冲红',
  272. width: 65,
  273. disabled: true,
  274. cls: 'x-btn-blue',
  275. id: 'bonus'
  276. });
  277. //辅助核算
  278. btn.ownerCt.add({
  279. text: '辅助核算',
  280. width: 85,
  281. disabled: true,
  282. cls: 'x-btn-blue',
  283. id: 'assdetail'
  284. });
  285. },
  286. afterdelete: function(d, r, btn){
  287. //更新凭证状态
  288. Ext.Ajax.request({
  289. url: basePath + 'fa/ars/validVoucher.action',
  290. params: {
  291. id: d.vd_void
  292. },
  293. callback: function(opt, s, r){
  294. var res = Ext.decode(r.responseText);
  295. if(res.success) {
  296. var f = Ext.getCmp('vo_errstring');
  297. f.setValue((res.errstring || ''));
  298. f.dirty = false;
  299. f.originalValue = f.value;
  300. }
  301. }
  302. });
  303. }
  304. },
  305. 'ExportExcelButton':{
  306. afterrender:function(btn){
  307. btn.caller='Voucher!DetailAss!Export';
  308. }
  309. },
  310. 'erpGridPanel2': {
  311. reconfigure: function(grid){
  312. var f = Ext.getCmp('vo_currencytype');
  313. if(f) {
  314. me.changeCurrencyType(f);
  315. }
  316. // 非在录入的凭证,直接将辅助核算显示出来,用特殊样式区别
  317. var f = Ext.getCmp('vo_statuscode');
  318. if(f && f.value != 'ENTERING') {
  319. if(grid.store.data.items.length < 100)
  320. me.showAss(grid);
  321. }
  322. },
  323. storeloaded: function(grid){
  324. var f = Ext.getCmp('vo_currencytype');
  325. if(f) {
  326. me.changeCurrencyType(f);
  327. }
  328. // 非在录入的凭证,直接将辅助核算显示出来,用特殊样式区别
  329. var f = Ext.getCmp('vo_statuscode');
  330. if(f && f.value != 'ENTERING') {
  331. if(grid.store.data.items.length < 100)
  332. me.showAss(grid);
  333. }
  334. },
  335. itemclick: function(selModel, record){
  336. this.GridUtil.onGridItemClick(selModel, record);
  337. var btn = Ext.getCmp('replace');
  338. btn.setDisabled(false);
  339. btn = Ext.getCmp('level');
  340. btn.setDisabled(false);
  341. window.addEventListener('keydown',function(event){
  342. if(event.keyCode == 187){
  343. me.levelButton(Ext.getCmp('level'));
  344. }
  345. },false);
  346. btn = Ext.getCmp('bonus');
  347. btn.setDisabled(false);
  348. btn = Ext.getCmp('assdetail');
  349. var ass = record.data['ca_asstype'];
  350. if(!Ext.isEmpty(ass)){//辅助核算
  351. btn.setDisabled(false);
  352. } else {
  353. btn.setDisabled(true);
  354. }
  355. }
  356. },
  357. 'voucherflowgrid': {
  358. itemclick: function(selModel, record){
  359. var grid = Ext.getCmp('flowgrid');
  360. var index = record.data[grid.detno];
  361. if(index == grid.store.data.items[grid.store.data.items.length-1].index + 1){
  362. me.GridUtil.add10EmptyItems(grid);
  363. }
  364. }
  365. },
  366. 'field[name=vo_currencytype]': {
  367. change: function(c){
  368. me.changeCurrencyType(c);
  369. }
  370. },
  371. /**
  372. * 借调互换
  373. */
  374. 'button[id=replace]': {
  375. click: function(btn){
  376. var grid = btn.ownerCt.ownerCt;
  377. var record = grid.selModel.lastSelected;
  378. if(record){
  379. var v1 = record.data['vd_debit'];//借方
  380. var v2 = record.data['vd_credit'];//贷方
  381. var v3 = record.data['vd_doubledebit'];//原币借方
  382. var v4 = record.data['vd_doublecredit'];//原币贷方
  383. record.set('vd_debit', v2);
  384. record.set('vd_credit', v1);
  385. record.set('vd_doubledebit', v4);
  386. record.set('vd_doublecredit', v3);
  387. }
  388. }
  389. },
  390. /**
  391. * 找平
  392. */
  393. 'button[id=level]': {
  394. click: me.levelButton
  395. },
  396. /**
  397. * 冲红
  398. */
  399. 'button[id=bonus]': {
  400. click: function(btn){
  401. var grid = btn.ownerCt.ownerCt;
  402. var record = grid.selModel.lastSelected;
  403. if(record){
  404. var keys = Ext.Object.getKeys(record.data);
  405. var values = Ext.Object.getValues(record.data);
  406. var o = new Object();
  407. var vd_debit = 0;
  408. var vd_credit = 0;
  409. Ext.each(keys, function(key, index){
  410. if(key != grid.detno && key != grid.keyField){//排序字段和主键字段的值均不复制
  411. var v = values[index];
  412. if(key == 'vd_debit'){
  413. vd_debit = v;
  414. }
  415. if(key == 'vd_credit'){
  416. vd_credit = v;
  417. }
  418. o[key] = v;
  419. }
  420. });
  421. o.vd_debit = vd_credit;//借方/贷方互换
  422. o.vd_credit = vd_debit;
  423. grid.copyData = o;//需要粘贴时,直接取grid.copyData即可
  424. }
  425. }
  426. },
  427. /**
  428. * 辅助核算
  429. */
  430. 'button[id=assdetail]': {
  431. click: function(btn){
  432. var grid = btn.ownerCt.ownerCt;
  433. var record = grid.selModel.lastSelected;
  434. if(record){
  435. var id = me.getRecordIndex(grid, record);
  436. if(Ext.getCmp('win')){
  437. Ext.getCmp('win').show();
  438. Ext.getCmp('win-form').removeAll(true);
  439. Ext.getCmp('win-form').add(me.createForm(grid));
  440. Ext.getCmp('assgrid').cacheAss[id] = record.data['ca_asstype'].toString();
  441. Ext.getCmp('assgrid').asstype = record.data['ca_asstype'].toString().split('#');
  442. Ext.getCmp('assgrid').getMyData(id, caller);
  443. } else {
  444. Ext.create('Ext.window.Window', {
  445. id: 'win',
  446. height: "100%",
  447. width: "80%",
  448. iconCls: 'x-button-icon-set',
  449. closeAction: 'hide',
  450. title: '凭证明细辅助核算',
  451. maximizable : true,
  452. layout : 'anchor',
  453. items: [{
  454. anchor: '100% 30%',
  455. xtype: 'form',
  456. id: 'win-form',
  457. layout : 'column',
  458. autoScroll: true,
  459. labelSeparator : ':',
  460. bodyStyle: 'background:#f1f1f1;',
  461. fieldDefaults : {
  462. labelAlign : "left"
  463. },
  464. items: me.createForm(grid),
  465. buttonAlign: 'center',
  466. buttons: [{
  467. name: 'confirm',
  468. cls: 'x-btn-gray',
  469. text: $I18N.common.button.erpConfirmButton
  470. },{
  471. cls: 'x-btn-gray',
  472. text: $I18N.common.button.erpOffButton,
  473. handler: function(btn){
  474. btn.ownerCt.ownerCt.ownerCt.close();
  475. }
  476. },{
  477. cls: 'x-btn-gray',
  478. text: "上一条",
  479. handler: function(btn){
  480. me.prev(grid);
  481. }
  482. },{
  483. cls: 'x-btn-gray',
  484. text: "下一条",
  485. handler: function(btn){
  486. me.next(grid);
  487. }
  488. }]
  489. },{
  490. anchor: '100% 70%',
  491. xtype: 'detailassgrid',
  492. asstype: record.data['ca_asstype'].toString().split('#')
  493. }]
  494. }).show();
  495. Ext.getCmp('assgrid').getMyData(id, caller);
  496. }
  497. }
  498. }
  499. },
  500. 'button[name=confirm]': {
  501. click: function(btn){
  502. var grid = Ext.getCmp('grid'),
  503. record = grid.selModel.lastSelected;
  504. var data = new Array();
  505. Ext.each(Ext.getCmp('assgrid').store.data.items, function(){
  506. data.push(this.data);
  507. });
  508. if(data.length > 0){
  509. Ext.getCmp('assgrid').cacheStore[me.getRecordIndex(grid, record)] = data;
  510. }
  511. btn.ownerCt.ownerCt.ownerCt.close();
  512. }
  513. },
  514. 'field[name=vd_doubledebit]': {//原币借方
  515. focus : function(f) {
  516. var grid = Ext.getCmp('grid'),
  517. record = grid.selModel.lastSelected,
  518. val = record.get('vd_doublecredit');
  519. if( val != 0 ) {
  520. f.setReadOnly(true);
  521. } else {
  522. f.setReadOnly(false);
  523. }
  524. },
  525. change: function(f){
  526. if(!f.ownerCt && f.value != null && f.value != 0 ){
  527. var grid = Ext.getCmp('grid');
  528. var record = grid.selModel.lastSelected,
  529. rate = record.data['vd_rate'];
  530. if(rate != null && rate > 0){
  531. var val = Number((f.value*rate).toFixed(2));
  532. if(record.data['vd_debit'] != val) {
  533. record.set('vd_debit', val);//本币
  534. }
  535. }
  536. }
  537. }
  538. },
  539. 'field[name=vd_doublecredit]': {//原币贷方
  540. focus : function(f) {
  541. var grid = Ext.getCmp('grid'),
  542. record = grid.selModel.lastSelected,
  543. val = record.get('vd_doubledebit');
  544. if( val != 0 ) {
  545. f.setReadOnly(true);
  546. } else {
  547. f.setReadOnly(false);
  548. }
  549. },
  550. change: function(f){
  551. if(!f.ownerCt && f.value != null && f.value != 0 ){
  552. var record = Ext.getCmp('grid').selModel.lastSelected,
  553. rate = record.data['vd_rate'];
  554. if(rate != null && rate > 0){
  555. var val = Number((f.value*rate).toFixed(2));
  556. if(record.data['vd_credit'] != val) {
  557. record.set('vd_credit', val);//本币
  558. }
  559. }
  560. }
  561. }
  562. },
  563. 'field[name=vd_currency]': {
  564. aftertrigger: function(f){
  565. if(f.value != null && f.value != '' ){
  566. var record = Ext.getCmp('grid').selModel.lastSelected;
  567. if(record.data['vd_rate'] != null && record.data['vd_rate'] > 0){
  568. if(record.data['vd_doubledebit'] != null){
  569. record.set('vd_debit',
  570. (record.data['vd_doubledebit']*record.data['vd_rate']).toFixed(2));//原币计算本币
  571. }
  572. if(record.data['vd_doublecredit'] != null){
  573. record.set('vd_credit',
  574. (record.data['vd_doublecredit']*record.data['vd_rate']).toFixed(2));//原币计算本币
  575. }
  576. }
  577. }
  578. }
  579. },
  580. 'field[name=vd_explanation]': {
  581. specialkey: function(f, e){//按ENTER自动把摘要复制到下一行
  582. if (e.getKey() == e.ENTER) {
  583. if(f.value != null && f.value != '' ){
  584. var grid = Ext.getCmp('grid'),
  585. record = grid.selModel.lastSelected,
  586. idx = grid.store.indexOf(record),
  587. next = grid.store.getAt(idx + 1);
  588. if(next) {
  589. var v = next.get('vd_explanation');
  590. if(Ext.isEmpty(v))
  591. next.set('vd_explanation', f.value);
  592. }
  593. }
  594. }
  595. },
  596. change: function(f) {
  597. if(f.value == '=') {
  598. var grid = Ext.getCmp('grid'),
  599. record = grid.selModel.lastSelected,
  600. idx = grid.store.indexOf(record),
  601. prev = grid.store.getAt(idx - 1);
  602. if(prev) {
  603. var v = prev.get('vd_explanation');
  604. if(!Ext.isEmpty(v))
  605. f.setValue(v);
  606. }
  607. }
  608. }
  609. },
  610. 'field[name=vd_debit]': {
  611. focus : function(f) {
  612. var grid = Ext.getCmp('grid'),
  613. record = grid.selModel.lastSelected,
  614. val = record.get('vd_credit');
  615. if( val != 0 ) {
  616. f.setReadOnly(true);
  617. } else {
  618. f.setReadOnly(false);
  619. }
  620. },
  621. specialkey: function(f, e){//按ENTER自动把摘要复制到下一行
  622. if (e.getKey() == e.ENTER) {
  623. var grid = Ext.getCmp('grid'),
  624. record = grid.selModel.lastSelected,
  625. val = record.get('vd_explanation'),
  626. idx = grid.store.indexOf(record),
  627. next = grid.store.getAt(idx + 1);
  628. if(!Ext.isEmpty(val)) {
  629. if(next) {
  630. var v = next.get('vd_explanation');
  631. if(Ext.isEmpty(v))
  632. next.set('vd_explanation', val);
  633. }
  634. }
  635. }
  636. }
  637. },
  638. 'field[name=vd_credit]': {
  639. focus : function(f) {
  640. var grid = Ext.getCmp('grid'),
  641. record = grid.selModel.lastSelected,
  642. val = record.get('vd_debit');
  643. if( val != 0 ) {
  644. f.setReadOnly(true);
  645. } else {
  646. f.setReadOnly(false);
  647. }
  648. },
  649. specialkey: function(f, e){//按ENTER自动把摘要复制到下一行
  650. if (e.getKey() == e.ENTER) {
  651. var grid = Ext.getCmp('grid'),
  652. record = grid.selModel.lastSelected,
  653. val = record.get('vd_explanation'),
  654. idx = grid.store.indexOf(record),
  655. next = grid.store.getAt(idx + 1);
  656. if(!Ext.isEmpty(val)) {
  657. if(next) {
  658. var v = next.get('vd_explanation');
  659. if(Ext.isEmpty(v))
  660. next.set('vd_explanation', val);
  661. }
  662. }
  663. }
  664. }
  665. },
  666. 'dbfindtrigger[name=vd_catecode]': {
  667. aftertrigger: function(f){
  668. var grid = Ext.getCmp('grid'),
  669. record = grid.selModel.lastSelected;
  670. var ass = record.data['ca_asstype'];
  671. var btn = Ext.getCmp('assdetail');
  672. if(!Ext.isEmpty(ass)){
  673. btn.setDisabled(false);
  674. } else {
  675. btn.setDisabled(true);
  676. }
  677. var idx = me.getRecordIndex(grid, record);
  678. if(Ext.getCmp('assgrid') && Ext.getCmp('assgrid').cacheAss[idx] != ass){//科目改变,对应的辅助核算也置空
  679. Ext.getCmp('assgrid').cacheAss[idx] = ass;
  680. Ext.getCmp('assgrid').cacheStore[idx] = null;
  681. }
  682. }/*,
  683. afterrender: function(f){
  684. f.onTriggerClick = function(){
  685. me.showCateTree(f);
  686. };
  687. }*/
  688. },
  689. 'cateTreeDbfindTrigger[name=vd_catecode]': {
  690. aftertrigger: function(f, d){
  691. var grid = Ext.getCmp('grid'),
  692. record = grid.selModel.lastSelected;
  693. var ass = d[0].raw.data['ca_asstype'];
  694. record.set('ca_asstype', ass);
  695. var btn = Ext.getCmp('assdetail');
  696. if(!Ext.isEmpty(ass)){
  697. btn.setDisabled(false);
  698. } else {
  699. btn.setDisabled(true);
  700. }
  701. var idx = me.getRecordIndex(grid, record);
  702. if(Ext.getCmp('assgrid') && Ext.getCmp('assgrid').cacheAss[idx] != ass){//科目改变,对应的辅助核算也置空
  703. Ext.getCmp('assgrid').cacheAss[idx] = ass;
  704. Ext.getCmp('assgrid').cacheStore[idx] = null;
  705. }
  706. },
  707. afterrender: function(f){
  708. f.onTriggerClick = function(){
  709. me.showCateTree(f);
  710. };
  711. }
  712. }
  713. });
  714. },
  715. getForm: function(btn){
  716. return btn.ownerCt.ownerCt;
  717. },
  718. getRecordIndex: function(grid, record) {
  719. var me = this, id = record.get(grid.keyField);
  720. if(!id || id == 0) {
  721. me.rowCounter = me.rowCounter || 0;
  722. id = --me.rowCounter;
  723. record.set(grid.keyField, id);
  724. }
  725. return id;
  726. },
  727. changeCurrencyType: function(c){
  728. var grid = Ext.getCmp('grid');
  729. if(c.checked){
  730. Ext.each(grid.columns, function(cn){
  731. if(cn.dataIndex == 'vd_doubledebit' || cn.dataIndex == 'vd_doublecredit'){
  732. cn.width = 110;
  733. cn.setVisible(true);
  734. }
  735. if(cn.dataIndex == 'vd_currency' || cn.dataIndex == 'vd_rate'){
  736. cn.width = 60;
  737. cn.setVisible(true);
  738. }
  739. if(cn.dataIndex == 'vd_debit'){
  740. cn.setText('本币借方');
  741. }
  742. if(cn.dataIndex == 'vd_credit'){
  743. cn.setText('本币贷方');
  744. }
  745. });
  746. } else {
  747. Ext.each(grid.columns, function(cn){
  748. if(cn.dataIndex == 'vd_currency' || cn.dataIndex == 'vd_rate'
  749. || cn.dataIndex == 'vd_doubledebit' || cn.dataIndex == 'vd_doublecredit'){
  750. cn.setVisible(false);
  751. }
  752. if(cn.dataIndex == 'vd_debit'){
  753. cn.setText('借方');
  754. }
  755. if(cn.dataIndex == 'vd_credit'){
  756. cn.setText('贷方');
  757. }
  758. });
  759. }
  760. },
  761. beforeSave: function(){
  762. var me = this;
  763. var form = Ext.getCmp('form');
  764. if(! me.FormUtil.checkForm()){
  765. return;
  766. }
  767. if(Ext.getCmp(form.keyField).value == null || Ext.getCmp(form.keyField).value == ''){
  768. me.FormUtil.getSeqId(form);
  769. }
  770. var detail = Ext.getCmp('grid');
  771. var flow = Ext.getCmp('flowgrid');
  772. var ass = Ext.getCmp('assgrid');
  773. var param2 = new Array();
  774. if(flow) {
  775. param2 = me.GridUtil.getGridStore(flow);
  776. }
  777. var param3 = ass == null ? '[]' : Ext.encode(ass.getEffectData());
  778. Ext.each(detail.store.data.items, function(item, idx){
  779. if(item.data.vd_id == null || item.data.vd_id == 0){
  780. item.data.vd_id = -idx;
  781. }
  782. });
  783. var param1 = me.GridUtil.getGridStore(detail);
  784. if(detail.necessaryField.length > 0 && (param1.length == 0)){
  785. showError($I18N.common.grid.emptyDetail);
  786. return;
  787. }
  788. var ex = new Array(),d;
  789. Ext.each(param1, function(){//摘要未填写
  790. d = Ext.decode(this);
  791. if(Ext.isEmpty(d.vd_explanation)) {
  792. ex.push(d.vd_detno);
  793. }
  794. });
  795. if(ex.length > 0) {
  796. warnMsg("摘要未填写,序号:" + ex.join(',') + " 是否继续保存?", function(btn){
  797. if(btn == 'yes') {
  798. me.onSave(form, param1, param2, param3);;
  799. }
  800. });
  801. } else {
  802. me.onSave(form, param1, param2, param3);
  803. }
  804. },
  805. onSave: function(form, param1, param2, param3) {
  806. var me = this;
  807. param1 = param1 == null ? [] : "[" + param1.toString().replace(/\\/g,"%") + "]";
  808. param2 = param2 == null ? [] : "[" + param2.toString().replace(/\\/g,"%") + "]";
  809. param3 = param3 == null ? [] : param3.toString().replace(/\\/g,"%");
  810. if(form.getForm().isValid()){
  811. Ext.each(form.items.items, function(item){
  812. if(item.xtype == 'numberfield'){
  813. if(item.value == null || item.value == ''){
  814. item.setValue(0);
  815. }
  816. }
  817. });
  818. var r = form.getValues();
  819. r.vo_currencytype = Ext.getCmp('vo_currencytype').value ? -1 : 0;
  820. r.vo_errstring = r.vo_errstring == '正常' ? '' : r.vo_errstring;
  821. me.FormUtil.save(r, param1, param2, param3);
  822. }else{
  823. me.FormUtil.checkForm();
  824. }
  825. },
  826. beforeUpdate: function(){
  827. var me = this;
  828. var form = Ext.getCmp('form');
  829. if(! me.FormUtil.checkForm()){
  830. return;
  831. }
  832. if(Ext.getCmp(form.keyField).value == null || Ext.getCmp(form.keyField).value == ''){
  833. me.FormUtil.getSeqId(form);
  834. }
  835. var detail = Ext.getCmp('grid');
  836. var flow = Ext.getCmp('flowgrid');
  837. var ass = Ext.getCmp('assgrid');
  838. Ext.each(detail.store.data.items, function(item, idx){
  839. if(item.data.vd_id == null || item.data.vd_id == 0){
  840. item.data.vd_id = -idx;
  841. }
  842. });
  843. var param1 = me.GridUtil.getGridStore(detail);
  844. var param2 = new Array();
  845. if(flow) {
  846. param2 = me.GridUtil.getGridStore(flow);
  847. }
  848. var param3 = ass == null ? '[]' : Ext.encode(ass.getEffectData());
  849. if(me.FormUtil.checkFormDirty(form) == '' && detail.necessaryField.length > 0 && (param1.length == 0) &&
  850. (!flow || (flow.necessaryField.length > 0 && (param2.length == 0)))
  851. && (param3.length <= 2)){
  852. showError($I18N.common.grid.emptyDetail);
  853. return;
  854. } else {
  855. param1 = param1 == null ? [] : "[" + param1.toString().replace(/\\/g,"%") + "]";
  856. param2 = param2 == null ? [] : "[" + param2.toString().replace(/\\/g,"%") + "]";
  857. param3 = param3 == null ? [] : param3.toString().replace(/\\/g,"%");
  858. if(form.getForm().isValid()){
  859. Ext.each(form.items.items, function(item){
  860. if(item.xtype == 'numberfield'){
  861. if(item.value == null || item.value == ''){
  862. item.setValue(0);
  863. }
  864. }
  865. });
  866. var r = form.getValues();
  867. r.vo_currencytype = Ext.getCmp('vo_currencytype').value ? -1 : 0;
  868. r.vo_errstring = r.vo_errstring == '正常' ? '' : r.vo_errstring;
  869. me.FormUtil.update(r, param1, param2, param3);
  870. }else{
  871. me.FormUtil.checkForm();
  872. }
  873. }
  874. },
  875. createForm: function(grid){
  876. var record = grid.selModel.lastSelected;
  877. var data = new Object();
  878. if(record){
  879. data = record.data;
  880. }
  881. var items = new Array();
  882. var item;
  883. Ext.each(grid.columns, function(c){
  884. item = new Object();
  885. item.id = c.dataIndex;
  886. item.name = c.dataIndex;
  887. item.fieldLabel = c.text || c.header;
  888. item.value = data[c.dataIndex];
  889. item.columnWidth = .33;
  890. item.readOnly = true;
  891. item.xtype = 'textfield';
  892. item.fieldStyle = 'background:#f0f0f0;border: 1px solid #8B8970';
  893. item.cls = 'form-field-border';
  894. if(c.hidden){
  895. item.xtype = 'hidden';
  896. item.cls = "";
  897. }
  898. if(c.dataIndex == grid.detno){
  899. item.fieldStyle = 'background:#e0f0f0;font-weight:bold;border: 1px solid #8B8970';
  900. }
  901. items.push(item);
  902. });
  903. return items;
  904. },
  905. /**
  906. * 明细辅助核算的上一条
  907. */
  908. prev: function(grid, record){
  909. record = record || grid.selModel.lastSelected;
  910. if(record){
  911. //先保存当前数据
  912. var me = this, data = new Array(), row = grid.store.indexOf(record);
  913. Ext.each(Ext.getCmp('assgrid').store.data.items, function(){
  914. data.push(this.data);
  915. });
  916. if(data.length > 0){
  917. Ext.getCmp('assgrid').cacheStore[me.getRecordIndex(grid, record)] = data;
  918. }
  919. //递归查找上一条,并取到数据
  920. var d = grid.store.getAt(row - 1);
  921. if(d){
  922. Ext.getCmp('win-form').getForm().setValues(d.data);
  923. var idx = me.getRecordIndex(grid, d);
  924. Ext.getCmp('assgrid').cacheAss[idx] = d.data['ca_asstype'];
  925. Ext.getCmp('assgrid').asstype = Ext.isEmpty(d.data['ca_asstype']) ?
  926. new Array() : d.data['ca_asstype'].toString().split('#');
  927. Ext.getCmp('assgrid').getMyData(idx, caller);
  928. grid.selModel.select(d);
  929. } else {
  930. if(row - 1 > 0){
  931. this.prev(grid, d);
  932. }
  933. }
  934. }
  935. },
  936. /**
  937. * 明细辅助核算的下一条
  938. */
  939. next: function(grid, record){
  940. record = record || grid.selModel.lastSelected;
  941. if(record){
  942. //先保存当前数据
  943. var me = this, data = new Array(), row = grid.store.indexOf(record);
  944. Ext.each(Ext.getCmp('assgrid').store.data.items, function(){
  945. data.push(this.data);
  946. });
  947. if(data.length > 0){
  948. Ext.getCmp('assgrid').cacheStore[me.getRecordIndex(grid, record)] = data;
  949. }
  950. //递归查找下一条,并取到数据
  951. var d = grid.store.getAt(row + 1);
  952. if(d){
  953. Ext.getCmp('win-form').getForm().setValues(d.data);
  954. var idx = me.getRecordIndex(grid, d);
  955. Ext.getCmp('assgrid').cacheAss[idx] = d.data['ca_asstype'];
  956. Ext.getCmp('assgrid').asstype = Ext.isEmpty(d.data['ca_asstype']) ?
  957. new Array() : d.data['ca_asstype'].toString().split('#');
  958. Ext.getCmp('assgrid').getMyData(idx, caller);
  959. grid.selModel.select(d);
  960. } else {
  961. if(row + 1 < grid.store.data.items.length){
  962. this.next(grid, d);
  963. }
  964. }
  965. }
  966. },
  967. showVoucherFlow: function(){
  968. var win = Ext.getCmp('flow_win');
  969. var voucherid = Ext.getCmp('vo_id').value;
  970. if(!win) {
  971. Ext.create('Ext.Window', {
  972. id: 'flow_win',
  973. height: "100%",
  974. width: "80%",
  975. iconCls: 'x-button-icon-set',
  976. closeAction: 'hide',
  977. autoShow: true,
  978. title: '现金流',
  979. maximizable : true,
  980. layout : 'anchor',
  981. items: [{
  982. anchor: '100% 100%',
  983. xtype: 'voucherflowgrid',
  984. listeners: {
  985. afterrender: function(grid){
  986. if(formCondition == null || formCondition.toString().trim() == ''){
  987. grid.getMyData(-1);
  988. } else {
  989. grid.getMyData(voucherid);
  990. }
  991. }
  992. }
  993. }],
  994. buttonAlign: 'center',
  995. buttons: [{
  996. text: $I18N.common.button.erpConfirmButton,
  997. iconCls: 'x-button-icon-save',
  998. cls: 'x-btn-gray',
  999. handler: function(btn){
  1000. btn.ownerCt.ownerCt.close();
  1001. }
  1002. }]
  1003. });
  1004. } else {
  1005. win.show();
  1006. }
  1007. },
  1008. /**
  1009. * 复制凭证
  1010. */
  1011. copy: function(){
  1012. var form = Ext.getCmp('form');
  1013. var v = form.down('#vo_id').value;
  1014. if(v > 0) {
  1015. form.setLoading(true);
  1016. Ext.Ajax.request({
  1017. url: basePath + 'fa/ars/copyVoucher.action',
  1018. params: {
  1019. id: v
  1020. },
  1021. callback: function(opt, s, r){
  1022. form.setLoading(false);
  1023. var res = Ext.decode(r.responseText);
  1024. if(res.voucher) {
  1025. showMessage('提示', '复制成功!<a href="javascript:openUrl(\'jsps/fa/ars/voucher.jsp?formCondition=vo_idIS' +
  1026. + res.voucher.vo_id + '&gridCondition=vd_voidIS' + res.voucher.vo_id +
  1027. '\')">\n凭证号:&lt;' + res.voucher.vo_number +
  1028. '&gt;\n流水号:&lt;' + res.voucher.vo_code + '&gt;</a>');
  1029. } else {
  1030. showError(res.exceptionInfo);
  1031. }
  1032. }
  1033. });
  1034. }
  1035. },
  1036. getSource: function(id) {
  1037. var me = this;
  1038. Ext.Ajax.request({
  1039. url : basePath + 'common/getFieldsData.action',
  1040. params: {
  1041. caller: 'VoucherBill',
  1042. fields: 'vb_billcode,vb_vscode',
  1043. condition: 'vb_void=' + id
  1044. },
  1045. method : 'post',
  1046. callback : function(options,success,response){
  1047. var localJson = new Ext.decode(response.responseText);
  1048. if(localJson.exceptionInfo){
  1049. showError(localJson.exceptionInfo);
  1050. } else if(localJson.success){
  1051. if(localJson.data != null && localJson.data.vb_vscode != null){
  1052. me.showSourceList(localJson.data.vb_vscode, localJson.data.vb_billcode);
  1053. } else {
  1054. showMessage('提示', '当前凭证没有来源信息!');
  1055. }
  1056. }
  1057. }
  1058. });
  1059. },
  1060. showSourceList: function(vscode, pri) {
  1061. var me = this, cls = Ext.getCmp('vo_source').value,
  1062. cfg = me.getSourceConfig(vscode, cls),
  1063. merge = pri.indexOf(',') > 0 || /SELECT.*FROM.*/.test(pri.toUpperCase());
  1064. Ext.Ajax.request({
  1065. url : basePath + 'common/getFieldsData.action',
  1066. params: {
  1067. caller: 'VoucherStyle',
  1068. fields: 'vs_datalist,vs_prikey1,vs_pritable,vs_classfield',
  1069. condition: 'vs_code=\'' + vscode + '\''
  1070. },
  1071. method : 'post',
  1072. callback : function(opt, s, res){
  1073. var r = new Ext.decode(res.responseText);
  1074. if (r.exceptionInfo) {
  1075. showError(r.exceptionInfo);
  1076. } else if(r.success) {
  1077. if (r.data != null) {
  1078. if (merge || !cfg.url)
  1079. me.showSourceGrid(vscode, r.data.vs_datalist, r.data.vs_prikey1,
  1080. r.data.vs_pritable, r.data.vs_classfield, cls, pri, cfg);
  1081. else
  1082. me.linkSource(vscode, r.data.vs_prikey1, r.data.vs_pritable,
  1083. r.data.vs_classfield, cls, pri, cfg);
  1084. } else {
  1085. showMessage('提示', '当前凭证没有来源信息!', 3000);
  1086. }
  1087. }
  1088. }
  1089. });
  1090. },
  1091. linkSource : function(vscode, key, tab, clsfield, cls, pri, cfg) {
  1092. var me = this, url = cfg.url, k = cfg.keyfield, m = cfg.mainfield;
  1093. if (url) {
  1094. Ext.Ajax.request({
  1095. url : basePath + 'common/getFieldData.action',
  1096. async: false,
  1097. params: {
  1098. caller: tab,
  1099. field: k,
  1100. condition: key + '=' + pri + ' and ' + clsfield + '=\'' + cls + '\''
  1101. },
  1102. method : 'post',
  1103. callback : function(opt, s, res){
  1104. var r = new Ext.decode(res.responseText);
  1105. if(r.exceptionInfo){
  1106. showError(r.exceptionInfo);
  1107. } else if(r.success && r.data){
  1108. url += url.indexOf('?') > 0 ? '&' : '?';
  1109. me.FormUtil.onAdd(null, '来源', url + 'formCondition=' + k + 'IS' +
  1110. r.data + '&gridCondition=' + m + 'IS' + r.data);
  1111. }
  1112. }
  1113. });
  1114. }
  1115. },
  1116. showSourceGrid : function(vscode, cal, key, tab, clsfield, cls, pri, cfg) {
  1117. var me = this,
  1118. condition = key + ' in (' + pri + ')';
  1119. if('PRODINOUT' == vscode) {
  1120. condition += ' and pi_class=\'' + cls + '\'';
  1121. }
  1122. var w = Ext.isIE ? 800 : '80%',
  1123. h = Ext.isIE ? 500 : '100%';
  1124. var win = Ext.create('Ext.Window', {
  1125. width: w,
  1126. height: h,
  1127. title: '凭证来源',
  1128. layout: 'anchor',
  1129. items: [],
  1130. buttonAlign: 'center',
  1131. buttons: [{
  1132. text: $I18N.common.button.erpExportButton,
  1133. cls: 'x-btn-blue',
  1134. iconCls: 'x-button-icon-ecel',
  1135. handler: function(btn) {
  1136. me.BaseUtil.exportGrid(btn.ownerCt.ownerCt.down('grid'));
  1137. btn.ownerCt.ownerCt.close();
  1138. }
  1139. },{
  1140. text: $I18N.common.button.erpCloseButton,
  1141. cls: 'x-btn-blue',
  1142. iconCls: 'x-button-icon-close',
  1143. handler: function(btn) {
  1144. btn.ownerCt.ownerCt.close();
  1145. }
  1146. }]
  1147. }).show();
  1148. var grid = Ext.create('Ext.grid.Panel', {
  1149. anchor: '100% 100%',
  1150. columnLines: true,
  1151. columns: [],
  1152. store: []
  1153. });
  1154. win.add(grid);
  1155. me.GridUtil.getGridColumnsAndStore(grid, 'common/singleGridPanel.action', {caller: cal, condition: condition});
  1156. grid.on('itemclick', function(s, r){
  1157. me.linkSource(vscode, key, tab, clsfield, cls, "\'" + r.get(key) + "\'", cfg);
  1158. });
  1159. },
  1160. getSourceConfig : function(vscode, vdclass) {
  1161. var url = null, keyfield = null, mainfield = null;
  1162. if(vscode == 'RecBalance') {
  1163. keyfield = 'rb_id';
  1164. mainfield = 'rbd_rbid';
  1165. switch (vdclass) {
  1166. case '应收冲应付':
  1167. url = 'jsps/fa/ars/recBalanceAP.jsp?whoami=RecBalance!RRCW';
  1168. break;
  1169. case '收款单':
  1170. url = 'jsps/fa/ars/recBalance.jsp?whoami=RecBalance!PBIL';
  1171. break;
  1172. case '冲应收款':
  1173. url = 'jsps/fa/ars/recBalance.jsp?whoami=RecBalance!IMRE';
  1174. break;
  1175. case '预收冲应收':
  1176. url = 'jsps/fa/ars/recBalancePRDetail.jsp?whoami=RecBalance!PTAR';
  1177. break;
  1178. case '应收票据':
  1179. url = 'jsps/fa/gs/billAR.jsp';
  1180. break;
  1181. case '应收款转销':
  1182. url = 'jsps/fa/ars/recBalance.jsp?whoami=RecBalance!ARRM';
  1183. break;
  1184. }
  1185. } else if(vscode == 'PreRec') {
  1186. keyfield = 'pr_id';
  1187. mainfield = 'prd_prid';
  1188. switch (vdclass) {
  1189. case '预收款':
  1190. url = 'jsps/fa/ars/preRec.jsp?whoami=PreRec!Ars!DERE';
  1191. break;
  1192. case '预收退款':
  1193. url = 'jsps/fa/ars/preRec.jsp?whoami=PreRec!Ars!DEPR';
  1194. break;
  1195. }
  1196. } else if(vscode == 'PrePay') {
  1197. keyfield = 'pp_id';
  1198. mainfield = 'ppd_ppid';
  1199. switch (vdclass) {
  1200. case '预付款':
  1201. url = 'jsps/fa/arp/prepay.jsp?whoami=PrePay!Arp!PAMT';
  1202. break;
  1203. case '预付退款':
  1204. url = 'jsps/fa/arp/prepay.jsp?whoami=PrePay!Arp!PAPR';
  1205. break;
  1206. }
  1207. } else if(vscode == 'PrePaid') {
  1208. keyfield = 'pp_id';
  1209. mainfield = 'pd_ppid';
  1210. switch (vdclass) {
  1211. case '摊销':
  1212. url = 'jsps/fa/gla/prePaid.jsp';
  1213. break;
  1214. }
  1215. } else if(vscode == 'PurcFee') {
  1216. keyfield = 'pi_id';
  1217. mainfield = 'pd_piid';
  1218. switch (vdclass) {
  1219. case '采购验收单':
  1220. url = 'jsps/scm/reserve/prodinout.jsp?whoami=ProdInOut!PurcCheckin';
  1221. break;
  1222. case '采购验退单':
  1223. url = 'jsps/scm/reserve/prodinout.jsp?whoami=ProdInOut!PurcCheckout';
  1224. break;
  1225. }
  1226. } else if(vscode == 'PayBalance') {
  1227. keyfield = 'pb_id';
  1228. mainfield = 'pbd_pbid';
  1229. switch (vdclass) {
  1230. case '冲应付款':
  1231. url = 'jsps/fa/arp/paybalance.jsp?whoami=PayBalance!CAID';
  1232. break;
  1233. case '应付款转销':
  1234. url = 'jsps/fa/arp/paybalance.jsp?whoami=PayBalance!APRM';
  1235. break;
  1236. case '预付冲应付':
  1237. url = 'jsps/fa/arp/payBalancePRDetail.jsp?whoami=PayBalance!Arp!PADW';
  1238. break;
  1239. case '付款单':
  1240. url = 'jsps/fa/arp/paybalance.jsp?whoami=PayBalance';
  1241. break;
  1242. case '应付冲应收':
  1243. url = 'jsps/fa/arp/paybalance.jsp?whoami=PayBalance!DWRC';
  1244. break;
  1245. }
  1246. } else if(vscode == 'AccountRegiste') {
  1247. keyfield = 'ar_id';
  1248. mainfield = 'ard_arid';
  1249. url = 'jsps/fa/gs/accountRegister.jsp?whoami=AccountRegister!Bank';
  1250. } else if(vscode == 'Estimate') {
  1251. keyfield = 'es_id';
  1252. mainfield = 'esd_esid';
  1253. url = 'jsps/fa/arp/estimate.jsp?whoami=Estimate';
  1254. } else if(vscode == 'GoodsSend') {
  1255. keyfield = 'gs_id';
  1256. mainfield = 'gsd_gsid';
  1257. url = 'jsps/fa/ars/goodsSend.jsp?whoami=GoodsSendGs';
  1258. } else if(vscode == 'ARBill') {
  1259. keyfield = 'ab_id';
  1260. mainfield = 'abd_abid';
  1261. switch (vdclass) {
  1262. case '其它应收单':
  1263. url = 'jsps/fa/ars/arbill.jsp?whoami=ARBill!OTRS';
  1264. break;
  1265. case '应收发票':
  1266. url = 'jsps/fa/ars/arbill.jsp?whoami=ARBill!IRMA';
  1267. break;
  1268. }
  1269. } else if(vscode == 'APBill') {
  1270. keyfield = 'ab_id';
  1271. mainfield = 'abd_abid';
  1272. switch (vdclass) {
  1273. case '其它应付单':
  1274. url = 'jsps/fa/ars/apbill.jsp?whoami=APBill!OTDW';
  1275. break;
  1276. case '应付发票':
  1277. url = 'jsps/fa/ars/apbill.jsp?whoami=APBill!CWIM';
  1278. break;
  1279. }
  1280. }
  1281. return {url : url, keyfield : keyfield, mainfield : mainfield};
  1282. },
  1283. showAss: function(grid) {
  1284. var data = new Array(), ass = '';
  1285. grid.store.each(function(item, idx){
  1286. ass = item.data['ca_asstype'];
  1287. if(!Ext.isEmpty(ass)){
  1288. data.push(item.get('vd_id'));
  1289. }
  1290. });
  1291. if(data.length > 0) {
  1292. Ext.Ajax.request({
  1293. url: basePath + 'common/getFieldsDatas.action',
  1294. params: {
  1295. caller: 'VoucherDetailAss',
  1296. fields: 'vds_vdid,vds_asstype,vds_asscode,vds_assname',
  1297. condition: 'vds_vdid in (' + Ext.Array.concate(data, ',') + ')'
  1298. },
  1299. callback: function(opt, s, r) {
  1300. if(s) {
  1301. var rs = Ext.decode(r.responseText);
  1302. if(rs.success){
  1303. var ds = Ext.decode(rs.data), x, idx = 0;
  1304. for(var i in ds) {
  1305. x = ds[i];
  1306. for(var j in data) {
  1307. if(data[j] == x.VDS_VDID) {
  1308. idx = grid.store.find('vd_id', data[j]);
  1309. grid.store.insert(idx + 1, {
  1310. vd_explanation: '<div align="right">' + x.VDS_ASSTYPE + '</div>',
  1311. vd_catecode: x.VDS_ASSCODE,
  1312. ca_description: x.VDS_ASSNAME,
  1313. isass: true
  1314. });
  1315. }
  1316. }
  1317. }
  1318. }
  1319. }
  1320. }
  1321. });
  1322. }
  1323. },
  1324. levelButton:function (btn){
  1325. var grid = btn.ownerCt.ownerCt;
  1326. var record = grid.selModel.lastSelected;
  1327. if(record){
  1328. var items = grid.store.data.items;
  1329. var f = Ext.getCmp('vo_currencytype');
  1330. var debit = 0;
  1331. var credit = 0;
  1332. var rate = record.get('vd_rate');
  1333. rate = rate == 0 ? 1 : rate;
  1334. Ext.each(items, function(item, index){
  1335. if(item.id != record.id){
  1336. debit += item.get('vd_debit');
  1337. credit += item.get('vd_credit');
  1338. }
  1339. });
  1340. if(credit > debit) {
  1341. record.set('vd_debit', credit - debit);
  1342. if(f.checked) {
  1343. record.set('vd_doubledebit', Number(((credit - debit)/rate).toFixed(4)));
  1344. }
  1345. } else {
  1346. record.set('vd_credit', debit - credit);
  1347. if(f.checked) {
  1348. record.set('vd_doublecredit', Number(((debit - credit)/rate).toFixed(4)));
  1349. }
  1350. }
  1351. }
  1352. },
  1353. showCateTree: function(f) {
  1354. var cawin = Ext.getCmp('cawin');
  1355. if(!cawin) {
  1356. cawin = new Ext.window.Window({
  1357. id : 'cawin',
  1358. title: '科目查找',
  1359. height: "100%",
  1360. width: "80%",
  1361. maximizable : true,
  1362. buttonAlign : 'center',
  1363. layout : 'anchor',
  1364. modal:true,
  1365. items: [{
  1366. tag : 'iframe',
  1367. frame : true,
  1368. anchor : '100% 100%',
  1369. layout : 'fit',
  1370. html : '<iframe id="iframe_dbfind_'+caller+"_"+f.name+"="+f.value+'" src="'+basePath+'jsps/common/catetreepaneldbfind.jsp?key='+f.name+"&dbfind=&caller1="+caller+"&keyValue="+f.value+"&trigger="+f.id+'" height="100%" width="100%" frameborder="0" scrolling="no"></iframe>'
  1371. }],
  1372. buttons : [{
  1373. text : '确 认',
  1374. iconCls: 'x-button-icon-save',
  1375. cls: 'x-btn-gray',
  1376. handler : function(btn){
  1377. var contentwindow = Ext.getCmp('cawin').body.dom.getElementsByTagName('iframe')[0].contentWindow;
  1378. var tree = contentwindow.Ext.getCmp('tree-panel');
  1379. var data = tree.getChecked(), record = Ext.getCmp('grid').selModel.lastSelected;
  1380. var dbfinds = Ext.getCmp('grid').dbfinds;
  1381. if(dbfinds != null && record){
  1382. Ext.each(dbfinds, function(dbfind,index){
  1383. record.set(dbfind.field, data[0].raw.data[dbfind.dbGridField]);
  1384. });
  1385. }
  1386. f.fireEvent('aftertrigger', f, data);
  1387. btn.ownerCt.ownerCt.hide();
  1388. }
  1389. },{
  1390. text : '关 闭',
  1391. iconCls: 'x-button-icon-close',
  1392. cls: 'x-btn-gray',
  1393. handler : function(btn){
  1394. btn.ownerCt.ownerCt.hide();
  1395. }
  1396. }]
  1397. });
  1398. }
  1399. cawin.show();
  1400. },
  1401. getMonth: function() {
  1402. Ext.Ajax.request({
  1403. url: basePath + 'fa/getMonth.action',
  1404. params: {
  1405. votype: 'GL'
  1406. },
  1407. callback: function(opt, s, r) {
  1408. var rs = Ext.decode(r.responseText);
  1409. if(rs.data) {
  1410. Ext.getCmp('vo_yearmonth').setValue(rs.data.PD_DETNO);
  1411. Ext.getCmp('vo_date').setValue(new Date(rs.data.PD_ENDDATE));
  1412. }
  1413. }
  1414. });
  1415. }
  1416. });