PayBalancePRDetail.js 28 KB

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