RecBalance.js 24 KB

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