VoucherTP.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. Ext.define('erp.view.fa.gla.VoucherTP',{
  2. extend: 'Ext.Viewport',
  3. layout: 'anchor',
  4. hideBorders: true,
  5. initComponent : function(){
  6. var me = this;
  7. Ext.apply(me, {
  8. items: [{
  9. anchor: '100% 23%',
  10. xtype: 'erpFormPanel',
  11. saveUrl: 'fa/gla/saveVoucherTP.action',
  12. deleteUrl: 'fa/gla/deleteVoucherTP.action',
  13. updateUrl: 'fa/gla/updateVoucherTP.action',
  14. getIdUrl: 'common/getId.action?seq=VOUCHER_TP_SEQ',
  15. keyField: 'vo_id',
  16. codeField: 'vo_code'
  17. }]
  18. });
  19. me.callParent(arguments);
  20. me.createGrid();
  21. me.getAssKind();
  22. },
  23. createGrid: function() {
  24. var me = this;
  25. me.getGridSet(function(config){
  26. var data = config.data ? Ext.decode(config.data.replace(/,}/g, '}').replace(/,]/g, ']')) : [];
  27. if(data.length == 0) {
  28. for(var i = 0;i < 40;i++ ){
  29. var o = new Object();
  30. o.vd_detno = i + 1;
  31. data.push(o);
  32. }
  33. } else {
  34. config.fields.push({name: 'ass'});
  35. }
  36. var gridConfig = {}, cols = me.renderColumns(gridConfig, config.columns);
  37. var grid = Ext.create('erp.view.core.grid.Panel2', Ext.apply(gridConfig, {
  38. anchor: '100% 77%',
  39. columns: cols,
  40. store: new Ext.data.Store({
  41. fields: config.fields,
  42. data: data
  43. }),
  44. boxready: true,
  45. plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
  46. clicksToEdit: 1
  47. }), Ext.create('erp.view.core.plugin.CopyPasteMenu'), {
  48. ptype: 'rowexpander',
  49. expandOnDblClick: false,
  50. startExpand: true,
  51. rowBodyTpl : new Ext.XTemplate(
  52. '<tpl if="ass">',
  53. '<tpl for="ass">',
  54. '<div style="margin-left: 39px;">',
  55. '<table class="u-table">',
  56. '<tr><td width="200" class="text-right">{vds_asstype}</td>',
  57. '<td width="140">{vds_asscode}<a id="{[this.onQueryClick()]}" class="u-icon x-button-icon-query" title="{vds_asstype}" rel="{vds_vdid}"></a></td><td width="300">{vds_assname}</td></tr>',
  58. '</table>',
  59. '</div>',
  60. '</tpl>',
  61. '</tpl>', {
  62. onQueryClick: function() {
  63. var id = Ext.id();
  64. Ext.defer(this.onQuery, 1, this, [id]);
  65. return id;
  66. },
  67. onQuery: function(id) {
  68. var elm = Ext.get(id);
  69. if(elm) {
  70. var grid = this.owner;
  71. Ext.EventManager.on(elm, {
  72. click: function(event, el) {
  73. if(!grid.readOnly) {
  74. me.queryAss(el.getAttribute('title'), el.getAttribute('rel'));
  75. }
  76. Ext.EventManager.stopEvent(event);
  77. },
  78. buffer: 100
  79. });
  80. }
  81. }
  82. }),
  83. renderer: function(value, metadata, record) {
  84. if(metadata)
  85. metadata.tdCls = Ext.baseCSSPrefix + 'grid-cell-special';
  86. var ass = record.get('ass') || [];
  87. return ass.length > 0 ? '<div class="' + Ext.baseCSSPrefix + 'grid-row-expander">&#160;</div>' : '';
  88. }
  89. }]
  90. }));
  91. me.insert(1, grid);
  92. grid.fireEvent('storeloaded', grid);
  93. if(config.dbfinds && config.dbfinds.length > 0){
  94. grid.dbfinds = config.dbfinds;
  95. }
  96. me.getAssData(grid);
  97. Ext.defer(function(){
  98. var status = Ext.getCmp('vo_statuscode');
  99. if(status && status.getValue() != 'ENTERING' && status.getValue() != 'UNPOST') {
  100. grid.readOnly = true;
  101. Ext.util.CSS.createStyleSheet('.u-icon{display: none !important}', 'icon_readonly');
  102. }
  103. }, 300);
  104. });
  105. },
  106. /**
  107. * Grid配置及数据
  108. */
  109. getGridSet: function(callback) {
  110. var condition = getUrlParam('gridCondition');
  111. condition = ((!condition || "null" == condition) ? "" : condition).replace(/IS/g, "=");
  112. Ext.Ajax.request({
  113. url : basePath + 'common/singleGridPanel.action',
  114. params: {
  115. caller: caller,
  116. condition: condition
  117. },
  118. method : 'post',
  119. callback : function(opt, s, res){
  120. if (res) {
  121. var r = new Ext.decode(res.responseText);
  122. if(r.exceptionInfo){
  123. showError(res.exceptionInfo);
  124. } else {
  125. callback.call(null, r);
  126. }
  127. }
  128. }
  129. });
  130. },
  131. renderColumns: function(gridConfig, cols) {
  132. Ext.Array.each(cols, function(col){
  133. var logic = col.logic;
  134. delete col.locked;
  135. if(!Ext.isEmpty(logic)) {
  136. if(logic == 'detno'){
  137. gridConfig.detno = col.dataIndex;
  138. col.width = 40;
  139. col.align = 'center';
  140. col.renderer = function(val, meta) {
  141. meta.tdCls = Ext.baseCSSPrefix + 'grid-cell-special';
  142. return val;
  143. };
  144. } else if(logic == 'keyField'){
  145. gridConfig.keyField = col.dataIndex;
  146. } else if(logic == 'mainField'){
  147. gridConfig.mainField = col.dataIndex;
  148. } else if(logic == 'orNecessField'){
  149. if(!gridConfig.orNecessField){
  150. gridConfig.orNecessField = new Array();
  151. }
  152. gridConfig.orNecessField.push(col.dataIndex);
  153. } else if(logic == 'necessaryField'){
  154. gridConfig.necessaryField = col.dataIndex;
  155. if(!gridConfig.necessaryFields){
  156. gridConfig.necessaryFields = new Array();
  157. }
  158. gridConfig.necessaryFields.push(col.dataIndex);
  159. if(!col.haveRendered){
  160. col.renderer = function(val, meta, record, x, y, store, view){
  161. var c = this.columns[y];
  162. if(val != null && val.toString().trim() != ''){
  163. if(c.xtype == 'datecolumn' && typeof val === 'object'){
  164. val = Ext.Date.format(val, 'Y-m-d');
  165. } else if(c.xtype == 'numbercolumn') {
  166. val = Ext.util.Format.number(val, c.format || '0,000.00');
  167. }
  168. return val;
  169. } else {
  170. if(c.xtype == 'datecolumn'){
  171. val = '';
  172. }
  173. return '<img src="' + basePath + 'resource/images/icon/need.png" title="必填字段">' +
  174. '<span style="color:blue;padding-left:2px;" title="必填字段">' + val + '</span>';
  175. }
  176. };
  177. }
  178. } else if(logic == 'groupField'){
  179. gridConfig.groupField = col.dataIndex;
  180. }
  181. }
  182. });
  183. return cols;
  184. },
  185. /**
  186. * 所有核算类型
  187. */
  188. getAssKind: function() {
  189. var me = this;
  190. Ext.Ajax.request({
  191. url: basePath + 'fa/ars/assKind.action',
  192. method: 'GET',
  193. callback: function(opt, s, r) {
  194. if(s) {
  195. var data = Ext.decode(r.responseText), ks = {};
  196. Ext.Array.each(data, function(d){
  197. ks[d.AK_NAME] = d;
  198. });
  199. me.asskind = ks;
  200. }
  201. }
  202. });
  203. },
  204. /**
  205. * 辅助核算
  206. */
  207. getAssData: function(grid) {
  208. var data = {}, has = false;
  209. grid.store.each(function(item, idx){
  210. if(!Ext.isEmpty(item.get('ca_asstype'))){
  211. has = true;
  212. data[item.get('vd_id')] = item;
  213. }
  214. });
  215. if(has) {
  216. Ext.Ajax.request({
  217. url: basePath + 'common/getFieldsDatas.action',
  218. params: {
  219. caller: 'VoucherDetailAss_TP',
  220. fields: 'vds_id,vds_vdid,vds_asstype,vds_asscode,vds_assname',
  221. condition: 'vds_vdid in (' +Ext.Object.getKeys(data).join(',') + ') order by vds_vdid,vds_detno'
  222. },
  223. callback: function(opt, s, r) {
  224. if(s) {
  225. var rs = Ext.decode(r.responseText);
  226. if(rs.success){
  227. var ds = Ext.decode(rs.data), x, d;
  228. for(var i in ds) {
  229. x = ds[i];
  230. d = data[x.VDS_VDID];
  231. var ass = d.get('ass') || [];
  232. ass.push({
  233. vds_id: x.VDS_ID,
  234. vds_vdid: x.VDS_VDID,
  235. vds_asstype: x.VDS_ASSTYPE,
  236. vds_asscode: x.VDS_ASSCODE,
  237. vds_assname: x.VDS_ASSNAME
  238. });
  239. d.set('ass', ass);
  240. d.modified = {};
  241. d.dirty = false;
  242. }
  243. }
  244. grid.store.each(function(item, idx){
  245. if(!Ext.isEmpty(item.get('ca_asstype'))){
  246. var ass = item.get('ass') || [], names = item.get('ca_assname').split('#'), len = names.length,
  247. id = item.get('vd_id');
  248. if(ass.length < len) {
  249. for(var i in names) {
  250. var d = Ext.Array.findBy(ass, function(t){
  251. return t.vds_asstype == names[i];
  252. });
  253. if(!d) {
  254. ass.push({vds_vdid: id, vds_asstype: names[i]});
  255. if(ass.length == len)
  256. break;
  257. }
  258. }
  259. item.set('ass', ass);
  260. }
  261. }
  262. });
  263. }
  264. }
  265. });
  266. }
  267. },
  268. /**
  269. * 查找辅助核算
  270. */
  271. queryAss: function(type, vdId) {
  272. var me = this, kind = me.asskind[type];
  273. if(kind) {
  274. var search = kind.AK_DBFIND + '|' + kind.AK_ASSCODE;
  275. var win = new Ext.window.Window({
  276. id: 'dbwin',
  277. title: '查找',
  278. height: '80%',
  279. width: '95%',
  280. maximizable: true,
  281. buttonAlign: 'center',
  282. layout: 'anchor',
  283. items: [{
  284. tag: 'iframe',
  285. frame: true,
  286. anchor: '100% 100%',
  287. layout: 'fit',
  288. html: '<iframe id="iframe_dbfind" src="' + basePath + 'jsps/common/dbfind.jsp?dbfind=' + search + '&trigger=dbfind-ass-hidden" height="100%" width="100%" frameborder="0" scrolling="no"></iframe>'
  289. },{
  290. xtype: 'hidden',
  291. hidden: true,
  292. id: 'dbfind-ass-hidden',
  293. listeners: {
  294. aftertrigger: function(trigger, findRecord) {
  295. var grid = Ext.getCmp('grid'), index = grid.store.findBy(function(t){
  296. return t.get('vd_id') == vdId;
  297. }), record = grid.store.getAt(index), ass = record.get('ass') || [];
  298. for(var i in ass) {
  299. if(ass[i].vds_asstype == type) {
  300. ass[i].vds_asscode = findRecord.get(kind.AK_ASSCODE);
  301. ass[i].vds_assname = findRecord.get(kind.AK_ASSNAME);
  302. break;
  303. }
  304. }
  305. record.set('ass', ass);
  306. }
  307. }
  308. }],
  309. buttons: [{
  310. text: '关 闭',
  311. iconCls: 'x-button-icon-close',
  312. cls: 'x-btn-gray',
  313. handler: function(btn) {
  314. btn.ownerCt.ownerCt.close();
  315. }
  316. },
  317. {
  318. text: '重置条件',
  319. id: 'reset',
  320. cls: 'x-btn-gray',
  321. handler: function(btn) {
  322. var dbGrid = btn.ownerCt.ownerCt.el.dom.getElementsByTagName('iframe')[0].contentWindow.document.defaultView.Ext.getCmp('dbfindGridPanel');
  323. dbGrid.resetCondition();
  324. dbGrid.getCount();
  325. }
  326. }]
  327. });
  328. win.show();
  329. }
  330. }
  331. });