TestTeamplateDeal.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.plm.test.TestTeamplateDeal', {
  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. 'button[id=query]':{
  113. beforerender:function(btn){
  114. btn.handler=function(select){
  115. var grid = Ext.getCmp('batchDealGridPanel'),sel = [];
  116. if(!grid){
  117. grid = Ext.getCmp('grid');
  118. }
  119. grid.multiselected = new Array();
  120. if(select == true) {
  121. sel = grid.selModel.getSelection();
  122. }
  123. var form = Ext.getCmp('dealform');
  124. var cond = form.getCondition();
  125. if(Ext.isEmpty(cond)) {
  126. cond = '1=1';
  127. }
  128. cond="tt_id not in (select cbd_sourceid from checklistbasedetail left join checklistbase on cbd_cbid=cb_id where "+cond+")"
  129. var constr=form.beforeQuery(caller, cond);//执行查询前逻辑
  130. cond+=constr!=null && constr!=''?" AND ("+constr+")":"";
  131. var gridParam = { caller: caller, condition: cond + form.getOrderBy(grid) };
  132. if(!grid.bigVolume) {
  133. gridParam.start = 1;
  134. gridParam.end = 1000;
  135. }
  136. if(grid.maxDataSize) {
  137. gridParam.start = 1;
  138. gridParam.end = grid.maxDataSize;
  139. }
  140. if(grid.getGridColumnsAndStore){
  141. grid.getGridColumnsAndStore(grid, 'common/singleGridPanel.action', gridParam, "");
  142. } else {
  143. //grid.GridUtil.getGridColumnsAndStore(grid, 'common/singleGridPanel.action', gridParam, "");
  144. grid.GridUtil.loadNewStore(grid, gridParam);
  145. }
  146. if(select == true) {
  147. Ext.each(sel, function(){
  148. grid.selModel.select(this.index);
  149. });
  150. }
  151. };
  152. }
  153. }
  154. });
  155. },
  156. resize: function(form, grid){
  157. if(!this.resized && form && grid && form.items.items.length > 0){
  158. var height = window.innerHeight,
  159. fh = form.getEl().down('.x-panel-body>.x-column-inner').getHeight();
  160. if(Ext.isIE){
  161. height = screen.height*0.75;
  162. }
  163. form.setHeight(35 + fh);
  164. grid.setHeight(height - fh - 35);
  165. this.resized = true;
  166. }
  167. },
  168. countGrid: function(){
  169. //重新计算合计栏值
  170. var grid = Ext.getCmp('batchDealGridPanel');
  171. Ext.each(grid.columns, function(column){
  172. if(column.summary){
  173. var sum = 0;
  174. Ext.each(grid.store.data.items, function(item){
  175. if(item.value != null && item.value != ''){
  176. sum += Number(item.value);
  177. }
  178. });
  179. Ext.getCmp(column.dataIndex + '_sum').setText(column.text + '(sum):' + sum);
  180. } else if(column.average) {
  181. var average = 0;
  182. Ext.each(grid.store.data.items, function(item){
  183. if(item.value != null && item.value != ''){
  184. average += Number(item.value);
  185. }
  186. });
  187. average = average/grid.store.data.items.length;
  188. Ext.getCmp(column.dataIndex + '_average').setText(column.text + '(average):' + average);
  189. } else if(column.count) {
  190. var count = 0;
  191. Ext.each(grid.store.data.items, function(item){
  192. if(item.value != null && item.value != ''){
  193. count++;
  194. }
  195. });
  196. Ext.getCmp(column.dataIndex + '_count').setText(column.text + '(count):' + count);
  197. }
  198. });
  199. },
  200. vastDeal: function(url){
  201. var me = this, grid = Ext.getCmp('batchDealGridPanel');
  202. var items = grid.selModel.getSelection();
  203. Ext.each(items, function(item, index){
  204. if(this.data[grid.keyField] != null && this.data[grid.keyField] != ''
  205. && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
  206. item.index = this.data[grid.keyField];
  207. grid.multiselected.push(item);
  208. }
  209. });
  210. var form = Ext.getCmp('dealform');
  211. var records = Ext.Array.unique(grid.multiselected);
  212. if(records.length > 0){
  213. if('common/form/vastPost.action' == url) {
  214. this.vastPost(grid, records, url);
  215. return;
  216. }
  217. var params = new Object();
  218. params.id=new Array();
  219. params.caller = caller;
  220. var data = new Array();
  221. var bool = false;
  222. Ext.each(records, function(record, index){
  223. var f = form.fo_detailMainKeyField;
  224. if((grid.keyField && this.data[grid.keyField] != null && this.data[grid.keyField] != ''
  225. && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0)
  226. ||(f && this.data[f] != null && this.data[f] != ''
  227. && this.data[f] != '0' && this.data[f] != 0)){
  228. bool = true;
  229. var o = new Object();
  230. if(grid.keyField){
  231. o[grid.keyField] = record.data[grid.keyField];
  232. } else {
  233. params.id[index] = record.data[form.fo_detailMainKeyField];
  234. }
  235. if(grid.toField){
  236. Ext.each(grid.toField, function(f, index){
  237. var v = Ext.getCmp(f).value;
  238. if(v != null && v.toString().trim() != '' && v.toString().trim() != 'null'){
  239. o[f] = v;
  240. } else {
  241. o[f] = '';
  242. }
  243. });
  244. }
  245. if(grid.necessaryFields){
  246. Ext.each(grid.necessaryFields, function(f, index){
  247. var v = record.data[f];
  248. if(Ext.isDate(v)){
  249. v = Ext.Date.toString(v);
  250. }
  251. if(Ext.isNumber(v)){
  252. v = (v).toString();
  253. }
  254. o[f] = v;
  255. });
  256. }
  257. data.push(o);
  258. }
  259. });
  260. if(bool && !me.dealing){
  261. params.data = unescape(Ext.JSON.encode(data).replace(/\\/g,"%"));
  262. me.dealing = true;
  263. var main = parent.Ext.getCmp("content-panel");
  264. main.getActiveTab().setLoading(true);//loading...
  265. Ext.Ajax.request({
  266. url : basePath + url,
  267. params: params,
  268. method : 'post',
  269. timeout: 6000000,
  270. callback : function(options,success,response){
  271. main.getActiveTab().setLoading(false);
  272. me.dealing = false;
  273. var localJson = new Ext.decode(response.responseText);
  274. if(localJson.exceptionInfo){
  275. var str = localJson.exceptionInfo;
  276. if(str.trim().substr(0, 12) == 'AFTERSUCCESS'){
  277. str = str.replace('AFTERSUCCESS', '');
  278. grid.multiselected = new Array();
  279. Ext.getCmp('dealform').onQuery();
  280. }
  281. showError(str);return;
  282. }
  283. if(localJson.success){
  284. if(localJson.log){
  285. showMessage("提示", localJson.log);
  286. }
  287. Ext.Msg.alert("提示", "处理成功!", function(){
  288. grid.multiselected = new Array();
  289. Ext.getCmp('dealform').onQuery();
  290. });
  291. }
  292. }
  293. });
  294. } else {
  295. showError("没有需要处理的数据!");
  296. }
  297. }
  298. },
  299. getCurrentMonth: function(f, type, con) {
  300. Ext.Ajax.request({
  301. url: basePath + 'fa/getMonth.action',
  302. params: {
  303. type: type
  304. },
  305. callback: function(opt, s, r) {
  306. var rs = Ext.decode(r.responseText);
  307. if(rs.data) {
  308. f.setValue(rs.data.PD_DETNO);
  309. if(con != null) {
  310. con.setMonthValue(rs.data.PD_DETNO);
  311. }
  312. }
  313. }
  314. });
  315. },
  316. vastPost: function(grid, records, url) {
  317. var me = this, win = Ext.getCmp('win-post');
  318. grid._postrecords = records;
  319. if(!win) {
  320. win = Ext.create('Ext.Window', {
  321. id: 'win-post',
  322. width: '70%',
  323. height: '60%',
  324. modal: true,
  325. layout: 'anchor',
  326. items: [{
  327. xtype: 'form',
  328. anchor: '100% 100%',
  329. bodyStyle: 'background: #f1f1f1;',
  330. layout: 'column',
  331. defaults: {
  332. xtype: 'checkbox',
  333. margin: '2 10 2 10',
  334. columnWidth: .33
  335. },
  336. items: [{
  337. xtype: 'displayfield',
  338. fieldLabel: '当前帐套',
  339. id: 'ma_name'
  340. },{
  341. xtype: 'displayfield',
  342. fieldLabel: '帐套描述',
  343. margin: '2 10 30 10',
  344. id: 'ma_function'
  345. },{
  346. xtype: 'displayfield',
  347. fieldLabel: '目标帐套',
  348. columnWidth: 1
  349. },{
  350. boxLabel: '全选',
  351. columnWidth: 1,
  352. listeners: {
  353. change: function(f) {
  354. var form = f.up('form');
  355. form.getForm().getFields().each(function(a){
  356. if(a.xtype == 'checkbox' && a.id != f.id) {
  357. a.setValue(f.value);
  358. }
  359. });
  360. }
  361. }
  362. }]
  363. }],
  364. buttonAlign: 'center',
  365. buttons: [{
  366. text: $I18N.common.button.erpConfirmButton,
  367. cls: 'x-btn-blue',
  368. handler: function(btn) {
  369. var w = btn.ownerCt.ownerCt, form = w.down('form'),
  370. from = form.down('#ma_name').value,
  371. items = form.query('checkbox[checked=true]'),
  372. data = new Array();
  373. Ext.each(items, function(item){
  374. if (item.ma_name)
  375. data.push(item.ma_name);
  376. });
  377. if(data.length > 0)
  378. me.post(w, grid, url, from, data.join(','));
  379. }
  380. },{
  381. text: $I18N.common.button.erpCloseButton,
  382. cls: 'x-btn-blue',
  383. handler: function(btn) {
  384. btn.ownerCt.ownerCt.hide();
  385. }
  386. }]
  387. });
  388. this.getMasters(win);
  389. }
  390. win.show();
  391. },
  392. post: function(w, grid, url, from, to) {
  393. var records = grid._postrecords;
  394. w.setLoading(true);
  395. var d = new Array(), f = grid.keyField;
  396. Ext.each(records, function(r) {
  397. d.push(r.get(f));
  398. });
  399. Ext.Ajax.request({
  400. url: basePath + url,
  401. params: {
  402. caller: caller,
  403. data: d.join(','),
  404. to: to
  405. },
  406. callback: function(opt, s, r) {
  407. w.setLoading(false);
  408. if(s) {
  409. var rs = Ext.decode(r.responseText);
  410. if(rs.data) {
  411. showMessage('提示', rs.data);
  412. } else {
  413. alert('抛转成功!');
  414. }
  415. grid.multiselected = new Array();
  416. grid._postrecords = null;
  417. Ext.getCmp('dealform').onQuery();
  418. w.hide();
  419. }
  420. }
  421. });
  422. },
  423. /**
  424. * 加载系统所有帐套
  425. */
  426. getMasters: function(win){
  427. Ext.Ajax.request({
  428. url: basePath + 'common/getMasters.action',
  429. method: 'get',
  430. callback: function(opt, s, res){
  431. var r = Ext.decode(res.responseText), c = r.currentMaster;
  432. if(r.masters){
  433. var form = win.down('form'), items = new Array();
  434. for(var i in r.masters) {
  435. var d = r.masters[i];
  436. if(d.ma_name != c) {
  437. if(d.ma_type == 3) {
  438. var o = {boxLabel: d.ma_name + '(' + d.ma_function + ')', ma_name: d.ma_name};
  439. items.push(o);
  440. }
  441. } else {
  442. form.down('#ma_name').setValue(c);
  443. form.down('#ma_function').setValue(d.ma_function);
  444. }
  445. }
  446. form.add(items);
  447. }
  448. }
  449. });
  450. },
  451. refreshQty : function(cal) {
  452. var tab = null;
  453. switch(cal) {
  454. case 'Purchase!ToCheckAccept!Deal' :
  455. tab = 'Purchase';
  456. break;
  457. case 'Purchase!ToNotify!Deal' :
  458. tab = 'Purchase';
  459. break;
  460. case 'Sale!ToAccept!Deal':
  461. tab = 'Sale';
  462. break;
  463. case 'SendNotify!ToProdIN!Deal':
  464. tab = 'SendNotify';
  465. break;
  466. }
  467. var form = Ext.getCmp('dealform');
  468. form.setLoading(true);
  469. Ext.Ajax.request({
  470. url : basePath + 'common/resetqty.action',
  471. params : {
  472. tab : tab
  473. },
  474. callback : function(opt, s, res) {
  475. form.setLoading(false);
  476. var r = Ext.decode(res.responseText);
  477. if (r.success) {
  478. alert('已转数量重置成功!');
  479. // form.onQuery();
  480. }
  481. }
  482. });
  483. },
  484. getProductWh: function(grid) {
  485. var prodfield = grid.getProdField();
  486. if(prodfield) {
  487. var codes = [];
  488. grid.store.each(function(d){
  489. codes.push("'" + d.get(prodfield) + "'");
  490. });
  491. Ext.Ajax.request({
  492. url: basePath + 'scm/product/getProductwh.action',
  493. params: {
  494. codes: codes.join(',')
  495. },
  496. callback: function (opt, s, r) {
  497. if(s) {
  498. var rs = Ext.decode(r.responseText);
  499. if(rs.data) {
  500. grid.productwh = rs.data;
  501. }
  502. }
  503. }
  504. });
  505. }
  506. },
  507. countAmount: function(grid){
  508. console.log('111');
  509. var me = this;
  510. var items = grid.selModel.selected.items;
  511. var countamount=0;
  512. var taxsum = 0;
  513. Ext.each(items,function(item,index){
  514. var a = Math.pow(10,6)*Number(item.data['abd_thisvoprice']);
  515. var b = Math.pow(10,2)*Number(item.data['abd_thisvoqty']);
  516. var rate = Math.pow(10,2)*Number(item.data['abd_taxrate']);//abd_taxrate
  517. var c = a*b;
  518. var d = c/Math.pow(10,8);
  519. var t = (rate*a*b)/(10000+rate);
  520. var tax = t/Math.pow(10,8);
  521. // console.log('t-->'+t);
  522. // console.log('d-->'+d);
  523. // console.log('tax-->'+tax);
  524. countamount = countamount + Number(me.BaseUtil.numberFormat(d,2));
  525. taxsum = taxsum + Number(me.BaseUtil.numberFormat(tax,2));
  526. // console.log('countamount-->'+countamount);
  527. // console.log('taxsum-->'+taxsum);
  528. });
  529. //金额合计 不能填写 自动显示所选数据条目的本次发票数*本次发票单价 的总和
  530. Ext.getCmp('pi_amounttotal').setValue(Ext.util.Format.number(countamount, "0.00"));
  531. Ext.getCmp('taxsum').setValue(Ext.util.Format.number(taxsum, "0.00"));
  532. },
  533. //确认投放数量,在修改完计划投放数量时候点击按钮,将选中行的数量保存,并且限制不能超过建议变更数
  534. ConfirmThrowQty:function(){
  535. var grid = Ext.getCmp('batchDealGridPanel');
  536. var count=0;
  537. if(grid.multiselected.length==0){
  538. var items = grid.selModel.getSelection();
  539. Ext.each(items, function(item, index){
  540. if(this.data[grid.keyField] != null && this.data[grid.keyField] != ''
  541. && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
  542. grid.multiselected.push(item);
  543. }
  544. });
  545. }
  546. var records = Ext.Array.unique(grid.multiselected);
  547. var gridStore = new Array();
  548. var dd;
  549. if(records.length>0){
  550. Ext.each(records, function(records, index){
  551. if(records.data.md_prodcode!=''){
  552. dd=new Object();
  553. dd['mr_mpsid']=records.data.mr_mpsid;
  554. gridStore[index] = Ext.JSON.encode(dd);
  555. count++;
  556. }
  557. });
  558. console.log(gridStore);
  559. this.ConfirmThrow(gridStore);
  560. } else {
  561. showError("没有需要处理的数据!");
  562. }
  563. },
  564. ComfirmThrow:function(store){
  565. if(this.throwing) {
  566. alert('正在执行...不要重复点击!');
  567. return;
  568. }
  569. var me = this, gridstore = store;
  570. var main = parent.Ext.getCmp("content-panel");
  571. main.getActiveTab().setLoading(true);//loading...
  572. var btn = Ext.getCmp('erpConfirmThrowQtyButton');
  573. if(btn) btn.setDisabled(true);
  574. this.throwing = true;
  575. Ext.Ajax.request({
  576. url : basePath + "pm/MPSMain/NeedThrow.action",
  577. params: {
  578. mainCode:Ext.getCmp('md_mpscode').value,
  579. caller:caller,
  580. gridStore:unescape(gridstore.toString().replace(/\\/g,"%")),
  581. toWhere:'AUTO',
  582. toCode:Ext.getCmp('md_ordercode').value,
  583. condition:''
  584. },
  585. timeout: 60000,
  586. method : 'post',
  587. callback : function(options,success,response){
  588. btn.setDisabled(false);
  589. me.throwing = false;
  590. main.getActiveTab().setLoading(false);
  591. var localJson = new Ext.decode(response.responseText);
  592. if(localJson.exceptionInfo){
  593. showError(localJson.exceptionInfo);
  594. return "";
  595. }
  596. if(localJson.success){
  597. if(localJson.log){
  598. showMessage("提示", localJson.log);
  599. }
  600. Ext.Msg.alert("提示", "处理成功!", function(){
  601. Ext.getCmp('dealform').onQuery();
  602. });
  603. }
  604. }
  605. });
  606. }
  607. });