RecBalance.js 26 KB

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