Purchase.js 45 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.scm.purchase.Purchase', {
  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.purchase.Purchase', 'core.grid.Panel2', 'core.toolbar.Toolbar',
  8. 'core.form.MultiField', 'core.button.Save', 'core.button.Add', 'core.button.Submit',
  9. 'core.button.Print', 'core.button.PrintHK', 'core.button.PrintEn','core.button.Upload', 'core.button.ResAudit',
  10. 'core.button.Audit', 'core.button.Close', 'core.button.Delete', 'core.button.Update', 'core.button.B2B',
  11. 'core.button.DeleteDetail', 'core.button.ResSubmit', 'core.button.End','core.button.Printyestax', 'core.button.Printnotax','core.button.AttendDataCom',
  12. 'core.button.ResEnd', 'core.button.GetPrice', 'core.button.Export', 'core.button.StandardPrice',
  13. 'core.trigger.DbfindTrigger', 'core.trigger.TextAreaTrigger', 'core.form.YnField',
  14. 'core.grid.YnColumn', 'core.form.StatusField', 'core.form.FileField', 'core.button.PrintByCondition',
  15. 'core.button.CopyAll', 'core.button.ResetSync', 'core.button.RefreshSync','core.button.RefreshQty','core.button.Split'],
  16. init: function() {
  17. var me = this;
  18. this.control({
  19. 'erpGridPanel2': {
  20. afterrender: function(grid) {
  21. var status = Ext.getCmp('pu_statuscode');
  22. if (status && status.value != 'ENTERING' && status.value != 'COMMITED') {
  23. Ext.each(grid.columns,
  24. function(c) {
  25. c.setEditor(null);
  26. });
  27. }
  28. },
  29. itemclick: this.onGridItemClick
  30. },
  31. 'field[name=pu_currency]': {
  32. beforetrigger: function(field) {
  33. var t = field.up('form').down('field[name=pu_date]'),
  34. value = t.getValue();
  35. if(value) {
  36. field.findConfig = 'cm_yearmonth=' + Ext.Date.format(value, 'Ym');
  37. }
  38. }
  39. },
  40. 'field[name=pu_vendremarkcode]': {
  41. beforetrigger: function(field) {
  42. var t = field.up('form').down('field[name=pu_vendcode]'),
  43. value = t.getValue();
  44. if(value) {
  45. field.findConfig = "vr_vendcode='" + value + "'";
  46. }
  47. }
  48. },
  49. 'field[name=pu_outcredit]': {
  50. afterrender: function(f){
  51. if(f.value != null && f.value != '' && f.value != 0){
  52. f.inputEl.setStyle({color: 'OrangeRed'});
  53. }
  54. }
  55. },
  56. 'field[name=pu_outamount]': {
  57. afterrender: function(f){
  58. if(f.value != null && f.value != '' && f.value != 0){
  59. f.inputEl.setStyle({color: 'OrangeRed'});
  60. }
  61. }
  62. },
  63. 'dbfindtrigger[name=pd_price]': {
  64. focus: function(t){
  65. t.setHideTrigger(false);
  66. t.setReadOnly(false);
  67. if(Ext.getCmp('pu_vendcode')){
  68. var cucode = Ext.getCmp('pu_vendcode').value,
  69. currency = Ext.getCmp('pu_currency').value;
  70. record = Ext.getCmp('grid').selModel.lastSelected,
  71. prodcode = record.data['pd_prodcode'];
  72. if(Ext.isEmpty(cucode)){
  73. showError("请先选择供应商编号!");
  74. t.setHideTrigger(true);
  75. t.setReadOnly(true);
  76. } else if(Ext.isEmpty(currency)){
  77. showError("请先填写币别!");
  78. t.setHideTrigger(true);
  79. t.setReadOnly(true);
  80. } else if(Ext.isEmpty(prodcode)){
  81. showError("请先选择物料编号!");
  82. t.setHideTrigger(true);
  83. t.setReadOnly(true);
  84. } else {
  85. t.dbBaseCondition = "PPD_VENDCODE='" + cucode + "' and PPD_CURRENCY='" + currency + "' and ppd_prodcode='" + prodcode + "'";
  86. }
  87. }
  88. }
  89. },
  90. 'erpSaveButton': {
  91. click: function(btn) {
  92. var form = me.getForm(btn), codeField = Ext.getCmp(form.codeField);
  93. if(codeField.value == null || codeField.value == ''){
  94. me.BaseUtil.getRandomNumber(caller);//自动添加编号
  95. var res = me.getLeadCode(Ext.getCmp('pu_kind').value);
  96. if(res != null && res != ''){
  97. codeField.setValue(res + codeField.getValue());
  98. }
  99. }
  100. //保存之前的一些前台的逻辑判定
  101. this.beforeSavePurchase();
  102. }
  103. },
  104. 'erpDeleteButton': {
  105. click: function(btn) {
  106. me.FormUtil.onDelete(Ext.getCmp('pu_id').value);
  107. }
  108. },
  109. 'erpAttendDataComButton':{
  110. beforerender:function(btn){
  111. btn.setText("计算");
  112. },
  113. click: function(btn){
  114. var id=Ext.getCmp('pu_id').value;
  115. grid = Ext.getCmp('grid');
  116. Ext.Ajax.request({
  117. url : basePath + "scm/purchase/purchasedataupdate.action",
  118. params: {
  119. id:id
  120. },
  121. method : 'post',
  122. async: false,
  123. callback : function(options,success,response){
  124. var res = new Ext.decode(response.responseText);
  125. if(res.exceptionInfo){
  126. showError(res.exceptionInfo);
  127. return;
  128. }
  129. grid.GridUtil.loadNewStore(grid,{
  130. caller:'Purchase',
  131. condition:gridCondition,
  132. _noc:1
  133. });
  134. showError("计算成功!");
  135. }
  136. });
  137. }
  138. },
  139. 'erpGetPriceButton': {
  140. afterrender: function(btn) {
  141. var status = Ext.getCmp('pu_statuscode');
  142. if (status && status.value != 'ENTERING') {
  143. btn.hide();
  144. }
  145. },
  146. click: function(btn) {
  147. id = Ext.getCmp('pu_id').value;
  148. Ext.Ajax.request({
  149. url: basePath + "scm/purchase/getPrice.action",
  150. params: {
  151. id: id
  152. },
  153. method: 'post',
  154. callback: function(options, success, response) {
  155. var res = new Ext.decode(response.responseText);
  156. if (res.exceptionInfo != null) {
  157. showError(res.exceptionInfo);
  158. return;
  159. }
  160. if (res.success) {
  161. updateSuccess(function(btn) {
  162. //update成功后刷新页面进入可编辑的页面
  163. window.location.reload();
  164. });
  165. }
  166. }
  167. });
  168. }
  169. },
  170. 'erpStandardPriceButton': {
  171. afterrender: function(btn) {
  172. var status = Ext.getCmp('pu_statuscode');
  173. if (status && status.value != 'ENTERING') {
  174. btn.hide();
  175. }
  176. },
  177. click: function(btn) {
  178. id = Ext.getCmp('pu_id').value;
  179. Ext.Ajax.request({
  180. url: basePath + "scm/purchase/getStandardPrice.action",
  181. params: {
  182. id: id
  183. },
  184. method: 'post',
  185. callback: function(options, success, response) {
  186. var res = new Ext.decode(response.responseText);
  187. if (res.exceptionInfo != null) {
  188. showError(res.exceptionInfo);
  189. return;
  190. }
  191. if (res.success) {
  192. updateSuccess(function(btn) {
  193. //update成功后刷新页面进入可编辑的页面
  194. window.location.reload();
  195. });
  196. }
  197. }
  198. });
  199. }
  200. },
  201. 'erpUpdateButton': {
  202. afterrender: function(btn) {
  203. var status = Ext.getCmp('pu_statuscode');
  204. if (status && status.value != 'ENTERING') {
  205. btn.hide();
  206. }
  207. },
  208. click: function(btn) {
  209. me.beforeUpdate();
  210. }
  211. },
  212. 'erpAddButton': {
  213. click: function() {
  214. me.FormUtil.onAdd('addPurchase', '新增采购单', 'jsps/scm/purchase/purchase.jsp');
  215. }
  216. },
  217. 'erpCloseButton': {
  218. click: function(btn) {
  219. me.FormUtil.beforeClose(me);
  220. }
  221. },
  222. 'erpSubmitButton': {
  223. afterrender: function(btn) {
  224. var status = Ext.getCmp('pu_statuscode');
  225. if (status && status.value != 'ENTERING') {
  226. btn.hide();
  227. }
  228. },
  229. click: function(btn) {
  230. var grid = Ext.getCmp('grid'), items = grid.store.data.items;
  231. var bool = true, pudate = Ext.getCmp('pu_date').value;
  232. //数量不能为空或0
  233. Ext.each(items,
  234. function(item) {
  235. if (item.dirty && item.data[grid.necessaryField] != null && item.data[grid.necessaryField] != "") {
  236. if (item.data['pd_qty'] == null) {
  237. bool = false;
  238. showError('明细表第' + item.data['pd_detno'] + '行的数量为空');
  239. return;
  240. } else if (Ext.Date.format(item.data['pd_delivery'],'Y-m-d') < Ext.Date.format(pudate,'Y-m-d')) {
  241. bool = false;
  242. showError('明细表第' + item.data['pd_detno'] + '行的交货日期小于单据日期');
  243. return;
  244. } else if (Ext.Date.format(item.data['pd_delivery'],'Y-m-d') < Ext.Date.format(new Date(),'Y-m-d')) {
  245. bool = false;
  246. showError('明细表第' + item.data['pd_detno'] + '行的交货日期小于当前日期');
  247. return;
  248. }
  249. }
  250. });
  251. //物料交货日期不能小于录入日期
  252. Ext.each(items,
  253. function(item) {
  254. if (item.dirty && item.data[grid.necessaryField] != null && item.data[grid.necessaryField] != "") {
  255. if (item.data['pd_delivery'] == null) {
  256. bool = false;
  257. showError('明细表第' + item.data['pd_detno'] + '行的承诺日期为空');
  258. return;
  259. } else if (Ext.Date.format(item.data['pd_delivery'],'Y-m-d') < Ext.Date.format(Ext.getCmp('pu_indate').value,'Y-m-d')) {
  260. bool = false;
  261. showError('明细表第' + item.data['pd_detno'] + '行的承诺日期小于单据录入日期');
  262. return;
  263. }
  264. }
  265. });
  266. if (bool) {
  267. me.FormUtil.onSubmit(Ext.getCmp('pu_id').value);
  268. }
  269. }
  270. },
  271. 'erpResSubmitButton': {
  272. afterrender: function(btn) {
  273. var status = Ext.getCmp('pu_statuscode');
  274. if (status && status.value != 'COMMITED') {
  275. btn.hide();
  276. }
  277. },
  278. click: function(btn) {
  279. me.FormUtil.onResSubmit(Ext.getCmp('pu_id').value);
  280. }
  281. },
  282. 'erpAuditButton': {
  283. afterrender: function(btn) {
  284. var status = Ext.getCmp('pu_statuscode');
  285. if (status && status.value != 'COMMITED') {
  286. btn.hide();
  287. }
  288. },
  289. click: function(btn) {
  290. me.FormUtil.onAudit(Ext.getCmp('pu_id').value);
  291. }
  292. },
  293. 'erpB2BButton': {
  294. afterrender: function(btn) {
  295. var status = Ext.getCmp('pu_statuscode');
  296. if (status && status.value != 'AUDITED') {
  297. btn.hide();
  298. }
  299. },
  300. click: function(btn) {
  301. me.FormUtil.onB2b(Ext.getCmp('pu_id').value);
  302. }
  303. },
  304. 'erpResAuditButton': {
  305. afterrender: function(btn) {
  306. var status = Ext.getCmp('pu_statuscode');
  307. if (status && status.value != 'AUDITED') {
  308. btn.hide();
  309. }
  310. },
  311. click: function(btn) {
  312. me.FormUtil.onResAudit(Ext.getCmp('pu_id').value);
  313. }
  314. },
  315. 'erpEndButton': {
  316. afterrender: function(btn) {
  317. var status = Ext.getCmp('pu_statuscode');
  318. if (status && status.value != 'AUDITED') {
  319. btn.hide();
  320. }
  321. },
  322. click: function(btn) {
  323. warnMsg("确定结案?", function(btn){
  324. if(btn == 'yes'){
  325. me.FormUtil.getActiveTab().setLoading(true);//loading...
  326. var grid = Ext.getCmp('grid'), jsonData=new Array();
  327. grid.store.each(function(item){
  328. if(item.get('pd_id') > 0)
  329. jsonData.push({pd_id: item.get('pd_id')});
  330. });
  331. Ext.Ajax.request({
  332. url : basePath + 'scm/purchase/endPurchase.action',
  333. params: {
  334. caller: caller,
  335. data: Ext.JSON.encode(jsonData)
  336. },
  337. method : 'post',
  338. callback : function(options,success,response){
  339. me.FormUtil.getActiveTab().setLoading(false);
  340. var localJson = new Ext.decode(response.responseText);
  341. if(localJson.exceptionInfo){
  342. showError(localJson.exceptionInfo);
  343. }
  344. if(localJson.success){
  345. alert("结案成功!");
  346. window.location.reload();
  347. }
  348. }
  349. });
  350. }
  351. });
  352. }
  353. },
  354. /**
  355. * 更改供应商回复信息
  356. */
  357. '#updatevendorbackInfo': {
  358. click: function(btn) {
  359. var record = btn.ownerCt.ownerCt.getSelectionModel().getLastSelected();
  360. me.UpdateVendorInfo(record);
  361. }
  362. },
  363. 'erpPrintButton': {
  364. click: function(btn) {
  365. var reportName = '';
  366. reportName = "PURCLIST";
  367. var condition = '{Purchase.pu_id}=' + Ext.getCmp('pu_id').value + '';
  368. var id = Ext.getCmp('pu_id').value;
  369. me.FormUtil.onwindowsPrint2(id, reportName, condition);
  370. }
  371. },
  372. 'erpPrintEnButton': {
  373. click: function(btn) {
  374. var reportName = '';
  375. reportName = "PURCLIST_EN";
  376. var condition = '{Purchase.pu_id}=' + Ext.getCmp('pu_id').value + '';
  377. var id = Ext.getCmp('pu_id').value;
  378. me.FormUtil.onwindowsPrint2(id, reportName, condition);
  379. }
  380. },
  381. 'erpPrintHKButton': {
  382. click: function(btn) {
  383. var reportName = '';
  384. reportName = "PURCLIST_HK";
  385. var condition = '{Purchase.pu_id}=' + Ext.getCmp('pu_id').value + '';
  386. var id = Ext.getCmp('pu_id').value;
  387. me.FormUtil.onwindowsPrint2(id, reportName, condition);
  388. }
  389. },
  390. 'erpPrintyestaxButton': {
  391. click: function(btn) {
  392. var reportName = '';
  393. reportName = "PURCLIST_yestax";
  394. var condition = '{Purchase.pu_id}=' + Ext.getCmp('pu_id').value + '';
  395. var id = Ext.getCmp('pu_id').value;
  396. me.FormUtil.onwindowsPrint2(id, reportName, condition);
  397. }
  398. },
  399. 'erpPrintnotaxButton': {
  400. click: function(btn) {
  401. var reportName = '';
  402. reportName = "PURCLIST_notax";
  403. var condition = '{Purchase.pu_id}=' + Ext.getCmp('pu_id').value + '';
  404. var id = Ext.getCmp('pu_id').value;
  405. me.FormUtil.onwindowsPrint2(id, reportName, condition);
  406. }
  407. },
  408. 'erpPrintByConditionButton': {
  409. /*afterrender: function(btn){
  410. var status = Ext.getCmp('dgl_statuscode');
  411. if(status && status.value != 'AUDITED'){
  412. btn.hide();
  413. }
  414. }*/
  415. },
  416. 'field[name=pu_vendcode]': {
  417. change: function(f) {
  418. if (f.value != null && f.value != '') {
  419. if (Ext.getCmp('pu_receivecode').value == null || Ext.getCmp('pu_receivecode').value.toString().trim() == '') {
  420. Ext.getCmp('pu_receivecode').setValue(f.value);
  421. }
  422. }
  423. }
  424. },
  425. 'field[name=pu_vendname]': {
  426. change: function(f) {
  427. if (f.value != null && f.value != '') {
  428. if (Ext.getCmp('pu_receivename').value == null || Ext.getCmp('pu_receivename').value.toString().trim() == '') {
  429. Ext.getCmp('pu_receivename').setValue(f.value);
  430. }
  431. }
  432. }
  433. },
  434. 'erpCopyButton': {
  435. click: function(btn) {
  436. me.copy();
  437. }
  438. },
  439. 'erpResetSyncButton': {
  440. afterrender: function(btn) {
  441. var form = btn.ownerCt.ownerCt,
  442. s = form.down('#pu_statuscode'),
  443. v = form.down('#pu_receivecode');
  444. if (s.getValue() != 'AUDITED' || v.getValue() != '02.01.028') {
  445. btn.hide();
  446. }
  447. },
  448. click: function(btn) {
  449. var form = btn.ownerCt.ownerCt,
  450. id = form.down('#pu_id').getValue();
  451. btn.resetSyncStatus(basePath + 'scm/purchase/syncstatus.action', id);
  452. }
  453. },
  454. 'erpRefreshSyncButton': {
  455. afterrender: function(btn) {
  456. var form = btn.ownerCt.ownerCt,
  457. s = form.down('#pu_statuscode'),
  458. v = form.down('#pu_sync');
  459. if (s.getValue() != 'AUDITED' || (v && v.getValue() == null)) {
  460. btn.hide();
  461. }
  462. }
  463. },
  464. 'dbfindtrigger[name=pu_vendcontact]': {
  465. afterrender:function(trigger){
  466. trigger.dbKey='pu_vendcode';
  467. trigger.mappingKey='vc_vecode';
  468. trigger.dbMessage='请先选供应商编号!';
  469. }
  470. },
  471. 'erpRefreshQtyButton':{
  472. click: function(btn){
  473. var puid=Ext.getCmp('pu_id').value;
  474. Ext.Ajax.request({
  475. url : basePath + "scm/purchase/refreshqty.action",
  476. params:{
  477. id: puid
  478. },
  479. method:'post',
  480. callback:function(options,success,response){
  481. var localJson = new Ext.decode(response.responseText);
  482. if(localJson.success){
  483. Ext.Msg.alert("提示","刷新成功!");
  484. window.location.reload();
  485. } else {
  486. if(localJson.exceptionInfo){
  487. var str = localJson.exceptionInfo;
  488. if(str.trim().substr(0, 12) == 'AFTERSUCCESS'){//特殊情况:操作成功,但是出现警告,允许刷新页面
  489. str = str.replace('AFTERSUCCESS', '');
  490. showError(str);
  491. } else {
  492. showError(str);return;
  493. }
  494. }
  495. }
  496. }
  497. });
  498. }
  499. },
  500. /**
  501. * PO分拆
  502. */
  503. 'erpSplitButton': {
  504. beforerender: function(btn) {
  505. btn.text="拆分及交期回复";
  506. btn.width=130;
  507. },
  508. click: function(btn) {
  509. var record=btn.ownerCt.ownerCt.getSelectionModel().getLastSelected();
  510. me.PurchaseSplit(record);
  511. }
  512. }
  513. });
  514. },
  515. UpdateVendorInfo: function(record) {
  516. win = this.getVendorInfoWindow(record);
  517. win.show();
  518. },
  519. getVendorInfoWindow: function(record) {
  520. var me = this;
  521. var date = record.data.pd_deliveryreply;
  522. if (date != null) {
  523. date = Ext.Date.parse(date, "Y-m-d");
  524. }
  525. return Ext.create('Ext.window.Window', {
  526. width: 430,
  527. height: 250,
  528. closeAction: 'destroy',
  529. cls: 'custom-blue',
  530. title: '<h1>更改供应商回信息</h1>',
  531. layout: {
  532. type: 'vbox'
  533. },
  534. items: [{
  535. width: '100%',
  536. html: '<div style="background:transparent;border:none;width:100%;height:30px;' + 'color:#036;vertical-align:middle;line-height:30px;font-size:14px;">' + '*注:修改采购单跟多信息请制作采购变更单<a style="float:right" href="javascript:' + 'openTable(\'采购变更\',\'jsps/scm/purchase/purchaseChange.jsp\',\'PurchaseChange\');">进入</a></div>'
  537. },
  538. {
  539. margin: '5 0 0 5',
  540. xtype: 'datefield',
  541. fieldLabel: '回复交期',
  542. name: 'DELIVERYREPLY',
  543. format: 'Y-m-d',
  544. value: date,
  545. id: 'DELIVERYREPLY'
  546. },
  547. {
  548. margin: '5 0 0 5',
  549. xtype: 'numberfield',
  550. fieldLabel: '回复数量',
  551. name: 'QTYREPLY',
  552. hideTrigger: true,
  553. value: record.data.pd_qtyreply,
  554. id: 'QTYREPLY'
  555. },{
  556. margin: '5 0 0 5',
  557. xtype: 'checkbox',
  558. columnidth: 0.4,
  559. fieldLabel: '能否按时交货',
  560. name: 'isok',
  561. value:(record.data.pd_isok && record.data.pd_isok=='是'),
  562. id: 'isok'
  563. },
  564. {
  565. margin: '5 0 0 5',
  566. xtype: 'textfield',
  567. columnidth: 0.4,
  568. fieldLabel: '回复明细',
  569. name: 'replydetail',
  570. value:record.data.pd_replydetail,
  571. id: 'replydetail'
  572. }
  573. ],
  574. buttonAlign: 'center',
  575. buttons: [{
  576. xtype: 'button',
  577. text: '保存',
  578. width: 60,
  579. iconCls: 'x-button-icon-save',
  580. handler: function(btn) {
  581. var w = btn.up('window');
  582. me.saveVendorInfo(w);
  583. win.close();
  584. win.destroy();
  585. }
  586. },
  587. {
  588. xtype: 'button',
  589. columnWidth: 0.1,
  590. text: '关闭',
  591. width: 60,
  592. iconCls: 'x-button-icon-close',
  593. margin: '0 0 0 10',
  594. handler: function(btn) {
  595. var win = btn.up('window');
  596. win.close();
  597. win.destroy();
  598. }
  599. }]
  600. });
  601. },
  602. saveVendorInfo: function(w) {
  603. var deliveryreply = w.down('field[name=DELIVERYREPLY]').getValue();
  604. var qty = w.down('field[name=QTYREPLY]').getValue();
  605. grid = Ext.getCmp('grid'),
  606. record = grid.getSelectionModel().getLastSelected();
  607. if (!deliveryreply && !qty && !Ext.getCmp('replydetail').value) {
  608. showError('请先设置回复信息');
  609. return;
  610. } else {
  611. var isok = w.down('field[name=isok]').getValue();
  612. var dd = {
  613. pd_id: record.data.pd_id,
  614. pd_qtyreply: qty ? qty: 0,
  615. pd_deliveryreply: deliveryreply ? Ext.Date.format(deliveryreply, 'Y-m-d') : null,
  616. pd_isok: isok ? '是': '否',
  617. pd_replydetail:Ext.getCmp('replydetail').value
  618. };
  619. Ext.Ajax.request({
  620. url: basePath + 'scm/purchase/updateVendorBackInfo.action',
  621. params: {
  622. data: unescape(Ext.JSON.encode(dd)),
  623. caller: caller
  624. },
  625. method: 'post',
  626. callback: function(opt, s, res) {
  627. var r = new Ext.decode(res.responseText);
  628. if (r.success) {
  629. grid.GridUtil.loadNewStore(grid, {
  630. caller: caller,
  631. condition: gridCondition
  632. });
  633. showMessage('提示', '更新成功!', 1000);
  634. } else if (r.exceptionInfo) {
  635. showError(r.exceptionInfo);
  636. } else {
  637. saveFailure();
  638. }
  639. }
  640. });
  641. }
  642. },
  643. onGridItemClick: function(selModel, record) { //grid行选择
  644. if (record.data.pd_id != 0 && record.data.pd_id != null && record.data.pd_id != '') {
  645. var btn = Ext.getCmp('updatevendorbackInfo');
  646. btn && btn.setDisabled(false);
  647. btn = Ext.getCmp('erpSplitButton');
  648. btn && btn.setDisabled(false);
  649. }
  650. this.GridUtil.onGridItemClick(selModel, record);
  651. },
  652. getForm: function(btn) {
  653. return btn.ownerCt.ownerCt;
  654. },
  655. beforeSavePurchase: function() {
  656. var grid = Ext.getCmp('grid'), items = grid.store.data.items,
  657. c = Ext.getCmp('pu_code').value, pudate = Ext.getCmp('pu_date').value;
  658. var vend = Ext.getCmp('pu_vendid').value,
  659. vendcode = Ext.getCmp('pu_vendcode').value,
  660. vendname = Ext.getCmp('pu_vendname').value;
  661. if (vend == null || vend == '' || vend == '0' || vend == 0) {
  662. showError('未选择供应商,或供应商编号无效!');
  663. return;
  664. }
  665. Ext.Array.each(items,
  666. function(item) {
  667. item.set('pd_code', c);
  668. item.set('pd_vendid', vend);
  669. item.set('pd_vendcode', vendcode);
  670. item.set('pd_vendname', vendname);
  671. });
  672. //手工录入采购单,合同类型不能为标准
  673. var pu_kind = Ext.getCmp('pu_kind').value;
  674. if (pu_kind == null || pu_kind == '') {
  675. showError('合同类型不能为空');
  676. return;
  677. }
  678. if (pu_kind == '标准' || pu_kind == 'normal' || pu_kind == '標準') {
  679. showError('手工录入采购单,合同类型不能为标准');
  680. return;
  681. }
  682. var items = grid.store.data.items;
  683. var bool = true;
  684. //数量不能为空或0
  685. Ext.each(items,function(item) {
  686. if (item.dirty && item.data[grid.necessaryField] != null && item.data[grid.necessaryField] != "") {
  687. if (item.data['pd_qty'] == null || item.data['pd_qty'] == '' || item.data['pd_qty'] == '0' || item.data['pd_qty'] == 0) {
  688. bool = false;
  689. showError('明细表第' + item.data['pd_detno'] + '行的数量为空');
  690. return;
  691. }
  692. }
  693. });
  694. //物料交货日期不能小于录入日期
  695. Ext.each(items, function(item) {
  696. if (item.dirty && item.data[grid.necessaryField] != null && item.data[grid.necessaryField] != "") {
  697. if (item.data['pd_delivery'] == null) {
  698. item.set('pd_delivery', Ext.getCmp('pu_delivery'));
  699. } else if (Ext.Date.format(item.data['pd_delivery'],'Y-m-d') < Ext.Date.format(new Date(),'Y-m-d')) {
  700. bool = false;
  701. showError('明细表第' + item.data['pd_detno'] + '行的交货日期小于当前日期');
  702. return;
  703. } else if (Ext.Date.format(item.data['pd_delivery'],'Y-m-d') < Ext.Date.format(pudate,'Y-m-d')) {
  704. bool = false;
  705. showError('明细表第' + item.data['pd_detno'] + '行的交货日期小于单据日期');
  706. return;
  707. }
  708. }
  709. });
  710. //保存purchase
  711. if (bool) this.FormUtil.beforeSave(this);
  712. },
  713. beforeUpdate: function() {
  714. var grid = Ext.getCmp('grid'), items = grid.store.data.items,
  715. c = Ext.getCmp('pu_code').value, pudate = Ext.getCmp('pu_date').value;
  716. var vend = Ext.getCmp('pu_vendid').value,
  717. vendcode = Ext.getCmp('pu_vendcode').value,
  718. vendname = Ext.getCmp('pu_vendname').value;
  719. if (vend == null || vend == '' || vend == '0' || vend == 0) {
  720. showError('未选择供应商,或供应商编号无效!');
  721. return;
  722. }
  723. Ext.Array.each(items,
  724. function(item) {
  725. item.set('pd_code', c);
  726. item.set('pd_vendid', vend);
  727. item.set('pd_vendcode', vendcode);
  728. item.set('pd_vendname', vendname);
  729. });
  730. var items = grid.store.data.items;
  731. var bool = true;
  732. //数量不能为空或0
  733. Ext.each(items,
  734. function(item) {
  735. if (item.dirty && item.data[grid.necessaryField] != null && item.data[grid.necessaryField] != "") {
  736. if (item.data['pd_qty'] == null || item.data['pd_qty'] == '' || item.data['pd_qty'] == '0' || item.data['pd_qty'] == 0) {
  737. bool = false;
  738. showError('明细表第' + item.data['pd_detno'] + '行的数量为空');
  739. return;
  740. }
  741. }
  742. });
  743. /*//采购价格不能为0
  744. if (Ext.getCmp('pu_getprice').value == 0) { //是否自动获取单价
  745. Ext.each(items,
  746. function(item) {
  747. if (item.dirty && item.data[grid.necessaryField] != null && item.data[grid.necessaryField] != "") {
  748. if (item.data['pd_price'] == null) {
  749. bool = false;
  750. showError('明细表第' + item.data['pd_detno'] + '行的价格为空');
  751. return;
  752. } else if (item.data['pd_price'] == 0 || item.data['pd_price'] == '0') {
  753. bool = false;
  754. showError('明细表第' + item.data['pd_detno'] + '行的价格为0');
  755. return;
  756. }
  757. }
  758. });
  759. }*/
  760. //物料交货日期不能小于录入日期
  761. Ext.each(items,
  762. function(item) {
  763. if (item.dirty && item.data[grid.necessaryField] != null && item.data[grid.necessaryField] != "") {
  764. if (item.data['pd_delivery'] == null) {
  765. item.set('pd_delivery', Ext.getCmp('pu_delivery'));
  766. } else if (Ext.Date.format(item.data['pd_delivery'],'Y-m-d') < Ext.Date.format(new Date(),'Y-m-d')) {
  767. bool = false;
  768. showError('明细表第' + item.data['pd_detno'] + '行的交货日期小于当前日期');
  769. return;
  770. } else if (Ext.Date.format(item.data['pd_delivery'],'Y-m-d') < Ext.Date.format(pudate,'Y-m-d')) {
  771. bool = false;
  772. showError('明细表第' + item.data['pd_detno'] + '行的交货日期小于单据日期');
  773. return;
  774. }
  775. }
  776. });
  777. //更新
  778. if (bool) this.FormUtil.onUpdate(this);
  779. },
  780. /**
  781. * 复制采购单
  782. */
  783. copy: function() {
  784. var me = this,
  785. form = Ext.getCmp('form');
  786. var v = form.down('#pu_id').value;
  787. if (v > 0) {
  788. form.setLoading(true);
  789. Ext.Ajax.request({
  790. url: basePath + 'scm/purchase/copyPurchase.action',
  791. params: {
  792. caller: caller,
  793. id: v
  794. },
  795. callback: function(opt, s, r) {
  796. form.setLoading(false);
  797. var res = Ext.decode(r.responseText);
  798. if (res.data) {
  799. var url = 'jsps/scm/purchase/purchase.jsp?formCondition=pu_idIS' + res.data.id + '&gridCondition=pd_puidIS' + res.data.id;
  800. showMessage('提示', '复制成功', 2000);
  801. me.FormUtil.onAdd(null, '采购单', url);
  802. } else {
  803. showError(res.exceptionInfo);
  804. }
  805. }
  806. });
  807. }
  808. },
  809. /**
  810. *采购单拆分
  811. * */
  812. PurchaseSplit:function(record){
  813. var me=this,originaldetno=Number(record.data.pd_detno);
  814. var puid=record.data.pd_puid;
  815. var pdid=record.data.pd_id;
  816. Ext.create('Ext.window.Window',{
  817. width:850,
  818. height:'95%',
  819. iconCls:'x-grid-icon-partition',
  820. title:'<h1>采购单拆分</h1>',
  821. id:'win',
  822. items:[{
  823. xtype:'form',
  824. layout:'column',
  825. region:'north',
  826. frame:true,
  827. defaults:{
  828. xtype:'textfield',
  829. columnWidth:0.5,
  830. readOnly:true,
  831. fieldStyle:'background:#f0f0f0;border: 0px solid #8B8970;color:blue;'
  832. },
  833. items:[{
  834. fieldLabel:'采购单号',
  835. value:record.data.pd_code,
  836. id:'sacode'
  837. },{
  838. fieldLabel:'物料编号' ,
  839. value:record.data.pd_prodcode
  840. },{
  841. fieldLabel:'物料名称',
  842. value:record.data.pr_detail
  843. },{
  844. fieldLabel:'原序号' ,
  845. value:record.data.pd_detno
  846. },{
  847. fieldLabel:'原数量',
  848. value:record.data.pd_qty
  849. }],
  850. buttonAlign:'center',
  851. buttons:[{
  852. xtype:'button',
  853. columnWidth:0.12,
  854. text:'保存',
  855. width:60,
  856. iconCls: 'x-button-icon-save',
  857. margin:'0 0 0 30',
  858. handler:function(btn){
  859. var store=Ext.getCmp('smallgrid').getStore();
  860. var count=0;
  861. var jsonData=new Array();
  862. var dd;
  863. Ext.Array.each(store.data.items,function(item){
  864. if(item.data.pd_qty!=0&&item.data.pd_delivery!=null&&item.data.pd_qty>0){
  865. if(item.dirty){
  866. dd=new Object();
  867. //说明是新增批次
  868. dd['pd_qty']=item.data.pd_qty;
  869. dd['pd_id']=item.data.pd_id;
  870. dd['pd_detno']=item.data.pd_detno;
  871. dd['pd_delivery']=Ext.Date.format(item.data.pd_delivery, 'Y-m-d');
  872. dd['pd_replydetail']=item.data.pd_replydetail;
  873. dd['pd_isok']=item.data.pd_isok=='-1'?'是':'否';
  874. dd['pd_qtyreply']=item.data.pd_qtyreply;
  875. if(item.data.pd_deliveryreply){
  876. dd['pd_deliveryreply']=Ext.Date.format(item.data.pd_deliveryreply, 'Y-m-d');
  877. }else
  878. dd['pd_deliveryreply']=null;
  879. jsonData.push(Ext.JSON.encode(dd));
  880. }
  881. count+=Number(item.data.pd_qty);
  882. }
  883. });
  884. var assqty=Number(record.data.pd_qty);
  885. if(count!=assqty){
  886. showError('分拆数量必须等于原数量!') ;
  887. return;
  888. }else{
  889. var r=new Object();
  890. r['pd_id']=record.data.pd_id;
  891. r['pd_puid']=record.data.pd_puid;
  892. r['pd_detno']=record.data.pd_detno;
  893. var params=new Object();
  894. params.formdata = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  895. params.data = unescape(jsonData.toString().replace(/\\/g,"%"));
  896. Ext.Ajax.request({
  897. url : basePath +'scm/purchase/splitPurchase.action',
  898. params : params,
  899. waitMsg:'拆分中...',
  900. method : 'post',
  901. callback : function(options,success,response){
  902. var localJson = new Ext.decode(response.responseText);
  903. if(localJson.success){
  904. saveSuccess(function(){
  905. //add成功后刷新页面进入可编辑的页面
  906. Ext.getCmp('win').close();
  907. me.loadSplitData(originaldetno,puid,record);
  908. });
  909. } else if(localJson.exceptionInfo){
  910. var str = localJson.exceptionInfo;
  911. if(str.trim().substr(0, 12) == 'AFTERSUCCESS'){//特殊情况:操作成功,但是出现警告,允许刷新页面
  912. str = str.replace('AFTERSUCCESS', '');
  913. saveSuccess(function(){
  914. //add成功后刷新页面进入可编辑的页面
  915. me.loadSplitData(originaldetno,puid,record);
  916. });
  917. showError(str);
  918. } else {
  919. showError(str);
  920. return;
  921. }
  922. } else{
  923. saveFailure();
  924. }
  925. }
  926. });
  927. }
  928. }
  929. },{
  930. xtype:'button',
  931. columnWidth:0.1,
  932. text:'关闭',
  933. width:60,
  934. iconCls: 'x-button-icon-close',
  935. margin:'0 0 0 10',
  936. handler:function(btn){
  937. Ext.getCmp('win').close();
  938. }
  939. }]
  940. },{
  941. xtype:'gridpanel',
  942. region:'south',
  943. id:'smallgrid',
  944. layout:'fit',
  945. height:'80%',
  946. columnLines:true,
  947. store:Ext.create('Ext.data.Store',{
  948. fields:[{name:'pd_delivery',type:'date'},{name:'pd_qty',type:'int'},{name:'pd_deliveryreply',type:'date'},{name:'pd_qtyreply',type:'int'},{name:'pd_replydetail',type:'string'},{name:'pd_isok',type:'int'},{name:'pd_acceptqty',type:'int'},{name:'pd_yqty',type:'int'},{name:'pd_id',type:'int'}],
  949. data:[]
  950. }),
  951. plugins: [Ext.create('Ext.grid.plugin.CellEditing', {
  952. clicksToEdit: 1,
  953. listeners:{
  954. 'edit':function(editor,e,Opts){
  955. var record=e.record;
  956. var version=record.data.ma_version;
  957. if(version){
  958. e.record.reject();
  959. Ext.Msg.alert('提示','不能修改已拆分明细!');
  960. }
  961. }
  962. }
  963. })],
  964. tbar: [{
  965. tooltip: '添加批次',
  966. iconCls: 'x-button-icon-add',
  967. width:25,
  968. handler : function() {
  969. var store = Ext.getCmp('smallgrid').getStore();
  970. var r = new Object();
  971. r.pd_delivery=record.get('pd_delivery');
  972. r.pd_qty=0;
  973. r.pd_id=0;
  974. r.pd_detno=store.getCount()+1;
  975. store.insert(store.getCount(), r);
  976. }
  977. }, {
  978. tooltip: '删除批次',
  979. width:25,
  980. itemId: 'delete',
  981. iconCls: 'x-button-icon-delete',
  982. handler: function(btn) {
  983. var sm = Ext.getCmp('smallgrid').getSelectionModel();
  984. var record=sm.getSelection();
  985. var pd_id=record[0].data.pd_id;
  986. if(pd_id&&pd_id!=0){
  987. Ext.Msg.alert('提示','不能删除已拆批次或原始行号!');
  988. return;
  989. }
  990. var store=Ext.getCmp('smallgrid').getStore();
  991. store.remove(record);
  992. if (store.getCount() > 0) {
  993. sm.select(0);
  994. }
  995. },
  996. disabled: true
  997. }],
  998. listeners:{
  999. itemmousedown:function(selmodel, record){
  1000. selmodel.ownerCt.down('#delete').setDisabled(false);
  1001. }
  1002. },
  1003. columns:[{
  1004. dataIndex:'pd_detno',
  1005. header:'序号',
  1006. format:'0',
  1007. xtype:'numbercolumn'
  1008. },{
  1009. dataIndex:'pd_delivery',
  1010. header:'交货日期',
  1011. xtype:'datecolumn',
  1012. width:120,
  1013. editable:true,
  1014. renderer:function(val,meta,record){
  1015. if(record.data.ma_version){
  1016. meta.tdCls = "x-grid-cell-renderer-cl";
  1017. }
  1018. if(val)
  1019. return Ext.Date.format(val, 'Y-m-d');
  1020. else return null;
  1021. },
  1022. editor:{
  1023. xtype: 'datefield',
  1024. format:'Y-m-d'
  1025. }
  1026. },{
  1027. dataIndex:'pd_qty',
  1028. header:'数量',
  1029. width:120,
  1030. xtype:'numbercolumn',
  1031. editable:true,
  1032. renderer:function(val,meta,record){
  1033. if(record.data.ma_version){
  1034. meta.tdCls = "x-grid-cell-renderer-cl";
  1035. }
  1036. return val;
  1037. },
  1038. editor:{
  1039. xtype:'numberfield',
  1040. format:'0',
  1041. hideTrigger: true
  1042. }
  1043. },{
  1044. dataIndex:'pd_deliveryreply',
  1045. header:'回复交期',
  1046. xtype:'datecolumn',
  1047. width:120,
  1048. editable:true,
  1049. renderer:function(val,meta,record){
  1050. if(val)
  1051. return Ext.Date.format(val, 'Y-m-d');
  1052. else return null;
  1053. },
  1054. editor:{
  1055. xtype: 'datefield',
  1056. format:'Y-m-d'
  1057. }
  1058. },{
  1059. dataIndex:'pd_qtyreply',
  1060. header:'回复数量',
  1061. width:120,
  1062. xtype:'numbercolumn',
  1063. editable:true,
  1064. renderer:function(val,meta,record){
  1065. if(record.data.ma_version){
  1066. meta.tdCls = "x-grid-cell-renderer-cl";
  1067. }
  1068. return val;
  1069. },
  1070. editor:{
  1071. xtype:'numberfield',
  1072. format:'0',
  1073. hideTrigger: true
  1074. }
  1075. },{
  1076. dataIndex:'pd_isok',
  1077. header:'是否准时',
  1078. xtype:'yncolumn',
  1079. width:100,
  1080. editable:true
  1081. },{
  1082. dataIndex:'pd_replydetail',
  1083. header:'回复明细',
  1084. width:100,
  1085. renderer:function(val,meta,record){
  1086. if(record.data.originaldetno){
  1087. meta.tdCls = "x-grid-cell-renderer-cl";
  1088. }
  1089. return val;
  1090. } ,
  1091. editor:{
  1092. xtype:'textfield',
  1093. format:'0',
  1094. hideTrigger: true
  1095. },
  1096. editable:true
  1097. },{
  1098. dataIndex:'pd_yqty',
  1099. header:'已转收料数',
  1100. xtype:'numbercolumn',
  1101. width:100,
  1102. editable:false
  1103. },{
  1104. dataIndex:'pd_acceptqty',
  1105. header:'已转验收数',
  1106. xtype:'numbercolumn',
  1107. width:100,
  1108. editable:false
  1109. },{
  1110. dataIndex:'pd_id',
  1111. header:'pdid',
  1112. width:0,
  1113. xtype:'numbercolumn',
  1114. editable:true,
  1115. editor:{
  1116. xtype:'numberfield',
  1117. format:'0',
  1118. hideTrigger: true
  1119. }
  1120. }]
  1121. }] ,
  1122. listeners:{
  1123. 'beforeclose':function(view ,opt){
  1124. var grid = Ext.getCmp('grid');
  1125. var value = Ext.getCmp('pu_id').value;
  1126. var gridCondition = grid.mainField + '=' + value,
  1127. gridParam = {caller: caller, condition: gridCondition};
  1128. me.GridUtil.loadNewStore(grid, gridParam);
  1129. }
  1130. }
  1131. }).show();
  1132. this.loadSplitData(originaldetno,puid,record);
  1133. },
  1134. loadSplitData:function(detno,puid,record){
  1135. var grid=Ext.getCmp('smallgrid');
  1136. grid.setLoading(true);//loading...
  1137. Ext.Ajax.request({//拿到grid的columns
  1138. url : basePath + "common/loadNewGridStore.action",
  1139. params:{
  1140. caller:'PurchaseSplit',
  1141. condition:"pd_detno="+detno+" AND pd_puid="+puid+" order by pd_id asc"
  1142. },
  1143. method : 'post',
  1144. callback : function(options,success,response){
  1145. grid.setLoading(false);
  1146. var res = new Ext.decode(response.responseText);
  1147. if(res.exceptionInfo){
  1148. showError(res.exceptionInfo);return;
  1149. }
  1150. var data = res.data;
  1151. grid.store.loadData(data);
  1152. //自定义event
  1153. grid.addEvents({
  1154. storeloaded: true
  1155. });
  1156. grid.fireEvent('storeloaded', grid, data);
  1157. }
  1158. });
  1159. },
  1160. getLeadCode: function(type) {
  1161. var result = null;
  1162. Ext.Ajax.request({
  1163. url : basePath + 'common/getFieldData.action',
  1164. async: false,
  1165. params: {
  1166. caller: 'PurchaseKind',
  1167. field: 'pk_excode',
  1168. condition: 'pk_name=\'' + type + '\''
  1169. },
  1170. method : 'post',
  1171. callback : function(opt, s, res){
  1172. var r = new Ext.decode(res.responseText);
  1173. if(r.exceptionInfo){
  1174. showError(r.exceptionInfo);return;
  1175. } else if(r.success){
  1176. result = r.data;
  1177. }
  1178. }
  1179. });
  1180. return result;
  1181. }
  1182. });