PayBalance.js 27 KB

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