FormPanelController.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454
  1. Ext.define('saas.view.money.verification.FormPanelController', {
  2. extend: 'saas.view.core.form.FormPanelController',
  3. alias: 'controller.money-verification-formpanel',
  4. init: function (form) {
  5. var me = this;
  6. this.control({
  7. // 客户
  8. 'dbfindtrigger[name=vc_custname]':{
  9. beforerender:function(f){
  10. Ext.apply(f,{
  11. //赋值
  12. dbfinds:[{
  13. from: 'id', to: 'vc_custid',ignore:true
  14. }, {
  15. from:'cu_code', to:'vc_custcode'
  16. },{
  17. from:'cu_name', to:'vc_custname'
  18. },{
  19. from:'cu_currency',to:'vc_currency'
  20. },{
  21. from:'cr_rate',to:'vc_rate'
  22. }
  23. ],
  24. }) ;
  25. }
  26. },
  27. // 转入客户
  28. 'dbfindtrigger[name=vc_turncustname]':{
  29. beforerender:function(f){
  30. Ext.apply(f,{
  31. //赋值
  32. dbfinds:[{
  33. from: 'id', to: 'vc_turncustid',ignore:true
  34. }, {
  35. from:'cu_code', to:'vc_turncustcode'
  36. },{
  37. from:'cu_name', to:'vc_turncustname'
  38. }],
  39. }) ;
  40. }
  41. },
  42. // 供应商
  43. 'dbfindtrigger[name=vc_vendname]':{
  44. beforerender: function (f) {
  45. Ext.apply(f, {
  46. dbfinds: [{
  47. from: 'id',
  48. to: 'vc_vendid',
  49. ignore: true
  50. }, {
  51. from: 've_code',
  52. to: 'vc_vendcode'
  53. }, {
  54. from: 've_name',
  55. to: 'vc_vendname'
  56. },{
  57. from:'ve_currency',to:'vc_currency'
  58. },{
  59. from:'cr_rate',to:'vc_rate'
  60. }
  61. ],
  62. });
  63. }
  64. },
  65. // 转入供应商
  66. 'dbfindtrigger[name=vc_turnvendname]':{
  67. beforerender: function (f) {
  68. Ext.apply(f, {
  69. dbfinds: [{
  70. from: 'id',
  71. to: 'vc_turnvendid',
  72. ignore: true
  73. }, {
  74. from: 've_code',
  75. to: 'vc_turnvendcode'
  76. }, {
  77. from: 've_name',
  78. to: 'vc_turnvendname'
  79. }],
  80. });
  81. }
  82. },
  83. // 来源单号1
  84. 'oriOrderMutiDbfindTrigger[name=vd_slcode]': {
  85. beforerender: function (f) {
  86. Ext.apply(f, {
  87. dbfinds: [{
  88. from: 'id',
  89. to: 'vd_slid',ignore:true
  90. }, {
  91. from: 'sl_code',
  92. to: 'vd_slcode'
  93. },{
  94. from: 'sl_orderamount',
  95. to: 'vd_amount'
  96. },{
  97. from: 'sl_yamount',
  98. to: 'sl_yamount'
  99. },{
  100. from: 'sl_namount',
  101. to: 'sl_namount'
  102. },{
  103. from:'sl_date',
  104. to:'vd_sldate'
  105. },{
  106. from:'sl_kind',
  107. to:'vd_slkind'
  108. },{
  109. from: 'sl_namount',
  110. to: 'vd_nowbalance'
  111. }],
  112. });
  113. },
  114. beforequery: function(f) {
  115. var defaultCondition = this.getDefaultCondition(0);
  116. if(!defaultCondition) {
  117. return false;
  118. }
  119. Ext.apply(f, {
  120. defaultCondition: defaultCondition
  121. });
  122. },
  123. beforetriggerclick: function(f) {
  124. var defaultCondition = this.getDefaultCondition(0);
  125. if(!defaultCondition) {
  126. return false;
  127. }
  128. Ext.apply(f, {
  129. defaultCondition: defaultCondition
  130. });
  131. }
  132. },
  133. // 来源单号2
  134. 'oriOrderMutiDbfindTrigger[name=vcd_slcode]': {
  135. beforerender: function (f) {
  136. Ext.apply(f, {
  137. dbfinds: [{
  138. from: 'id',
  139. to: 'vcd_slid',ignore:true
  140. }, {
  141. from: 'sl_code',
  142. to: 'vcd_slcode'
  143. },{
  144. from: 'sl_orderamount',
  145. to: 'vcd_amount'
  146. },{
  147. from: 'sl_yamount',
  148. to: 'sl_yamount'
  149. },{
  150. from: 'sl_namount',
  151. to: 'sl_namount'
  152. },{
  153. from:'sl_date',
  154. to:'vcd_sldate'
  155. },{
  156. from:'sl_kind',
  157. to:'vcd_slkind'
  158. },{
  159. from: 'sl_namount',
  160. to: 'vcd_nowbalance'
  161. }],
  162. });
  163. },
  164. beforequery: function(f) {
  165. var defaultCondition = this.getDefaultCondition(1);
  166. if(!defaultCondition) {
  167. return false;
  168. }
  169. Ext.apply(f, {
  170. defaultCondition: defaultCondition
  171. });
  172. },
  173. beforetriggerclick: function(f) {
  174. var defaultCondition = this.getDefaultCondition(1);
  175. if(!defaultCondition) {
  176. return false;
  177. }
  178. Ext.apply(f, {
  179. defaultCondition: defaultCondition
  180. });
  181. }
  182. },
  183. });
  184. },
  185. getDefaultCondition: function(idx) {
  186. var me = this,
  187. form = me.getView(),
  188. formItems = form.formItems,
  189. viewModel = me.getViewModel(),
  190. acitveType = form.acitveType,
  191. etc = form.etc,
  192. defaultConditions = etc.defaultConditions,
  193. defaultConditionMode = defaultConditions[acitveType][idx];
  194. var reg = /{.+?}/g;
  195. var arr = defaultConditionMode.match(reg) || [];
  196. var fields = {};
  197. var nullFields = [];
  198. var defaultCondition = defaultConditionMode;
  199. // TODO arr未去重
  200. arr.map(function(a) {
  201. var fieldName = a.replace(/[{|}]/g, '');
  202. var field = Ext.Array.findBy(formItems, function(f) {
  203. return f.name == fieldName;
  204. });
  205. var fieldLabel = field.fieldLabel || field.name;
  206. var fieldValue = viewModel.get(fieldName);
  207. fields[fieldName] = fieldValue;
  208. if(!fieldValue && nullFields.indexOf(fieldLabel) == -1) {
  209. nullFields.push(fieldLabel);
  210. }
  211. });
  212. if(nullFields.length == 0) {
  213. var keys = Ext.Object.getAllKeys(fields);
  214. keys.map(function(k) {
  215. var v = fields[k];
  216. defaultCondition = defaultCondition.replace(new RegExp('{' + k + '}', 'g'), v);
  217. });
  218. return defaultCondition;
  219. }else {
  220. saas.util.BaseUtil.showErrorToast('请先选择【' + '<span style="color: red;">' + nullFields.join(',') + '</span>】');
  221. return null;
  222. }
  223. },
  224. /**
  225. * 清空所有从表数据
  226. */
  227. clearDetails: function() {
  228. var me = this;
  229. me.clearDetail0();
  230. me.clearDetail1();
  231. },
  232. /**
  233. * 清空第一个从表数据
  234. */
  235. clearDetail0: function(f, n, o) {
  236. var me = this,
  237. form = me.getView(),
  238. grid = form.query('detailGridField')[0];
  239. me.clearDetail(grid);
  240. },
  241. /**
  242. * 清空第二个从表数据
  243. */
  244. clearDetail1: function() {
  245. var me = this,
  246. form = me.getView(),
  247. grid = form.query('detailGridField')[1];
  248. me.clearDetail(grid);
  249. },
  250. /**
  251. * 清空一个从表数据
  252. */
  253. clearDetail: function(grid) {
  254. var datas = [],
  255. emptyRows = grid.emptyRows,
  256. detnoColumn = grid.detnoColumn,
  257. detno = 0,
  258. store = grid.getStore();
  259. Ext.Array.each(new Array(emptyRows), function() {
  260. detno += 1;
  261. var data = {};
  262. data[detnoColumn] = detno;
  263. datas.push(data);
  264. })
  265. store.removeAll();
  266. store.add(datas);
  267. // 不写该方法合计列会错位,这里触发afterEdit事件用来刷新grid
  268. store.getAt(0) ? store.afterEdit(store.getAt(0), ['']) : null;
  269. },
  270. onSave: function() {
  271. var me = this,
  272. form = me.getView(),
  273. viewModel = me.getViewModel(),
  274. store1 = viewModel.get('detail0').detailStore,
  275. store2 = viewModel.get('detail1').detailStore;
  276. var valid = form.isValid();
  277. if(!valid) {
  278. saas.util.BaseUtil.showErrorToast(form.invalidText);
  279. return false;
  280. }
  281. var sum_detail1 = store1.sum('vd_nowbalance'); // 从表1核销合计
  282. var sum_detail2 = store2.sum('vcd_nowbalance'); // 从表2核销合计
  283. viewModel.set("vc_amount1",sum_detail1);
  284. viewModel.set("vc_amount2",sum_detail2);
  285. me.save();
  286. },
  287. save:function(){
  288. var me = this,
  289. form = this.getView(),
  290. codeField = form.getForm().findField(form._codeField),
  291. detailCount = form.detailCount,
  292. viewModel = me.getViewModel(),
  293. codeModified = codeField && codeField.isDirty();
  294. //form里面数据
  295. var formData = form.getSaveData();
  296. var params = {
  297. main:formData.main
  298. };
  299. for(var i = 0; i < detailCount; i++) {
  300. params['items' + ( i + 1)] = formData['detail' + i];
  301. }
  302. params.codeModified = codeModified;
  303. form.setLoading(true);
  304. saas.util.BaseUtil.request({
  305. url: form._saveUrl,
  306. params: JSON.stringify(params),
  307. method: 'POST',
  308. })
  309. .then(function(localJson) {
  310. form.setLoading(false);
  311. if(localJson.success){
  312. var id = localJson.data.id;
  313. var code = localJson.data.code;
  314. form.initId = id;
  315. saas.util.FormUtil.loadData(form);
  316. saas.util.BaseUtil.showSuccessToast('保存成功');
  317. var newId = form.xtype + '-' + id;
  318. var newTitle = form._title + '(' + code + ')';
  319. saas.util.BaseUtil.refreshTabTitle(newId, newTitle);
  320. form.fireEvent('aftersave', true, form, localJson);
  321. }
  322. })
  323. .catch(function(e) {
  324. form.setLoading(false);
  325. saas.util.BaseUtil.showErrorToast('保存失败: ' + e.message);
  326. form.fireEvent('aftersave', false, form);
  327. });
  328. },
  329. audit: function() {
  330. var me = this,
  331. form = me.getView(),
  332. viewModel = me.getViewModel(),
  333. detailCount = form.detailCount,
  334. codeField = form.getForm().findField(form._codeField),
  335. codeModified = !form.initId || (codeField && codeField.isDirty());;
  336. //form里面数据
  337. var formData = form.getFormData();
  338. var params = {
  339. main: formData.main
  340. };
  341. for(var i = 0; i < detailCount; i++) {
  342. params['items' + ( i + 1)] = formData['detail' + i];
  343. }
  344. params.codeModified = codeModified;
  345. form.setLoading(true);
  346. saas.util.BaseUtil.request({
  347. url: form._auditUrl,
  348. params: JSON.stringify(params),
  349. method: 'POST',
  350. })
  351. .then(function(localJson) {
  352. form.setLoading(false);
  353. if(localJson.success){
  354. // 未保存直接审核会返回id
  355. if(localJson.data) {
  356. var id = localJson.data.id;
  357. var code = localJson.data.code;
  358. form.initId = id;
  359. var newId = form.xtype + '-' + id;
  360. var newTitle = form._title + '(' + code + ')';
  361. saas.util.BaseUtil.refreshTabTitle(newId, newTitle);
  362. }
  363. saas.util.FormUtil.loadData(form);
  364. form.setEditable(false);
  365. saas.util.BaseUtil.showSuccessToast('审核成功' + (localJson.message ? ': ' + localJson.message : ''));
  366. form.fireEvent('afteraudit', true, form, localJson);
  367. }
  368. })
  369. .catch(function(e) {
  370. form.setLoading(false);
  371. saas.util.BaseUtil.showErrorToast('审核失败: ' + e.message);
  372. form.fireEvent('afteraudit', false, form);
  373. });
  374. },
  375. myInitCopyData: function(formData) {
  376. var me = this,
  377. form = me.getView();
  378. //录入人,录入日期,审核人,审核日期清空
  379. formData.main['creatorId'] = saas.util.BaseUtil.getCurrentUser().id;
  380. formData.main['creatorName'] = saas.util.BaseUtil.getCurrentUser().realname;
  381. formData.main['createTime'] = Ext.Date.format(new Date(), 'Y-m-d H:i:s');
  382. formData.main['updaterId'] = undefined;
  383. formData.main['updaterName'] = undefined;
  384. formData.main['updateTime'] = undefined;
  385. formData.main[form._auditmanField] = undefined;
  386. formData.main[form._auditdateField] = undefined;
  387. return formData;
  388. },
  389. refresh: function() {
  390. var me = this,
  391. form = me.getView(),
  392. viewModel = me.getViewModel(),
  393. xtype = form.xtype,
  394. _config = {
  395. initId: form.initId,
  396. init_vc_kind: viewModel.get('vc_kind'),
  397. },
  398. currentTab = saas.util.BaseUtil.getCurrentTab();
  399. var view = {
  400. _config: _config,
  401. xtype: xtype
  402. };
  403. Ext.apply(view, _config);
  404. Ext.suspendLayouts();
  405. currentTab.removeAll();
  406. currentTab.add(view);
  407. Ext.resumeLayouts(true);
  408. },
  409. });