GoodsUpApplication.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.pm.mps.GoodsUpApplication', {
  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. 'core.form.Panel','pm.mps.GoodsUpApplication','core.grid.Panel2','core.toolbar.Toolbar','core.button.Split',
  9. 'core.button.Add','core.button.Submit','core.button.Audit','core.button.Save','core.button.Close','core.button.Print',
  10. 'core.button.ResSubmit','core.button.Update','core.button.Delete','core.button.ResAudit','core.button.DeleteDetail',
  11. 'core.trigger.TextAreaTrigger','core.trigger.DbfindTrigger','core.form.YnField','core.button.GoodsUpTurnOut',
  12. 'core.button.GetStandardUUId','core.button.GoodsUp'
  13. ],
  14. init:function(){
  15. var me=this;
  16. this.control({
  17. 'erpGridPanel2': {
  18. itemclick: function(selModel, record){
  19. if(!Ext.getCmp('grid').readOnly){
  20. if(Ext.getCmp("gu_statuscode").value == 'AUDITED'){
  21. btn = Ext.getCmp('erpSplitButton');
  22. btn && btn.setDisabled(false);
  23. }
  24. if (record.data.gd_id != 0 && record.data.gd_id != null && record.data.gd_id != '') {
  25. btn = Ext.getCmp('erpSplitButton');
  26. btn && btn.setDisabled(false);
  27. }
  28. this.onGridItemClick(selModel, record);
  29. }
  30. }
  31. },
  32. 'erpSaveButton': {
  33. click: function(btn){
  34. var form = me.getForm(btn);
  35. if(Ext.getCmp(form.codeField).value == null || Ext.getCmp(form.codeField).value == ''){
  36. me.BaseUtil.getRandomNumber();//自动添加编号
  37. }
  38. this.FormUtil.beforeSave(this);
  39. }
  40. },
  41. 'erpCloseButton': {
  42. click: function(btn){
  43. this.FormUtil.beforeClose(this);
  44. }
  45. },
  46. 'erpUpdateButton': {
  47. click: function(btn){
  48. this.FormUtil.onUpdate(this);
  49. }
  50. },
  51. 'erpDeleteButton': {
  52. click: function(btn){
  53. me.FormUtil.onDelete(Ext.getCmp('gu_id').value);
  54. }
  55. },
  56. 'erpAddButton': {
  57. click: function(){
  58. me.FormUtil.onAdd('addGoodsUpApplication', '新增上架申请单', 'jsps/pm/mps/goodsUpApplication.jsp');
  59. }
  60. },
  61. 'erpSubmitButton': {
  62. afterrender: function(btn){
  63. var status = Ext.getCmp('gu_statuscode');
  64. if(status && status.value != 'ENTERING'){
  65. btn.hide();
  66. }
  67. },
  68. click: function(btn){
  69. me.FormUtil.onSubmit(Ext.getCmp('gu_id').value);
  70. }
  71. },
  72. 'erpResSubmitButton': {
  73. afterrender: function(btn){
  74. var status = Ext.getCmp('gu_statuscode');
  75. if(status && status.value != 'COMMITED'){
  76. btn.hide();
  77. }
  78. },
  79. click: function(btn){
  80. me.FormUtil.onResSubmit(Ext.getCmp('gu_id').value);
  81. }
  82. },
  83. 'erpAuditButton': {
  84. afterrender: function(btn){
  85. var status = Ext.getCmp('gu_statuscode');
  86. if(status && status.value != 'COMMITED'){
  87. btn.hide();
  88. }
  89. },
  90. click: function(btn){
  91. me.FormUtil.onAudit(Ext.getCmp('gu_id').value);
  92. }
  93. },
  94. 'erpResAuditButton': {
  95. afterrender: function(btn){
  96. var status = Ext.getCmp('gu_statuscode');
  97. if(status && status.value != 'AUDITED'){
  98. btn.hide();
  99. }
  100. },
  101. click: function(btn){
  102. me.FormUtil.onResAudit(Ext.getCmp('gu_id').value);
  103. }
  104. },
  105. 'erpGoodsUpTurnOutButton':{//转拨出单
  106. click:function(btn){
  107. me.GoodsUpTurnOut(Ext.getCmp("gu_id").value,btn.ownerCt.ownerCt);
  108. },
  109. afterrender:function(btn){//已审核转拨出单
  110. var status = Ext.getCmp('gu_statuscode');
  111. if(status && status.value != 'AUDITED'){
  112. btn.hide();
  113. }
  114. }
  115. },
  116. 'erpSplitButton': {//拆分明细
  117. beforerender: function(btn) {
  118. btn.text="拆分明细";
  119. btn.width=100;
  120. },
  121. click: function(btn) {
  122. var record=btn.ownerCt.ownerCt.getSelectionModel().getLastSelected();
  123. me.GoodsUpSplit(record);
  124. }
  125. },
  126. 'erpPrintButton': {//打印
  127. click: function(btn){
  128. me.FormUtil.onPrint(Ext.getCmp('gu_id').value);
  129. }
  130. },
  131. 'erpGetStandardUUIdButton':{//维护标准料号
  132. afterrender:function(btn){//
  133. var status = Ext.getCmp('gu_statuscode');
  134. if(status && status.value != 'ENTERING'){
  135. btn.hide();
  136. }
  137. },
  138. click:function(btn){//发送请求至后台,将明细行中没有平台料号的物料写入ProductBatch表中,写入成功之后跳转至批量维护页面
  139. me.FormUtil.setLoading(true);
  140. Ext.Ajax.request({
  141. url : basePath +'pm/mps/getUUId.action',
  142. params : {
  143. caller : caller,
  144. id : Ext.getCmp("gu_id").value
  145. },
  146. method : 'post',
  147. timeout:6000000,
  148. callback : function(options,success,response){
  149. me.FormUtil.setLoading(false);
  150. var localJson = new Ext.decode(response.responseText);
  151. if(localJson.success){
  152. if(localJson.code)
  153. me.FormUtil.onAdd('ProductBatchUUId','批量维护标准料号','jsps/scm/product/ProductBatchUUId.jsp?gridCondition==pub_code='+localJson.code+'&code='+localJson.code);
  154. /*saveSuccess(function(){
  155. Ext.getCmp('gdqty').setValue(remainqty);
  156. //add成功后刷新页面进入可编辑的页面
  157. me.loadSplitData(originaldetno,guid,record);
  158. });*/
  159. }else if(localJson.exceptionInfo){
  160. var str = localJson.exceptionInfo;
  161. showError(str);
  162. return;
  163. }else{
  164. showError("请求超时");
  165. return;
  166. }
  167. }
  168. });
  169. }
  170. },
  171. 'erpGoodsUpButton':{//手动上架
  172. afterrender: function(btn){
  173. var status = Ext.getCmp('gu_statuscode');
  174. if(status && status.value != 'AUDITED'){
  175. btn.hide();
  176. }
  177. },
  178. click:function(btn){
  179. me.GoodsUp(Ext.getCmp("gu_id").value,btn.ownerCt.ownerCt);
  180. }
  181. }
  182. });
  183. },
  184. onGridItemClick: function(selModel, record){//grid行选择
  185. this.GridUtil.onGridItemClick(selModel, record);
  186. },
  187. getForm: function(btn){
  188. return btn.ownerCt.ownerCt;
  189. },
  190. save: function(btn){
  191. var me = this;
  192. if(Ext.getCmp('gu_code').value == null || Ext.getCmp('gu_code').value == ''){
  193. me.BaseUtil.getRandomNumber();
  194. }
  195. me.FormUtil.beforeSave(me);
  196. },
  197. GoodsUpSplit:function(record){
  198. var me=this,originaldetno=Number(record.data.gd_detno);
  199. var guid=record.data.gd_guid;
  200. var gdid=record.data.gd_id;
  201. var bccode = record.data.gd_bccode;
  202. if(bccode){
  203. showError('该明细行已经生成拨出单,不允许拆分!');
  204. return;
  205. }
  206. Ext.create('Ext.window.Window',{
  207. width:850,
  208. height:'80%',
  209. iconCls:'x-grid-icon-partition',
  210. title:'<h1>上架申请单拆分</h1>',
  211. id:'win',
  212. items:[{
  213. xtype:'form',
  214. layout:'column',
  215. region:'north',
  216. frame:true,
  217. defaults:{
  218. xtype:'textfield',
  219. columnWidth:0.5,
  220. readOnly:true,
  221. fieldStyle:'background:#f0f0f0;border: 0px solid #8B8970;color:blue;'
  222. },
  223. items:[{
  224. fieldLabel:'上架单号',
  225. value:Ext.getCmp("gu_code").value,
  226. id:'gucode'
  227. },{
  228. fieldLabel:'物料编号',
  229. value:record.data.gd_prodcode
  230. },{
  231. fieldLabel:'物料明细',
  232. value:record.data.pr_detail
  233. },{
  234. fieldLabel:'原序号' ,
  235. value:record.data.gd_detno
  236. },{
  237. fieldLabel:'原数量',
  238. value:record.data.gd_qty,
  239. id:'gdqty'
  240. }],
  241. buttonAlign:'center',
  242. buttons:[{
  243. xtype:'button',
  244. columnWidth:0.12,
  245. text:'保存',
  246. width:60,
  247. iconCls: 'x-button-icon-save',
  248. margin:'0 0 0 30',
  249. handler:function(btn){
  250. var store=Ext.getCmp('smallgrid').getStore();
  251. var count=0;
  252. var jsonData=new Array();
  253. var dd;
  254. var remainqty;
  255. Ext.Array.each(store.data.items,function(item){
  256. if(item.data.gd_qty>=0 && item.data.gd_madedate!=null && item.data.gd_price>0){
  257. if(item.dirty){
  258. dd=new Object();
  259. //说明是新增批次
  260. if(item.data.gd_madedate)
  261. dd['gd_madedate']=Ext.Date.format(item.data.gd_madedate, 'Y-m-d');
  262. dd['gd_qty']=item.data.gd_qty;
  263. dd['gd_id']=item.data.gd_id;
  264. dd['gd_detno']=item.data.gd_detno;
  265. dd['gd_price']=item.data.gd_price;
  266. dd['gd_minbuyqty']=item.data.gd_minbuyqty;
  267. dd['gd_whcode']=item.data.gd_whcode;
  268. jsonData.push(Ext.JSON.encode(dd));
  269. if(item.data.gd_id!=0&&item.data.gd_id!=null&&item.data.gd_id>0){
  270. remainqty = item.data.gd_qty;
  271. }
  272. }
  273. count+=Number(item.data.gd_qty);
  274. }
  275. });
  276. var assqty = record.data.gd_qty;
  277. if(count != assqty){
  278. showError('分拆数量必须等于原数量!') ;
  279. return;
  280. }else{
  281. var r=new Object();
  282. r['gd_id']=gdid;
  283. r['gd_guid']=guid;
  284. r['gd_detno']=record.data.gd_detno;
  285. var params=new Object();
  286. params.formdata = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  287. params.data = unescape(jsonData.toString().replace(/\\/g,"%"));
  288. Ext.Ajax.request({
  289. url : basePath +'pm/mps/splitDetail.action',
  290. params : params,
  291. waitMsg:'拆分中...',
  292. method : 'post',
  293. callback : function(options,success,response){
  294. var localJson = new Ext.decode(response.responseText);
  295. if(localJson.success){
  296. saveSuccess(function(){
  297. Ext.getCmp('gdqty').setValue(remainqty);
  298. //add成功后刷新页面进入可编辑的页面
  299. me.loadSplitData(originaldetno,guid,record);
  300. //刷新界面
  301. me.GridUtil.loadNewStore(Ext.getCmp('grid'), {
  302. caller: caller,
  303. condition: gridCondition
  304. });
  305. });
  306. } else if(localJson.exceptionInfo){
  307. var str = localJson.exceptionInfo;
  308. if(str.trim().substr(0, 12) == 'AFTERSUCCESS'){//特殊情况:操作成功,但是出现警告,允许刷新页面
  309. str = str.replace('AFTERSUCCESS', '');
  310. saveSuccess(function(){
  311. //add成功后刷新页面进入可编辑的页面
  312. me.loadSplitData(originaldetno,guid,record);
  313. });
  314. showError(str);
  315. } else {
  316. showError(str);
  317. return;
  318. }
  319. } else{
  320. saveFailure();
  321. }
  322. }
  323. });
  324. }
  325. }
  326. },{
  327. xtype:'button',
  328. columnWidth:0.1,
  329. text:'关闭',
  330. width:60,
  331. iconCls: 'x-button-icon-close',
  332. margin:'0 0 0 10',
  333. handler:function(btn){
  334. Ext.getCmp('win').close();
  335. }
  336. }]
  337. },{
  338. xtype:'gridpanel',
  339. region:'south',
  340. id:'smallgrid',
  341. layout:'fit',
  342. height:'80%',
  343. columnLines:true,
  344. store:Ext.create('Ext.data.Store',{
  345. fields:[{name:'gd_detno',type:'int'},{name:'gd_madedate',type:'date'},{name:'gd_qty',type:'int'},{name:'gd_price',type:'number'},{name:'gd_minbuyqty',type:'int'},{name:'gd_whcode',type:'string'},{name:'gd_id',type:'int'}],
  346. data:[]
  347. }),
  348. plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
  349. clicksToEdit: 1,
  350. listeners:{
  351. 'edit':function(editor,e,Opts){
  352. var record=e.record;
  353. var version=record.data.ma_version;
  354. if(version){
  355. e.record.reject();
  356. Ext.Msg.alert('提示','不能修改已拆分明细!');
  357. }
  358. }
  359. }
  360. })],
  361. tbar: [{
  362. tooltip: '添加批次',
  363. iconCls: 'x-button-icon-add',
  364. width:25,
  365. handler : function() {
  366. var store = Ext.getCmp('smallgrid').getStore();
  367. var r = new Object();
  368. r.gd_madedate=record.get('gd_madedate');
  369. r.gd_minbuyqty=record.get('gd_minbuyqty');
  370. r.gd_price=record.get('gd_price');
  371. r.gd_qty=0;
  372. r.gd_id=0;
  373. r.gd_whcode='';
  374. r.gd_detno=store.getCount()+1;
  375. store.insert(store.getCount(), r);
  376. }
  377. }, {
  378. tooltip: '删除批次',
  379. width:25,
  380. itemId: 'delete',
  381. iconCls: 'x-button-icon-delete',
  382. handler: function(btn) {
  383. var sm = Ext.getCmp('smallgrid').getSelectionModel();
  384. var record=sm.getSelection();
  385. var gd_id=record[0].data.gd_id;
  386. if(gd_id && gd_id!= 0){
  387. Ext.Msg.alert('提示','不能删除已拆批次或原始行号!');
  388. return;
  389. }
  390. var store=Ext.getCmp('smallgrid').getStore();
  391. store.remove(record);
  392. if (store.getCount() > 0) {
  393. sm.select(0);
  394. }
  395. },
  396. disabled: true
  397. }],
  398. listeners:{
  399. itemmousedown:function(selmodel, record){
  400. selmodel.ownerCt.down('#delete').setDisabled(false);
  401. }
  402. },
  403. columns:[{
  404. dataIndex:'gd_detno',
  405. header:'序号',
  406. format:'0',
  407. xtype:'numbercolumn'
  408. },{
  409. dataIndex:'gd_madedate',
  410. header:'生产日期',
  411. xtype:'datecolumn',
  412. width:120,
  413. editable:true,
  414. renderer:function(val,meta,record){
  415. if(record.data.ma_version){
  416. meta.tdCls = "x-grid-cell-renderer-cl";
  417. }
  418. if(val)
  419. return Ext.Date.format(val, 'Y-m-d');
  420. else return null;
  421. },
  422. editor:{
  423. xtype: 'datefield',
  424. format:'Y-m-d',
  425. allowBlank : false
  426. }
  427. },{
  428. dataIndex:'gd_qty',
  429. header:'数量',
  430. width:120,
  431. xtype:'numbercolumn',
  432. editable:true,
  433. renderer:function(val,meta,record){
  434. return val;
  435. },
  436. editor:{
  437. xtype:'numberfield',
  438. format:'0',
  439. hideTrigger: true,
  440. allowBlank : false
  441. }
  442. },{
  443. dataIndex:'gd_price',
  444. header:'单价',
  445. xtype:'numbercolumn',
  446. width:100,
  447. editable:true,
  448. editor:{
  449. xtype:'numberfield',
  450. format:'0',
  451. hideTrigger: true,
  452. allowBlank : false
  453. }
  454. },{
  455. dataIndex:'gd_minbuyqty',
  456. header:'最小起订量',
  457. xtype:'numbercolumn',
  458. width:100,
  459. editable:true,
  460. editor:{
  461. xtype:'numberfield',
  462. format:'0',
  463. hideTrigger: true,
  464. allowBlank : false
  465. }
  466. },{
  467. dataIndex:'gd_whcode',
  468. header:'仓库',
  469. width:100,
  470. editable:true,
  471. dbfind:'WareHouse|wh_code',
  472. editor:{
  473. allowBlank : false ,
  474. xtype:'dbfindtrigger',
  475. hideTrigger: false,
  476. name:'gd_whcode',
  477. which:'grid',
  478. dbfind:'WareHouse|wh_code',
  479. listeners: {
  480. aftertrigger: function(t, d) {
  481. var record = Ext.getCmp('smallgrid').selModel.lastSelected;
  482. record.set('gd_whcode', d.data.wh_code);
  483. }
  484. }
  485. }
  486. },{
  487. dataIndex:'gd_id',
  488. header:'gdid',
  489. width:0,
  490. xtype:'numbercolumn',
  491. editable:true,
  492. editor:{
  493. xtype:'numberfield',
  494. format:'0',
  495. hideTrigger: true
  496. }
  497. }]
  498. }]
  499. }).show();
  500. this.loadSplitData(originaldetno,guid,record);
  501. },
  502. loadSplitData:function(detno,guid,record){
  503. var grid=Ext.getCmp('smallgrid');
  504. grid.setLoading(true);//loading...
  505. Ext.Ajax.request({//拿到grid的columns
  506. url : basePath + "common/loadNewGridStore.action",
  507. params:{
  508. caller:'GoodsUpSplit',
  509. condition:"gd_detno="+detno+" AND gd_guid="+guid+" order by gd_id asc"
  510. },
  511. method : 'post',
  512. callback : function(options,success,response){
  513. grid.setLoading(false);
  514. var res = new Ext.decode(response.responseText);
  515. if(res.exceptionInfo){
  516. showError(res.exceptionInfo);return;
  517. }
  518. var data = res.data;
  519. if(!data || data.length == 0){
  520. grid.store.removeAll();
  521. var o=new Object();
  522. o.gd_detno=detno;
  523. o.gd_madedate=record.data.gd_madedate;
  524. o.gd_qty=record.data.gd_qty;
  525. o.gd_price=record.data.gd_price;
  526. o.gd_minbuyqty=record.data.gd_minbuyqty;
  527. o.gd_whcode=record.data.gd_whcode;
  528. o.gd_id=record.data.gd_id;
  529. data.push(o);
  530. }
  531. grid.store.loadData(data);
  532. }
  533. });
  534. },
  535. GoodsUpTurnOut:function(id,form){
  536. var me = this;
  537. me.FormUtil.setLoading(true);//loading...
  538. Ext.Ajax.request({//拿到grid的columns
  539. url : basePath + "pm/mps/goodsUpTurnOut.action",
  540. params:{
  541. caller:caller,
  542. id:id
  543. },
  544. method : 'post',
  545. callback : function(options,success,response){
  546. me.FormUtil.setLoading(false);
  547. var res = new Ext.decode(response.responseText);
  548. if(res.exceptionInfo){
  549. showError(res.exceptionInfo);return;
  550. }else{
  551. if(res.log)
  552. showMessage('提示', res.log);
  553. }
  554. }
  555. });
  556. },
  557. GoodsUp:function(id,form){
  558. var me = this;
  559. me.FormUtil.setLoading(true);//loading...
  560. Ext.Ajax.request({//拿到grid的columns
  561. url : basePath + "pm/mps/goodsUp.action",
  562. params:{
  563. caller:caller,
  564. id:id
  565. },
  566. method : 'post',
  567. timeout:6000000,
  568. callback : function(options,success,response){
  569. me.FormUtil.setLoading(false);
  570. var res = new Ext.decode(response.responseText);
  571. if(res.exceptionInfo){
  572. showError(res.exceptionInfo);return;
  573. }else{
  574. if(res.log){
  575. showMessage('提示', res.log);
  576. var grid = Ext.getCmp("grid");
  577. grid.GridUtil.loadNewStore(grid, {
  578. caller: caller,
  579. condition: gridCondition
  580. });
  581. }
  582. }
  583. }
  584. });
  585. }
  586. });