GeneralLedger.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.fa.gla.GeneralLedger', {
  3. extend: 'Ext.app.Controller',
  4. BaseUtil: Ext.create('erp.util.BaseUtil'),
  5. views: ['core.trigger.DbfindTrigger', 'fa.gla.GeneralLedger', 'fa.gla.Ledger', 'core.form.MonthDateField',
  6. 'core.form.ConMonthDateField', 'core.form.YearDateField', 'core.trigger.CateTreeDbfindTrigger'],
  7. init:function(){
  8. var me = this;
  9. this.control({
  10. 'button[id=query]': {
  11. afterrender: function(btn) {
  12. setTimeout(function(){
  13. me.showFilterPanel(btn);
  14. me.getCateSetting();
  15. }, 200);
  16. },
  17. click: function(btn) {
  18. me.showFilterPanel(btn);
  19. }
  20. },
  21. 'ledger': {
  22. itemclick: function(selModel, record) {
  23. me.loadDetail(selModel.ownerCt.store, record);
  24. }
  25. },
  26. 'button[name=export]': {
  27. click: function() {
  28. var grid = Ext.getCmp('ledger');
  29. me.BaseUtil.exportGrid(grid, '总账');
  30. }
  31. },
  32. '#ak_asscode': {
  33. change: function(f) {
  34. if(!Ext.isEmpty(f.value)) {
  35. var ch = f.up('window').down('#chkall');
  36. if(!ch.value) {
  37. ch.setValue(true);
  38. }
  39. }
  40. }
  41. }
  42. });
  43. },
  44. showFilterPanel: function(btn) {
  45. var filter = Ext.getCmp(btn.getId() + '-filter');
  46. if(!filter) {
  47. filter = this.createFilterPanel(btn);
  48. }
  49. filter.show();
  50. },
  51. hideFilterPanel: function(btn) {
  52. var filter = Ext.getCmp(btn.getId() + '-filter');
  53. if(filter) {
  54. filter.hide();
  55. }
  56. },
  57. query: function(cond) {
  58. var grid = Ext.getCmp('ledger');
  59. if(cond.cm_yearmonth.end - cond.cm_yearmonth.begin > 1) {// 期间跨度大于2个月
  60. if(!cond.ca_code) {
  61. showError('当前期间跨度较大,请选择科目号.');
  62. return;
  63. }
  64. }
  65. grid.setLoading(true);
  66. Ext.Ajax.request({
  67. url: basePath + 'fa/ars/getGeneralLedger.action',
  68. params: {
  69. condition: Ext.encode(cond)
  70. },
  71. callback: function(opt, s, r) {
  72. grid.setLoading(false);
  73. var res = Ext.decode(r.responseText);
  74. if(grid && res.data) {
  75. var cmc_currency = grid.down('gridcolumn[dataIndex=cmc_currency]');
  76. if(cond.cmc_currency != '0') {//显示原币
  77. if(!cmc_currency) {
  78. grid.reconfigure(grid.store, grid.doubleColumns);
  79. }
  80. } else {//只显示本币
  81. if(cmc_currency) {
  82. grid.reconfigure(grid.store, grid.defaultColumns);
  83. }
  84. }
  85. var am_asscode = grid.down('gridcolumn[dataIndex=am_asscode]'),
  86. am_assname = grid.down('gridcolumn[dataIndex=am_assname]');
  87. if(cond.chkall) {
  88. if(am_assname.hidden)
  89. am_assname.show();
  90. if(am_asscode.hidden)
  91. am_asscode.show();
  92. } else {
  93. if(!am_assname.hidden)
  94. am_assname.hide();
  95. if(!am_asscode.hidden)
  96. am_asscode.hide();
  97. }
  98. grid.store.loadData(res.data);
  99. }
  100. }
  101. });
  102. },
  103. getCondition: function(pl) {
  104. var r = new Object(),v;
  105. Ext.each(pl.items.items, function(item){
  106. if(item.getValue !== undefined) {
  107. v = item.getValue();
  108. if(!Ext.isEmpty(v)) {
  109. r[item.id] = v;
  110. }
  111. }
  112. });
  113. var tb = Ext.getCmp('gl_info_ym');
  114. if(tb)
  115. tb.updateInfo(r);
  116. return r;
  117. },
  118. loadDetail: function(store, record) {
  119. var ym = record.get('cm_yearmonth'),
  120. caCode = this._getCaCode(store, record),
  121. cr = record.get('cmc_currency'),
  122. at = record.get('am_asstype'),
  123. ac = record.get('am_asscode'),
  124. an = record.get('am_assname'),
  125. un = Ext.getCmp('chkhaveun').value;
  126. this.BaseUtil.onAdd('GLDetail_' + ym + '_' + caCode, '明细账',
  127. 'jsps/fa/gla/glDetail.jsp?y=' + ym + '&c=' + caCode + '&cr=' + cr + '&at=' + at + '&ac=' + ac + '&an=' + an + '&un=' + un);
  128. },
  129. _getCaCode: function(store, record) {
  130. var c = record.get('ca_code');
  131. if(Ext.isEmpty(c)) {
  132. return this._getCaCode(store, store.getAt(store.indexOf(record) - 1));
  133. }
  134. return c;
  135. },
  136. getCateSetting : function() {
  137. var me = this;
  138. Ext.Ajax.request({
  139. url : basePath + 'common/getFieldData.action',
  140. params: {
  141. caller: 'Setting',
  142. field: 'se_value',
  143. condition: 'se_what=\'CateTreeSearch\''
  144. },
  145. method : 'post',
  146. async : false,
  147. callback : function(opt, s, res){
  148. var r = new Ext.decode(res.responseText);
  149. if(r.exceptionInfo){
  150. showError(r.exceptionInfo);
  151. } else if(r.success && r.data == 'true' ){
  152. me.CateTreeSearch = true;
  153. }
  154. }
  155. });
  156. },
  157. createYearmonthField : function() {
  158. return Ext.create('erp.view.core.form.ConMonthDateField', {
  159. id: 'cm_yearmonth',
  160. name: 'cm_yearmonth',
  161. fieldLabel: '期间',
  162. labelWidth: 80,
  163. margin: '10 2 2 10',
  164. columnWidth: .51,
  165. getValue: function() {
  166. if(!Ext.isEmpty(this.value)) {
  167. return {begin: this.firstVal, end: this.secondVal};
  168. }
  169. return null;
  170. }
  171. });
  172. },
  173. createCateLevelField : function() {
  174. return Ext.create('Ext.form.FieldContainer', {
  175. fieldLabel: '科目级别',
  176. labelWidth: 80,
  177. height: 23,
  178. layout: 'hbox',
  179. columnWidth: .51,
  180. id: 'cm_catelevel',
  181. defaults: {
  182. fieldStyle : "background:#FFFAFA;color:#515151;"
  183. },
  184. items: [{
  185. xtype: 'combo',
  186. flex: 1,
  187. editable: false,
  188. name: 'ca_level1',
  189. id: 'ca_level1',
  190. displayField: 'display',
  191. valueField: 'value',
  192. queryMode: 'local',
  193. value: 1,
  194. store: Ext.create('Ext.data.Store', {
  195. fields: ['display', 'value'],
  196. data : [
  197. {"display": 1, "value": 1},
  198. {"display": 2, "value": 2},
  199. {"display": 3, "value": 3},
  200. {"display": 4, "value": 4},
  201. {"display": 5, "value": 5}
  202. ]
  203. })
  204. },{
  205. xtype: 'combo',
  206. flex: 1,
  207. name: 'ca_level2',
  208. id: 'ca_level2',
  209. editable: false,
  210. displayField: 'display',
  211. valueField: 'value',
  212. queryMode: 'local',
  213. value: 5,
  214. store: Ext.create('Ext.data.Store', {
  215. fields: ['display', 'value'],
  216. data : [
  217. {"display": 1, "value": 1},
  218. {"display": 2, "value": 2},
  219. {"display": 3, "value": 3},
  220. {"display": 4, "value": 4},
  221. {"display": 5, "value": 5}
  222. ]
  223. })
  224. }],
  225. getValue: function() {
  226. var a = this.down('#ca_level1').value,b = this.down('#ca_level2').value;
  227. return {begin: Math.min(a, b), end: Math.max(a, b)};
  228. }
  229. });
  230. },
  231. createCateField : function() {
  232. var me = this ,t, t1;
  233. if (me.CateTreeSearch) {
  234. t = Ext.create('Ext.form.field.Trigger', {
  235. triggerCls: 'x-form-search-trigger',
  236. id: 'vd_catecode',
  237. name: 'vd_catecode',
  238. columnWidth: 0.4,
  239. onTriggerClick: function() {
  240. me.showCateTree(this);
  241. },
  242. listeners: {
  243. aftertrigger: function(t, d) {
  244. t.setValue(d[0].raw.data.ca_code);
  245. t.ownerCt.down('#vd_catename').setValue(d[0].raw.data.ca_name);
  246. }
  247. }
  248. });
  249. t1 = Ext.create('Ext.form.field.Trigger', {
  250. triggerCls: 'x-form-search-trigger',
  251. id: 'vd_catecode1',
  252. name: 'vd_catecode1',
  253. columnWidth: 0.4,
  254. onTriggerClick: function() {
  255. me.showCateTree(this);
  256. },
  257. listeners: {
  258. aftertrigger: function(t, d) {
  259. t.setValue(d[0].raw.data.ca_code);
  260. t.ownerCt.down('#vd_catename1').setValue(d[0].raw.data.ca_name);
  261. }
  262. }
  263. });
  264. } else {
  265. t = Ext.create('erp.view.core.trigger.DbfindTrigger', {
  266. id: 'vd_catecode',
  267. name: 'vd_catecode',
  268. columnWidth: 0.4,
  269. listeners: {
  270. aftertrigger: function(t, d) {
  271. t.setValue(d.data.ca_code);
  272. t.ownerCt.down('#vd_catename').setValue(d.data.ca_name);
  273. }
  274. }
  275. });
  276. t1 = Ext.create('erp.view.core.trigger.DbfindTrigger', {
  277. id: 'vd_catecode1',
  278. name: 'vd_catecode1',
  279. columnWidth: 0.4,
  280. listeners: {
  281. aftertrigger: function(t, d) {
  282. t.setValue(d.data.ca_code);
  283. t.ownerCt.down('#vd_catename1').setValue(d.data.ca_name);
  284. }
  285. }
  286. });
  287. }
  288. return Ext.create('Ext.form.FieldContainer', {
  289. fieldLabel: '科目编号',
  290. labelWidth: 80,
  291. layout: 'column',
  292. columnWidth: 1,
  293. height: 56,
  294. id: 'ca_code',
  295. defaults: {
  296. fieldStyle : "background:#FFFAFA;color:#515151;"
  297. },
  298. items: [t, {
  299. xtype: 'textfield',
  300. name: 'vd_catename',
  301. id: 'vd_catename',
  302. columnWidth: 0.6,
  303. readOnly: true,
  304. fieldStyle: 'background:#f1f1f1;'
  305. },t1,{
  306. xtype: 'textfield',
  307. name: 'vd_catename1',
  308. id: 'vd_catename1',
  309. columnWidth: 0.6,
  310. readOnly: true,
  311. fieldStyle: 'background:#f1f1f1;'
  312. }],
  313. getValue: function() {
  314. var a = this.down('#vd_catecode').value,b = this.down('#vd_catecode1').value,
  315. x = Ext.isEmpty(a), y = Ext.isEmpty(b);
  316. if(x && y) {
  317. return null;
  318. } else if(x && !y) {
  319. a = b;
  320. } else if(!x && y){
  321. b = a;
  322. }
  323. return {begin: a, end: b};
  324. }
  325. });
  326. },
  327. createCurrencyField : function() {
  328. var me = this;
  329. return Ext.create('Ext.form.field.ComboBox', {
  330. fieldLabel: '币别',
  331. labelWidth: 80,
  332. height: 23,
  333. layout: 'hbox',
  334. columnWidth: .51,
  335. id: 'cmc_currency',
  336. queryMode: 'local',
  337. displayField: 'display',
  338. valueField: 'value',
  339. editable: false,
  340. store: Ext.create('Ext.data.Store', {
  341. fields: ['display', 'value'],
  342. data : [
  343. {"display": '本位币', "value": '0'},
  344. {"display": '所有币别', "value": '99'}
  345. ]
  346. }),
  347. value: '0',
  348. listeners: {
  349. afterrender: function(f) {
  350. me.getCurrency(f);
  351. }
  352. }
  353. });
  354. },
  355. createAssField : function() {
  356. return Ext.create('Ext.form.FieldContainer', {
  357. fieldLabel: '辅助核算',
  358. labelWidth: 80,
  359. height: 23,
  360. layout: 'hbox',
  361. columnWidth: 1,
  362. id: 'vds_asscode',
  363. defaults: {
  364. fieldStyle : "background:#FFFAFA;color:#515151;"
  365. },
  366. items: [{
  367. labelWidth: 35,
  368. xtype: 'dbfindtrigger',
  369. flex: 0.2,
  370. id: 'ak_name',
  371. name: 'ak_name',
  372. listeners: {
  373. aftertrigger: function(f, r) {
  374. if(!Ext.isEmpty(f.value)) {
  375. f.asskind = r.data;
  376. var c = Ext.getCmp('ak_asscode'),
  377. n = Ext.getCmp('ak_assname');
  378. c.name = r.data.ak_asscode;
  379. n.name = r.data.ak_assname;
  380. } else {
  381. f.asskind = null;
  382. }
  383. },
  384. change: function(f) {
  385. var a = Ext.getCmp('ak_asscode'),
  386. b = Ext.getCmp('ak_assname');
  387. a.setValue(null);
  388. b.setValue(null);
  389. if(Ext.isEmpty(f.value)) {
  390. f.asskind = null;
  391. }
  392. }
  393. }
  394. },{
  395. xtype: 'dbfindtrigger',
  396. id: 'ak_asscode',
  397. flex: 0.2,
  398. listeners: {
  399. beforetrigger: function(f) {
  400. var a = Ext.getCmp('ak_name');
  401. f.dbBaseCondition = null;
  402. if(!a.asskind) {
  403. a.focus(false, 200);
  404. showError('请先选择核算项!');
  405. return false;
  406. } else if(f.name == 'akd_asscode') {
  407. f.dbBaseCondition = 'ak_name=\'' + a.value + '\'';
  408. }
  409. },
  410. aftertrigger: function(f, r) {
  411. var a = Ext.getCmp('ak_name'),
  412. n = Ext.getCmp('ak_assname');
  413. if(a.asskind) {
  414. f.setValue(r.data[a.asskind.ak_asscode]);
  415. n.setValue(r.data[a.asskind.ak_assname]);
  416. }
  417. }
  418. }
  419. },{
  420. xtype: 'textfield',
  421. id: 'ak_assname',
  422. flex: 0.6,
  423. readOnly: true,
  424. fieldStyle: 'background:#f1f1f1;'
  425. }],
  426. getValue: function() {
  427. var a = Ext.getCmp('ak_name'),
  428. c = Ext.getCmp('ak_asscode');
  429. if(a.asskind) {
  430. return {am_asstype: a.asskind.ak_name, am_asscode: c.value};
  431. }
  432. return null;
  433. }
  434. });
  435. },
  436. createFilterPanel: function(btn) {
  437. var me = this;
  438. var filter = Ext.create('Ext.Window', {
  439. id: btn.getId() + '-filter',
  440. style: 'background:#f1f1f1',
  441. title: '筛选条件',
  442. width: 500,
  443. height: 415,
  444. layout: 'column',
  445. defaults: {
  446. margin: '2 2 2 10'
  447. },
  448. items: [me.createYearmonthField(), me.createCateLevelField(), me.createCateField(),
  449. me.createCurrencyField(), me.createAssField(),{
  450. xtype: 'checkbox',
  451. id: 'chkall',
  452. name: 'chkall',
  453. columnWidth: .5,
  454. boxLabel: '显示辅助核算'
  455. },{
  456. xtype: 'checkbox',
  457. id: 'chkno',
  458. name: 'chkno',
  459. columnWidth: .5,
  460. boxLabel: '无发生额不显示'
  461. },{
  462. xtype: 'checkbox',
  463. id: 'chkzeroandno',
  464. name: 'chkzeroandno',
  465. columnWidth: .5,
  466. boxLabel: '余额为零且无发生额不显示'
  467. },{
  468. xtype: 'checkbox',
  469. id: 'chkhaveun',
  470. name: 'chkhaveun',
  471. columnWidth: .5,
  472. boxLabel: '包含未记账凭证'
  473. },{
  474. xtype: 'checkbox',
  475. id: 'chkDispLeaf',
  476. name: 'chkDispLeaf',
  477. columnWidth: .5,
  478. boxLabel: '只显示末级科目'
  479. },{
  480. xtype: 'checkbox',
  481. id: 'chkdis',
  482. name: 'chkdis',
  483. columnWidth: 1,
  484. boxLabel: '显示禁用科目'
  485. },{
  486. xtype: 'checkbox',
  487. id: 'yearbegin',
  488. name: 'yearbegin',
  489. columnWidth: .5,
  490. boxLabel: '显示年初余额',
  491. checked: true
  492. },{
  493. xtype: 'checkbox',
  494. id: 'monthbegin',
  495. name: 'monthbegin',
  496. columnWidth: .5,
  497. boxLabel: '显示期初余额',
  498. checked: true
  499. },{
  500. xtype: 'checkbox',
  501. id: 'monthaccount',
  502. name: 'monthaccount',
  503. columnWidth: .5,
  504. boxLabel: '显示本期合计',
  505. checked: true
  506. },{
  507. xtype: 'checkbox',
  508. id: 'yearaccount',
  509. name: 'yearaccount',
  510. columnWidth: .5,
  511. boxLabel: '显示本年累计',
  512. checked: true
  513. },{
  514. xtype: 'checkbox',
  515. id: 'yearend',
  516. name: 'yearend',
  517. columnWidth: .5,
  518. boxLabel: '显示年末余额',
  519. checked: true
  520. }],
  521. buttonAlign: 'center',
  522. buttons: [{
  523. text: '确定',
  524. width: 60,
  525. cls: 'x-btn-blue',
  526. handler: function(btn) {
  527. var fl = btn.ownerCt.ownerCt,
  528. con = me.getCondition(fl);
  529. me.query(con);
  530. fl.hide();
  531. }
  532. },{
  533. text: '关闭',
  534. width: 60,
  535. cls: 'x-btn-blue',
  536. handler: function(btn) {
  537. var fl = btn.ownerCt.ownerCt;
  538. fl.hide();
  539. }
  540. }]
  541. });
  542. this.getCurrentMonth(filter.down('#cm_yearmonth'));
  543. return filter;
  544. },
  545. getCurrency: function(f) {
  546. Ext.Ajax.request({
  547. url : basePath + 'common/getFieldDatas.action',
  548. async: false,
  549. params: {
  550. caller: 'Currencys',
  551. field: 'cr_name',
  552. condition: 'cr_statuscode=\'CANUSE\''
  553. },
  554. method : 'post',
  555. callback : function(options,success,response){
  556. var rs = new Ext.decode(response.responseText);
  557. if(rs.exceptionInfo){
  558. showError(rs.exceptionInfo);return null;
  559. }
  560. if(rs.success && rs.data){
  561. var cr = rs.data.split('#'),c = new Array();
  562. Ext.each(cr, function(r){
  563. c.push({display: r, value: r});
  564. });
  565. f.store.add(c);
  566. }
  567. }
  568. });
  569. },
  570. getCurrentMonth: function(f) {
  571. Ext.Ajax.request({
  572. url: basePath + 'fa/getMonth.action',
  573. params: {
  574. type: 'MONTH-A'
  575. },
  576. callback: function(opt, s, r) {
  577. var rs = Ext.decode(r.responseText);
  578. if(rs.data) {
  579. f.setValue(rs.data.PD_DETNO);
  580. }
  581. }
  582. });
  583. },
  584. showCateTree: function(f) {
  585. var cawin = f.win;
  586. if(!cawin) {
  587. f.win = cawin = new Ext.window.Window({
  588. title: '科目查找',
  589. height: "100%",
  590. width: "80%",
  591. maximizable : true,
  592. buttonAlign : 'center',
  593. layout : 'anchor',
  594. modal:true,
  595. items: [{
  596. tag : 'iframe',
  597. frame : true,
  598. anchor : '100% 100%',
  599. layout : 'fit',
  600. html : '<iframe 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>'
  601. }],
  602. buttons : [{
  603. text : '确 认',
  604. iconCls: 'x-button-icon-save',
  605. cls: 'x-btn-gray',
  606. handler : function(btn){
  607. var contentwindow = btn.ownerCt.ownerCt.body.dom.getElementsByTagName('iframe')[0].contentWindow;
  608. var tree = contentwindow.Ext.getCmp('tree-panel');
  609. var data = tree.getChecked();
  610. f.fireEvent('aftertrigger', f, data);
  611. btn.ownerCt.ownerCt.hide();
  612. }
  613. },{
  614. text : '关 闭',
  615. iconCls: 'x-button-icon-close',
  616. cls: 'x-btn-gray',
  617. handler : function(btn){
  618. btn.ownerCt.ownerCt.hide();
  619. }
  620. }]
  621. });
  622. }
  623. cawin.show();
  624. }
  625. });