FormPanelController.js 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658
  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. dbColumns: [{
  12. conditionCode: 'id',
  13. text: "客户ID",
  14. dataIndex: "id",
  15. hidden:true,
  16. xtype: "",
  17. }, {
  18. conditionCode: 'cu_code',
  19. text: "客户编号",
  20. dataIndex: "cu_code",
  21. width: 150,
  22. xtype: "",
  23. }, {
  24. conditionCode: 'cu_name',
  25. text: "客户名称",
  26. dataIndex: "cu_name",
  27. width: 200,
  28. xtype: "",
  29. }, {
  30. conditionCode: 'cu_type',
  31. text: "客户类型",
  32. dataIndex: "cu_type",
  33. width: 110,
  34. xtype: "",
  35. }, {
  36. text: "业务员编号",
  37. dataIndex: "cu_sellercode",
  38. width:110
  39. }, {
  40. text: "业务员",
  41. dataIndex: "cu_sellername",
  42. width:110
  43. }, {
  44. text: "税率(%)",
  45. dataIndex: "cu_taxrate",
  46. xtype: 'numbercolumn',
  47. width:80,
  48. renderer: function (v) {
  49. return saas.util.BaseUtil.numberFormat(v, 2, false);
  50. }
  51. },{
  52. text: "应收款余额",
  53. dataIndex: "cu_leftamount",
  54. width:110,
  55. xtype: 'numbercolumn',
  56. renderer : function(v) {
  57. return saas.util.BaseUtil.numberFormat(v, 2, true);
  58. }
  59. }, {
  60. text: "结算天数",
  61. dataIndex: "cu_promisedays",
  62. width:110,
  63. xtype: 'numbercolumn',
  64. renderer: function (v) {
  65. return Ext.util.Format.number(v, '0');
  66. }
  67. }, {
  68. text: "额度",
  69. dataIndex: "cu_credit",
  70. width:110,
  71. xtype: 'numbercolumn',
  72. }, {
  73. text: "客户地址",
  74. dataIndex: "ca_address",
  75. width: 250
  76. }],
  77. //赋值
  78. dbfinds:[{
  79. from: 'id', to: 'vc_custid',ignore:true
  80. }, {
  81. from:'cu_code', to:'vc_custcode'
  82. },{
  83. from:'cu_name', to:'vc_custname'
  84. }],
  85. }) ;
  86. }
  87. },
  88. // 转入客户
  89. 'dbfindtrigger[name=vc_turncustname]':{
  90. beforerender:function(f){
  91. Ext.apply(f,{
  92. dbColumns: [{
  93. conditionCode: 'id',
  94. text: "客户ID",
  95. dataIndex: "id",
  96. hidden:true,
  97. xtype: "",
  98. }, {
  99. conditionCode: 'cu_code',
  100. text: "客户编号",
  101. dataIndex: "cu_code",
  102. width: 150,
  103. xtype: "",
  104. }, {
  105. conditionCode: 'cu_name',
  106. text: "客户名称",
  107. dataIndex: "cu_name",
  108. width: 200,
  109. xtype: "",
  110. }, {
  111. conditionCode: 'cu_type',
  112. text: "客户类型",
  113. dataIndex: "cu_type",
  114. width: 110,
  115. xtype: "",
  116. }, {
  117. text: "业务员编号",
  118. dataIndex: "cu_sellercode",
  119. width:110
  120. }, {
  121. text: "业务员",
  122. dataIndex: "cu_sellername",
  123. width:110
  124. }, {
  125. text: "税率(%)",
  126. dataIndex: "cu_taxrate",
  127. xtype: 'numbercolumn',
  128. width:80,
  129. renderer: function (v) {
  130. return saas.util.BaseUtil.numberFormat(v, 2, false);
  131. }
  132. },{
  133. text: "应收款余额",
  134. dataIndex: "cu_leftamount",
  135. width:110,
  136. xtype: 'numbercolumn',
  137. renderer : function(v) {
  138. return saas.util.BaseUtil.numberFormat(v, 2, true);
  139. }
  140. }, {
  141. text: "结算天数",
  142. dataIndex: "cu_promisedays",
  143. width:110,
  144. xtype: 'numbercolumn',
  145. renderer: function (v) {
  146. return Ext.util.Format.number(v, '0');
  147. }
  148. }, {
  149. text: "额度",
  150. dataIndex: "cu_credit",
  151. width:110,
  152. xtype: 'numbercolumn',
  153. }, {
  154. text: "客户地址",
  155. dataIndex: "ca_address",
  156. width: 250
  157. }],
  158. //赋值
  159. dbfinds:[{
  160. from: 'id', to: 'vc_turncustid',ignore:true
  161. }, {
  162. from:'cu_code', to:'vc_turncustcode'
  163. },{
  164. from:'cu_name', to:'vc_turncustname'
  165. }],
  166. }) ;
  167. }
  168. },
  169. // 供应商
  170. 'dbfindtrigger[name=vc_vendname]':{
  171. beforerender: function (f) {
  172. Ext.apply(f, {
  173. dbColumns:[{
  174. text: "供应商ID",
  175. hidden: true,
  176. dataIndex: "id",
  177. xtype: "numbercolumn"
  178. },{
  179. text: "供应商编号",
  180. dataIndex: "ve_code",
  181. width: 150
  182. }, {
  183. text: "供应商名称",
  184. dataIndex: "ve_name",
  185. width: 200
  186. }, {
  187. text: "供应商类型",
  188. dataIndex: "ve_type",
  189. width: 110,
  190. }, {
  191. text: "税率(%)",
  192. dataIndex: "ve_taxrate",
  193. width: 80,
  194. xtype: 'numbercolumn',
  195. align:'end',
  196. renderer : function(v) {
  197. return saas.util.BaseUtil.numberFormat(v, 2, false);
  198. }
  199. }, {
  200. text: "应付款余额",
  201. dataIndex: "ve_leftamount",
  202. width:110,
  203. xtype: 'numbercolumn',
  204. renderer : function(v) {
  205. return saas.util.BaseUtil.numberFormat(v, 2, true);
  206. }
  207. },{
  208. text: "结算天数",
  209. dataIndex: "ve_promisedays",
  210. width: 110,
  211. xtype: 'numbercolumn',
  212. align: 'end',
  213. renderer : function(v) {
  214. return Ext.util.Format.number(v, '0');
  215. }
  216. }, {
  217. text: "纳税人识别号",
  218. dataIndex: "ve_nsrzh",
  219. width: 150
  220. }, {
  221. text: "开户银行",
  222. dataIndex: "ve_bankcode",
  223. width: 150
  224. }, {
  225. text: "银行账户",
  226. dataIndex: "ve_bankaccount",
  227. width: 200
  228. }],
  229. dbfinds: [{
  230. from: 'id',
  231. to: 'vc_vendid',
  232. ignore: true
  233. }, {
  234. from: 've_code',
  235. to: 'vc_vendcode'
  236. }, {
  237. from: 've_name',
  238. to: 'vc_vendname'
  239. }],
  240. });
  241. }
  242. },
  243. // 转入供应商
  244. 'dbfindtrigger[name=vc_turnvendname]':{
  245. beforerender: function (f) {
  246. Ext.apply(f, {
  247. dbColumns:[{
  248. text: "供应商ID",
  249. hidden: true,
  250. dataIndex: "id",
  251. xtype: "numbercolumn"
  252. },{
  253. text: "供应商编号",
  254. dataIndex: "ve_code",
  255. width: 150
  256. }, {
  257. text: "供应商名称",
  258. dataIndex: "ve_name",
  259. width: 200
  260. }, {
  261. text: "供应商类型",
  262. dataIndex: "ve_type",
  263. width: 110,
  264. }, {
  265. text: "税率(%)",
  266. dataIndex: "ve_taxrate",
  267. width: 80,
  268. xtype: 'numbercolumn',
  269. align:'end',
  270. renderer : function(v) {
  271. return saas.util.BaseUtil.numberFormat(v, 2, false);
  272. }
  273. }, {
  274. text: "应付款余额",
  275. dataIndex: "ve_leftamount",
  276. width:110,
  277. xtype: 'numbercolumn',
  278. renderer : function(v) {
  279. return saas.util.BaseUtil.numberFormat(v, 2, true);
  280. }
  281. },{
  282. text: "结算天数",
  283. dataIndex: "ve_promisedays",
  284. width: 110,
  285. xtype: 'numbercolumn',
  286. align: 'end',
  287. renderer : function(v) {
  288. return Ext.util.Format.number(v, '0');
  289. }
  290. }, {
  291. text: "纳税人识别号",
  292. dataIndex: "ve_nsrzh",
  293. width: 150
  294. }, {
  295. text: "开户银行",
  296. dataIndex: "ve_bankcode",
  297. width: 150
  298. }, {
  299. text: "银行账户",
  300. dataIndex: "ve_bankaccount",
  301. width: 200
  302. }],
  303. dbfinds: [{
  304. from: 'id',
  305. to: 'vc_turnvendid',
  306. ignore: true
  307. }, {
  308. from: 've_code',
  309. to: 'vc_turnvendcode'
  310. }, {
  311. from: 've_name',
  312. to: 'vc_turnvendname'
  313. }],
  314. });
  315. }
  316. },
  317. // 来源单号1
  318. 'oriOrderMutiDbfindTrigger[name=vd_slcode]': {
  319. beforerender: function (f) {
  320. Ext.apply(f, {
  321. dbfinds: [{
  322. from: 'id',
  323. to: 'vd_slid',ignore:true
  324. }, {
  325. from: 'sl_code',
  326. to: 'vd_slcode'
  327. },{
  328. from: 'sl_orderamount',
  329. to: 'vd_amount'
  330. },{
  331. from: 'sl_yamount',
  332. to: 'sl_yamount'
  333. },{
  334. from: 'sl_namount',
  335. to: 'sl_namount'
  336. },{
  337. from:'sl_date',
  338. to:'vd_sldate'
  339. },{
  340. from:'sl_kind',
  341. to:'vd_slkind'
  342. },{
  343. from: 'sl_namount',
  344. to: 'vd_nowbalance'
  345. }],
  346. });
  347. },
  348. beforequery: function(f) {
  349. var defaultCondition = this.getDefaultCondition(0);
  350. if(!defaultCondition) {
  351. return false;
  352. }
  353. Ext.apply(f, {
  354. defaultCondition: defaultCondition
  355. });
  356. },
  357. beforetriggerclick: function(f) {
  358. var defaultCondition = this.getDefaultCondition(0);
  359. if(!defaultCondition) {
  360. return false;
  361. }
  362. Ext.apply(f, {
  363. defaultCondition: defaultCondition
  364. });
  365. }
  366. },
  367. // 来源单号2
  368. 'oriOrderMutiDbfindTrigger[name=vcd_slcode]': {
  369. beforerender: function (f) {
  370. Ext.apply(f, {
  371. dbfinds: [{
  372. from: 'id',
  373. to: 'vcd_slid',ignore:true
  374. }, {
  375. from: 'sl_code',
  376. to: 'vcd_slcode'
  377. },{
  378. from: 'sl_orderamount',
  379. to: 'vcd_amount'
  380. },{
  381. from: 'sl_yamount',
  382. to: 'sl_yamount'
  383. },{
  384. from: 'sl_namount',
  385. to: 'sl_namount'
  386. },{
  387. from:'sl_date',
  388. to:'vcd_sldate'
  389. },{
  390. from:'sl_kind',
  391. to:'vcd_slkind'
  392. },{
  393. from: 'sl_namount',
  394. to: 'vcd_nowbalance'
  395. }],
  396. });
  397. },
  398. beforequery: function(f) {
  399. var defaultCondition = this.getDefaultCondition(1);
  400. if(!defaultCondition) {
  401. return false;
  402. }
  403. Ext.apply(f, {
  404. defaultCondition: defaultCondition
  405. });
  406. },
  407. beforetriggerclick: function(f) {
  408. var defaultCondition = this.getDefaultCondition(1);
  409. if(!defaultCondition) {
  410. return false;
  411. }
  412. Ext.apply(f, {
  413. defaultCondition: defaultCondition
  414. });
  415. }
  416. },
  417. });
  418. },
  419. getDefaultCondition: function(idx) {
  420. var me = this,
  421. form = me.getView(),
  422. formItems = form.formItems,
  423. viewModel = me.getViewModel(),
  424. acitveType = form.acitveType,
  425. etc = form.etc,
  426. defaultConditions = etc.defaultConditions,
  427. defaultConditionMode = defaultConditions[acitveType][idx];
  428. var reg = /(.*){(.*)}(.*)/g;
  429. var fieldName = defaultConditionMode.match(/(.*){(.*)}(.*)/)[2];
  430. var fieldLabel = Ext.Array.findBy(formItems, function(f) {
  431. return f.name == fieldName;
  432. }).fieldLabel;
  433. var fieldValue = viewModel.get(fieldName);
  434. if(!fieldValue) {
  435. saas.util.BaseUtil.showErrorToast('请先选择【' + '<span style="color: red;">' + fieldLabel + '</span>】');
  436. return null;
  437. }
  438. var defaultCondition = defaultConditionMode.replace(reg, '$1' + fieldValue + '$3');
  439. return defaultCondition;
  440. },
  441. /**
  442. * 清空所有从表数据
  443. */
  444. clearDetails: function() {
  445. var me = this;
  446. me.clearDetail0();
  447. me.clearDetail1();
  448. },
  449. /**
  450. * 清空第一个从表数据
  451. */
  452. clearDetail0: function(f, n, o) {
  453. var me = this,
  454. form = me.getView(),
  455. grid = form.query('detailGridField')[0];
  456. me.clearDetail(grid);
  457. },
  458. /**
  459. * 清空第二个从表数据
  460. */
  461. clearDetail1: function() {
  462. var me = this,
  463. form = me.getView(),
  464. grid = form.query('detailGridField')[1];
  465. me.clearDetail(grid);
  466. },
  467. /**
  468. * 清空一个从表数据
  469. */
  470. clearDetail: function(grid) {
  471. var datas = [],
  472. emptyRows = grid.emptyRows,
  473. detnoColumn = grid.detnoColumn,
  474. detno = 0,
  475. store = grid.getStore();
  476. Ext.Array.each(new Array(emptyRows), function() {
  477. detno += 1;
  478. var data = {};
  479. data[detnoColumn] = detno;
  480. datas.push(data);
  481. })
  482. store.removeAll();
  483. store.add(datas);
  484. // 不写该方法合计列会错位,这里触发afterEdit事件用来刷新grid
  485. store.getAt(0) ? store.afterEdit(store.getAt(0), ['']) : null;
  486. },
  487. onSave: function() {
  488. var me = this,
  489. form = me.getView(),
  490. viewModel = me.getViewModel(),
  491. store1 = viewModel.get('detail0').detailStore,
  492. store2 = viewModel.get('detail1').detailStore;
  493. var valid = form.isValid();
  494. if(!valid) {
  495. saas.util.BaseUtil.showErrorToast(form.invalidText);
  496. return false;
  497. }
  498. var sum_detail1 = store1.sum('vd_nowbalance'); // 从表1核销合计
  499. var sum_detail2 = store2.sum('vcd_nowbalance'); // 从表2核销合计
  500. viewModel.set("vc_amount1",sum_detail1);
  501. viewModel.set("vc_amount2",sum_detail2);
  502. me.save();
  503. },
  504. save:function(){
  505. var me = this,
  506. form = this.getView(),
  507. codeField = form.getForm().findField(form._codeField),
  508. detailCount = form.detailCount,
  509. viewModel = me.getViewModel(),
  510. codeModified = codeField && codeField.isDirty();
  511. //form里面数据
  512. var formData = form.getSaveData();
  513. var params = {
  514. main:formData.main
  515. };
  516. for(var i = 0; i < detailCount; i++) {
  517. params['items' + ( i + 1)] = formData['detail' + i];
  518. }
  519. params.codeModified = codeModified;
  520. form.setLoading(true);
  521. saas.util.BaseUtil.request({
  522. url: form._saveUrl,
  523. params: JSON.stringify(params),
  524. method: 'POST',
  525. })
  526. .then(function(localJson) {
  527. form.setLoading(false);
  528. if(localJson.success){
  529. var id = localJson.data.id;
  530. var code = localJson.data.code;
  531. form.initId = id;
  532. saas.util.FormUtil.loadData(form);
  533. saas.util.BaseUtil.showSuccessToast('保存成功');
  534. var newId = form.xtype + '-' + id;
  535. var newTitle = form._title + '(' + code + ')';
  536. saas.util.BaseUtil.refreshTabTitle(newId, newTitle);
  537. form.fireEvent('aftersave', true, form, localJson);
  538. }
  539. })
  540. .catch(function(res) {
  541. form.setLoading(false);
  542. console.error(res);
  543. saas.util.BaseUtil.showErrorToast('保存失败: ' + res.message);
  544. form.fireEvent('aftersave', false, form, res);
  545. });
  546. },
  547. audit: function() {
  548. var me = this,
  549. form = me.getView(),
  550. viewModel = me.getViewModel(),
  551. detailCount = form.detailCount,
  552. codeField = form.getForm().findField(form._codeField),
  553. codeModified = !form.initId || (codeField && codeField.isDirty());;
  554. //form里面数据
  555. var formData = form.getFormData();
  556. var params = {
  557. main: formData.main
  558. };
  559. for(var i = 0; i < detailCount; i++) {
  560. params['items' + ( i + 1)] = formData['detail' + i];
  561. }
  562. params.codeModified = codeModified;
  563. form.setLoading(true);
  564. saas.util.BaseUtil.request({
  565. url: form._auditUrl,
  566. params: JSON.stringify(params),
  567. method: 'POST',
  568. })
  569. .then(function(localJson) {
  570. form.setLoading(false);
  571. if(localJson.success){
  572. // 未保存直接审核会返回id
  573. if(localJson.data) {
  574. var id = localJson.data.id;
  575. var code = localJson.data.code;
  576. form.initId = id;
  577. var newId = form.xtype + '-' + id;
  578. var newTitle = form._title + '(' + code + ')';
  579. saas.util.BaseUtil.refreshTabTitle(newId, newTitle);
  580. }
  581. saas.util.FormUtil.loadData(form);
  582. form.setEditable(false);
  583. saas.util.BaseUtil.showSuccessToast('审核成功' + (localJson.message ? ': ' + localJson.message : ''));
  584. form.fireEvent('afteraudit', true, form, localJson);
  585. }
  586. })
  587. .catch(function(res) {
  588. form.setLoading(false);
  589. console.error(res);
  590. if(res.data) {
  591. var id = localJson.data.id;
  592. var code = localJson.data.code;
  593. form.initId = id;
  594. var newId = form.xtype + '-' + id;
  595. var newTitle = form._title + '(' + code + ')';
  596. saas.util.BaseUtil.refreshTabTitle(newId, newTitle);
  597. saas.util.FormUtil.loadData(form);
  598. }
  599. saas.util.BaseUtil.showErrorToast('审核失败: ' + res.message);
  600. form.fireEvent('afteraudit', false, form, res);
  601. });
  602. },
  603. myInitCopyData: function(formData) {
  604. var me = this,
  605. form = me.getView();
  606. //录入人,录入日期,审核人,审核日期清空
  607. formData.main['creatorId'] = saas.util.BaseUtil.getCurrentUser().id;
  608. formData.main['creatorName'] = saas.util.BaseUtil.getCurrentUser().realname;
  609. formData.main['createTime'] = Ext.Date.format(new Date(), 'Y-m-d H:i:s');
  610. formData.main['updaterId'] = undefined;
  611. formData.main['updaterName'] = undefined;
  612. formData.main['updateTime'] = undefined;
  613. formData.main[form._auditmanField] = undefined;
  614. formData.main[form._auditdateField] = undefined;
  615. return formData;
  616. }
  617. });