RecBalanceTK.js 24 KB

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