PayBalancePRDetail.js 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.fa.arp.PayBalancePRDetail', {
  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','fa.arp.PayBalance','core.grid.Panel2','core.toolbar.Toolbar','core.grid.AssPanel','core.window.AssWindow',
  9. 'fa.arp.paybalanceprdetail.PayBalancePRDetailGrid',
  10. 'core.button.Save','core.button.Add','core.button.Close','core.button.Delete','core.button.Submit',
  11. 'core.button.ResAudit','core.button.StrikeBalance','core.button.AssDetail','core.button.Print',
  12. 'core.button.Audit','core.button.ResSubmit','core.button.Post','core.button.ResPost','core.button.Update','core.button.DeleteDetail',
  13. 'core.trigger.DbfindTrigger','core.trigger.TextAreaTrigger','core.form.YnField','core.button.ResAccounted','core.button.AssMain','core.button.Accounted',
  14. 'core.trigger.CateTreeDbfindTrigger','core.trigger.HrOrgTreeDbfindTrigger', 'core.form.SeparNumber','core.trigger.MultiDbfindTrigger'
  15. ],
  16. init:function(){
  17. var me = this;
  18. me.gridLastSelected = null;
  19. this.control({
  20. 'erpGridPanel2': {
  21. itemclick:function(selModel, record){
  22. me.onGridItemClick2(selModel, record);
  23. var btn = Ext.getCmp('assdetail');
  24. var ass = record.data['ca_asstype'];
  25. if(!Ext.isEmpty(ass)){
  26. btn.setDisabled(false);
  27. } else {
  28. btn.setDisabled(true);
  29. }
  30. }
  31. },
  32. 'erpGetSumAmountButton':{
  33. click: function(btn){
  34. var grid1 = Ext.getCmp("paybalanceprdetailGrid"),grid2 = Ext.getCmp("grid"),items1 = grid1.store.data.items,items2 = grid2.store.data.items;
  35. var detailamount1 = 0;
  36. var detailamount2 = 0;
  37. Ext.each(items1,function(item,index){
  38. if(!me.GridUtil.isBlank(grid1,item.data)) {
  39. detailamount1 = detailamount1 + Number(item.data['pbpd_nowbalance']);
  40. }
  41. });
  42. Ext.each(items2,function(item,index){
  43. if(!me.GridUtil.isBlank(grid2,item.data)) {
  44. detailamount2 = detailamount2 + Number(item.data['pbd_nowbalance']);
  45. }
  46. });
  47. Ext.getCmp("pb_amount").setValue(detailamount1);
  48. Ext.getCmp("pb_vmamount").setValue(detailamount2);
  49. }
  50. },
  51. 'paybalanceprdetail': {
  52. itemclick: this.onGridItemClick1,
  53. afterrender:function(grid){
  54. grid.plugins[0].on('edit',function(e){
  55. me.sumAmount();
  56. });
  57. }
  58. },
  59. 'erpSaveButton': {
  60. click: function(btn){
  61. var form = me.getForm(btn);
  62. if(Ext.getCmp(form.codeField).value == null || Ext.getCmp(form.codeField).value == ''){
  63. me.BaseUtil.getRandomNumber('PayBalance');
  64. }
  65. this.getapamount();
  66. //保存之前的一些前台的逻辑判定
  67. //this.beforeSavePayBalance();
  68. this.beforeSave(this);
  69. }
  70. },
  71. 'erpToolbar': {
  72. afterrender: function(tool){
  73. tool.add({
  74. xtype:'erpAssDetailButton',
  75. disabled:true
  76. });
  77. }
  78. },
  79. 'erpPostButton' : {
  80. afterrender: function(btn){
  81. var status = Ext.getCmp('pb_statuscode');
  82. if(status && status.value != 'UNPOST'){
  83. btn.hide();
  84. }
  85. },
  86. click: function(btn){
  87. me.beforePost(btn);
  88. }
  89. },
  90. 'erpResPostButton' : {
  91. afterrender: function(btn){
  92. var status = Ext.getCmp('pb_statuscode');
  93. if(status && status.value != 'POSTED'){
  94. btn.hide();
  95. }
  96. },
  97. click: function(btn){
  98. me.FormUtil.onResPost(Ext.getCmp('pb_id').value);
  99. }
  100. },
  101. 'erpDeleteButton' : {
  102. click: function(btn){
  103. me.FormUtil.onDelete(Ext.getCmp('pb_id').value);
  104. }
  105. },
  106. 'erpUpdateButton': {
  107. click: function(btn){
  108. me.getapamount();
  109. //me.beforeUpdatePayBalance();
  110. this.beforeUpdate(this);
  111. }
  112. },
  113. 'erpAddButton': {
  114. click: function(){
  115. me.FormUtil.onAdd('addPayBalance', '新增预付冲应付单', 'jsps/fa/arp/payBalancePRDetail.jsp?whoami='+caller);
  116. }
  117. },
  118. 'erpCloseButton': {
  119. click: function(btn){
  120. me.FormUtil.beforeClose(me);
  121. }
  122. },
  123. 'erpSubmitButton': {
  124. afterrender: function(btn){
  125. var status = Ext.getCmp(me.getForm(btn).statuscodeField),
  126. poststatus = Ext.getCmp('pb_statuscode');
  127. if(status && status.value != 'ENTERING'){
  128. btn.hide();
  129. }
  130. if(poststatus && poststatus.value == 'POSTED'){
  131. btn.hide();
  132. }
  133. },
  134. click: function(btn){
  135. me.beforeSubmit(btn);
  136. }
  137. },
  138. 'erpResSubmitButton': {
  139. afterrender: function(btn){
  140. var status = Ext.getCmp(me.getForm(btn).statuscodeField),
  141. poststatus = Ext.getCmp('pb_statuscode');
  142. if(status && status.value != 'COMMITED'){
  143. btn.hide();
  144. }
  145. if(poststatus && poststatus.value == 'POSTED'){
  146. btn.hide();
  147. }
  148. },
  149. click: function(btn){
  150. me.FormUtil.onResSubmit(Ext.getCmp('pb_id').value);
  151. }
  152. },
  153. 'erpAuditButton': {
  154. afterrender: function(btn){
  155. var status = Ext.getCmp(me.getForm(btn).statuscodeField),
  156. poststatus = Ext.getCmp('pb_statuscode');
  157. if(status && status.value != 'COMMITED'){
  158. btn.hide();
  159. }
  160. if(poststatus && poststatus.value == 'POSTED'){
  161. btn.hide();
  162. }
  163. },
  164. click: function(btn){
  165. me.FormUtil.onAudit(Ext.getCmp('pb_id').value);
  166. }
  167. },
  168. 'erpResAuditButton': {
  169. afterrender: function(btn){
  170. var status = Ext.getCmp(me.getForm(btn).statuscodeField),
  171. postStatus = Ext.getCmp('pb_statuscode');
  172. if((status && status.value != 'AUDITED') ||(postStatus && postStatus.value == 'POSTED')){
  173. btn.hide();
  174. }
  175. },
  176. click: function(btn){
  177. me.FormUtil.onResAudit(Ext.getCmp('pb_id').value);
  178. }
  179. },
  180. 'erpPrintButton': {
  181. click: function(btn){
  182. me.FormUtil.onPrint(Ext.getCmp('pb_id').value);
  183. }
  184. },
  185. 'field[name=pbd_ordercode]': {
  186. afterrender:function(t){
  187. t.gridKey="pb_vendcode";
  188. t.mappinggirdKey="ab_vendcode";
  189. t.gridErrorMessage="请先选择供应商";
  190. }
  191. },
  192. 'field[name=pbpd_ordercode]': {
  193. aftertrigger: function(){
  194. var grid = Ext.getCmp('paybalanceprdetailGrid');
  195. var s = grid.getStore().data.items;
  196. for(var i=0;i<s.length;i++){//将grid里面各行的数据获取并拼成jsonGridData
  197. var data = s[i].data;
  198. dd = new Object();
  199. if(s[i].dirty && !me.GridUtil.isBlank(grid, data)){
  200. Ext.each(grid.columns, function(c){
  201. if((!c.isCheckerHd)&&(c.logic != 'ignore')){
  202. var d =data['pbpd_amount']-data['pbpd_havebalance'];
  203. s[i].set('pbpd_nowbalance', d);
  204. }
  205. });
  206. }
  207. }
  208. setTimeout(function(){
  209. me.sumAmount();
  210. },200);
  211. },
  212. afterrender:function(t){
  213. t.gridKey="pb_vendcode|pb_currency";
  214. t.mappinggirdKey="pp_vendcode|pp_vmcurrency";
  215. t.gridErrorMessage="请先选择供应商|请选择币别";
  216. }
  217. },
  218. //抓取预付账款信息
  219. 'button[name=catchpr]':{
  220. click:function(btn){
  221. var params = new Object();
  222. var form = Ext.getCmp('form');
  223. var grid = Ext.getCmp('paybalanceprdetailGrid');
  224. var bars=grid.query('toolbar'),toolbar=bars[0];
  225. var startdate=toolbar.items.items[2].value;
  226. var enddate=toolbar.items.items[4].value;
  227. var items = grid.store.data.items;
  228. var array = new Array();
  229. var r = form.getValues();
  230. Ext.each(items,function(item,index){
  231. if(item.data[grid.necessaryField] != null && item.data[grid.necessaryField] != ''){
  232. array.push(item);
  233. }
  234. });
  235. var pb_id = Ext.getCmp('pb_id').value;
  236. if(!pb_id||(pb_id&&(pb_id == 0||pb_id==''||pb_id==null))){
  237. Ext.Msg.alert('请先保存单据');
  238. }else{
  239. if(array.length>0){
  240. Ext.Msg.alert('需要先清除明细行中的数据!');
  241. } else {
  242. params.formStore = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  243. params['startdate'] = startdate;
  244. params['enddate'] = enddate;
  245. //抓取
  246. Ext.Ajax.request({
  247. url : basePath + form.catchPRUrl,
  248. params : params,
  249. method : 'post',
  250. callback : function(options,success,response){
  251. me.FormUtil.getActiveTab().setLoading(false);
  252. var localJson = new Ext.decode(response.responseText);
  253. if(localJson.success){
  254. catchSuccess(function(){
  255. //add成功后刷新页面进入可编辑的页面
  256. var value = r[form.keyField];
  257. var condition = 'pbpd_pbid='+value;
  258. grid.getMyData(condition);
  259. });
  260. } else if(localJson.exceptionInfo){
  261. } else{
  262. catchFailure();//@i18n/i18n.js
  263. }
  264. }
  265. });
  266. }
  267. }
  268. }
  269. },
  270. //清除预付账款信息
  271. 'button[name=cleanpr]':{
  272. click:function(btn){
  273. var grid = Ext.getCmp('paybalanceprdetailGrid');
  274. warnMsg('确定清除所有明细行么?',function(t){
  275. if(t=='yes'){
  276. var form = Ext.getCmp('form');
  277. var r = form.getValues();
  278. var params = new Object();
  279. params.formStore = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  280. Ext.Ajax.request({
  281. url : basePath + form.cleanPRUrl,
  282. params : params,
  283. method : 'post',
  284. callback : function(options,success,response){
  285. me.FormUtil.getActiveTab().setLoading(false);
  286. var localJson = new Ext.decode(response.responseText);
  287. if(localJson.success){
  288. cleanSuccess(function(){
  289. //add成功后刷新页面进入可编辑的页面
  290. var value = r[form.keyField];
  291. var condition = 'pbpd_pbid='+value;
  292. grid.getMyData(condition);
  293. });
  294. } else if(localJson.exceptionInfo){
  295. } else{
  296. cleanFailure();//@i18n/i18n.js
  297. }
  298. }
  299. });
  300. }else{
  301. return;
  302. }
  303. });
  304. }
  305. },
  306. //抓取发票信息
  307. 'button[name=catchab]':{
  308. click:function(btn){
  309. var params = new Object();
  310. var form = Ext.getCmp('form');
  311. var grid = Ext.getCmp('grid');
  312. var items = grid.store.data.items;
  313. var bars=grid.query('toolbar'),toolbar=bars[0];
  314. var startdate=toolbar.items.items[2].value;
  315. var enddate=toolbar.items.items[4].value;
  316. var array = new Array();
  317. var r = form.getValues();
  318. Ext.each(items,function(item,index){
  319. if(item.data[grid.necessaryField] != null && item.data[grid.necessaryField] != ''){
  320. array.push(item);
  321. }
  322. });
  323. var pb_id = Ext.getCmp('pb_id').value;
  324. if(!pb_id||(pb_id&&(pb_id == 0||pb_id==''||pb_id==null))){
  325. Ext.Msg.alert('请先保存单据');
  326. }else{
  327. if(array.length>0){
  328. Ext.Msg.alert('需要先清除明细行中的数据!');
  329. } else {
  330. params.formStore = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  331. params.caller=caller;
  332. params['startdate'] = startdate;
  333. params['enddate'] = enddate;
  334. //抓取
  335. Ext.Ajax.request({
  336. url : basePath + form.catchABUrl,
  337. params : params,
  338. method : 'post',
  339. callback : function(options,success,response){
  340. me.FormUtil.getActiveTab().setLoading(false);
  341. var localJson = new Ext.decode(response.responseText);
  342. if(localJson.success){
  343. catchSuccess(function(){
  344. //add成功后刷新页面进入可编辑的页面
  345. var value = r[form.keyField];
  346. var params = {
  347. caller:caller,
  348. condition:'pbd_pbid='+value
  349. };
  350. grid.GridUtil.loadNewStore(grid, params);
  351. });
  352. } else if(localJson.exceptionInfo){
  353. showError(localJson.exceptionInfo);
  354. } else{
  355. catchFailure();//@i18n/i18n.js
  356. }
  357. }
  358. });
  359. }
  360. }
  361. }
  362. },
  363. //清除发票信息
  364. 'button[name=cleanab]':{
  365. click:function(btn){
  366. var grid = Ext.getCmp('grid');
  367. warnMsg('确定清除所有明细行么?',function(t){
  368. if(t=='yes'){
  369. var form = Ext.getCmp('form');
  370. var r = form.getValues();
  371. var params = new Object();
  372. params.formStore = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  373. Ext.Ajax.request({
  374. url : basePath + form.cleanABUrl,
  375. params : params,
  376. method : 'post',
  377. callback : function(options,success,response){
  378. me.FormUtil.getActiveTab().setLoading(false);
  379. var localJson = new Ext.decode(response.responseText);
  380. if(localJson.success){
  381. cleanSuccess(function(){
  382. //add成功后刷新页面进入可编辑的页面
  383. var value = r[form.keyField];
  384. var params = {
  385. caller:'PayBalance!Arp!PADW',
  386. condition:'pbd_pbid='+value
  387. };
  388. grid.GridUtil.loadNewStore(grid, params);
  389. });
  390. } else if(localJson.exceptionInfo){
  391. } else{
  392. cleanFailure();//@i18n/i18n.js
  393. }
  394. }
  395. });
  396. }else{
  397. return;
  398. }
  399. });
  400. }
  401. },
  402. //计算冲账汇率
  403. 'field[name=pb_vmamount]': {
  404. change: function(f) {
  405. var a = f.ownerCt.down('#pb_amount');
  406. if(!Ext.isEmpty(a.value)) {
  407. var r = f.ownerCt.down('#pb_vmrate'),
  408. rate = Ext.Number.toFixed(f.value/a.value, 8);
  409. if(r.value != rate)
  410. r.setValue(rate);
  411. }
  412. }
  413. },
  414. 'field[name=pb_amount]': {
  415. change: function(f) {
  416. var v = f.ownerCt.down('#pb_vmamount');
  417. if(!Ext.isEmpty(f.value)) {
  418. var r = f.ownerCt.down('#pb_vmrate'),
  419. rate = Ext.Number.toFixed(v.value/f.value, 8);
  420. if(r.value != rate)
  421. r.setValue(rate);
  422. }
  423. }
  424. }
  425. });
  426. },
  427. beforeSubmit:function(){
  428. var me = this;
  429. var grid1 = Ext.getCmp('paybalanceprdetailGrid'),items1=grid1.store.data.items;
  430. var grid2 = Ext.getCmp('grid'),items2=grid2.store.data.items;
  431. var sameCurrency = true;
  432. var amount = Number(Ext.getCmp('pb_amount').getValue()); //预付金额
  433. var vmamount = Number(Ext.getCmp('pb_vmamount').getValue()); //预付金额
  434. var cmcurrency = Ext.getCmp('pb_vmcurrency').getValue();
  435. var currency = Ext.getCmp('pb_currency').getValue();
  436. var cmrate = Number(Ext.getCmp('pb_vmrate').getValue()); //冲账汇率
  437. var amountsum = 0;
  438. var vmamountsum = 0;
  439. Ext.each(items1,function(item,index){
  440. if(item.data[grid1.necessaryField]!=''&&item.data[grid1.necessaryField]!=null){
  441. amountsum = amountsum+Number(item.data['pbpd_nowbalance']);
  442. if(currency!=item.data['pbpd_currency']){
  443. //从表币别有与主表币别不同的
  444. //抛出异常
  445. sameCurrency = false;
  446. }
  447. }
  448. });
  449. Ext.each(items2,function(item,index){
  450. if(!me.GridUtil.isBlank(grid2, item.data)){
  451. vmamountsum = vmamountsum+Number(item.data['pbd_nowbalance']);
  452. if(cmcurrency!=item.data['pbd_currency']){
  453. //从表币别有与主表币别不同的
  454. //抛出异常
  455. sameCurrency = false;
  456. }
  457. }
  458. // if(item.data[grid2.necessaryField]!=''&&item.data[grid2.necessaryField]!=null){
  459. // }
  460. });
  461. if(Math.abs(vmamount-vmamount)>0.001){
  462. showError('冲账金额不正确,不能提交');return;
  463. }
  464. if(!sameCurrency){
  465. //从表币别有与主表币别不同的
  466. //抛出异常
  467. showError('明细行币别与币别不同,不能提交');return;
  468. }
  469. if(Math.abs(amount-amountsum)>0.001){
  470. //冲账金额与明细行本次结算总和不等
  471. //抛出异常
  472. showError('预付账款明细行本次结算与预付金额不等,不能提交');return;
  473. }
  474. if(Math.abs(vmamount-vmamountsum)>0.001){
  475. //冲账金额与明细行本次结算总和不等
  476. //抛出异常
  477. showError('发票明细行本次结算与冲账金额不等,不能提交');return;
  478. }
  479. me.FormUtil.onSubmit(Ext.getCmp('pb_id').value);
  480. },
  481. beforePost:function(){
  482. var me = this;
  483. var grid1 = Ext.getCmp('paybalanceprdetailGrid'),items1=grid1.store.data.items;
  484. var grid2 = Ext.getCmp('grid'),items2=grid2.store.data.items;
  485. var sameCurrency = true;
  486. var amount = Number(Ext.getCmp('pb_amount').getValue()); //预付金额
  487. var vmamount = Number(Ext.getCmp('pb_vmamount').getValue()); //预付金额
  488. var cmcurrency = Ext.getCmp('pb_vmcurrency').getValue();
  489. var currency = Ext.getCmp('pb_currency').getValue();
  490. var cmrate = Number(Ext.getCmp('pb_vmrate').getValue()); //冲账汇率
  491. var amountsum = 0;
  492. var vmamountsum = 0;
  493. /* Ext.each(items1,function(item,index){
  494. amountsum = amountsum+Number(item.data['pbpd_nowbalance']);
  495. if(currency!=item.data['pbpd_currency']){
  496. //从表币别有与主表币别不同的
  497. //抛出异常
  498. sameCurrency = false;
  499. }
  500. });*/
  501. Ext.each(items2,function(item,index){
  502. vmamountsum = vmamountsum+Number(item.data['pbd_nowbalance']);
  503. /* if(cmcurrency!=item.data['pbd_currency']){
  504. //从表币别有与主表币别不同的
  505. //抛出异常
  506. sameCurrency = false;
  507. }*/
  508. });
  509. /* if(Math.abs(vmamount-vmamount)>0.001){
  510. showError('冲账金额不正确,不能过账');return;
  511. }*/
  512. /* if(!sameCurrency){
  513. //从表币别有与主表币别不同的
  514. //抛出异常
  515. showError('明细行币别与币别不同,不能过账');return;
  516. }*/
  517. /* if(Math.abs(amount-amountsum)>0.001){
  518. //冲账金额与明细行本次结算总和不等
  519. //抛出异常
  520. showError('预付账款明细行本次结算与预付金额不等,不能过账');return;
  521. }*/
  522. /* if(Math.abs(vmamount-vmamountsum)>0.001){
  523. //冲账金额与明细行本次结算总和不等
  524. //抛出异常
  525. showError('发票明细行本次结算与冲账金额不等,不能过账');return;
  526. }*/
  527. me.FormUtil.onPost(Ext.getCmp('pb_id').value);
  528. },
  529. sumAmount:function(){
  530. var grid = Ext.getCmp('paybalanceprdetailGrid');
  531. var items = grid.store.data.items;
  532. var sumamount = 0;
  533. var text='本次结算金额(sum):';
  534. Ext.each(items,function(item,index){
  535. if(item.data[grid.necessaryField] != null && item.data[grid.necessaryField] != ''){
  536. sumamount = sumamount + Ext.Number.from(item.data['pbpd_nowbalance'],0);
  537. }
  538. });
  539. text=text+Ext.Number.from(sumamount,0);
  540. if(Ext.getCmp('pbpd_nowbalance_sum')){
  541. Ext.getCmp('pbpd_nowbalance_sum').setText(text);
  542. }
  543. },
  544. onGridItemClick1: function(selModel, record){//grid行选择
  545. this.gridLastSelected = record;
  546. var grid = Ext.getCmp('paybalanceprdetailGrid');
  547. grid.lastSelectedRecord = record;
  548. if(record.data[grid.necessaryField] == null || record.data[grid.necessaryField] == ''){
  549. this.gridLastSelected.findable = true;//空数据可以在输入完code,并移开光标后,自动调出该条数据
  550. } else {
  551. this.gridLastSelected.findable = false;
  552. }
  553. this.GridUtil.onGridItemClick(selModel, record);
  554. },
  555. onGridItemClick2: function(selModel, record){//grid行选择
  556. this.gridLastSelected = record;
  557. var grid = Ext.getCmp('grid');
  558. if(record.data[grid.necessaryField] == null || record.data[grid.necessaryField] == ''){
  559. this.gridLastSelected.findable = true;//空数据可以在输入完code,并移开光标后,自动调出该条数据
  560. } else {
  561. this.gridLastSelected.findable = false;
  562. }
  563. this.GridUtil.onGridItemClick(selModel, record);
  564. },
  565. getForm: function(btn){
  566. return btn.ownerCt.ownerCt;
  567. },
  568. beforeSavePayBalance: function(){
  569. //预付冲应收
  570. if(caller =='PayBalance!Arp!PADW'){
  571. var amount = Ext.getCmp('pb_amount').value; //预付余额
  572. var vmamount = Ext.getCmp('pb_vmamount').value; //冲账金额
  573. amount = Ext.Number.from(amount,0);
  574. vmamount = Ext.Number.from(vmamount,0);
  575. if(amount<vmamount){
  576. showError('预付金额不能小于冲账金额,不能保存');return;
  577. }
  578. }
  579. var grid = Ext.getCmp('grid');
  580. var items = grid.store.data.items;
  581. var bool = true;
  582. var warnStr='';
  583. Ext.each(items,function(item,index){
  584. if(item.dirty && item.data[grid.necessaryField] != null && item.data[grid.necessaryField] != ''){
  585. var apamount =item.data['pbd_apamount']; //订单金额
  586. var havepay = item.data['pbd_havepay']; //已预付金额
  587. var nowbalance = item.data['pbd_nowbalance']; //本次预付额
  588. //订单金额>=已预付金额+本次预付额
  589. //此种情况不能进行保存
  590. if(havepay+nowbalance>apamount){
  591. var i = index+1;
  592. if(warnStr ==''||warnStr.length<=0){
  593. warnStr = warnStr +i;
  594. }else{
  595. warnStr = warnStr +','+i;
  596. }
  597. bool = false;
  598. }
  599. }
  600. });
  601. if(bool){
  602. this.beforeSave(this);
  603. }else{
  604. if(warnStr != ''||warnStr.length>0){
  605. showError('明细表第'+warnStr+'行,已付金额与本次付款额的合计超过发票金额,不能保存');return;
  606. }
  607. }
  608. },
  609. beforeUpdatePayBalance: function(){
  610. var grid = Ext.getCmp('grid');
  611. Ext.Array.each(grid.store.data.items, function(item){
  612. item.set('pbd_pbid',Ext.getCmp('pb_id').value);
  613. });
  614. //采购价格不能为0
  615. var grid = Ext.getCmp('grid');
  616. var items = grid.store.data.items;
  617. var bool = true;
  618. var warnStr='';
  619. Ext.each(items,function(item,index){
  620. if(item.dirty && item.data[grid.necessaryField] != null && item.data[grid.necessaryField] != ''){
  621. var apamount =item.data['pbd_apamount']; //发票金额
  622. var havepay = item.data['pbd_havepay']; //已付金额
  623. var nowbalance = item.data['pbd_nowbalance']; //本次付款额
  624. //订单金额>=已预付金额+本次预付额
  625. //此种情况不能进行保存
  626. if(havepay+nowbalance>apamount){
  627. var i = index+1;
  628. if(warnStr ==''||warnStr.length<=0){
  629. warnStr = warnStr +i;
  630. }else{
  631. warnStr = warnStr +','+i;
  632. }
  633. bool = false;
  634. }
  635. }
  636. });
  637. if(bool){
  638. this.beforeUpdate(this);
  639. }else{
  640. if(warnStr != ''||warnStr.length>0){
  641. showError('明细表第'+warnStr+'行,已付金额与本次付款额的合计超过发票金额,不能保存');return;
  642. }
  643. }
  644. },
  645. beforeUpdate:function(me){
  646. var mm = this;
  647. var form = Ext.getCmp('form');
  648. if(! mm.FormUtil.checkForm()){
  649. return;
  650. }
  651. if(form.keyField){
  652. if(Ext.getCmp(form.keyField).value == null || Ext.getCmp(form.keyField).value == ''){
  653. mm.FormUtil.getSeqId(form);
  654. }
  655. }
  656. var grids = Ext.ComponentQuery.query('gridpanel');
  657. if(grids.length > 0){
  658. var param1 = me.GridUtil.getGridStore(grids[0]);
  659. var param2 = me.GridUtil.getGridStore();
  660. var param3 = new Array();
  661. Ext.each(Ext.Object.getKeys(Ext.getCmp('assdetail').cacheStoreGrid), function(key){
  662. Ext.each(Ext.getCmp('assdetail').cacheStoreGrid[key], function(d){
  663. d['dass_condid'] = key;
  664. param3.push(d);
  665. });
  666. });
  667. // if(grids[1].necessaryField.length > 0 && (param2 == null || param2 == '')){
  668. // //showError($I18N.common.grid.emptyDetail);//i18n/i18n.js
  669. //// warnMsg('明细表还未添加数据,是否继续?', function(btn){
  670. //// if(btn == 'yes'){
  671. //// mm.onSave(param1,param2);
  672. //// } else {
  673. //// return;
  674. //// }
  675. //// });
  676. // } else {
  677. mm.onUpdate(param1,param2,param3);
  678. // }
  679. }else {
  680. mm.onSave([],[],[]);
  681. }
  682. },
  683. /**
  684. * 保存之前的判断
  685. */
  686. beforeSave: function(me){
  687. var mm = this;
  688. var form = Ext.getCmp('form');
  689. if(! mm.FormUtil.checkForm()){
  690. return;
  691. }
  692. if(form.keyField){
  693. if(Ext.getCmp(form.keyField).value == null || Ext.getCmp(form.keyField).value == ''){
  694. mm.FormUtil.getSeqId(form);
  695. }
  696. }
  697. var grids = Ext.ComponentQuery.query('gridpanel');
  698. if(grids.length > 0){
  699. var param1 = me.GridUtil.getGridStore(grids[0]);
  700. var param2 = me.GridUtil.getGridStore();
  701. var param3 = new Array();
  702. Ext.each(Ext.Object.getKeys(Ext.getCmp('assdetail').cacheStoreGrid), function(key){
  703. Ext.each(Ext.getCmp('assdetail').cacheStoreGrid[key], function(d){
  704. d['dass_condid'] = key;
  705. param3.push(d);
  706. });
  707. });
  708. if(grids[1].necessaryField.length > 0 && (param2 == null || param2 == '')){
  709. //showError($I18N.common.grid.emptyDetail);//i18n/i18n.js
  710. warnMsg('明细表还未添加数据,是否继续?', function(btn){
  711. if(btn == 'yes'){
  712. mm.onSave(param1,param2);
  713. } else {
  714. return;
  715. }
  716. });
  717. } else {
  718. mm.onSave(param1,param2,param3);
  719. }
  720. }else {
  721. mm.onSave([],[],[]);
  722. }
  723. },
  724. onUpdate:function(param1,param2,param3){
  725. var me = this;
  726. var form = Ext.getCmp('form');
  727. param1 = param1 == null ? [] : "[" + param1.toString() + "]";
  728. param2 = param2 == null ? [] : "[" + param2.toString() + "]";
  729. param3 = param3 == null ? [] : Ext.encode(param3).replace(/\\/g,"%");
  730. if(form.getForm().isValid()){
  731. //form里面数据
  732. Ext.each(form.items.items, function(item){
  733. if(item.xtype == 'numberfield'){
  734. //number类型赋默认值,不然sql无法执行
  735. if(item.value == null || item.value == ''){
  736. item.setValue(0);
  737. }
  738. }
  739. });
  740. var r = form.getValues();
  741. //去除ignore字段
  742. var keys = Ext.Object.getKeys(r), f;
  743. Ext.each(keys, function(k){
  744. f = form.down('#' + k);
  745. if(f && f.logic == 'ignore') {
  746. delete r[k];
  747. }
  748. });
  749. if(!me.FormUtil.contains(form.updateUrl, '?caller=', true)){
  750. form.updateUrl = form.updateUrl + "?caller=" + caller;
  751. }
  752. me.FormUtil.update(r, param1,param2,param3);
  753. }else{
  754. me.FormUtil.checkForm();
  755. }
  756. },
  757. /**
  758. * 单据保存
  759. * @param param 传递过来的数据,比如gridpanel的数据
  760. */
  761. onSave: function(param1,param2,param3){
  762. var me = this;
  763. var form = Ext.getCmp('form');
  764. param1 = param1 == null ? [] : "[" + param1.toString() + "]";
  765. param2 = param2 == null ? [] : "[" + param2.toString() + "]";
  766. param3 = param3 == null ? [] : Ext.encode(param3).replace(/\\/g,"%");
  767. if(form.getForm().isValid()){
  768. //form里面数据
  769. Ext.each(form.items.items, function(item){
  770. if(item.xtype == 'numberfield'){
  771. //number类型赋默认值,不然sql无法执行
  772. if(item.value == null || item.value == ''){
  773. item.setValue(0);
  774. }
  775. }
  776. });
  777. var r = form.getValues();
  778. //去除ignore字段
  779. var keys = Ext.Object.getKeys(r), f;
  780. Ext.each(keys, function(k){
  781. f = form.down('#' + k);
  782. if(f && f.logic == 'ignore') {
  783. delete r[k];
  784. }
  785. });
  786. if(!me.FormUtil.contains(form.saveUrl, '?caller=', true)){
  787. form.saveUrl = form.saveUrl + "?caller=" + caller;
  788. }
  789. me.FormUtil.save(r, param1,param2,param3);
  790. }else{
  791. me.FormUtil.checkForm();
  792. }
  793. },
  794. //计算冲账收款金额 并写入主表 冲账收款金额字段
  795. getapamount: function(){
  796. var grid = Ext.getCmp('grid');
  797. var items = grid.store.data.items;
  798. var apamount = 0;
  799. Ext.each(items,function(item,index){
  800. if(item.data['pbd_ordercode']!=null&&item.data['pbd_ordercode']!=""){
  801. apamount= apamount + Number(item.data['pbd_nowbalance']);
  802. }
  803. });
  804. Ext.getCmp('pb_jsamount').setValue(apamount.toFixed(2));
  805. },
  806. //beforeSavePayBalance 之后执行 需要解析出两个grid中的数据 第一个grid如果没有数据 不进行提醒
  807. //beforeSavePayBalance中还需要判断grid1中的数据是否足够预付预付金额 超过则提醒 不足则在后台自动添加
  808. //如果第一个grid中填写了数据 则在后台判断是否足够预付金额 如果足够预付金额 则不添加新的
  809. save:function(){
  810. },
  811. update:function(){
  812. }
  813. });