PayBalance.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.fa.arp.PayBalance', {
  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.form.SeparNumber',
  9. 'core.button.Save','core.button.Add','core.button.Close','core.button.Delete','core.button.Update','core.button.DeleteDetail',
  10. 'core.trigger.DbfindTrigger','core.trigger.TextAreaTrigger','core.form.YnField','core.button.ResAccounted','core.button.AssMain','core.button.Accounted','core.button.StrikeBalance',
  11. 'core.grid.AssPanel','core.window.AssWindow','core.trigger.CateTreeDbfindTrigger','core.trigger.HrOrgTreeDbfindTrigger','core.button.Post','core.button.ResPost','core.button.Print',
  12. 'core.button.Submit','core.button.ResAudit','core.button.Audit','core.button.ResSubmit','core.button.AssDetail','core.button.AssMain', 'core.trigger.MultiDbfindTrigger','core.button.GetSumAmount'
  13. ],
  14. init:function(){
  15. var me = this;
  16. me.gridLastSelected = null;
  17. this.control({
  18. 'erpGridPanel2': {
  19. itemclick:function(selModel, record){
  20. me.onGridItemClick(selModel, record);
  21. if(caller == 'PayBalance'||caller =='PayBalance!Arp!PADW'){
  22. var btn = Ext.getCmp('assdetail');
  23. var ass = record.data['ca_asstype'];
  24. if(!Ext.isEmpty(ass)){
  25. btn.setDisabled(false);
  26. } else {
  27. btn.setDisabled(true);
  28. }
  29. }
  30. }
  31. },
  32. 'erpAssMainButton':{
  33. afterrender:function(btn){
  34. if(caller == 'PayBalance'||caller == 'PayBalance!CAID'){
  35. if(Ext.getCmp('ca_asstype').getValue()==null||Ext.getCmp('ca_asstype').getValue()==""){
  36. btn.setDisabled(true);
  37. }else{
  38. btn.setDisabled(false);
  39. }
  40. }
  41. }
  42. },
  43. 'erpGetSumAmountButton':{
  44. click: function(btn){
  45. var grid = Ext.getCmp("grid"),items = grid.store.data.items;
  46. var detailamount1 = 0;
  47. Ext.each(items,function(item,index){
  48. if(!me.GridUtil.isBlank(grid,item.data)) {
  49. detailamount1 = detailamount1 + Number(item.data['pbd_nowbalance']);
  50. }
  51. });
  52. Ext.getCmp("pb_amount").setValue(detailamount1);
  53. Ext.getCmp("pb_vmamount").setValue(detailamount1);
  54. }
  55. },
  56. 'erpSaveButton': {
  57. click: function(btn){
  58. var form = me.getForm(btn);
  59. if(Ext.getCmp(form.codeField).value == null || Ext.getCmp(form.codeField).value == ''){
  60. /*Ext.getCmp(form.codeField).setValue(me.BaseUtil.getRandomNumber());*///自动添加编号
  61. me.BaseUtil.getRandomNumber();
  62. }
  63. if(caller == 'PayBalance!Arp!PADW'||caller == 'PayBalance'|| caller == 'PayBalance!CAID'|| caller == 'PayBalance!APRM'){
  64. me.getApamount();
  65. }
  66. //保存之前的一些前台的逻辑判定
  67. //this.beforeSavePayBalance();
  68. me.beforeSave(this);
  69. }
  70. },
  71. 'erpDeleteDetailButton': {
  72. afterrender: function(btn){
  73. if(caller == 'PayBalance'||caller =='PayBalance!Arp!PADW'){
  74. //辅助核算
  75. btn.ownerCt.add({
  76. xtype:'erpAssDetailButton',
  77. disabled:true
  78. });
  79. }
  80. }
  81. },
  82. 'erpPostButton' : {
  83. afterrender: function(btn){
  84. var status = Ext.getCmp(me.getForm(btn).statusCode);
  85. if(status && status.value == 'UNPOST'){
  86. btn.show();
  87. }else{
  88. btn.hide();
  89. }
  90. },
  91. click: function(btn){
  92. me.beforePost(btn);
  93. }
  94. },
  95. 'erpResPostButton' : {
  96. afterrender: function(btn){
  97. var status = Ext.getCmp(me.getForm(btn).statusCode);
  98. if(status && status.value == 'POSTED'){
  99. btn.show();
  100. }else{
  101. btn.hide();
  102. }
  103. },
  104. click: function(btn){
  105. me.FormUtil.onResPost(Ext.getCmp('pb_id').value);
  106. }
  107. },
  108. 'erpDeleteButton' : {
  109. click: function(btn){
  110. me.FormUtil.onDelete(Ext.getCmp('pb_id').value);
  111. }
  112. },
  113. 'erpUpdateButton': {
  114. click: function(btn){
  115. if(caller == 'PayBalance!Arp!PADW'||caller == 'PayBalance' || caller == 'PayBalance!CAID'|| caller == 'PayBalance!APRM'){
  116. me.getApamount();
  117. }
  118. me.beforeUpdate();
  119. }
  120. },
  121. 'erpAddButton': {
  122. click: function(){
  123. var form = Ext.getCmp('form');
  124. var title = '新增';
  125. if(form){
  126. if(form.title){
  127. title = title+form.title;
  128. }
  129. }
  130. me.FormUtil.onAdd('addPayBalance', title, 'jsps/fa/arp/paybalance.jsp?whoami='+caller);
  131. }
  132. },
  133. 'erpCloseButton': {
  134. click: function(btn){
  135. me.FormUtil.beforeClose(me);
  136. }
  137. },
  138. 'erpSubmitButton': {
  139. afterrender: function(btn){
  140. var auditStatus = Ext.getCmp(me.getForm(btn).auditStatusCode);
  141. if(auditStatus && auditStatus.value != 'ENTERING'){
  142. btn.hide();
  143. }
  144. },
  145. click: function(btn){
  146. me.beforeSubmit(btn);
  147. }
  148. },
  149. 'erpResSubmitButton': {
  150. afterrender: function(btn){
  151. var auditStatus = Ext.getCmp(me.getForm(btn).auditStatusCode);
  152. if(auditStatus && auditStatus.value != 'COMMITED'){
  153. btn.hide();
  154. }
  155. },
  156. click: function(btn){
  157. me.FormUtil.onResSubmit(Ext.getCmp('pb_id').value);
  158. }
  159. },
  160. 'erpAuditButton': {
  161. afterrender: function(btn){
  162. var auditStatus = Ext.getCmp(me.getForm(btn).auditStatusCode);
  163. if(auditStatus && auditStatus.value != 'COMMITED'){
  164. btn.hide();
  165. }
  166. },
  167. click: function(btn){
  168. me.FormUtil.onAudit(Ext.getCmp('pb_id').value);
  169. }
  170. },
  171. 'erpResAuditButton': {
  172. afterrender: function(btn){
  173. var auditStatus = Ext.getCmp(me.getForm(btn).auditStatusCode);
  174. if(auditStatus && auditStatus.value != 'AUDITED'){
  175. btn.hide();
  176. }
  177. },
  178. click: function(btn){
  179. me.FormUtil.onResAudit(Ext.getCmp('pb_id').value);
  180. }
  181. },
  182. 'erpPrintButton': {
  183. click: function(btn){
  184. var reportName="APPay";
  185. var condition = '{PayBalance.pb_id}=' + Ext.getCmp('pb_id').value + '';
  186. var id = Ext.getCmp('pb_id').value;
  187. me.FormUtil.onwindowsPrint(id, reportName, condition);
  188. }
  189. },
  190. 'numberfield[name=pb_amount]':{
  191. beforerender:function(num){
  192. num.minValue = Number.NEGATIVE_INFINITY;
  193. num.setMinValue(num.minValue);
  194. b = num.baseChars+"";
  195. b += num.decimalSeparator;
  196. b += "-";
  197. b = Ext.String.escapeRegex(b);
  198. num.maskRe = new RegExp("[" + b + "]");
  199. },
  200. change: function(f) {
  201. var v1 = (f.value || 0),
  202. v2 = (Ext.getCmp('pb_vmamount').value || 0);
  203. if(v1 == 0) {
  204. Ext.getCmp('pb_vmrate').setValue(0);
  205. } else {
  206. Ext.getCmp('pb_vmrate').setValue(Ext.Number.toFixed(v2/v1, 8));
  207. }
  208. }
  209. },
  210. 'numberfield[name=pb_vmamount]':{
  211. beforerender:function(num){
  212. num.minValue = Number.NEGATIVE_INFINITY;
  213. num.setMinValue(num.minValue);
  214. b = num.baseChars+"";
  215. b += num.decimalSeparator;
  216. b += "-";
  217. b = Ext.String.escapeRegex(b);
  218. num.maskRe = new RegExp("[" + b + "]");
  219. },
  220. change: function(f) {
  221. var v1 = (Ext.getCmp('pb_amount').value || 0),
  222. v2 = (f.value || 0);
  223. if(v1 == 0) {
  224. Ext.getCmp('pb_vmrate').setValue(0);
  225. } else {
  226. Ext.getCmp('pb_vmrate').setValue(Ext.Number.toFixed(v2/v1, 8));
  227. }
  228. }
  229. },
  230. 'numberfield[name=pb_apamount]':{
  231. beforerender:function(num){
  232. num.minValue = Number.NEGATIVE_INFINITY;
  233. num.setMinValue(num.minValue);
  234. b = num.baseChars+"";
  235. b += num.decimalSeparator;
  236. b += "-";
  237. b = Ext.String.escapeRegex(b);
  238. num.maskRe = new RegExp("[" + b + "]");
  239. }
  240. },
  241. 'cateTreeDbfindTrigger[name=pb_catecode]':{
  242. aftertrigger:function(trigger, data){
  243. Ext.getCmp('pb_catename').setValue(data[0].raw.data.ca_name);
  244. if (caller == 'PayBalance' || caller == 'PayBalance!CAID'){
  245. var asstype = data[0].raw.data.ca_asstype;
  246. var btn = Ext.getCmp("assmainbutton");
  247. if(Ext.isEmpty(asstype)) {
  248. btn.setDisabled(true);
  249. } else {
  250. btn.setDisabled(false);
  251. }
  252. }
  253. }
  254. },
  255. 'field[name=pbd_ordercode]':{
  256. afterrender:function(t){
  257. t.gridKey="pb_vendcode";
  258. t.mappinggirdKey="ab_vendcode";
  259. t.gridErrorMessage="请先选择供应商";
  260. }
  261. /* aftertrigger:function(){
  262. var grid = Ext.getCmp('grid');
  263. var record = grid.selModel.lastSelected;
  264. if(typeof record.data.pbd_orderamount != "undefined") {
  265. var data = record.get('pbd_orderamount')-record.get('pbd_havepay');
  266. record.set('pbd_nowbalance',data);
  267. }
  268. }*/
  269. },
  270. 'textfield[name=pb_amount]':{
  271. change:function(t){
  272. if(caller =='PayBalance!CAID'){
  273. var pb_amount = Ext.Number.from(Ext.getCmp('pb_amount').getValue(),0);//付款金额
  274. var pb_vmrate = Ext.Number.from(Ext.getCmp('pb_vmrate').getValue(),0); //冲账汇率
  275. var pb_vmamount = pb_amount*pb_vmrate; // 冲账金额
  276. pb_vmamount = Ext.util.Format.number(pb_vmamount,'0.00');
  277. Ext.getCmp('pb_vmamount').setValue(pb_vmamount);
  278. }
  279. }
  280. },
  281. 'textfield[name=pb_vmrate]':{
  282. change:function(t){
  283. if(caller =='PayBalance!CAID'){
  284. var pb_amount = Ext.Number.from(Ext.getCmp('pb_amount').getValue(),0);//付款金额
  285. var pb_vmrate = Ext.Number.from(Ext.getCmp('pb_vmrate').getValue(),0); //冲账汇率
  286. var pb_vmamount = pb_amount*pb_vmrate; // 冲账金额
  287. pb_vmamount = Ext.util.Format.number(pb_vmamount,'0.00');
  288. Ext.getCmp('pb_vmamount').setValue(pb_vmamount);
  289. }
  290. }
  291. },
  292. //抓取发票信息
  293. 'button[name=catchab]':{
  294. click:function(btn){
  295. var params = new Object();
  296. var form = Ext.getCmp('form');
  297. var grid = Ext.getCmp('grid');
  298. var items = grid.store.data.items;
  299. var array = new Array();
  300. var r = form.getValues();
  301. var startdate = btn.ownerCt.items.items[2].rawValue;
  302. var enddate = btn.ownerCt.items.items[4].rawValue;
  303. Ext.each(items,function(item,index){
  304. if(item.get('pbd_id')>0 || (item.dirty && !me.GridUtil.isBlank(grid,item.data))){
  305. array.push(item);
  306. }
  307. });
  308. var pb_id = Ext.getCmp('pb_id').value;
  309. if(!pb_id||(pb_id&&(pb_id == 0||pb_id==''||pb_id==null))){
  310. Ext.Msg.alert('提示', '请先保存单据');
  311. }else{
  312. if(array.length>0){
  313. Ext.Msg.alert('提示', '需要先清除明细行中的数据!');
  314. } else {
  315. params['startdate'] = startdate;
  316. params['enddate'] = enddate;
  317. params.formStore = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  318. //抓取
  319. Ext.Ajax.request({
  320. url : basePath + form.catchABUrl,
  321. params : params,
  322. method : 'post',
  323. callback : function(options,success,response){
  324. me.FormUtil.getActiveTab().setLoading(false);
  325. var localJson = new Ext.decode(response.responseText);
  326. if(localJson.success){
  327. catchSuccess(function(){
  328. //add成功后刷新页面进入可编辑的页面
  329. var value = r[form.keyField];
  330. var params = {
  331. caller:caller,
  332. condition:'pbd_pbid='+value
  333. };
  334. grid.GridUtil.loadNewStore(grid, params);
  335. });
  336. } else if(localJson.exceptionInfo){
  337. } else{
  338. catchFailure();//@i18n/i18n.js
  339. }
  340. }
  341. });
  342. }
  343. }
  344. }
  345. },
  346. //清除发票信息
  347. 'button[name=cleanab]':{
  348. click:function(btn){
  349. var grid = Ext.getCmp('grid');
  350. warnMsg('确定清除所有明细行么?',function(t){
  351. if(t=='yes'){
  352. var form = Ext.getCmp('form');
  353. var r = form.getValues();
  354. var params = new Object();
  355. params.formStore = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  356. Ext.Ajax.request({
  357. url : basePath + form.cleanABUrl,
  358. params : params,
  359. method : 'post',
  360. callback : function(options,success,response){
  361. me.FormUtil.getActiveTab().setLoading(false);
  362. var localJson = new Ext.decode(response.responseText);
  363. if(localJson.success){
  364. cleanSuccess(function(){
  365. //add成功后刷新页面进入可编辑的页面
  366. var value = r[form.keyField];
  367. var params = {
  368. caller:caller,
  369. condition:'pbd_pbid='+value
  370. };
  371. grid.GridUtil.loadNewStore(grid, params);
  372. });
  373. } else if(localJson.exceptionInfo){
  374. } else{
  375. cleanFailure();//@i18n/i18n.js
  376. }
  377. }
  378. });
  379. }else{
  380. return;
  381. }
  382. });
  383. }
  384. }
  385. });
  386. },
  387. beforeSubmit: function(){
  388. var me = this;
  389. if(caller == 'PayBalance' || caller == 'PayBalance!CAID'){
  390. var grid = Ext.getCmp('grid'),items=grid.store.data.items;
  391. var sameCurrency = true;
  392. var amount = Number(Ext.getCmp('pb_amount').getValue());
  393. var vmamount =Number(Ext.getCmp('pb_vmamount').getValue());
  394. var vmcurrency = Ext.getCmp('pb_vmcurrency').getValue();
  395. var vmrate = Number(Ext.getCmp('pb_vmrate').getValue());
  396. var detailamount = 0;
  397. var currency = Ext.getCmp('pb_currency').getValue();
  398. if(amount != 0 && vmamount != 0){
  399. if(Ext.Number.toFixed(vmrate, 8)!= Ext.Number.toFixed(vmamount/amount, 8)){
  400. showError('冲账汇率不正确,不能提交!');
  401. return;
  402. }
  403. }
  404. if(currency == vmcurrency){
  405. if(vmrate != 1){
  406. showError('币别相同,冲账汇率不等于1,不能提交!');
  407. return;
  408. }
  409. }
  410. if(currency != vmcurrency){
  411. if(vmrate == 1){
  412. showError('币别不相同,冲账汇率等于1,不能提交!');
  413. return;
  414. }
  415. }
  416. Ext.each(items,function(item,index){
  417. if(!me.GridUtil.isBlank(grid, item.data)){
  418. detailamount = detailamount+Number(item.data['pbd_nowbalance']);
  419. if(vmcurrency!=item.data['pbd_currency']){
  420. //从表币别有与主表币别不同的
  421. //抛出异常
  422. sameCurrency = false;
  423. }
  424. }
  425. });
  426. if(!sameCurrency){
  427. //从表币别有与主表币别不同的
  428. //抛出异常
  429. showError('明细行币别与冲账币别不同,不能提交');return;
  430. }
  431. // if(Ext.Number.toFixed(vmamount, 2)!= Ext.Number.toFixed(detailamount, 2)){
  432. if(Math.abs(vmamount-detailamount)>0.02){
  433. //冲账金额与明细行本次结算总和不等
  434. //抛出异常
  435. showError('明细行本次结算与冲账金额不等,不能提交');return;
  436. }
  437. me.FormUtil.onSubmit(Ext.getCmp('pb_id').value);
  438. }else{
  439. me.FormUtil.onSubmit(Ext.getCmp('pb_id').value);
  440. }
  441. },
  442. beforePost:function(btn){
  443. var me = this;
  444. if(caller == 'PayBalance' || caller == 'PayBalance!CAID'){
  445. var grid = Ext.getCmp('grid'),items=grid.store.data.items;
  446. var sameCurrency = true;
  447. var amount = Number(Ext.getCmp('pb_amount').getValue());
  448. var vmamount =Number(Ext.getCmp('pb_vmamount').getValue());
  449. var vmcurrency = Ext.getCmp('pb_vmcurrency').getValue();
  450. var vmrate = Number(Ext.getCmp('pb_vmrate').getValue());
  451. var detailamount = 0;
  452. var currency = Ext.getCmp('pb_currency').getValue();
  453. if(amount != 0 && vmamount != 0){
  454. if(Ext.Number.toFixed(vmrate, 8)!= Ext.Number.toFixed(vmamount/amount, 8)){
  455. showError('冲账汇率不正确,不能过账!');
  456. return;
  457. }
  458. }
  459. if(currency == vmcurrency){
  460. if(vmrate != 1){
  461. showError('币别相同,冲账汇率不等于1,不能过账!');
  462. return;
  463. }
  464. }
  465. if(currency != vmcurrency){
  466. if(vmrate == 1){
  467. showError('币别不相同,冲账汇率等于1,不能过账!');
  468. return;
  469. }
  470. }
  471. Ext.each(items,function(item,index){
  472. if(!me.GridUtil.isBlank(grid, item.data)){
  473. detailamount = detailamount+Number(item.data['pbd_nowbalance']);
  474. if(vmcurrency!=item.data['pbd_currency']){
  475. //从表币别有与主表币别不同的
  476. //抛出异常
  477. sameCurrency = false;
  478. }
  479. }
  480. });
  481. // if(Ext.Number.toFixed(vmamount, 2)!= Ext.Number.toFixed(amount*vmrate, 2)){
  482. if(!sameCurrency){
  483. //从表币别有与主表币别不同的
  484. //抛出异常
  485. showError('明细行币别与冲账币别不同,不能过账');return;
  486. }
  487. if(Math.abs(vmamount-detailamount)>0.02){
  488. //冲账金额与明细行本次结算总和不等
  489. //抛出异常
  490. showError('明细行本次结算与冲账金额不等,不能过账');return;
  491. }
  492. me.FormUtil.onPost(Ext.getCmp('pb_id').value);
  493. }else{
  494. me.FormUtil.onPost(Ext.getCmp('pb_id').value);
  495. }
  496. },
  497. getApamount: function(){
  498. var grid = Ext.getCmp('grid');
  499. var items = grid.store.data.items;
  500. var apamount = 0;
  501. Ext.each(items,function(item,index){
  502. if(item.data['pbd_ordercode']!=null&&item.data['pbd_ordercode']!=""){
  503. apamount= apamount + Number(item.data['pbd_nowbalance']);
  504. }
  505. });
  506. Ext.getCmp('pb_apamount').setValue(Ext.util.Format.number(apamount,'0.00'));
  507. },
  508. onGridItemClick: function(selModel, record){//grid行选择
  509. this.gridLastSelected = record;
  510. var grid = Ext.getCmp('grid');
  511. if(record.data[grid.necessaryField] == null || record.data[grid.necessaryField] == ''){
  512. this.gridLastSelected.findable = true;//空数据可以在输入完code,并移开光标后,自动调出该条数据
  513. } else {
  514. this.gridLastSelected.findable = false;
  515. }
  516. this.GridUtil.onGridItemClick(selModel, record);
  517. },
  518. getForm: function(btn){
  519. return btn.ownerCt.ownerCt;
  520. },
  521. beforeSavePayBalance: function(){
  522. var me = this;
  523. var grid = Ext.getCmp('grid');
  524. var items = grid.store.data.items;
  525. var bool = true;
  526. var warnStr='';
  527. //冲应付款维护界面 保存时需要判断 付款金额*冲账汇率 如果不等于冲账金额 保存提醒
  528. if(caller =='PayBalance!CAID'){
  529. var pb_amount = Ext.util.Format.number(Ext.Number.from(Ext.getCmp('pb_amount').getValue(),0),'0.00');//付款金额
  530. var pb_vmamount = Ext.util.Format.number(Ext.Number.from(Ext.getCmp('pb_vmamount').getValue(),0),'0.00'); // 冲账金额
  531. var pb_vmrate = Ext.Number.from(Ext.getCmp('pb_vmrate').getValue(),0); //冲账汇率
  532. if(Ext.util.Format.number(pb_amount*pb_vmrate,'0.00')!=pb_vmamount){
  533. showError('冲账金额不等于付款金额*冲账汇率,不能保存!');return;
  534. }
  535. var pbd_nowbalanceamount = 0.00;
  536. //判断 冲应付款单据 中 主表冲账金额是否等于从报表中本次结算的和
  537. Ext.each(items,function(item,index){
  538. if(item.data[grid.necessaryField] != null && item.data[grid.necessaryField] != ''){
  539. var pbd_nowbalance = Ext.Number.from(item.data['pbd_nowbalance'],0);
  540. pbd_nowbalanceamount=pbd_nowbalanceamount+pbd_nowbalance;
  541. }
  542. });
  543. if(Ext.util.Format.number(pbd_nowbalanceamount,'0.00')!=Ext.util.Format.number(pb_amount*pb_vmrate,'0.00')){
  544. showError('冲账金额不等于明细行本次结算总和,不能保存!');return;
  545. }
  546. }
  547. // Ext.each(items,function(item,index){
  548. // if(item.dirty &&!me.GridUtil.isBlank(grid,item.data)){
  549. //
  550. //// if(item.dirty && item.data[grid.necessaryField] != null && item.data[grid.necessaryField] != ''){
  551. // var apamount =item.data['pbd_apamount']; //订单金额
  552. // var havepay = item.data['pbd_havepay']; //已预收金额
  553. // var nowbalance = item.data['pbd_nowbalance']; //本次预收额
  554. // //订单金额>=已预收金额+本次预收额
  555. //
  556. // //此种情况不能进行保存
  557. // if(havepay+nowbalance>apamount){
  558. // var i = index+1;
  559. // if(warnStr ==''||warnStr.length<=0){
  560. // warnStr = warnStr +i;
  561. // }else{
  562. // warnStr = warnStr +','+i;
  563. // }
  564. // bool = false;
  565. // }
  566. // }
  567. //
  568. // });
  569. bool = true;
  570. if(bool){
  571. me.beforeSave(this);
  572. }else{
  573. if(warnStr != ''||warnStr.length>0){
  574. showError('明细表第'+warnStr+'行 已付金额与本次结算额的合计超过发票金额,不能保存');return;
  575. }
  576. }
  577. },
  578. beforeSave:function(){
  579. var me = this;
  580. var form = Ext.getCmp('form');
  581. if(! me.FormUtil.checkForm()){
  582. return;
  583. }
  584. if(Ext.getCmp(form.keyField).value == null || Ext.getCmp(form.keyField).value == ''){
  585. me.FormUtil.getSeqId(form);
  586. }
  587. var detail = Ext.getCmp('grid');
  588. var param2 = new Array();
  589. var param3 = new Array();
  590. if(Ext.getCmp('assdetail')){
  591. Ext.each(Ext.Object.getKeys(Ext.getCmp('assdetail').cacheStoreGrid), function(key){
  592. Ext.each(Ext.getCmp('assdetail').cacheStoreGrid[key], function(d){
  593. d['dass_condid'] = key;
  594. param2.push(d);
  595. });
  596. });
  597. }
  598. if(Ext.getCmp('assmainbutton')){
  599. Ext.each(Ext.Object.getKeys(Ext.getCmp('assmainbutton').cacheStoreForm), function(key){
  600. Ext.each(Ext.getCmp('assmainbutton').cacheStoreForm[key], function(d){
  601. d['ass_conid'] = key;
  602. param3.push(d);
  603. });
  604. });
  605. }
  606. Ext.each(detail.store.data.items, function(item){
  607. if(item.data.prd_id == null || item.data.prd_id == 0){
  608. item.data.prd_id = -item.index;
  609. }
  610. });
  611. var param1 = me.GridUtil.getGridStore(detail);
  612. /*if(detail.necessaryField.length > 0 && (param1.length == 0)){
  613. showError($I18N.common.grid.emptyDetail);
  614. return;
  615. }*/
  616. me.onSave(form, param1, param2,param3);
  617. },
  618. onSave: function(form, param1, param2,param3) {
  619. var me = this;
  620. param1 = param1 == null ? [] : "[" + param1.toString().replace(/\\/g,"%") + "]";
  621. param2 = param2 == null ? [] : Ext.encode(param2).replace(/\\/g,"%");
  622. param3 = param3 == null ? [] : Ext.encode(param3).replace(/\\/g,"%");
  623. if(form.getForm().isValid()){
  624. Ext.each(form.items.items, function(item){
  625. if(item.xtype == 'numberfield'){
  626. if(item.value == null || item.value == ''){
  627. item.setValue(0);
  628. }
  629. }
  630. });
  631. var r = form.getValues();
  632. form.getForm().getFields().each(function(){
  633. if(this.logic == 'ignore') {
  634. delete r[this.name];
  635. }
  636. });
  637. me.FormUtil.save(r, param1, param2,param3);
  638. }else{
  639. me.FormUtil.checkForm();
  640. }
  641. },
  642. beforeUpdate: function(){
  643. var me = this;
  644. var grid = Ext.getCmp('grid'), key = Ext.getCmp('pb_id').value;
  645. var warn = new Array();
  646. /*grid.store.each(function(item){
  647. if(item.dirty) {
  648. item.set('pbd_pbid', key);
  649. if(!grid.necessaryField || !Ext.isEmpty(item.get(grid.necessaryField))){
  650. var apamount = item.get('pbd_apamount'); //订单金额
  651. var havepay = item.get('pbd_havepay'); //已预收金额
  652. var nowbalance = item.get('pbd_nowbalance'); //本次预收额
  653. //订单金额>=已预收金额+本次预收额
  654. if(apamount > 0 && havepay + nowbalance > apamount){//此种情况不能进行保存
  655. warn.push(item.get('pbd_detno'));
  656. }
  657. }
  658. }
  659. });*/
  660. if(warn.length == 0){
  661. me.onUpdate();
  662. } else{
  663. showError('明细第' + warn.join(',') + '行 已付金额与本次结算额的合计超过发票金额,不能保存!');
  664. }
  665. },
  666. onUpdate: function(){
  667. var me = this;
  668. var form = Ext.getCmp('form');
  669. if(! me.FormUtil.checkForm()){
  670. return;
  671. }
  672. var detail = Ext.getCmp('grid');
  673. Ext.each(detail.store.data.items, function(item){
  674. if(item.data.prd_id == null || item.data.prd_id == 0){
  675. item.data.prd_id = -item.index;
  676. }
  677. });
  678. var param1 = me.GridUtil.getGridStore(detail);
  679. var param2 = new Array();
  680. var param3 = new Array();
  681. if(Ext.getCmp('assdetail')){
  682. Ext.each(Ext.Object.getKeys(Ext.getCmp('assdetail').cacheStoreGrid), function(key){
  683. Ext.each(Ext.getCmp('assdetail').cacheStoreGrid[key], function(d){
  684. d['dass_condid'] = key;
  685. param2.push(d);
  686. });
  687. });
  688. }
  689. if(Ext.getCmp('assmainbutton')){
  690. Ext.each(Ext.Object.getKeys(Ext.getCmp('assmainbutton').cacheStoreForm), function(key){
  691. Ext.each(Ext.getCmp('assmainbutton').cacheStoreForm[key], function(d){
  692. d['ass_conid'] = key;
  693. param3.push(d);
  694. });
  695. });
  696. }
  697. if(Ext.isEmpty(me.FormUtil.checkFormDirty(form)) && (param1.length == 0)
  698. && param2.length == 0 && param3.length == 0){
  699. showError($I18N.common.grid.emptyDetail);
  700. return;
  701. } else {
  702. param1 = param1 == null ? [] : "[" + param1.toString().replace(/\\/g,"%") + "]";
  703. param2 = param2 == null ? [] : Ext.encode(param2).replace(/\\/g,"%");
  704. param3 = param3 == null ? [] : Ext.encode(param3).replace(/\\/g,"%");
  705. if(form.getForm().isValid()){
  706. Ext.each(form.items.items, function(item){
  707. if(item.xtype == 'numberfield'){
  708. if(item.value == null || item.value == ''){
  709. item.setValue(0);
  710. }
  711. }
  712. });
  713. var r = form.getValues();
  714. form.getForm().getFields().each(function(){
  715. if(this.logic == 'ignore') {
  716. delete r[this.name];
  717. }
  718. });
  719. me.FormUtil.update(r, param1, param2,param3);
  720. }else{
  721. me.FormUtil.checkForm();
  722. }
  723. }
  724. }
  725. });