SendNotify.js 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.scm.sale.SendNotify', {
  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: ['core.form.Panel', 'scm.sale.Quotation', 'core.grid.Panel2', 'core.toolbar.Toolbar', 'core.form.MultiField',
  8. 'core.button.Save', 'core.button.Add', 'core.button.ResAudit', 'core.button.Audit',
  9. 'core.button.ResSubmit', 'core.button.Close', 'core.button.Delete', 'core.button.Update',
  10. 'core.button.DeleteDetail', 'core.button.Consign', 'core.button.Submit',
  11. 'core.button.TurnProdIO', 'core.button.Flow', 'core.button.Print','core.button.PrintHK', 'core.button.Hung',
  12. 'core.button.ReHung', 'core.button.TurnCheck','core.button.TurnCLFBX','core.button.SaveShip',
  13. 'core.button.TurnProdAppropriationOut',
  14. 'core.trigger.DbfindTrigger', 'core.trigger.TextAreaTrigger', 'core.form.YnField', 'core.grid.Panel5', 'core.form.FileField','core.grid.YnColumn'],
  15. init: function() {
  16. var me = this;
  17. this.control({
  18. 'erpGridPanel2': {
  19. afterrender: function(grid) {
  20. var status = Ext.getCmp('sn_statuscode');
  21. if (status && status.value != 'ENTERING' && status.value != 'COMMITED') {
  22. Ext.each(grid.columns,
  23. function(c) {
  24. c.setEditor(null);
  25. });
  26. }
  27. },
  28. reconfigure: function(grid) {
  29. var f = Ext.getCmp('sn_id');
  30. if (f && !Ext.isEmpty(f.value)) {
  31. me.loadOnHandQty(grid, f.value);
  32. }
  33. },
  34. itemclick: this.onGridItemClick
  35. },
  36. 'erpDeleteDetailButton': {
  37. afterrender: function(btn) {
  38. btn.ownerCt.add({
  39. xtype: 'button',
  40. text: '拆分(锁库)',
  41. width: 100,
  42. iconCls: 'x-button-icon-check',
  43. cls: 'x-btn-gray',
  44. id: 'splitbutton',
  45. style: {
  46. marginLeft: '10px'
  47. },
  48. handler: function() {
  49. var record = btn.ownerCt.ownerCt.getSelectionModel().getLastSelected();
  50. me.SaleSplit(record);
  51. }
  52. });
  53. }
  54. },
  55. 'erpSaveButton': {
  56. click: function(btn) {
  57. var form = me.getForm(btn);
  58. if (Ext.getCmp(form.codeField).value == null || Ext.getCmp(form.codeField).value == '') {
  59. me.BaseUtil.getRandomNumber(); //自动添加编号
  60. }
  61. this.beforeSaveSendNotify();
  62. }
  63. },
  64. 'erpDeleteButton': {
  65. click: function(btn) {
  66. me.FormUtil.onDelete({
  67. id: Number(Ext.getCmp('sn_id').value)
  68. });
  69. }
  70. },
  71. 'erpUpdateButton': {
  72. afterrender: function(btn) {
  73. var status = Ext.getCmp('sn_statuscode');
  74. if (status && status.value != 'ENTERING') {
  75. btn.hide();
  76. }
  77. },
  78. click: function(btn) {
  79. me.beforeUpdate();
  80. }
  81. },
  82. 'erpAddButton': {
  83. click: function() {
  84. me.FormUtil.onAdd('addSendNotify', '新增出货通知单', 'jsps/scm/sale/sendNotify.jsp');
  85. }
  86. },
  87. 'erpCloseButton': {
  88. click: function(btn) {
  89. me.FormUtil.beforeClose(me);
  90. }
  91. },
  92. 'erpPrintButton': {
  93. click: function(btn) {
  94. var reportName = "SendNotify";
  95. var condition = '{SendNotify.sn_id}=' + Ext.getCmp('sn_id').value + '';
  96. me.FormUtil.onwindowsPrint(Ext.getCmp('sn_id').value, reportName, condition);
  97. }
  98. },
  99. 'erpPrintHKButton': {
  100. click: function(btn) {
  101. var reportName = "SendNotify_HK";
  102. var condition = '{SendNotify.sn_id}=' + Ext.getCmp('sn_id').value + '';
  103. me.FormUtil.onwindowsPrint(Ext.getCmp('sn_id').value, reportName, condition);
  104. }
  105. },
  106. 'erpSubmitButton': {
  107. afterrender: function(btn) {
  108. var status = Ext.getCmp('sn_statuscode');
  109. if (status && status.value != 'ENTERING') {
  110. btn.hide();
  111. }
  112. },
  113. click: function(btn) {
  114. var grid = Ext.getCmp('grid'),
  115. items = grid.store.data.items;
  116. var rateMsg = '';
  117. // 税率为0提示
  118. Ext.each(items,
  119. function(item) {
  120. if (item.dirty && item.data[grid.necessaryField] != null && item.data[grid.necessaryField] != "") {
  121. if (item.data['snd_taxrate'] == 0) {
  122. rateMsg += item.data['snd_pdno'] + ' ';
  123. }
  124. }
  125. });
  126. if (rateMsg != '') {
  127. warnMsg('明细行:' + rateMsg + '的税率为0,是否继续?',
  128. function(btn) {
  129. if (btn == 'ok' || btn == 'yes') {
  130. me.FormUtil.onSubmit(Ext.getCmp('sn_id').value);
  131. }
  132. });
  133. } else {
  134. me.FormUtil.onSubmit(Ext.getCmp('sn_id').value, false, me.beforeUpdate, me);
  135. }
  136. }
  137. },
  138. 'erpResSubmitButton': {
  139. afterrender: function(btn) {
  140. var status = Ext.getCmp('sn_statuscode');
  141. if (status && status.value != 'COMMITED') {
  142. btn.hide();
  143. }
  144. },
  145. click: function(btn) {
  146. me.FormUtil.onResSubmit(Ext.getCmp('sn_id').value);
  147. }
  148. },
  149. 'erpAuditButton': {
  150. afterrender: function(btn) {
  151. var status = Ext.getCmp('sn_statuscode');
  152. if (status && status.value != 'COMMITED') {
  153. btn.hide();
  154. }
  155. },
  156. click: function(btn) {
  157. me.FormUtil.onAudit(Ext.getCmp('sn_id').value);
  158. }
  159. },
  160. 'erpResAuditButton': {
  161. afterrender: function(btn) {
  162. var status = Ext.getCmp('sn_statuscode');
  163. if (status && status.value != 'AUDITED') {
  164. btn.hide();
  165. }
  166. },
  167. click: function(btn) {
  168. me.FormUtil.onResAudit(Ext.getCmp('sn_id').value);
  169. }
  170. },
  171. 'erpTurnCheckButton':{//转其它出库
  172. beforerender:function(btn){
  173. btn.setText('转其它出库');
  174. },
  175. afterrender: function(btn) {
  176. var status = Ext.getCmp('sn_statuscode');
  177. if (status && status.value != 'AUDITED') {
  178. btn.hide();
  179. }
  180. },
  181. click:function(){
  182. me.batchDeal('scm/sale/turnProdOut.action?type=ProdInOut!OtherOut');
  183. }
  184. },
  185. 'erpTurnCLFBXButton':{//转拨出单
  186. beforerender:function(btn){
  187. btn.setText('转拨出单');
  188. },
  189. afterrender: function(btn) {
  190. var status = Ext.getCmp('sn_statuscode');
  191. if (status && status.value != 'AUDITED') {
  192. btn.hide();
  193. }
  194. },
  195. click:function(){
  196. me.batchDeal('scm/sale/turnProdOut.action?type=ProdInOut!AppropriationOut');
  197. }
  198. },
  199. 'erpSaveShipButton':{
  200. afterrender:function(btn){
  201. var status = Ext.getCmp('sn_statuscode');
  202. if (status && status.value != 'COMMITED') {
  203. btn.hide();
  204. }else{
  205. Ext.each(Ext.getCmp('form').items.items,function(item){
  206. if(item.groupName=='船务信息'){
  207. item.setReadOnly(false);
  208. }
  209. });
  210. }
  211. },
  212. click:function(){
  213. var values=new Object();
  214. Ext.each(Ext.getCmp('form').items.items,function(item){
  215. if(item.groupName=='船务信息'){
  216. values[item.name]=item.value;
  217. }
  218. });
  219. values['sn_id']=Ext.getCmp('sn_id').value;
  220. var params=new Object();
  221. params.formStore = unescape(escape(Ext.JSON.encode(values)));
  222. var main = parent.Ext.getCmp("content-panel");
  223. main.getActiveTab().setLoading(true);//loading...
  224. Ext.Ajax.request({
  225. url : basePath + 'scm/sale/saveShip.action',//scm/sale/turnProdOut.action?type=ProdInOut!OtherOut
  226. params: params,
  227. method : 'post',
  228. timeout: 6000000,
  229. callback : function(options,success,response){
  230. main.getActiveTab().setLoading(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. }
  237. showError(str);return;
  238. }
  239. if(localJson.success){
  240. showMessage("提示","保存船务信息成功");
  241. window.location.reload();
  242. }
  243. }
  244. });
  245. }
  246. },
  247. 'dbfindtrigger[name=sn_toplace]': {
  248. afterrender: function(trigger) {
  249. trigger.dbKey = 'sn_custcode';
  250. trigger.mappingKey = 'cu_code';
  251. trigger.dbMessage = '请先选客户编号!';
  252. }
  253. },
  254. 'dbfindtrigger[name=sn_custcode2]': {
  255. afterrender: function(trigger) {
  256. trigger.dbKey = 'sn_custid';
  257. trigger.mappingKey = 'cu_id';
  258. trigger.dbMessage = '请先选客户编号!';
  259. }
  260. },
  261. 'dbfindtrigger[name=sn_invoiceremark]': {
  262. afterrender: function(trigger) {
  263. trigger.dbKey = 'sn_custid';
  264. trigger.mappingKey = 'cu_id';
  265. trigger.dbMessage = '请先选客户编号!';
  266. }
  267. },
  268. 'dbfindtrigger[name=sn_packingremark]': {
  269. afterrender: function(trigger) {
  270. trigger.dbKey = 'sn_custid';
  271. trigger.mappingKey = 'cu_id';
  272. trigger.dbMessage = '请先选客户编号!';
  273. }
  274. },
  275. 'dbfindtrigger[name=sn_receivecode]': {
  276. afterrender: function(trigger) {
  277. trigger.dbKey = 'sn_custid';
  278. trigger.mappingKey = 'cu_id';
  279. trigger.dbMessage = '请先选客户编号!';
  280. }
  281. },
  282. 'dbfindtrigger[name=sn_paymentscode]': {
  283. afterrender: function(trigger) {
  284. if (trigger.fieldConfig == 'PT') {
  285. trigger.dbKey = 'sn_custcode';
  286. trigger.mappingKey = 'cu_code';
  287. trigger.dbMessage = '请先选客户编号!';
  288. }
  289. }
  290. },
  291. 'field[name=snd_batchcode]': {
  292. beforetrigger: function(t) {
  293. var record = t.record,
  294. grid = t.owner;
  295. if (record && grid) {
  296. var form = grid.ownerCt.down('form'),
  297. p = grid.xtype == 'erpGridPanel2' ? record.get('snd_prodcode') : form.down('field[name=snd_prodcode]').value;
  298. var w = record.get('snd_warehousecode');
  299. t.dbBaseCondition = '';
  300. if (!Ext.isEmpty(w)) {
  301. t.dbBaseCondition = ' ba_whcode=\'' + w + '\'';
  302. }
  303. if (!Ext.isEmpty(p)) {
  304. if (t.dbBaseCondition.length > 0) {
  305. t.dbBaseCondition += ' and ';
  306. }
  307. t.dbBaseCondition += ' ba_prodcode=\'' + p + '\'';
  308. }
  309. }
  310. }
  311. },
  312. 'dbfindtrigger[name=snd_ordercode]': {
  313. focus: function(t) {
  314. t.setHideTrigger(false);
  315. t.setReadOnly(false);
  316. if (Ext.getCmp('sn_custcode')) {
  317. var code = Ext.getCmp('sn_custcode').value;
  318. if (code != null && code != '') {
  319. var obj = me.getCodeCondition();
  320. if (obj && obj.field) {
  321. t.dbBaseCondition = obj.field + "='" + code + "'";
  322. }
  323. if (!Ext.getCmp('sn_custcode').readOnly) {
  324. Ext.getCmp('sn_custcode').setReadOnly(true);
  325. Ext.getCmp('sn_custcode').setFieldStyle(Ext.getCmp('sn_custcode').fieldStyle + ';background:#f1f1f1;');
  326. }
  327. }
  328. }
  329. },
  330. aftertrigger: function(t) {
  331. var code = Ext.getCmp('sn_custcode').value;
  332. if (code == null || code.toString().trim() == '') {
  333. var obj = me.getCodeCondition();
  334. me.FormUtil.getFieldsValue(obj.tablename, obj.fields, obj.myfield + "='" + t.value + "'", obj.tFields);
  335. }
  336. }
  337. },
  338. 'dbfindtrigger[name=snd_orderdetno]': {
  339. focus: function(t) {
  340. t.setHideTrigger(false);
  341. t.setReadOnly(false);
  342. var record = Ext.getCmp('grid').selModel.getLastSelected();
  343. var code = record.data['snd_ordercode'];
  344. if (code == null || code == '') {
  345. showError("请先选择关联订单号!");
  346. t.setHideTrigger(true);
  347. t.setReadOnly(true);
  348. } else {
  349. t.dbBaseCondition = "sa_code='" + code + "'";
  350. }
  351. }
  352. },
  353. 'field[name=sn_statuscode]': {
  354. change: function(f) {
  355. var grid = Ext.getCmp('grid');
  356. if (grid && f.value != 'ENTERING' && f.value != 'COMMITED') {
  357. grid.setReadOnly(true); //只有未审核的订单,grid才能编辑
  358. }
  359. }
  360. },
  361. 'field[name=sn_outcredit]': {
  362. afterrender: function(f){
  363. if(f.value != null && f.value != '' && f.value != 0){
  364. f.inputEl.setStyle({color: 'OrangeRed'});
  365. }
  366. }
  367. },
  368. 'field[name=sn_outamount]': {
  369. afterrender: function(f){
  370. if(f.value != null && f.value != '' && f.value != 0){
  371. f.inputEl.setStyle({color: 'OrangeRed'});
  372. }
  373. }
  374. },
  375. 'dbfindtrigger[name=snd_batchcode]': {
  376. focus: function(t) {
  377. t.setHideTrigger(false);
  378. t.setReadOnly(false); //用disable()可以,但enable()无效
  379. var record = Ext.getCmp('grid').selModel.getLastSelected();
  380. var pr = record.data['snd_prodcode'];
  381. if (pr == null || pr == '') {
  382. showError("请先选择料号!");
  383. t.setHideTrigger(true);
  384. t.setReadOnly(true);
  385. }
  386. if (pr != null && pr != '') {
  387. var obj = me.getCodeCondition();
  388. if (obj && obj.field) {
  389. t.dbBaseCondition = "ba_prodcode='" + pr + "'";
  390. }
  391. }
  392. if (record.data['snd_warehousecode'] != null) {
  393. t.dbBaseCondition = t.dbBaseCondition + " and ba_whcode='" + record.data['snd_warehousecode'] + "'";
  394. }
  395. }
  396. },
  397. 'erpConsignButton': {
  398. afterrender: function(btn) {
  399. var status = Ext.getCmp('sn_statuscode');
  400. if (status && status.value != 'AUDITED') {
  401. btn.hide();
  402. }
  403. }
  404. },
  405. 'erpTurnProdIOButton':{
  406. afterrender: function(btn) {
  407. var status = Ext.getCmp('sn_statuscode');
  408. if (status && status.value != 'AUDITED' && status.value != 'PARTOUT' && status.value != 'TURNOUT') {
  409. btn.hide();
  410. }
  411. }
  412. },
  413. 'erpHungButton': {
  414. afterrender: function(btn) {
  415. var status = Ext.getCmp('sn_statuscode');
  416. if (status && status.value != 'AUDITED' && status.value != 'PARTOUT') {
  417. btn.hide();
  418. }
  419. },
  420. click: function(btn) {
  421. var f = Ext.getCmp('sn_deliverytime');
  422. if (f && f.getValue() >= new Date()) {
  423. return;
  424. }
  425. me.FormUtil.onHung(Ext.getCmp('sn_id').value);
  426. }
  427. },
  428. 'erpReHungButton': {
  429. afterrender: function(btn) {
  430. var status = Ext.getCmp('sn_statuscode');
  431. if (status && status.value != 'HUNG') {
  432. btn.hide();
  433. }
  434. },
  435. click: function(btn) {
  436. me.FormUtil.onResHung(Ext.getCmp('sn_id').value);
  437. }
  438. },
  439. /* 'field[name=sn_sellercode]' : {// 自动带事业部
  440. aftertrigger: function(f, r) {
  441. var v = r.get('em_depart');
  442. if(!Ext.isEmpty(v)) {
  443. var n = f.up('form').down('#sn_parentorname');
  444. if (n && n.store.findRecord('value', v)) {
  445. n.setValue(v);
  446. }
  447. }
  448. }
  449. }*/
  450. });
  451. },
  452. onGridItemClick: function(selModel, record) { //grid行选择
  453. this.GridUtil.onGridItemClick(selModel, record);
  454. },
  455. getForm: function(btn) {
  456. return btn.ownerCt.ownerCt;
  457. },
  458. createSplitForm: function(record) {
  459. var me = this;
  460. return Ext.create('Ext.form.Panel', {
  461. xtype: 'form',
  462. layout: 'column',
  463. region: 'north',
  464. frame: true,
  465. defaults: {
  466. xtype: 'textfield',
  467. columnWidth: 0.5,
  468. readOnly: true,
  469. fieldStyle: 'background:#f0f0f0;border: 0px solid #8B8970;color:blue;'
  470. },
  471. items: [{
  472. fieldLabel: '订单编号',
  473. value: record.data.snd_ordercode
  474. },
  475. {
  476. fieldLabel: '序号',
  477. value: record.data.snd_pdno
  478. },
  479. {
  480. fieldLabel: '产品编号',
  481. name: 'snd_prodcode',
  482. value: record.data.snd_prodcode
  483. },
  484. {
  485. fieldLabel: '产品名称',
  486. value: record.data.pr_detail
  487. },
  488. {
  489. fieldLabel: '数量',
  490. value: record.data.snd_outqty
  491. }],
  492. buttonAlign: 'center',
  493. buttons: [{
  494. xtype: 'button',
  495. columnWidth: 0.12,
  496. text: '保存',
  497. width: 60,
  498. iconCls: 'x-button-icon-save',
  499. handler: function(btn) {
  500. me.saveSplit(btn.ownerCt.ownerCt.ownerCt.down('grid'), record);
  501. window.location.reload();
  502. }
  503. },
  504. {
  505. xtype: 'button',
  506. columnWidth: 0.1,
  507. text: '关闭',
  508. width: 60,
  509. iconCls: 'x-button-icon-close',
  510. margin: '0 0 0 10',
  511. handler: function(btn) {
  512. btn.ownerCt.ownerCt.ownerCt.close();
  513. }
  514. }]
  515. });
  516. },
  517. saveSplit: function(grid, record) {
  518. var store = grid.getStore();
  519. var count = 0;
  520. var jsonData = new Array();
  521. var dd;
  522. Ext.Array.each(store.data.items,
  523. function(item) {
  524. if (item.data.snd_outqty != 0 && item.data.snd_warehousecode != null && item.data.snd_outqty > 0) {
  525. dd = new Object();
  526. //说明是新增批次
  527. dd['snd_outqty'] = item.data.snd_outqty;
  528. dd['snd_id'] = item.data.snd_id;
  529. dd['snd_warehousecode'] = item.data.snd_warehousecode;
  530. dd['snd_warehouse'] = item.data.snd_warehouse;
  531. dd['snd_pdno'] = item.data.snd_pdno;
  532. dd['snd_batchid'] = item.data.snd_batchid;
  533. dd['snd_batchcode'] = item.data.snd_batchcode;
  534. jsonData.push(Ext.JSON.encode(dd));
  535. count += Number(item.data.snd_outqty);
  536. }
  537. });
  538. var assqty = Number(record.data.snd_outqty);
  539. if (count - assqty > 0.001) {
  540. showError('分拆数量必须等于原数量!');
  541. return;
  542. } else {
  543. var r = new Object();
  544. r['snd_id'] = record.data.snd_id;
  545. r['snd_snid'] = record.data.snd_snid;
  546. r['snd_pdno'] = record.data.snd_pdno;
  547. var params = new Object();
  548. params.formdata = unescape(Ext.JSON.encode(r).replace(/\\/g, "%"));
  549. params.data = unescape(jsonData.toString().replace(/\\/g, "%"));
  550. Ext.Ajax.request({
  551. url: basePath + 'scm/sale/SendNotifyBatch.action',
  552. params: params,
  553. waitMsg: '拆分中...',
  554. method: 'post',
  555. callback: function(options, success, response) {
  556. var localJson = new Ext.decode(response.responseText);
  557. if (localJson.success) {
  558. saveSuccess(function() {
  559. //add成功后刷新页面进入可编辑的页面
  560. this.loadSplitData(originaldetno, said, record);
  561. });
  562. } else if (localJson.exceptionInfo) {
  563. var str = localJson.exceptionInfo;
  564. if (str.trim().substr(0, 12) == 'AFTERSUCCESS') { //特殊情况:操作成功,但是出现警告,允许刷新页面
  565. str = str.replace('AFTERSUCCESS', '');
  566. saveSuccess(function() {
  567. //add成功后刷新页面进入可编辑的页面
  568. this.loadSplitData(originaldetno, said, record);
  569. });
  570. showError(str);
  571. } else {
  572. showError(str);
  573. return;
  574. }
  575. } else {
  576. saveFailure();
  577. }
  578. }
  579. });
  580. }
  581. },
  582. createSplitGrid: function(record) {
  583. return Ext.create('Ext.grid.Panel', {
  584. region: 'south',
  585. layout: 'fit',
  586. id: 'smallgrid',
  587. height: '80%',
  588. features: [{
  589. ftype: 'summary'
  590. }],
  591. dbfinds: [{
  592. field: 'snd_batchcode',
  593. dbGridField: 'ba_code'
  594. },
  595. {
  596. field: 'snd_batchid',
  597. dbGridField: 'ba_id'
  598. },
  599. {
  600. field: 'snd_warehousecode',
  601. dbGridField: 'wh_code;ba_whcode'
  602. },
  603. {
  604. field: 'snd_warehouse',
  605. dbGridField: 'wh_description'
  606. },
  607. {
  608. field: 'ba_qty',
  609. dbGridField: 'ba_remain'
  610. }],
  611. columnLines: true,
  612. store: Ext.create('Ext.data.Store', {
  613. fields: [{
  614. name: 'snd_pdno',
  615. type: 'int'
  616. },
  617. {
  618. name: 'snd_outqty',
  619. type: 'number'
  620. },
  621. {
  622. name: 'snd_warehousecode',
  623. type: 'string'
  624. },
  625. {
  626. name: 'snd_warehouse',
  627. type: 'string'
  628. },
  629. {
  630. name: 'snd_batchcode',
  631. type: 'string'
  632. },
  633. {
  634. name: 'snd_batchid',
  635. type: 'int'
  636. },
  637. {
  638. name: 'snd_id',
  639. type: 'int'
  640. },
  641. {
  642. name: 'ba_qty',
  643. type: 'number'
  644. }],
  645. data: []
  646. }),
  647. plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
  648. clicksToEdit: 1
  649. })],
  650. tbar: [{
  651. tooltip: '添加批次',
  652. iconCls: 'x-button-icon-add',
  653. width: 25,
  654. handler: function() {
  655. var store = Ext.getCmp('smallgrid').getStore();
  656. var r = new Object();
  657. r.snd_outqty = 0;
  658. r.snd_id = 0;
  659. r.snd_pdno = store.getCount() + Number(record.data.snd_pdno);
  660. store.insert(store.getCount(), r);
  661. }
  662. },
  663. {
  664. tooltip: '删除批次',
  665. width: 25,
  666. itemId: 'delete',
  667. iconCls: 'x-button-icon-delete',
  668. handler: function(btn) {
  669. var sm = Ext.getCmp('smallgrid').getSelectionModel();
  670. var record = sm.getSelection();
  671. var snd_id = record[0].data.snd_id;
  672. if (snd_id && snd_id != 0) {
  673. Ext.Msg.alert('提示', '不能删除已拆批次或原始行号!');
  674. return;
  675. }
  676. var store = Ext.getCmp('smallgrid').getStore();
  677. store.remove(record);
  678. if (store.getCount() > 0) {
  679. sm.select(0);
  680. }
  681. },
  682. disabled: true
  683. }],
  684. listeners: {
  685. itemmousedown: function(selmodel, record) {
  686. selmodel.ownerCt.down('#delete').setDisabled(false);
  687. }
  688. },
  689. columns: [{
  690. dataIndex: 'snd_pdno',
  691. header: '序号',
  692. width: 60,
  693. format: '0',
  694. xtype: 'numbercolumn'
  695. },
  696. {
  697. dataIndex: 'snd_outqty',
  698. header: '数量',
  699. align: 'right',
  700. width: 120,
  701. summaryType: 'sum',
  702. xtype: 'numbercolumn',
  703. summaryRenderer: function(value, summaryData, dataIndex) {
  704. var store = this.view.store, v = store.sum(dataIndex);
  705. if(v != value) {
  706. store.fireEvent('datachanged', store);
  707. }
  708. return Ext.util.Format.number(value, '0,000.00');
  709. },
  710. editable: true,
  711. format: '0,000.00',
  712. editor: {
  713. xtype: 'numberfield',
  714. format: '0.00',
  715. hideTrigger: true
  716. }
  717. },
  718. {
  719. dataIndex: 'snd_warehousecode',
  720. header: '仓库编号',
  721. dbfind: 'WareHouse|wh_code',
  722. width: 100,
  723. editable: true,
  724. editor: {
  725. xtype: 'dbfindtrigger'
  726. }
  727. },
  728. {
  729. dataIndex: 'snd_warehouse',
  730. header: '仓库名称',
  731. width: 100,
  732. editable: false
  733. },
  734. {
  735. dataIndex: 'snd_batchcode',
  736. header: '批号',
  737. width: 100,
  738. dbfind: 'Batch|ba_code',
  739. editable: true,
  740. editor: {
  741. xtype: 'dbfindtrigger'
  742. }
  743. },
  744. {
  745. dataIndex: 'snd_batchid',
  746. header: '批号ID',
  747. xtype: 'numbercolumn',
  748. width: 100,
  749. editable: false
  750. },
  751. {
  752. dataIndex: 'snd_id',
  753. header: 'sndid',
  754. xtype: 'numbercolumn',
  755. width: 0
  756. },
  757. {
  758. dataIndex: 'ba_qty',
  759. header: '库存数',
  760. summaryType: 'sum',
  761. xtype: 'numbercolumn',
  762. summaryRenderer: function(value, summaryData, dataIndex) {
  763. return Ext.util.Format.number(value, '0,000.00');
  764. },
  765. width: 100
  766. }]
  767. });
  768. },
  769. SaleSplit: function(record) {
  770. var me = this,
  771. originaldetno = Number(record.data.snd_pdno);
  772. var said = Number(record.data.snd_snid);
  773. var win = Ext.create('Ext.window.Window', {
  774. width: 850,
  775. height: '80%',
  776. iconCls: 'x-grid-icon-partition',
  777. title: '<h1>出货通知单拆分</h1>',
  778. items: [me.createSplitForm(record), me.createSplitGrid(record)]
  779. });
  780. win.show();
  781. this.loadSplitData(originaldetno, said, record, win.down('grid'));
  782. },
  783. loadSplitData: function(detno, said, record, grid) {
  784. grid.setLoading(true); //loading...
  785. Ext.Ajax.request({ //拿到grid的columns
  786. url: basePath + "common/loadNewGridStore.action",
  787. params: {
  788. caller: 'SendnotifySplit',
  789. condition: 'snd_pdno=' + detno + " AND snd_snid=" + said + " order by snd_id desc"
  790. },
  791. method: 'post',
  792. callback: function(options, success, response) {
  793. grid.setLoading(false);
  794. var res = new Ext.decode(response.responseText);
  795. if (res.exceptionInfo) {
  796. showError(res.exceptionInfo);
  797. return;
  798. }
  799. var data = res.data;
  800. if (!data || data.length == 0) {
  801. grid.store.removeAll();
  802. var o = new Object();
  803. o.snd_pdno = detno;
  804. o.snd_outqty = record.data.snd_outqty;
  805. o.snd_id = record.data.snd_id;
  806. o.ba_qty = record.get('pw_onhand');
  807. data.push(o);
  808. }
  809. grid.store.loadData(data);
  810. //自定义event
  811. grid.addEvents({
  812. storeloaded: true
  813. });
  814. grid.fireEvent('storeloaded', grid, data);
  815. }
  816. });
  817. },
  818. beforeSaveSendNotify: function() {
  819. var grid = Ext.getCmp('grid'),
  820. items = grid.store.data.items;
  821. var bool = true;
  822. var cust = Ext.getCmp('sn_custid').value,
  823. sncode = Ext.getCmp('sn_code').value;
  824. if (cust == null || cust == '' || cust == '0' || cust == 0) {
  825. showError('未选择客户,或客户编号无效!');
  826. return;
  827. }
  828. Ext.Array.each(items,
  829. function(item) {
  830. item.set('snd_code', sncode);
  831. });
  832. var rateMsg = '';
  833. //数量不能为空或0
  834. Ext.each(items,
  835. function(item) {
  836. if (item.dirty && item.data[grid.necessaryField] != null && item.data[grid.necessaryField] != "") {
  837. if (item.data['snd_outqty'] == null || item.data['snd_outqty'] == '' || item.data['snd_outqty'] == '0' || item.data['snd_outqty'] == 0) {
  838. bool = false;
  839. showError('明细表第' + item.data['snd_pdno'] + '行的数量为空');
  840. return;
  841. }
  842. if (item.data['snd_taxrate'] == 0) {
  843. rateMsg += item.data['snd_pdno'] + ' ';
  844. }
  845. }
  846. });
  847. if (rateMsg != '') {
  848. warnMsg('明细行:' + rateMsg + '的税率为0,是否继续?',
  849. function(btn) {
  850. if (btn != 'ok' && btn != 'yes') {
  851. bool = false;
  852. }
  853. });
  854. }
  855. //保存sale
  856. if (bool) this.FormUtil.beforeSave(this);
  857. },
  858. beforeUpdate: function() {
  859. var grid = Ext.getCmp('grid'),
  860. items = grid.store.data.items;
  861. var bool = true;
  862. var cust = Ext.getCmp('sn_custid').value,
  863. sncode = Ext.getCmp('sn_code').value;
  864. if (cust == null || cust == '' || cust == '0' || cust == 0) {
  865. showError('未选择客户,或客户编号无效!');
  866. return;
  867. }
  868. Ext.Array.each(items,
  869. function(item) {
  870. item.set('snd_code', sncode);
  871. });
  872. var rateMsg = '';
  873. //数量不能为空或0
  874. Ext.each(items,
  875. function(item) {
  876. if (item.dirty && item.data[grid.necessaryField] != null && item.data[grid.necessaryField] != "") {
  877. if (item.data['snd_outqty'] == null || item.data['snd_outqty'] == '' || item.data['snd_outqty'] == '0' || item.data['snd_outqty'] == 0) {
  878. bool = false;
  879. showError('明细表第' + item.data['snd_pdno'] + '行的数量为空');
  880. return;
  881. }
  882. if (item.data['snd_taxrate'] == 0) {
  883. rateMsg += item.data['snd_pdno'] + ' ';
  884. }
  885. }
  886. });
  887. if (rateMsg != '') {
  888. warnMsg('明细行:' + rateMsg + '的税率为0,是否继续?',
  889. function(btn) {
  890. if (btn != 'ok' && btn != 'yes') {
  891. bool = false;
  892. }
  893. });
  894. }
  895. //保存
  896. if (bool) this.FormUtil.onUpdate(this);
  897. },
  898. /**
  899. * snd_ordercode的限制条件
  900. */
  901. getCodeCondition: function() {
  902. var field = null;
  903. var fields = '';
  904. var tablename = '';
  905. var myfield = '';
  906. var tFields = 'sn_custid,sn_custcode,sn_custname,sn_currency,sn_rate,sn_payments,sn_payment,sn_toplace,sn_sellerid,sn_sellername,sn_arcustcode,sn_arcustname';
  907. switch (caller) {
  908. case 'SendNotify':
  909. //出货通知单
  910. field = "sa_custcode";
  911. fields = 'sa_custid,sa_custcode,sa_custname,sa_currency,sa_rate,sa_paymentsid,sa_payments,sa_toplace,sa_sellerid,sa_seller,sa_apcustcode,sa_apcustname';
  912. tablename = 'Sale';
  913. myfield = 'sa_code';
  914. break;
  915. }
  916. var obj = new Object();
  917. obj.field = field;
  918. obj.fields = fields;
  919. obj.tFields = tFields;
  920. obj.tablename = tablename;
  921. obj.myfield = myfield;
  922. return obj;
  923. },
  924. loadOnHandQty: function(grid, id) {
  925. Ext.Ajax.request({
  926. url: basePath + 'scm/sale/loadOnHandQty.action',
  927. params: {
  928. caller: caller,
  929. id: id
  930. },
  931. callback: function(opt, s, r) {
  932. var rs = Ext.decode(r.responseText);
  933. if (rs.exceptionInfo) {
  934. showMessage('提示', rs.exceptionInfo.replace('AFTERSUCCESS', ''));
  935. } else {
  936. var data = [];
  937. if (!rs.data || rs.data.length == 2) {
  938. grid.GridUtil.add10EmptyData(grid.detno, data);
  939. grid.GridUtil.add10EmptyData(grid.detno, data);
  940. } else {
  941. data = Ext.decode(rs.data.replace(/,}/g, '}').replace(/,]/g, ']'));
  942. }
  943. grid.store.loadData(data);
  944. }
  945. }
  946. });
  947. },
  948. batchDeal:function(url){
  949. var jsonGridData = new Array();
  950. var grid = Ext.getCmp('grid');
  951. var jsonGridData = new Array();
  952. var form = Ext.getCmp('form');
  953. var cu_code=Ext.getCmp('sn_custcode').value;
  954. var sn_currency=Ext.getCmp('sn_currency').value;
  955. var sn_rate=Ext.getCmp('sn_rate').value;
  956. grid.getStore().each(function(item){//将grid里面各行的数据获取并拼成jsonGridData
  957. var data = Ext.clone(item.data);
  958. if(data[grid.necessaryField] != null && data[grid.necessaryField] != ""){
  959. data['snd_tqty']=data['snd_outqty'];
  960. data['sn_custcode']=cu_code;
  961. data['sn_currency']=sn_currency;
  962. data['sn_rate']=sn_rate;
  963. data['snd_thisbpqty']=0;
  964. jsonGridData.push(data);
  965. }
  966. });
  967. var params=new Object();
  968. params.data = unescape(Ext.JSON.encode(jsonGridData).replace(/\\/g,"%"));
  969. var main = parent.Ext.getCmp("content-panel");
  970. main.getActiveTab().setLoading(true);//loading...
  971. Ext.Ajax.request({
  972. url : basePath + url,//scm/sale/turnProdOut.action?type=ProdInOut!OtherOut
  973. params: params,
  974. method : 'post',
  975. timeout: 6000000,
  976. callback : function(options,success,response){
  977. main.getActiveTab().setLoading(false);
  978. var localJson = new Ext.decode(response.responseText);
  979. if(localJson.exceptionInfo){
  980. var str = localJson.exceptionInfo;
  981. if(str.trim().substr(0, 12) == 'AFTERSUCCESS'){
  982. str = str.replace('AFTERSUCCESS', '');
  983. }
  984. showError(str);return;
  985. }
  986. if(localJson.success){
  987. if(localJson.log){
  988. showMessage("提示", localJson.log);
  989. }
  990. window.location.reload();
  991. }
  992. }
  993. });
  994. }
  995. });