FormPanelController.js 27 KB

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