BatchDeal.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.common.BatchDeal', {
  3. extend: 'Ext.app.Controller',
  4. requires: ['erp.util.FormUtil', 'erp.util.GridUtil', 'erp.util.BaseUtil', 'erp.util.RenderUtil'],
  5. views:[
  6. 'common.batchDeal.Viewport','common.batchDeal.Form','common.batchDeal.GridPanel','core.trigger.AddDbfindTrigger',
  7. 'core.trigger.DbfindTrigger','core.form.FtField','core.form.FtFindField','core.form.ConDateField','core.button.TurnMeetingButton',
  8. 'core.trigger.TextAreaTrigger','core.form.YnField', 'core.form.MonthDateField','core.form.ConMonthDateField',
  9. 'core.grid.YnColumn'
  10. ],
  11. BaseUtil: Ext.create('erp.util.BaseUtil'),
  12. init:function(){
  13. var me = this;
  14. me.resized = false;
  15. this.control({
  16. 'erpBatchDealFormPanel': {
  17. alladded: function(form){
  18. var grid = Ext.getCmp('batchDealGridPanel');
  19. me.resize(form, grid);
  20. var items = form.items.items, autoQuery = false;
  21. Ext.each(items, function() {
  22. var val = getUrlParam(this.name);
  23. if(!Ext.isEmpty(val)) {
  24. this.setValue(val);
  25. autoQuery = true;
  26. if(this.xtype == 'dbfindtrigger') {
  27. this.autoDbfind('form', caller, this.name, this.name + " like '%" + val + "%'");
  28. }
  29. }
  30. });
  31. if(autoQuery) {
  32. setTimeout(function(){
  33. form.onQuery();
  34. }, 1000);
  35. }
  36. }
  37. },
  38. 'erpBatchDealGridPanel': {
  39. afterrender: function(grid){
  40. var form = Ext.getCmp('dealform');
  41. me.resize(form, grid);
  42. grid.store.on('datachanged', function(store){
  43. me.getProductWh(grid);
  44. });
  45. if(caller == 'ARBill!ToBillOut!Deal'||caller == 'APBill!ToBillOutAP!Deal'){
  46. grid.plugins[0].on('afteredit',function(){
  47. me.countAmount(grid);
  48. });
  49. grid.on('selectionchange',function(){
  50. me.countAmount(grid);
  51. });
  52. }
  53. }
  54. },
  55. 'erpVastDealButton': {
  56. click: function(btn){
  57. me.vastDeal(btn.ownerCt.ownerCt.dealUrl);
  58. }
  59. },
  60. 'erpVastAnalyseButton': {
  61. click: function(btn){
  62. me.vastDeal(btn.ownerCt.ownerCt.dealUrl);
  63. }
  64. },
  65. 'erpVastPrintButton': {
  66. click: function(btn){
  67. me.vastDeal(btn.ownerCt.ownerCt.dealUrl);
  68. }
  69. },
  70. 'erpVastAllotButton':{
  71. click:function(btn){
  72. me.vastDeal(btn.ownerCt.ownerCt.dealUrl);
  73. }
  74. },
  75. 'erpEndCRMButton':{
  76. click:function(btn){
  77. me.vastDeal('crm/chanceTurnEnd.action');
  78. }
  79. },
  80. 'monthdatefield': {
  81. afterrender: function(f) {
  82. var type = '', con = null;
  83. if(f.name == 'vo_yearmonth' && caller == 'Voucher!Audit!Deal') {
  84. type = 'MONTH-A';
  85. con = Ext.getCmp('condatefield');
  86. } else if(f.name == 'vo_yearmonth' && caller == 'Voucher!ResAudit!Deal') {
  87. type = 'MONTH-A';
  88. con = Ext.getCmp('condatefield');
  89. } else if(f.name == 'vo_yearmonth' && caller == 'CashFlowSet') {
  90. type = 'MONTH-A';
  91. con = Ext.getCmp('condatefield');
  92. }
  93. if(type != '') {
  94. this.getCurrentMonth(f, type, con);
  95. }
  96. },
  97. change: function(f) {
  98. if(f.name == 'vo_yearmonth' &&( caller == 'Voucher!Audit!Deal'||caller == 'Voucher!ResAudit!Deal')){
  99. if(!Ext.isEmpty(f.value)) {
  100. var d = Ext.ComponentQuery.query('condatefield');
  101. if(d && d.length > 0)
  102. d[0].setMonthValue(f.value);
  103. }
  104. }
  105. }
  106. },
  107. 'erpRefreshQtyButton': {
  108. click : function() {
  109. this.refreshQty(caller);
  110. }
  111. }
  112. });
  113. },
  114. resize: function(form, grid){
  115. if(!this.resized && form && grid && form.items.items.length > 0){
  116. var height = window.innerHeight,
  117. fh = form.getEl().down('.x-panel-body>.x-column-inner').getHeight();
  118. if(Ext.isIE){
  119. height = screen.height*0.75;
  120. }
  121. form.setHeight(35 + fh);
  122. grid.setHeight(height - fh - 35);
  123. this.resized = true;
  124. }
  125. },
  126. countGrid: function(){
  127. //重新计算合计栏值
  128. var grid = Ext.getCmp('batchDealGridPanel');
  129. Ext.each(grid.columns, function(column){
  130. if(column.summary){
  131. var sum = 0;
  132. Ext.each(grid.store.data.items, function(item){
  133. if(item.value != null && item.value != ''){
  134. sum += Number(item.value);
  135. }
  136. });
  137. Ext.getCmp(column.dataIndex + '_sum').setText(column.text + '(sum):' + sum);
  138. } else if(column.average) {
  139. var average = 0;
  140. Ext.each(grid.store.data.items, function(item){
  141. if(item.value != null && item.value != ''){
  142. average += Number(item.value);
  143. }
  144. });
  145. average = average/grid.store.data.items.length;
  146. Ext.getCmp(column.dataIndex + '_average').setText(column.text + '(average):' + average);
  147. } else if(column.count) {
  148. var count = 0;
  149. Ext.each(grid.store.data.items, function(item){
  150. if(item.value != null && item.value != ''){
  151. count++;
  152. }
  153. });
  154. Ext.getCmp(column.dataIndex + '_count').setText(column.text + '(count):' + count);
  155. }
  156. });
  157. },
  158. vastDeal: function(url){
  159. var me = this, grid = Ext.getCmp('batchDealGridPanel');
  160. var items = grid.selModel.getSelection();
  161. Ext.each(items, function(item, index){
  162. if(this.data[grid.keyField] != null && this.data[grid.keyField] != ''
  163. && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
  164. item.index = this.data[grid.keyField];
  165. grid.multiselected.push(item);
  166. }
  167. });
  168. var form = Ext.getCmp('dealform');
  169. var records = Ext.Array.unique(grid.multiselected);
  170. if(records.length > 0){
  171. if(contains(url,'common/form/vastPost.action',true)) {
  172. this.vastPost(grid, records, url);
  173. return;
  174. }
  175. var params = new Object();
  176. params.id=new Array();
  177. params.caller = caller;
  178. var data = new Array();
  179. var bool = false;
  180. Ext.each(records, function(record, index){
  181. var f = form.fo_detailMainKeyField;
  182. if((grid.keyField && this.data[grid.keyField] != null && this.data[grid.keyField] != ''
  183. && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0)
  184. ||(f && this.data[f] != null && this.data[f] != ''
  185. && this.data[f] != '0' && this.data[f] != 0)){
  186. bool = true;
  187. var o = new Object();
  188. if(grid.keyField){
  189. o[grid.keyField] = record.data[grid.keyField];
  190. } else {
  191. params.id[index] = record.data[form.fo_detailMainKeyField];
  192. }
  193. if(grid.toField){
  194. Ext.each(grid.toField, function(f, index){
  195. var v = Ext.getCmp(f).value;
  196. if(v != null && v.toString().trim() != '' && v.toString().trim() != 'null'){
  197. o[f] = v;
  198. } else {
  199. o[f] = '';
  200. }
  201. });
  202. }
  203. if(grid.necessaryFields){
  204. Ext.each(grid.necessaryFields, function(f, index){
  205. var v = record.data[f];
  206. if(Ext.isDate(v)){
  207. v = Ext.Date.toString(v);
  208. }
  209. if(Ext.isNumber(v)){
  210. v = (v).toString();
  211. }
  212. o[f] = v;
  213. });
  214. }
  215. data.push(o);
  216. }
  217. });
  218. if(bool && !me.dealing){
  219. params.data = unescape(Ext.JSON.encode(data).replace(/\\/g,"%"));
  220. me.dealing = true;
  221. var main = parent.Ext.getCmp("content-panel");
  222. main.getActiveTab().setLoading(true);//loading...
  223. Ext.Ajax.request({
  224. url : basePath + url,
  225. params: params,
  226. method : 'post',
  227. timeout: 6000000,
  228. callback : function(options,success,response){
  229. main.getActiveTab().setLoading(false);
  230. me.dealing = false;
  231. var localJson = new Ext.decode(response.responseText);
  232. if(localJson.exceptionInfo){
  233. var str = localJson.exceptionInfo;
  234. if(str.trim().substr(0, 12) == 'AFTERSUCCESS'){
  235. str = str.replace('AFTERSUCCESS', '');
  236. grid.multiselected = new Array();
  237. Ext.getCmp('dealform').onQuery();
  238. }
  239. showError(str);return;
  240. }
  241. if(localJson.success){
  242. if(localJson.log){
  243. showMessage("提示", localJson.log);
  244. }
  245. Ext.Msg.alert("提示", "处理成功!", function(){
  246. grid.multiselected = new Array();
  247. Ext.getCmp('dealform').onQuery();
  248. });
  249. }
  250. }
  251. });
  252. } else {
  253. showError("没有需要处理的数据!");
  254. }
  255. }
  256. },
  257. getCurrentMonth: function(f, type, con) {
  258. Ext.Ajax.request({
  259. url: basePath + 'fa/getMonth.action',
  260. params: {
  261. type: type
  262. },
  263. callback: function(opt, s, r) {
  264. var rs = Ext.decode(r.responseText);
  265. if(rs.data) {
  266. f.setValue(rs.data.PD_DETNO);
  267. if(con != null) {
  268. con.setMonthValue(rs.data.PD_DETNO);
  269. }
  270. }
  271. }
  272. });
  273. },
  274. vastPost: function(grid, records, url) {
  275. var me = this, win = Ext.getCmp('win-post');
  276. grid._postrecords = records;
  277. if(!win) {
  278. win = Ext.create('Ext.Window', {
  279. id: 'win-post',
  280. width: '70%',
  281. height: '60%',
  282. modal: true,
  283. layout: 'anchor',
  284. items: [{
  285. xtype: 'form',
  286. anchor: '100% 100%',
  287. bodyStyle: 'background: #f1f1f1;',
  288. layout: 'column',
  289. defaults: {
  290. xtype: 'checkbox',
  291. margin: '2 10 2 10',
  292. columnWidth: .33
  293. },
  294. items: [{
  295. xtype: 'displayfield',
  296. fieldLabel: '当前帐套',
  297. id: 'ma_name'
  298. },{
  299. xtype: 'displayfield',
  300. fieldLabel: '帐套描述',
  301. margin: '2 10 30 10',
  302. id: 'ma_function'
  303. },{
  304. xtype: 'displayfield',
  305. fieldLabel: '目标帐套',
  306. columnWidth: 1
  307. },{
  308. boxLabel: '全选',
  309. columnWidth: 1,
  310. listeners: {
  311. change: function(f) {
  312. var form = f.up('form');
  313. form.getForm().getFields().each(function(a){
  314. if(a.xtype == 'checkbox' && a.id != f.id) {
  315. a.setValue(f.value);
  316. }
  317. });
  318. }
  319. }
  320. }]
  321. }],
  322. buttonAlign: 'center',
  323. buttons: [{
  324. text: $I18N.common.button.erpConfirmButton,
  325. cls: 'x-btn-blue',
  326. handler: function(btn) {
  327. var w = btn.ownerCt.ownerCt, form = w.down('form'),
  328. from = form.down('#ma_name').value,
  329. items = form.query('checkbox[checked=true]'),
  330. data = new Array();
  331. Ext.each(items, function(item){
  332. if (item.ma_name)
  333. data.push(item.ma_name);
  334. });
  335. if(data.length > 0)
  336. me.post(w, grid, url, from, data.join(','));
  337. }
  338. },{
  339. text: $I18N.common.button.erpCloseButton,
  340. cls: 'x-btn-blue',
  341. handler: function(btn) {
  342. btn.ownerCt.ownerCt.hide();
  343. }
  344. }]
  345. });
  346. if(contains(url,'?_out=1',true)) this.getOutMasters(win);
  347. else this.getMasters(win);
  348. }
  349. win.show();
  350. },
  351. post: function(w, grid, url, from, to) {
  352. var records = grid._postrecords;
  353. w.setLoading(true);
  354. var d = new Array(), f = grid.keyField;
  355. Ext.each(records, function(r) {
  356. d.push(r.get(f));
  357. });
  358. Ext.Ajax.request({
  359. url: basePath + url,
  360. params: {
  361. caller: caller,
  362. data: d.join(','),
  363. to: to
  364. },
  365. callback: function(opt, s, r) {
  366. w.setLoading(false);
  367. if(s) {
  368. var rs = Ext.decode(r.responseText);
  369. if(rs.data) {
  370. showMessage('提示', rs.data);
  371. } else {
  372. alert('抛转成功!');
  373. }
  374. grid.multiselected = new Array();
  375. grid._postrecords = null;
  376. Ext.getCmp('dealform').onQuery();
  377. w.hide();
  378. }
  379. }
  380. });
  381. },
  382. /**
  383. * 加载系统所有帐套
  384. */
  385. getMasters: function(win){
  386. var me=this;
  387. Ext.Ajax.request({
  388. url: basePath + 'common/getMasters.action',
  389. method: 'get',
  390. callback: function(opt, s, res){
  391. var r = Ext.decode(res.responseText), c = r.currentMaster;
  392. if(r.masters){
  393. var form = win.down('form'), items = new Array();
  394. for(var i in r.masters) {
  395. var d = r.masters[i];
  396. if(d.ma_name != c) {
  397. if(d.ma_type == 3) {
  398. var o = {boxLabel: d.ma_name + '(' + d.ma_function + ')', ma_name: d.ma_name};
  399. items.push(o);
  400. }
  401. } else {
  402. form.down('#ma_name').setValue(c);
  403. form.down('#ma_function').setValue(d.ma_function);
  404. }
  405. }
  406. form.add(items);
  407. }
  408. }
  409. });
  410. },
  411. getOutMasters:function(win){
  412. Ext.Ajax.request({
  413. url: basePath + 'common/getOutMasters.action',
  414. method: 'get',
  415. callback: function(opt, s, res){
  416. var r = Ext.decode(res.responseText), c = r.currentMaster;
  417. if(r.data){
  418. var form = win.down('form'), items = new Array();
  419. Ext.Array.each(r.data,function(d){
  420. var o = {boxLabel: d.MO_LOCATION + '(' + d.MO_NAME + ')', ma_name: d.MO_LOCATION};
  421. items.push(o);
  422. });
  423. console.log(items);
  424. form.down('#ma_name').setValue(c);
  425. //form.down('#ma_function').setValue(d.ma_function);
  426. form.add(items);
  427. }
  428. }
  429. });
  430. },
  431. refreshQty : function(cal) {
  432. var tab = null;
  433. switch(cal) {
  434. case 'Purchase!ToCheckAccept!Deal' :
  435. tab = 'Purchase';
  436. break;
  437. case 'Purchase!ToNotify!Deal' :
  438. tab = 'Purchase';
  439. break;
  440. case 'Sale!ToAccept!Deal':
  441. tab = 'Sale';
  442. break;
  443. case 'SendNotify!ToProdIN!Deal':
  444. tab = 'SendNotify';
  445. break;
  446. }
  447. var form = Ext.getCmp('dealform');
  448. form.setLoading(true);
  449. Ext.Ajax.request({
  450. url : basePath + 'common/resetqty.action',
  451. params : {
  452. tab : tab
  453. },
  454. callback : function(opt, s, res) {
  455. form.setLoading(false);
  456. var r = Ext.decode(res.responseText);
  457. if (r.success) {
  458. alert('已转数量重置成功!');
  459. // form.onQuery();
  460. }
  461. }
  462. });
  463. },
  464. getProductWh: function(grid) {
  465. var prodfield = grid.getProdField();
  466. if(prodfield) {
  467. var codes = [];
  468. grid.store.each(function(d){
  469. codes.push("'" + d.get(prodfield) + "'");
  470. });
  471. Ext.Ajax.request({
  472. url: basePath + 'scm/product/getProductwh.action',
  473. params: {
  474. codes: codes.join(',')
  475. },
  476. callback: function (opt, s, r) {
  477. if(s) {
  478. var rs = Ext.decode(r.responseText);
  479. if(rs.data) {
  480. grid.productwh = rs.data;
  481. }
  482. }
  483. }
  484. });
  485. }
  486. },
  487. countAmount: function(grid){
  488. var me = this;
  489. var items = grid.selModel.selected.items;
  490. var countamount=0;
  491. var taxsum = 0;
  492. Ext.each(items,function(item,index){
  493. var a = Math.pow(10,6)*Number(item.data['abd_thisvoprice']);
  494. var b = Math.pow(10,2)*Number(item.data['abd_thisvoqty']);
  495. var rate = Math.pow(10,2)*Number(item.data['abd_taxrate']);//abd_taxrate
  496. var c = a*b;
  497. var d = c/Math.pow(10,8);
  498. var t = (rate*a*b)/(10000+rate);
  499. var tax = t/Math.pow(10,8);
  500. countamount = countamount + Number(me.BaseUtil.numberFormat(d,2));
  501. taxsum = taxsum + Number(me.BaseUtil.numberFormat(tax,2));
  502. });
  503. //金额合计 不能填写 自动显示所选数据条目的本次发票数*本次发票单价 的总和
  504. Ext.getCmp('pi_amounttotal').setValue(Ext.util.Format.number(countamount, "0.00"));
  505. Ext.getCmp('taxsum').setValue(Ext.util.Format.number(taxsum, "0.00"));
  506. },
  507. //确认投放数量,在修改完计划投放数量时候点击按钮,将选中行的数量保存,并且限制不能超过建议变更数
  508. ConfirmThrowQty:function(){
  509. var grid = Ext.getCmp('batchDealGridPanel');
  510. var count=0;
  511. if(grid.multiselected.length==0){
  512. var items = grid.selModel.getSelection();
  513. Ext.each(items, function(item, index){
  514. if(this.data[grid.keyField] != null && this.data[grid.keyField] != ''
  515. && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
  516. grid.multiselected.push(item);
  517. }
  518. });
  519. }
  520. var records = Ext.Array.unique(grid.multiselected);
  521. var gridStore = new Array();
  522. var dd;
  523. if(records.length>0){
  524. Ext.each(records, function(records, index){
  525. if(records.data.md_prodcode!=''){
  526. dd=new Object();
  527. dd['mr_mpsid']=records.data.mr_mpsid;
  528. gridStore[index] = Ext.JSON.encode(dd);
  529. count++;
  530. }
  531. });
  532. this.ConfirmThrow(gridStore);
  533. } else {
  534. showError("没有需要处理的数据!");
  535. }
  536. },
  537. ComfirmThrow:function(store){
  538. if(this.throwing) {
  539. alert('正在执行...不要重复点击!');
  540. return;
  541. }
  542. var me = this, gridstore = store;
  543. var main = parent.Ext.getCmp("content-panel");
  544. main.getActiveTab().setLoading(true);//loading...
  545. var btn = Ext.getCmp('erpConfirmThrowQtyButton');
  546. if(btn) btn.setDisabled(true);
  547. this.throwing = true;
  548. Ext.Ajax.request({
  549. url : basePath + "pm/MPSMain/NeedThrow.action",
  550. params: {
  551. mainCode:Ext.getCmp('md_mpscode').value,
  552. caller:caller,
  553. gridStore:unescape(gridstore.toString().replace(/\\/g,"%")),
  554. toWhere:'AUTO',
  555. toCode:Ext.getCmp('md_ordercode').value,
  556. condition:''
  557. },
  558. timeout: 60000,
  559. method : 'post',
  560. callback : function(options,success,response){
  561. btn.setDisabled(false);
  562. me.throwing = false;
  563. main.getActiveTab().setLoading(false);
  564. var localJson = new Ext.decode(response.responseText);
  565. if(localJson.exceptionInfo){
  566. showError(localJson.exceptionInfo);
  567. return "";
  568. }
  569. if(localJson.success){
  570. if(localJson.log){
  571. showMessage("提示", localJson.log);
  572. }
  573. Ext.Msg.alert("提示", "处理成功!", function(){
  574. Ext.getCmp('dealform').onQuery();
  575. });
  576. }
  577. }
  578. });
  579. }
  580. });