ShortForecast.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.scm.sale.ShortForecast', {
  3. extend: 'Ext.app.Controller',
  4. FormUtil: Ext.create('erp.util.FormUtil'),
  5. GridUtil: Ext.create('erp.util.GridUtil'),
  6. BaseUtil: Ext.create('erp.util.BaseUtil'),
  7. views:[
  8. 'scm.sale.ShortForecast','core.form.Panel','scm.sale.ShortForecastGrid','core.button.DeleteAllDetails','core.button.LoadMake','core.button.ImportExcel',
  9. 'core.button.Add','core.button.Save','core.button.Close','core.form.MultiField','core.button.Scan','core.button.ConfirmRange',
  10. 'core.button.Submit','core.button.ResSubmit','core.button.Audit','core.button.ResAudit','core.button.RunLackMaterial','core.grid.YnColumn',
  11. 'core.button.Update','core.button.Delete','core.form.YnField','core.button.LoadMake','core.button.LackMateriallResult',
  12. 'core.trigger.TextAreaTrigger','core.trigger.DbfindTrigger','core.button.InMaterialNeed','core.button.MaterialLackTwo'
  13. ],
  14. init:function(){
  15. var statuscode=null;
  16. var me = this;
  17. this.control({
  18. 'erpSaveButton': {
  19. click: function(btn){
  20. var form = me.getForm(btn);
  21. var codeField=Ext.getCmp(form.codeField);
  22. if(codeField.value == null || codeField.value == ''){
  23. me.BaseUtil.getRandomNumber();//自动添加编号
  24. }
  25. this.FormUtil.beforeSave(this);
  26. }
  27. },
  28. 'erpShortForecastGrid':{
  29. select:me.onGridItemClick
  30. },
  31. 'erpCloseButton': {
  32. click: function(btn){
  33. this.FormUtil.beforeClose(this);
  34. }
  35. },
  36. 'erpUpdateButton': {
  37. click: function(btn){
  38. this.update(this);
  39. },
  40. afterrender:function(btn){
  41. statuscode=Ext.getCmp('sf_statuscode').getValue();
  42. if(statuscode!='ENTERING'){
  43. btn.hide();
  44. }
  45. }
  46. },
  47. 'erpDeleteButton': {
  48. click: function(btn){
  49. me.FormUtil.onDelete(Ext.getCmp('wc_id').value);
  50. },
  51. afterrender:function(btn){
  52. statuscode=Ext.getCmp('sf_statuscode').getValue();
  53. if(statuscode!='ENTERING'){
  54. btn.hide();
  55. }
  56. }
  57. },
  58. 'erpAddButton': {
  59. click: function(btn){
  60. me.FormUtil.onAdd('SaleForecast!Short', '新增短期预测', 'jsps/scm/sale/ShortForecast.jsp');
  61. }
  62. },
  63. 'erpConfirmRangeButton':{
  64. click: function(btn){
  65. var grid=Ext.getCmp('grid');
  66. var fromdate=Ext.getCmp('sf_fromdate').getValue();
  67. var todate=Ext.getCmp('sf_todate').getValue();
  68. var type=Ext.getCmp('sf_method');
  69. var lastcolumns=new Array();
  70. var startfield="";
  71. var endfield="";
  72. Ext.Array.each(gridcolumns,function(item,m){
  73. if(item.dataIndex=='sf_needdate'){
  74. var columns=new Array();
  75. var count=(todate-fromdate)/(86400000*7);
  76. for(var i=0;i<count+1;i++){
  77. endfield=Ext.Date.format(Ext.Date.add(startdate,Ext.Date.DAY,7*(i+1)),'Y-m-d');
  78. startfield=Ext.Date.format(Ext.Date.add(startdate,Ext.Date.DAY,7*i),'Y-m-d');
  79. columns.push({
  80. text:startfield.substring(5,10)+"~"+endfield.substring(5,10),
  81. dataIndex:startfield+"#"+endfield,
  82. width : 120,
  83. sortable : true
  84. });
  85. }
  86. item.columns=columns;
  87. }
  88. lastcolumns[m]=item;
  89. });
  90. grid.reconfigure(grid.store,gridcolumns);
  91. grid.store.loadData(griddata);
  92. }
  93. },
  94. 'erpSubmitButton': {
  95. afterrender:function(btn){
  96. if(statuscode!='ENTERING'){
  97. btn.hide();
  98. }
  99. },
  100. click: function(btn){
  101. me.FormUtil.onSubmit(Ext.getCmp('wc_id').value);
  102. }
  103. },
  104. 'erpResSubmitButton': {
  105. afterrender:function(btn){
  106. if(statuscode!='COMMITED'){
  107. btn.hide();
  108. }
  109. },
  110. click: function(btn){
  111. me.FormUtil.onResSubmit(Ext.getCmp('wc_id').value);
  112. }
  113. },
  114. 'erpAuditButton': {
  115. afterrender:function(btn){
  116. if(statuscode!='COMMITED'){
  117. btn.hide();
  118. }
  119. },
  120. click: function(btn){
  121. me.FormUtil.onAudit(Ext.getCmp('wc_id').value);
  122. }
  123. },
  124. 'erpResAuditButton': {
  125. afterrender:function(btn){
  126. if(statuscode!='AUDITED'){
  127. btn.hide();
  128. }
  129. },
  130. click: function(btn){
  131. me.FormUtil.onResAudit(Ext.getCmp('wc_id').value);
  132. }
  133. },
  134. 'multifield[name=wc_recorder]':{
  135. beforerender:function(field){
  136. field.items.items[1].xtype='datefield';
  137. },
  138. afterrender:function(field){
  139. if(!field.secondvalue){
  140. field.items.items[1].setValue(Ext.Date.format(new Date(), 'Y-m-d'));
  141. }
  142. }
  143. },
  144. 'erpImportExcelButton':{
  145. afterrender:function(btn){
  146. if(statuscode!='ENTERING'){
  147. btn.hide();
  148. }
  149. },
  150. },
  151. 'filefield[id=excelfile]':{
  152. change: function(field){
  153. var filename = '';
  154. if(contains(field.value, "\\", true)){
  155. filename = field.value.substring(field.value.lastIndexOf('\\') + 1);
  156. } else {
  157. filename = field.value.substring(field.value.lastIndexOf('/') + 1);
  158. }
  159. field.ownerCt.getForm().submit({
  160. url: basePath + 'common/upload.action?em_code=' + em_code,
  161. waitMsg: "正在解析文件信息",
  162. success: function(fp,o){
  163. if(o.result.error){
  164. showError(o.result.error);
  165. } else {
  166. var filePath=o.result.filepath;
  167. var keyValue=Ext.getCmp('wc_id').getValue();
  168. Ext.Ajax.request({//拿到form的items
  169. url : basePath + 'pm/make/ImportExcel.action',
  170. params:{
  171. id:keyValue,
  172. fileId:filePath
  173. },
  174. method : 'post',
  175. callback : function(options,success,response){
  176. var result=Ext.decode(response.responseText);
  177. if(result.success){
  178. var grid=Ext.getCmp('grid');
  179. var param={
  180. caller:'WCPlan',
  181. condition:'wd_wcid='+keyValue
  182. };
  183. grid.GridUtil.loadNewStore(grid,param);
  184. }else{
  185. if(result.exceptionInfo != null){
  186. showError(res.exceptionInfo);return;
  187. }
  188. }
  189. }
  190. });
  191. }
  192. }
  193. });
  194. }
  195. },
  196. 'erpDeleteAllDetailsButton':{
  197. afterrender:function(btn){
  198. if(statuscode!='ENTERING'){
  199. btn.hide();
  200. }
  201. },
  202. click: function(btn){
  203. me.DeleteAllDetails();
  204. }
  205. },
  206. 'erpLoadMakeButton':{
  207. afterrender:function(btn){
  208. if(statuscode!='ENTERING'){
  209. btn.hide();
  210. }
  211. },
  212. click: function(btn){
  213. var form=Ext.getCmp('form');
  214. var keyField=form.keyField;
  215. var KeyValue=Ext.getCmp(keyField).value;
  216. if(KeyValue==null||KeyValue==''){
  217. showError('请先保存记录');
  218. }
  219. var me = this;
  220. var url=basePath+"jsps/pm/make/makeResource.jsp";
  221. var panel = Ext.getCmp("sourceid=" +KeyValue);
  222. var main = parent.Ext.getCmp("content-panel");
  223. var panelId= main.getActiveTab().id;
  224. var urlcondition=" ma_code not in (select wd_makecode from wcplandetail where wd_wcid="+KeyValue+")";
  225. main.getActiveTab().currentGrid = Ext.getCmp('grid');
  226. if(!panel){
  227. var title = "";
  228. if (KeyValue.toString().length>4) {
  229. title = KeyValue.toString().substring(KeyValue.toString().length-4);
  230. } else {
  231. title = KeyValue;
  232. }
  233. panel = {
  234. title:'生产排程来源('+KeyValue+')',
  235. tag : 'iframe',
  236. tabConfig:{tooltip:'生产排程来源('+title+')'},
  237. frame : true,
  238. border : false,
  239. layout : 'fit',
  240. iconCls : 'x-tree-icon-tab-tab',
  241. html : '<iframe id="iframe_maindetail_'+caller+"_"+KeyValue+'" src="'+url+'?urlcondition='+urlcondition+'&whoami=WCPlanSource&_noc=1&keyValue='+KeyValue+'&panelId='+panelId+'" height="100%" width="100%" frameborder="0" scrolling="no"></iframe>',
  242. closable : true,
  243. listeners : {
  244. close : function(){
  245. main.setActiveTab(main.getActiveTab().id);
  246. }
  247. }
  248. };
  249. me.FormUtil.openTab(panel,"sourceid=" + KeyValue);
  250. }else{
  251. main.setActiveTab(panel);
  252. }
  253. }
  254. },
  255. 'erpRunLackMaterialButton':{
  256. afterrender:function(btn){
  257. if(statuscode!='AUDITED'){
  258. btn.hide();
  259. }
  260. },
  261. click: function(btn){
  262. if (!confirm('确定要运算缺料?')){
  263. return;
  264. }
  265. var code = Ext.getCmp('wc_code').getValue();
  266. var mb = new Ext.window.MessageBox();
  267. mb.wait('正在运算中','请稍后...');
  268. Ext.Ajax.request({//拿到form的items
  269. url : basePath + "pm/make/RunLackMaterial.action",
  270. params:{
  271. code:code
  272. },
  273. method : 'post',
  274. timeout: 300000,
  275. callback : function(options,success,response){
  276. mb.close();
  277. var result=Ext.decode(response.responseText);
  278. if(result.success){
  279. Ext.Msg.alert('提示','运算成功!',function(){
  280. window.location.reload();
  281. });
  282. }else{
  283. if(result.exceptionInfo != null){
  284. showError(result.exceptionInfo);return;
  285. }
  286. }
  287. }
  288. });
  289. }
  290. },
  291. 'erpLackMateriallResultButton':{
  292. afterrender:function(btn){
  293. if(statuscode!='AUDITED'){
  294. btn.hide();
  295. }
  296. },
  297. click: function(btn){
  298. var form=Ext.getCmp('form');
  299. var keyField=form.keyField;
  300. var KeyValue=Ext.getCmp(keyField).value;
  301. if(KeyValue==null||KeyValue==''){
  302. showError('请先保存记录');
  303. }
  304. var me = this;
  305. var url=basePath+"jsps/pm/make/WCPlanResult.jsp";
  306. var panel = Ext.getCmp("lackResultid=" +KeyValue);
  307. var main = parent.Ext.getCmp("content-panel");
  308. var urlCondition='ml_planid='+KeyValue;
  309. main.getActiveTab().currentGrid = Ext.getCmp('grid');
  310. if(!panel){
  311. var title = "";
  312. if (KeyValue.toString().length>4) {
  313. title = KeyValue.toString().substring(KeyValue.toString().length-4);
  314. } else {
  315. title = KeyValue;
  316. }
  317. panel = {
  318. title:'排产缺料运算结果('+KeyValue+')',
  319. tag : 'iframe',
  320. tabConfig:{tooltip:'排产缺料运算结果('+title+')'},
  321. frame : true,
  322. border : false,
  323. layout : 'fit',
  324. iconCls : 'x-tree-icon-tab-tab',
  325. html : '<iframe id="iframe_maindetail_'+caller+"_"+KeyValue+'" src="'+url+'?whoami=MaterialLackForWCPlan&_noc=1&urlcondition='+urlCondition+'" height="100%" width="100%" frameborder="0" scrolling="no"></iframe>',
  326. closable : true,
  327. listeners : {
  328. close : function(){
  329. main.setActiveTab(main.getActiveTab().id);
  330. }
  331. }
  332. };
  333. me.FormUtil.openTab(panel,"lackResultid=" + KeyValue);
  334. }else{
  335. main.setActiveTab(panel);
  336. }
  337. }
  338. },
  339. 'erpMaterialLackTwoButton':{
  340. afterrender:function(btn){
  341. if(statuscode!='AUDITED'){
  342. btn.hide();
  343. }
  344. },
  345. click: function(btn){
  346. var form=Ext.getCmp('form');
  347. var keyField=form.keyField;
  348. var KeyValue=Ext.getCmp(keyField).value;
  349. var startdate=Ext.getCmp('wc_fromdate').value;
  350. var enddate=Ext.getCmp('wc_todate').value;
  351. if(KeyValue==null||KeyValue==''){
  352. showError('请先保存记录');
  353. }
  354. var me = this;
  355. var url=basePath+"jsps/pm/make/WCPlanMaterialLack.jsp";
  356. var panel = Ext.getCmp("towsourceid=" +KeyValue);
  357. var main = parent.Ext.getCmp("content-panel");
  358. var urlCondition='ml_planid='+KeyValue;
  359. url=url+"?whoami=MaterialLackForWCPlan&_noc=1&urlcondition="+urlCondition+"&startdate="+startdate+"&enddate="+enddate;
  360. main.getActiveTab().currentGrid = Ext.getCmp('grid');
  361. if(!panel){
  362. var title = "";
  363. if (KeyValue.toString().length>4) {
  364. title = KeyValue.toString().substring(KeyValue.toString().length-4);
  365. } else {
  366. title = KeyValue;
  367. }
  368. panel = {
  369. title:'排产缺料二维查看('+KeyValue+')',
  370. tag : 'iframe',
  371. tabConfig:{tooltip:'排产缺料二维查看('+title+')'},
  372. frame : true,
  373. border : false,
  374. layout : 'fit',
  375. iconCls : 'x-tree-icon-tab-tab',
  376. html : '<iframe id="iframe_maindetail_'+caller+"_"+KeyValue+'" src="'+url+'" height="100%" width="100%" frameborder="0" scrolling="no"></iframe>',
  377. closable : true,
  378. listeners : {
  379. close : function(){
  380. main.setActiveTab(main.getActiveTab().id);
  381. }
  382. }
  383. };
  384. me.FormUtil.openTab(panel,"twosourceid=" + KeyValue);
  385. }else{
  386. main.setActiveTab(panel);
  387. }
  388. }
  389. },
  390. 'erpInMaterialNeedButton':{
  391. afterrender:function(btn){
  392. if(statuscode!='AUDITED'){
  393. btn.hide();
  394. }
  395. },
  396. click:function(btn){
  397. var form=Ext.getCmp('form');
  398. var keyField=form.keyField;
  399. var KeyValue=Ext.getCmp(keyField).value;
  400. if(KeyValue==null||KeyValue==''){
  401. showError('请先保存记录');
  402. }
  403. var me = this;
  404. var url=basePath+"jsps/pm/make/WCPlanResult.jsp";
  405. var panel = Ext.getCmp("lackNotify=" +KeyValue);
  406. var main = parent.Ext.getCmp("content-panel");
  407. var urlCondition='mln_planid='+KeyValue;
  408. main.getActiveTab().currentGrid = Ext.getCmp('grid');
  409. if(!panel){
  410. var title = "";
  411. if (KeyValue.toString().length>4) {
  412. title = KeyValue.toString().substring(KeyValue.toString().length-4);
  413. } else {
  414. title = KeyValue;
  415. }
  416. panel = {
  417. title:'送货需求('+KeyValue+')',
  418. tag : 'iframe',
  419. tabConfig:{tooltip:'送货需求('+title+')'},
  420. frame : true,
  421. border : false,
  422. layout : 'fit',
  423. iconCls : 'x-tree-icon-tab-tab',
  424. html : '<iframe id="iframe_maindetail_'+caller+"_"+KeyValue+'" src="'+url+'?whoami=MaterialLackForNotify&_noc=1&urlcondition='+urlCondition+'" height="100%" width="100%" frameborder="0" scrolling="no"></iframe>',
  425. closable : true,
  426. listeners : {
  427. close : function(){
  428. main.setActiveTab(main.getActiveTab().id);
  429. }
  430. }
  431. };
  432. me.FormUtil.openTab(panel,"lackNotify=" + KeyValue);
  433. }else{
  434. main.setActiveTab(panel);
  435. }
  436. }
  437. }
  438. });
  439. },
  440. getForm: function(btn){
  441. return btn.ownerCt.ownerCt;
  442. },
  443. onGridItemClick: function(selModel, record){//grid行选择
  444. if(!selModel.view.ownerCt.readOnly){
  445. var grid=selModel.view.ownerCt;
  446. var detno="sd_detno";
  447. var index = null,arr=new Array();
  448. index = record.data[detno];
  449. index = index == null ? (record.index + 1) : index;
  450. if(index.toString() == 'NaN'){
  451. index = '';
  452. }
  453. if(index == grid.store.last().data[detno]){//如果选择了最后一行
  454. for(var i=0;i < 10;i++ ){
  455. var o = new Object();
  456. o[detno] = Number(index) + i + 1;
  457. arr.push(o);
  458. }
  459. grid.store.loadData(arr, true);
  460. }
  461. }
  462. },
  463. DeleteAllDetails:function(){
  464. var id=Ext.getCmp('wc_id').getValue();
  465. Ext.Ajax.request({//拿到form的items
  466. url : basePath + 'pm/make/deleteAllDetails.action',
  467. params:{
  468. id:id,
  469. },
  470. method : 'post',
  471. callback : function(options,success,response){
  472. var result=Ext.decode(response.responseText);
  473. if(result.success){
  474. var grid=Ext.getCmp('grid');
  475. var param={
  476. caller:'WCPlan',
  477. condition:'wd_wcid='+id
  478. };
  479. grid.GridUtil.loadNewStore(grid,param);
  480. }else{
  481. if(res.exceptionInfo != null){
  482. showError(res.exceptionInfo);return;
  483. }
  484. }
  485. }
  486. });
  487. },
  488. update:function(grid){
  489. var mm = this.FormUtil;
  490. var form = Ext.getCmp('form');
  491. var s1 = mm.checkFormDirty(form);
  492. var s2 = '';
  493. var grid = Ext.getCmp('grid');
  494. if(grid.GridUtil){
  495. var msg = grid.checkGridDirty(grid);
  496. if(msg.length > 0){
  497. s2 = s2 + '<br/>' + grid.checkGridDirty(grid);
  498. }
  499. }
  500. if(s1 == '' && (s2 == '' || s2 == '<br/>')){
  501. showError($I18N.common.form.emptyData + '<br/>' + $I18N.common.grid.emptyDetail);
  502. return;
  503. }
  504. if(form && form.getForm().isValid()){
  505. //form里面数据
  506. var r = form.getValues(false, true);
  507. //去除ignore字段
  508. var keys = Ext.Object.getKeys(r), f;
  509. Ext.each(keys, function(k){
  510. f = form.down('#' + k);
  511. if(f && f.logic == 'ignore') {
  512. delete r[k];
  513. }
  514. });
  515. if(!mm.contains(form.updateUrl, '?caller=', true)){
  516. form.updateUrl = form.updateUrl + "?caller=" + caller;
  517. }
  518. var params = [];
  519. var param = grid.getGridStore();
  520. if(grid.necessaryField.length > 0 && (param == null || param == '')){
  521. warnMsg('明细表还未添加数据,是否继续?', function(btn){
  522. if(btn == 'yes'){
  523. params = unescape("[" + param.toString().replace(/\\/g,"%") + "]");
  524. } else {
  525. return;
  526. }
  527. });
  528. } else {
  529. params = unescape("[" + param.toString().replace(/\\/g,"%") + "]");
  530. }
  531. mm.update(r, params);
  532. }else{
  533. mm.checkForm(form);
  534. }
  535. },
  536. onSubmit:function(id){
  537. var me = this;
  538. var form = Ext.getCmp('form');
  539. var grid = Ext.getCmp('grid');
  540. var s2='';
  541. if(form && form.getForm().isValid()){
  542. var s = this.FormUtil.checkFormDirty(form);
  543. var param = me.GridUtil.getAllGridStore();
  544. if(grid.necessaryField.length > 0 && (param == null || param == '')){
  545. showError("明细表还未添加数据,无法提交!");
  546. return;
  547. }
  548. if(grid.GridUtil){
  549. var msg = grid.GridUtil.checkGridDirty(grid);
  550. if(msg.length > 0){
  551. s2 = s2 + '<br/>' + grid.GridUtil.checkGridDirty(grid);
  552. }
  553. }
  554. if(s2 == '' || s2 == '<br/>'){
  555. me.FormUtil.submit(id);
  556. } else {
  557. Ext.MessageBox.show({
  558. title:'保存修改?',
  559. msg: '该单据已被修改:<br/>' + s + '<br/>提交前要先保存吗?',
  560. buttons: Ext.Msg.YESNOCANCEL,
  561. icon: Ext.Msg.WARNING,
  562. fn: function(btn){
  563. if(btn == 'yes'){
  564. me.FormUtil.onUpdate(form);
  565. } else if(btn == 'no'){
  566. me.FormUtil.submit(id);
  567. } else {
  568. return;
  569. }
  570. }
  571. });
  572. }
  573. } else {
  574. me.FormUtil.checkForm();
  575. }
  576. },
  577. });