RecBalancePRDetail.js 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824
  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','core.form.ConDateField',
  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('RecBalance');
  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('rb_statuscode');
  80. if(status && status.value != 'UNPOST'){
  81. btn.hide();
  82. }
  83. },
  84. click: function(btn){
  85. me.beforePost(btn);
  86. }
  87. },
  88. 'erpResPostButton' : {
  89. afterrender: function(btn){
  90. var status = Ext.getCmp('rb_statuscode');
  91. if(status && status.value != 'POSTED'){
  92. btn.hide();
  93. }
  94. },
  95. click: function(btn){
  96. me.FormUtil.onResPost(Ext.getCmp('rb_id').value);
  97. }
  98. },
  99. 'erpDeleteButton' : {
  100. click: function(btn){
  101. me.FormUtil.onDelete(Ext.getCmp('rb_id').value);
  102. }
  103. },
  104. 'erpUpdateButton': {
  105. click: function(btn){
  106. me.getAramount();
  107. this.beforeUpdate(this);
  108. }
  109. },
  110. 'erpAddButton': {
  111. click: function(){
  112. me.FormUtil.onAdd('addRecBalance', '新增预收冲应收单', 'jsps/fa/ars/recBalancePRDetail.jsp?whoami='+caller);
  113. }
  114. },
  115. 'erpCloseButton': {
  116. click: function(btn){
  117. me.FormUtil.beforeClose(me);
  118. }
  119. },
  120. 'erpSubmitButton': {
  121. afterrender: function(btn){
  122. var status = Ext.getCmp(me.getForm(btn).statuscodeField),
  123. poststatus = Ext.getCmp('rb_statuscode');
  124. if(status && status.value != 'ENTERING'){
  125. btn.hide();
  126. }
  127. if(poststatus && poststatus.value == 'POSTED'){
  128. btn.hide();
  129. }
  130. },
  131. click: function(btn){
  132. me.beforeSubmit(btn);
  133. }
  134. },
  135. 'erpResSubmitButton': {
  136. afterrender: function(btn){
  137. var status = Ext.getCmp(me.getForm(btn).statuscodeField),
  138. poststatus = Ext.getCmp('rb_statuscode');
  139. if(status && status.value != 'COMMITED'){
  140. btn.hide();
  141. }
  142. if(poststatus && poststatus.value == 'POSTED'){
  143. btn.hide();
  144. }
  145. },
  146. click: function(btn){
  147. me.FormUtil.onResSubmit(Ext.getCmp('rb_id').value);
  148. }
  149. },
  150. 'erpAuditButton': {
  151. afterrender: function(btn){
  152. var status = Ext.getCmp(me.getForm(btn).statuscodeField),
  153. poststatus = Ext.getCmp('rb_statuscode');
  154. if(status && status.value != 'COMMITED'){
  155. btn.hide();
  156. }
  157. if(poststatus && poststatus.value == 'POSTED'){
  158. btn.hide();
  159. }
  160. },
  161. click: function(btn){
  162. me.FormUtil.onAudit(Ext.getCmp('rb_id').value);
  163. }
  164. },
  165. 'erpResAuditButton': {
  166. afterrender: function(btn){
  167. var status = Ext.getCmp(me.getForm(btn).statuscodeField),
  168. postStatus = Ext.getCmp('rb_statuscode');
  169. if((status && status.value != 'AUDITED') ||(postStatus && postStatus.value == 'POSTED')){
  170. btn.hide();
  171. }
  172. },
  173. click: function(btn){
  174. me.FormUtil.onResAudit(Ext.getCmp('rb_id').value);
  175. }
  176. },
  177. 'erpPrintButton': {
  178. click: function(btn){
  179. me.FormUtil.onPrint(Ext.getCmp('rb_id').value);
  180. }
  181. },
  182. 'field[name=rbd_ordercode]': {
  183. afterrender:function(t){
  184. t.gridKey="rb_custcode";
  185. t.mappinggirdKey="ab_custcode";
  186. t.gridErrorMessage="请先选择客户";
  187. }
  188. },
  189. 'field[name=rbpd_ordercode]': {
  190. aftertrigger: function(){
  191. var grid = Ext.getCmp('recbalanceprdetailGrid');
  192. var s = grid.getStore().data.items;
  193. for(var i=0;i<s.length;i++){
  194. var data = s[i].data;
  195. dd = new Object();
  196. if(s[i].dirty && !me.GridUtil.isBlank(grid, data)){
  197. Ext.each(grid.columns, function(c){
  198. if((!c.isCheckerHd)&&(c.logic != 'ignore')){
  199. var d =data['rbpd_amount']-data['rbpd_havebalance'];
  200. s[i].set('rbpd_nowbalance', d);
  201. }
  202. });
  203. }
  204. }
  205. setTimeout(function(){
  206. me.sumAmount();
  207. },200);
  208. },
  209. afterrender:function(t){
  210. console.log(t);
  211. t.gridKey="rb_custcode|rb_currency";
  212. t.mappinggirdKey="pr_custcode|pr_cmcurrency";
  213. t.gridErrorMessage="请先选择客户|请选择币别";
  214. }
  215. },
  216. //抓取预收账款信息
  217. 'button[name=catchpr]':{
  218. click:function(btn){
  219. var params = new Object(),form = Ext.getCmp('form'),grid = Ext.getCmp('recbalanceprdetailGrid'),startdate,enddate;
  220. var bars=grid.query('toolbar'),toolbar=bars[0];
  221. startdate=toolbar.items.items[2].value;
  222. enddate=toolbar.items.items[4].value;
  223. var items = grid.store.data.items;
  224. var array = new Array();
  225. var r = form.getValues();
  226. Ext.each(items,function(item,index){
  227. if(item.data[grid.necessaryField] != null && item.data[grid.necessaryField] != ''){
  228. array.push(item);
  229. }
  230. });
  231. var rb_id = Ext.getCmp('rb_id').value;
  232. if(!rb_id||(rb_id&&(rb_id == 0||rb_id==''||rb_id==null))){
  233. Ext.Msg.alert('请先保存单据');
  234. }else{
  235. if(array.length>0){
  236. Ext.Msg.alert('需要先清除明细行中的数据!');
  237. } else {
  238. var baseDate=Ext.getCmp('rb_date').value,currentmonth=baseDate.getMonth();
  239. if(enddate && enddate.getMonth()>currentmonth){
  240. Ext.Msg.alert('提示','日期区间不能超过当前单据月份!');
  241. return;
  242. }
  243. params.formStore = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  244. if(startdate!=null) params.startdate=Ext.Date.format(startdate,'Y-m-d');
  245. if(enddate !=null) params.enddate=Ext.Date.format(enddate,'Y-m-d');
  246. //抓取
  247. Ext.Ajax.request({
  248. url : basePath + form.catchPRUrl,
  249. params : params,
  250. method : 'post',
  251. callback : function(options,success,response){
  252. me.FormUtil.getActiveTab().setLoading(false);
  253. var localJson = new Ext.decode(response.responseText);
  254. if(localJson.success){
  255. catchSuccess(function(){
  256. //add成功后刷新页面进入可编辑的页面
  257. var value = r[form.keyField];
  258. var condition = 'rbpd_rbid='+value;
  259. grid.getMyData(condition);
  260. });
  261. } else if(localJson.exceptionInfo){
  262. } else{
  263. catchFailure();//@i18n/i18n.js
  264. }
  265. }
  266. });
  267. }
  268. }
  269. }
  270. },
  271. //清除预收账款信息
  272. 'button[name=cleanpr]':{
  273. click:function(btn){
  274. var grid = Ext.getCmp('recbalanceprdetailGrid');
  275. warnMsg('确定清除所有明细行么?',function(t){
  276. if(t=='yes'){
  277. var form = Ext.getCmp('form');
  278. var r = form.getValues();
  279. var params = new Object();
  280. params.formStore = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  281. Ext.Ajax.request({
  282. url : basePath + form.cleanPRUrl,
  283. params : params,
  284. method : 'post',
  285. callback : function(options,success,response){
  286. me.FormUtil.getActiveTab().setLoading(false);
  287. var localJson = new Ext.decode(response.responseText);
  288. if(localJson.success){
  289. cleanSuccess(function(){
  290. //add成功后刷新页面进入可编辑的页面
  291. var value = r[form.keyField];
  292. var condition = 'rbpd_rbid='+value;
  293. grid.getMyData(condition);
  294. });
  295. } else if(localJson.exceptionInfo){
  296. } else{
  297. cleanFailure();//@i18n/i18n.js
  298. }
  299. }
  300. });
  301. }else{
  302. return;
  303. }
  304. });
  305. }
  306. },
  307. //抓取发票信息
  308. 'button[name=catchab]':{
  309. click:function(btn){
  310. var params = new Object();
  311. var form = Ext.getCmp('form');
  312. var grid = Ext.getCmp('grid');
  313. var bars=grid.query('toolbar'),toolbar=bars[0],startdate,enddate;
  314. startdate=toolbar.items.items[2].value;
  315. enddate=toolbar.items.items[4].value;
  316. var items = grid.store.data.items;
  317. var array = new Array();
  318. var r = form.getValues();
  319. Ext.each(items,function(item,index){
  320. if(item.data[grid.necessaryField] != null && item.data[grid.necessaryField] != ''){
  321. array.push(item);
  322. }
  323. });
  324. var rb_id = Ext.getCmp('rb_id').value;
  325. if(!rb_id||(rb_id&&(rb_id == 0||rb_id==''||rb_id==null))){
  326. Ext.Msg.alert('请先保存单据');
  327. }else{
  328. if(array.length>0){
  329. Ext.Msg.alert('需要先清除明细行中的数据!');
  330. } else {
  331. if(startdate!=null) params.startdate=Ext.Date.format(startdate,'Y-m-d');
  332. if(enddate !=null) params.enddate=Ext.Date.format(enddate,'Y-m-d');
  333. params.formStore = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  334. params.caller=caller;
  335. //抓取
  336. Ext.Ajax.request({
  337. url : basePath + form.catchABUrl,
  338. params : params,
  339. method : 'post',
  340. callback : function(options,success,response){
  341. me.FormUtil.getActiveTab().setLoading(false);
  342. var localJson = new Ext.decode(response.responseText);
  343. if(localJson.success){
  344. catchSuccess(function(){
  345. //add成功后刷新页面进入可编辑的页面
  346. var value = r[form.keyField];
  347. var params = {
  348. caller:'RecBalance!PTAR',
  349. condition:'rbd_rbid='+value
  350. };
  351. grid.GridUtil.loadNewStore(grid, params);
  352. });
  353. } else if(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:'RecBalance!PTAR',
  386. condition:'rbd_rbid='+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=rb_cmamount]': {
  404. change: function(f) {
  405. var a = f.ownerCt.down('#rb_amount');
  406. if(!Ext.isEmpty(a.value)) {
  407. var r = f.ownerCt.down('#rb_cmrate'),
  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=rb_amount]': {
  415. change: function(f) {
  416. var v = f.ownerCt.down('#rb_cmamount');
  417. if(!Ext.isEmpty(f.value)) {
  418. var r = f.ownerCt.down('#rb_cmrate'),
  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('recbalanceprdetailGrid'),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('rb_amount').getValue()); //预收金额
  433. var cmamount = Number(Ext.getCmp('rb_cmamount').getValue()); //预收金额
  434. var cmcurrency = Ext.getCmp('rb_cmcurrency').getValue();
  435. var currency = Ext.getCmp('rb_currency').getValue();
  436. var cmrate = Number(Ext.getCmp('rb_cmrate').getValue()); //冲账汇率
  437. var amountsum = 0;
  438. var cmamountsum = 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['rbpd_nowbalance']);
  442. if(currency!=item.data['rbpd_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. cmamountsum = cmamountsum+Number(item.data['rbd_nowbalance']);
  452. if(cmcurrency!=item.data['rbd_currency']){
  453. //从表币别有与主表币别不同的
  454. //抛出异常
  455. sameCurrency = false;
  456. }
  457. }
  458. });
  459. if(Math.abs(cmamount-amount*cmrate)>=0.01){
  460. showError('冲账金额不正确,不能提交');return;
  461. }
  462. if(!sameCurrency){
  463. //从表币别有与主表币别不同的
  464. //抛出异常
  465. showError('明细行币别与币别不同,不能提交');return;
  466. }
  467. if(Math.abs(amount-amountsum)>=0.01){
  468. //冲账金额与明细行本次结算总和不等
  469. //抛出异常
  470. showError('预收账款明细行本次结算与预收金额不等,不能提交');return;
  471. }
  472. if(Math.abs(cmamount-cmamountsum)>=0.01){
  473. //冲账金额与明细行本次结算总和不等
  474. //抛出异常
  475. showError('发票明细行本次结算与冲账金额不等,不能提交');return;
  476. }
  477. me.FormUtil.onSubmit(Ext.getCmp('rb_id').value);
  478. },
  479. beforePost:function(){
  480. var me = this;
  481. var grid1 = Ext.getCmp('recbalanceprdetailGrid'),items1=grid1.store.data.items;
  482. var grid2 = Ext.getCmp('grid'),items2=grid2.store.data.items;
  483. var sameCurrency = true;
  484. var amount = Number(Ext.getCmp('rb_amount').getValue()); //预收金额
  485. var cmamount = Number(Ext.getCmp('rb_cmamount').getValue()); //预收金额
  486. var cmcurrency = Ext.getCmp('rb_cmcurrency').getValue();
  487. var currency = Ext.getCmp('rb_currency').getValue();
  488. var cmrate = Number(Ext.getCmp('rb_cmrate').getValue()); //冲账汇率
  489. var amountsum = 0;
  490. var cmamountsum = 0;
  491. Ext.each(items1,function(item,index){
  492. amountsum = amountsum+Number(item.data['rbpd_nowbalance']);
  493. if(currency!=item.data['rbpd_currency']){
  494. //从表币别有与主表币别不同的
  495. //抛出异常
  496. sameCurrency = false;
  497. }
  498. });
  499. Ext.each(items2,function(item,index){
  500. cmamountsum = cmamountsum+Number(item.data['rbd_nowbalance']);
  501. if(cmcurrency!=item.data['rbd_currency']){
  502. //从表币别有与主表币别不同的
  503. //抛出异常
  504. sameCurrency = false;
  505. }
  506. });
  507. if(Math.abs(cmamount-amount*cmrate)>=0.01){
  508. showError('冲账金额不正确,不能过账');return;
  509. }
  510. if(!sameCurrency){
  511. //从表币别有与主表币别不同的
  512. //抛出异常
  513. showError('明细行币别与币别不同,不能过账');return;
  514. }
  515. if(Math.abs(amount-amountsum)>=0.01){
  516. //冲账金额与明细行本次结算总和不等
  517. //抛出异常
  518. showError('预收账款明细行本次结算与预收金额不等,不能过账');return;
  519. }
  520. if(Math.abs(cmamount-cmamountsum)>=0.01){
  521. //冲账金额与明细行本次结算总和不等
  522. //抛出异常
  523. showError('发票明细行本次结算与冲账金额不等,不能过账');return;
  524. }
  525. me.FormUtil.onPost(Ext.getCmp('rb_id').value);
  526. },
  527. sumAmount:function(){
  528. var grid = Ext.getCmp('recbalanceprdetailGrid');
  529. var items = grid.store.data.items;
  530. var sumamount = 0;
  531. var text='本次结算金额(sum):';
  532. Ext.each(items,function(item,index){
  533. if(item.data[grid.necessaryField] != null && item.data[grid.necessaryField] != ''){
  534. sumamount = sumamount + Ext.Number.from(item.data['rbpd_nowbalance'],0);
  535. }
  536. });
  537. text=text+Ext.Number.from(sumamount,0);
  538. if(Ext.getCmp('rbpd_nowbalance_sum')){
  539. Ext.getCmp('rbpd_nowbalance_sum').setText(text);
  540. }
  541. },
  542. onGridItemClick1: function(selModel, record){//grid行选择
  543. this.gridLastSelected = record;
  544. var grid = Ext.getCmp('recbalanceprdetailGrid');
  545. grid.lastSelectedRecord = record;
  546. if(record.data[grid.necessaryField] == null || record.data[grid.necessaryField] == ''){
  547. this.gridLastSelected.findable = true;//空数据可以在输入完code,并移开光标后,自动调出该条数据
  548. } else {
  549. this.gridLastSelected.findable = false;
  550. }
  551. this.GridUtil.onGridItemClick(selModel, record);
  552. },
  553. onGridItemClick2: function(selModel, record){//grid行选择
  554. this.gridLastSelected = record;
  555. var grid = Ext.getCmp('grid');
  556. if(record.data[grid.necessaryField] == null || record.data[grid.necessaryField] == ''){
  557. this.gridLastSelected.findable = true;//空数据可以在输入完code,并移开光标后,自动调出该条数据
  558. } else {
  559. this.gridLastSelected.findable = false;
  560. }
  561. this.GridUtil.onGridItemClick(selModel, record);
  562. },
  563. getForm: function(btn){
  564. return btn.ownerCt.ownerCt;
  565. },
  566. beforeSaveRecBalance: function(){
  567. //预收冲应收
  568. if(caller =='RecBalance!PTAR'){
  569. var beginlast = Ext.getCmp('rb_beginlast').value; //预收余额
  570. var cmamount = Ext.getCmp('rb_cmamount').value; //冲账金额
  571. beginlast = Ext.Number.from(beginlast,0);
  572. cmamount = Ext.Number.from(cmamount,0);
  573. if(Math.abs(beginlast-cmamount)<=0.01){
  574. showError('预收金额不能小于冲账金额,不能保存');return;
  575. }
  576. }
  577. var grid = Ext.getCmp('grid');
  578. var items = grid.store.data.items;
  579. var bool = true;
  580. var warnStr='';
  581. Ext.each(items,function(item,index){
  582. if(item.dirty && item.data[grid.necessaryField] != null && item.data[grid.necessaryField] != ''){
  583. var aramount =item.data['rbd_aramount']; //订单金额
  584. var havepay = item.data['rbd_havepay']; //已预收金额
  585. var nowbalance = item.data['rbd_nowbalance']; //本次预收额
  586. //订单金额>=已预收金额+本次预收额
  587. //此种情况不能进行保存
  588. if(havepay+nowbalance>aramount){
  589. var i = index+1;
  590. if(warnStr ==''||warnStr.length<=0){
  591. warnStr = warnStr +i;
  592. }else{
  593. warnStr = warnStr +','+i;
  594. }
  595. bool = false;
  596. }
  597. }
  598. });
  599. if(bool){
  600. this.beforeSave(this);
  601. }else{
  602. if(warnStr != ''||warnStr.length>0){
  603. showError('明细表第'+warnStr+'行 已收金额与本次结算额的合计超过发票金额,不能保存');return;
  604. }
  605. }
  606. },
  607. beforeUpdateRecBalance: function(){
  608. //预收账款维护
  609. if(caller =='RecBalance!PTAR'){
  610. var beginlast = Ext.getCmp('rb_beginlast').value; //预收余额
  611. var cmamount = Ext.getCmp('rb_cmamount').value; //冲账金额
  612. beginlast = Ext.Number.from(beginlast,0);
  613. cmamount = Ext.Number.from(cmamount,0);
  614. if(Math.abs(beginlast-cmamount)<=0.01){
  615. showError('预收金额不能小于冲账金额,不能保存');return;
  616. }
  617. }
  618. var grid = Ext.getCmp('grid');
  619. Ext.Array.each(grid.store.data.items, function(item){
  620. item.set('rbd_rbid',Ext.getCmp('rb_id').value);
  621. });
  622. //采购价格不能为0
  623. var grid = Ext.getCmp('grid');
  624. var items = grid.store.data.items;
  625. var bool = true;
  626. var warnStr='';
  627. Ext.each(items,function(item,index){
  628. if(item.dirty && item.data[grid.necessaryField] != null && item.data[grid.necessaryField] != ''){
  629. var aramount =item.data['rbd_aramount']; //发票金额
  630. var havepay = item.data['rbd_havepay']; //已收金额
  631. var nowbalance = item.data['rbd_nowbalance']; //本次结算额
  632. //订单金额>=已预收金额+本次预收额
  633. //此种情况不能进行保存
  634. if(Math.abs(havepay+nowbalance-aramount) >= 0.01){
  635. var i = index+1;
  636. if(warnStr ==''||warnStr.length<=0){
  637. warnStr = warnStr +i;
  638. }else{
  639. warnStr = warnStr +','+i;
  640. }
  641. bool = false;
  642. }
  643. }
  644. });
  645. if(bool){
  646. this.beforeUpdate(this);
  647. }else{
  648. if(warnStr != ''||warnStr.length>0){
  649. showError('明细表第'+warnStr+'行 已收金额与本次结算额的合计超过发票金额,不能保存');return;
  650. }
  651. }
  652. },
  653. beforeUpdate:function(me){
  654. var mm = this;
  655. var form = Ext.getCmp('form');
  656. if(! mm.FormUtil.checkForm()){
  657. return;
  658. }
  659. if(form.keyField){
  660. if(Ext.getCmp(form.keyField).value == null || Ext.getCmp(form.keyField).value == ''){
  661. mm.FormUtil.getSeqId(form);
  662. }
  663. }
  664. var grids = Ext.ComponentQuery.query('gridpanel');
  665. if(grids.length > 0){
  666. var param1 = me.GridUtil.getGridStore(grids[0]);
  667. var param2 = me.GridUtil.getGridStore();
  668. var param3 = new Array();
  669. Ext.each(Ext.Object.getKeys(Ext.getCmp('assdetail').cacheStoreGrid), function(key){
  670. Ext.each(Ext.getCmp('assdetail').cacheStoreGrid[key], function(d){
  671. d['dass_condid'] = key;
  672. param3.push(d);
  673. });
  674. });
  675. mm.onUpdate(param1,param2,param3);
  676. }else {
  677. mm.onSave([],[],[]);
  678. }
  679. },
  680. /**
  681. * 保存之前的判断
  682. */
  683. beforeSave: function(me){
  684. var mm = this;
  685. var form = Ext.getCmp('form');
  686. if(! mm.FormUtil.checkForm()){
  687. return;
  688. }
  689. if(form.keyField){
  690. if(Ext.getCmp(form.keyField).value == null || Ext.getCmp(form.keyField).value == ''){
  691. mm.FormUtil.getSeqId(form);
  692. }
  693. }
  694. var grids = Ext.ComponentQuery.query('gridpanel');
  695. if(grids.length > 0){
  696. var param1 = me.GridUtil.getGridStore(grids[0]);
  697. var param2 = me.GridUtil.getGridStore();
  698. var param3 = new Array();
  699. Ext.each(Ext.Object.getKeys(Ext.getCmp('assdetail').cacheStoreGrid), function(key){
  700. Ext.each(Ext.getCmp('assdetail').cacheStoreGrid[key], function(d){
  701. d['dass_condid'] = key;
  702. param3.push(d);
  703. });
  704. });
  705. if(grids[1].necessaryField.length > 0 && (param2 == null || param2 == '')){
  706. warnMsg('明细表还未添加数据,是否继续?', function(btn){
  707. if(btn == 'yes'){
  708. mm.onSave(param1,param2);
  709. } else {
  710. return;
  711. }
  712. });
  713. } else {
  714. mm.onSave(param1,param2,param3);
  715. }
  716. }else {
  717. mm.onSave([],[],[]);
  718. }
  719. },
  720. onUpdate:function(param1,param2,param3){
  721. var me = this;
  722. var form = Ext.getCmp('form');
  723. param1 = param1 == null ? [] : "[" + param1.toString() + "]";
  724. param2 = param2 == null ? [] : "[" + param2.toString() + "]";
  725. param3 = param3 == null ? [] : Ext.encode(param3).replace(/\\/g,"%");
  726. if(form.getForm().isValid()){
  727. //form里面数据
  728. Ext.each(form.items.items, function(item){
  729. if(item.xtype == 'numberfield'){
  730. //number类型赋默认值,不然sql无法执行
  731. if(item.value == null || item.value == ''){
  732. item.setValue(0);
  733. }
  734. }
  735. });
  736. var r = form.getValues();
  737. //去除ignore字段
  738. var keys = Ext.Object.getKeys(r), f;
  739. Ext.each(keys, function(k){
  740. f = form.down('#' + k);
  741. if(f && f.logic == 'ignore') {
  742. delete r[k];
  743. }
  744. });
  745. if(!me.FormUtil.contains(form.updateUrl, '?caller=', true)){
  746. form.updateUrl = form.updateUrl + "?caller=" + caller;
  747. }
  748. me.FormUtil.update(r, param1,param2,param3);
  749. }else{
  750. me.FormUtil.checkForm();
  751. }
  752. },
  753. /**
  754. * 单据保存
  755. * @param param 传递过来的数据,比如gridpanel的数据
  756. */
  757. onSave: function(param1,param2,param3){
  758. var me = this;
  759. var form = Ext.getCmp('form');
  760. param1 = param1 == null ? [] : "[" + param1.toString() + "]";
  761. param2 = param2 == null ? [] : "[" + param2.toString() + "]";
  762. param3 = param3 == null ? [] : Ext.encode(param3).replace(/\\/g,"%");
  763. if(form.getForm().isValid()){
  764. //form里面数据
  765. Ext.each(form.items.items, function(item){
  766. if(item.xtype == 'numberfield'){
  767. //number类型赋默认值,不然sql无法执行
  768. if(item.value == null || item.value == ''){
  769. item.setValue(0);
  770. }
  771. }
  772. });
  773. var r = form.getValues();
  774. //去除ignore字段
  775. var keys = Ext.Object.getKeys(r), f;
  776. Ext.each(keys, function(k){
  777. f = form.down('#' + k);
  778. if(f && f.logic == 'ignore') {
  779. delete r[k];
  780. }
  781. });
  782. if(!me.FormUtil.contains(form.saveUrl, '?caller=', true)){
  783. form.saveUrl = form.saveUrl + "?caller=" + caller;
  784. }
  785. me.FormUtil.save(r, param1,param2,param3);
  786. }else{
  787. me.FormUtil.checkForm();
  788. }
  789. },
  790. //计算冲账收款金额 并写入主表 冲账收款金额字段
  791. getAramount: function(){
  792. var grid = Ext.getCmp('grid');
  793. var items = grid.store.data.items;
  794. var aramount = 0;
  795. Ext.each(items,function(item,index){
  796. if(item.data['rbd_ordercode']!=null&&item.data['rbd_ordercode']!=""){
  797. aramount= aramount + Number(item.data['rbd_nowbalance']);
  798. }
  799. });
  800. Ext.getCmp('rb_aramount').setValue(Ext.Number.toFixed(aramount, 2));
  801. }
  802. });