RecBalancePRDetail.js 27 KB

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