PayPlease.js 53 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.fa.arp.PayPlease', {
  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. ppdid:0,
  8. views:[
  9. 'core.form.Panel','fa.arp.PayPlease','fa.arp.payplease.PayPleaseDetailDetGrid','fa.arp.payplease.PayPleaseDetailGrid','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.AssMain','core.button.Accounted','core.form.FileField',
  11. 'core.button.StrikeBalance','core.grid.AssPanel','core.window.AssWindow','core.trigger.CateTreeDbfindTrigger','core.trigger.HrOrgTreeDbfindTrigger',
  12. 'core.button.Post','core.button.ResPost','core.button.Print','core.button.Submit','core.button.ResAudit','core.button.Audit','core.button.ResSubmit',
  13. 'erp.view.core.button.AddDetail','erp.view.core.button.DeleteDetail','erp.view.core.button.Copy','erp.view.core.button.Paste','erp.view.core.button.Up',
  14. 'erp.view.core.button.Down','erp.view.core.button.UpExcel','core.button.TurnPayBalance','core.button.TurnBankRegister','core.button.TurnBillAP','core.button.TurnBillARChange',
  15. 'core.trigger.MultiDbfindTrigger', 'core.form.SeparNumber','core.form.MultiField','core.button.GetSumAmount','core.form.MonthDateField',
  16. 'core.button.End','core.button.ResEnd'
  17. ],
  18. init:function(){
  19. var me = this;
  20. me.gridLastSelected = null;
  21. this.control({
  22. 'textfield[name=pp_thispayamount]':{
  23. beforerender: function(field){
  24. field.readOnly=false;
  25. }
  26. },
  27. 'field[name=pp_thispaydate]':{
  28. beforerender: function(field){
  29. field.readOnly = false;
  30. //!field.value && (field.setValue(new Date()));
  31. }
  32. },
  33. 'field[name=pp_refno]':{
  34. beforerender: function(field){
  35. field.readOnly=false;
  36. }
  37. },
  38. 'field[name=pp_paymentcode]':{
  39. beforerender: function(field){
  40. field.readOnly=false;
  41. }
  42. },
  43. 'erpGetSumAmountButton':{
  44. click: function(btn){
  45. var grid1 = Ext.getCmp("paypleasedetailGrid"),grid2 = Ext.getCmp("paypleasedetaildetGrid"),items1 = grid1.store.data.items,items2 = grid2.store.data.items;
  46. var detailamount1 = 0;
  47. var detailamount2 = 0;
  48. Ext.each(items2,function(item,index){
  49. if(!me.GridUtil.isBlank(grid2,item.data)) {
  50. detailamount2 = detailamount2 + Number(item.data['ppdd_thisapplyamount']);
  51. }
  52. });
  53. me.gridLastSelected.set('ppd_applyamount',detailamount2);
  54. }
  55. },
  56. //第一个从表
  57. 'paypleasedetailGrid':{
  58. itemclick:me.onGridItemClick1,
  59. afterrender:function(grid){
  60. grid.plugins[0].on('afteredit',function(e){
  61. setTimeout(function(){
  62. var amount = 0;
  63. Ext.each(grid.store.data.items,function(item,index){
  64. amount=amount+Number(item.data['ppd_applyamount']);
  65. });
  66. Ext.getCmp('pp_total').setValue(Ext.util.Format.number(amount,'0.00'));
  67. },200);
  68. });
  69. }
  70. },
  71. //第二个从表
  72. 'paypleasedetaildetGrid':{
  73. afterrender: function(btn) {
  74. me.BaseUtil.getSetting('sys', 'autoCreateApBill', function(bool) {
  75. me.BaseUtil.getSetting('sys', 'useBillOutAP', function(bool) {
  76. Ext.getCmp('bi_code').show();
  77. });
  78. });
  79. },
  80. itemclick:me.onGridItemClick2
  81. },
  82. 'erpDeleteDetailButton': {
  83. afterdelete: function(d, r, btn){
  84. //还原发票锁定金额
  85. Ext.Ajax.request({
  86. url: basePath + 'fa/arp/reLockAmount.action',
  87. params: {
  88. id: d.ppdd_id,
  89. abcode: d.ppdd_billcode,
  90. amount: d.ppdd_thisapplyamount
  91. },
  92. callback: function(opt, s, r){
  93. var res = Ext.decode(r.responseText);
  94. if(res.success) {
  95. }
  96. }
  97. });
  98. }
  99. },
  100. //转付款单
  101. 'erpTurnPayBalanceButton':{
  102. click:function(btn){
  103. me.turnPayBalance();
  104. },
  105. afterrender: function(btn){
  106. var status = Ext.getCmp(me.getForm(btn).statuscodeField);
  107. if(status && status.value != 'AUDITED'){
  108. btn.hide();
  109. }
  110. }
  111. },
  112. //转银行登记
  113. 'erpTurnBankRegisterButton':{
  114. click:function(btn){
  115. me.turnBankRegister();
  116. },
  117. afterrender: function(btn){
  118. var status = Ext.getCmp(me.getForm(btn).statuscodeField);
  119. if(status && status.value != 'AUDITED'){
  120. btn.hide();
  121. }
  122. }
  123. },
  124. //应付票据付款
  125. 'erpTurnBillAPButton':{
  126. click:function(btn){
  127. me.turnBillAP();
  128. },
  129. afterrender: function(btn){
  130. var status = Ext.getCmp(me.getForm(btn).statuscodeField);
  131. if(status && status.value != 'AUDITED'){
  132. btn.hide();
  133. }
  134. }
  135. },
  136. //应付票据付款
  137. 'erpTurnBillARChangeButton':{
  138. click:function(btn){
  139. me.turnBillARChange();
  140. },
  141. afterrender: function(btn){
  142. var status = Ext.getCmp(me.getForm(btn).statuscodeField);
  143. if(status && status.value != 'AUDITED'){
  144. btn.hide();
  145. }
  146. }
  147. },
  148. 'erpSaveButton': {
  149. click: function(btn){
  150. var form = me.getForm(btn);
  151. if(Ext.getCmp(form.codeField).value == null || Ext.getCmp(form.codeField).value == ''){
  152. me.BaseUtil.getRandomNumber();
  153. }
  154. //保存之前的一些前台的逻辑判定
  155. this.beforeSavePayPlease();
  156. }
  157. },
  158. 'erpDeleteButton' : {
  159. click: function(btn){
  160. me.FormUtil.onDelete(Ext.getCmp('pp_id').value);
  161. }
  162. },
  163. 'erpUpdateButton': {
  164. click: function(btn){
  165. this.beforeUpdatePayPlease();
  166. }
  167. },
  168. 'erpAddButton': {
  169. click: function(){
  170. me.FormUtil.onAdd('addPayBalance', '新增付款申请单', 'jsps/fa/arp/payplease.jsp?whoami='+caller);
  171. }
  172. },
  173. 'erpCloseButton': {
  174. click: function(btn){
  175. me.FormUtil.beforeClose(me);
  176. }
  177. },
  178. 'erpSubmitButton': {
  179. afterrender: function(btn){
  180. var status = Ext.getCmp(me.getForm(btn).statuscodeField);
  181. if(status && status.value != 'ENTERING'){
  182. btn.hide();
  183. }
  184. },
  185. click: function(btn){
  186. me.beforeSubmit(btn);
  187. }
  188. },
  189. 'erpResSubmitButton': {
  190. afterrender: function(btn){
  191. var status = Ext.getCmp(me.getForm(btn).statuscodeField);
  192. if(status && status.value != 'COMMITED'){
  193. btn.hide();
  194. }
  195. },
  196. click: function(btn){
  197. me.FormUtil.onResSubmit(Ext.getCmp('pp_id').value);
  198. }
  199. },
  200. 'erpAuditButton': {
  201. afterrender: function(btn){
  202. var status = Ext.getCmp(me.getForm(btn).statuscodeField);
  203. if(status && status.value != 'COMMITED'){
  204. btn.hide();
  205. }
  206. },
  207. click: function(btn){
  208. me.FormUtil.onAudit(Ext.getCmp('pp_id').value);
  209. }
  210. },
  211. 'erpResAuditButton': {
  212. afterrender: function(btn){
  213. var status = Ext.getCmp(me.getForm(btn).statuscodeField);
  214. if(status && status.value != 'AUDITED'){
  215. btn.hide();
  216. }
  217. },
  218. click: function(btn){
  219. me.FormUtil.onResAudit(Ext.getCmp('pp_id').value);
  220. }
  221. },
  222. 'erpEndButton': {
  223. afterrender: function(btn) {
  224. var status = Ext.getCmp('pp_statuscode');
  225. if (status && status.value != 'AUDITED') {
  226. btn.hide();
  227. }
  228. },
  229. click: function(btn) {
  230. warnMsg("确定结案?", function(btn){
  231. if(btn == 'yes'){
  232. me.FormUtil.getActiveTab().setLoading(true);//loading...
  233. Ext.Ajax.request({
  234. url : basePath + 'fa/arp/endPayPlease.action',
  235. params: {
  236. caller: caller,
  237. id: Ext.getCmp('pp_id').value
  238. },
  239. method : 'post',
  240. callback : function(options,success,response){
  241. me.FormUtil.getActiveTab().setLoading(false);
  242. var localJson = new Ext.decode(response.responseText);
  243. if(localJson.exceptionInfo){
  244. showError(localJson.exceptionInfo);
  245. }
  246. if(localJson.success){
  247. alert("结案成功!");
  248. window.location.reload();
  249. }
  250. }
  251. });
  252. }
  253. });
  254. }
  255. },
  256. 'erpResEndButton': {
  257. afterrender: function(btn) {
  258. var status = Ext.getCmp('pp_statuscode');
  259. if (status && status.value != 'FINISH') {
  260. btn.hide();
  261. }
  262. },
  263. click: function(btn) {
  264. warnMsg("确定反结案?", function(btn){
  265. if(btn == 'yes'){
  266. me.FormUtil.getActiveTab().setLoading(true);//loading...
  267. Ext.Ajax.request({
  268. url : basePath + 'fa/arp/resEndPayPlease.action',
  269. params: {
  270. caller: caller,
  271. id: Ext.getCmp('pp_id').value
  272. },
  273. method : 'post',
  274. callback : function(options,success,response){
  275. me.FormUtil.getActiveTab().setLoading(false);
  276. var localJson = new Ext.decode(response.responseText);
  277. if(localJson.exceptionInfo){
  278. showError(localJson.exceptionInfo);
  279. }
  280. if(localJson.success){
  281. alert("反结案成功!");
  282. window.location.reload();
  283. }
  284. }
  285. });
  286. }
  287. });
  288. }
  289. },
  290. 'erpPrintButton': {
  291. click: function(btn){
  292. var reportName="APPay_app";
  293. var condition = '{PayPlease.pp_id}=' + Ext.getCmp('pp_id').value + '';
  294. var id = Ext.getCmp('pp_id').value;
  295. me.FormUtil.onwindowsPrint(id, reportName, condition);
  296. }
  297. },
  298. 'dbfindtrigger[name=ppdd_billcode]':{
  299. focus: function(t){
  300. t.setHideTrigger(false);
  301. t.setReadOnly(false);
  302. var record = Ext.getCmp('paypleasedetailGrid').selModel.selected.first();
  303. if(!record || !record.data['ppd_vendcode']) {
  304. showError("请先选择供应商!");
  305. t.setHideTrigger(true);
  306. t.setReadOnly(true);
  307. } else {
  308. var code = record.data['ppd_vendcode'];
  309. t.dbBaseCondition = " ab_vendcode = '" + code + "'";
  310. }
  311. }
  312. },
  313. 'dbfindtrigger[name=ppd_bankaccount]':{
  314. focus: function(t){
  315. var vecode = t.record.data['ppd_vendcode'];
  316. if(vecode != ''){
  317. t.dbBaseCondition = " vpd_vecode='"+vecode+"' ";
  318. }
  319. }
  320. },
  321. 'multidbfindtrigger[name=ppdd_billcode]':{
  322. focus: function(t){
  323. t.setHideTrigger(false);
  324. t.setReadOnly(false);
  325. var record = Ext.getCmp('paypleasedetailGrid').selModel.selected.first();
  326. if(!record || !record.data['ppd_vendcode']) {
  327. showError("请先选择供应商!");
  328. t.setHideTrigger(true);
  329. t.setReadOnly(true);
  330. } else {
  331. var code = record.data['ppd_vendcode'];
  332. t.dbBaseCondition = " ab_vendcode = '" + code + "'";
  333. }
  334. }
  335. },
  336. '#bi_code':{
  337. beforetrigger: function(t){
  338. t.setHideTrigger(false);
  339. t.setReadOnly(false);
  340. var record = Ext.getCmp('paypleasedetailGrid').selModel.selected.first();
  341. if(!record || !record.data['ppd_vendcode']) {
  342. showError("请先选择供应商!");
  343. return false;
  344. } else if (!record.data['ppd_currency']){
  345. showError("请先选择币别!");
  346. return false;
  347. } else {
  348. t.dbBaseCondition = " bi_vendcode = '" + record.data['ppd_vendcode'] + "' and bi_currency='" + record.data['ppd_currency'] + "'";
  349. }
  350. }
  351. },
  352. //抓取发票信息
  353. 'button[name=catchab]':{
  354. click:function(btn){
  355. var grid2 = Ext.getCmp('paypleasedetaildetGrid');
  356. var form = Ext.getCmp('form');
  357. var lastselect = me.gridLastSelected;
  358. var params = new Object();
  359. var thisamount = lastselect.data['ppd_applyamount'].toString();
  360. if(lastselect == null){
  361. //grid1 没有选择数据
  362. Ext.Msg.alert('警告','请先填写供应商信息!');
  363. }else{
  364. //grid1 选择了数据
  365. var array = new Array();
  366. Ext.each(grid2.store.data.items,function(item,index){
  367. var d = item.get('ppdd_id');
  368. if(d != null && Number(d) > 0){
  369. array.push(item);
  370. }
  371. });
  372. if(array.length>0){
  373. Ext.Msg.alert('警告','需要先清除明细行中的数据!');
  374. } else {
  375. params['ppd_id'] = lastselect.data['ppd_id'].toString();
  376. params['ppd_ppid'] = lastselect.data['ppd_ppid'].toString();
  377. params['startdate'] = Ext.getCmp('startdate').value;
  378. params['enddate'] = Ext.getCmp('enddate').value;
  379. params['caller'] = caller;
  380. params['bicode'] = Ext.getCmp('bi_code').value;
  381. me.FormUtil.getActiveTab().setLoading(true);
  382. //抓取
  383. Ext.Ajax.request({
  384. url : basePath + form.catchAPUrl,
  385. params : params,
  386. method : 'post',
  387. callback : function(options,success,response){
  388. me.FormUtil.getActiveTab().setLoading(false);
  389. var localJson = new Ext.decode(response.responseText);
  390. if(localJson.success){
  391. catchSuccess(function(){
  392. var condition = 'ppdd_ppdid='+lastselect.data['ppd_id'].toString();
  393. if(thisamount != '0'){
  394. grid2.getMyData(condition);
  395. } else {
  396. window.location.reload();
  397. }
  398. });
  399. } else if(localJson.exceptionInfo){
  400. showError(localJson.exceptionInfo);
  401. } else{
  402. catchFailure();//@i18n/i18n.js
  403. }
  404. }
  405. });
  406. }
  407. }
  408. }
  409. },
  410. //清除发票信息
  411. 'button[name=cleanab]':{
  412. click:function(btn){
  413. var grid2 = Ext.getCmp('paypleasedetaildetGrid');
  414. warnMsg('确定清除所有明细行么?',function(t){
  415. if(t=='yes'){
  416. var lastselect = me.gridLastSelected;
  417. var form = Ext.getCmp('form');
  418. var params = new Object();
  419. if(lastselect == null){
  420. //grid1 没有选择数据
  421. Ext.Msg.alert('警告','请先从第一明细表中选择一行明细行!');
  422. }else{
  423. params['ppd_id'] = lastselect.data['ppd_id'].toString();
  424. params['ppd_ppid'] = lastselect.data['ppd_ppid'].toString();
  425. params['caller'] = caller;
  426. Ext.Ajax.request({
  427. url : basePath + form.cleanAPUrl,
  428. params : params,
  429. method : 'post',
  430. callback : function(options,success,response){
  431. me.FormUtil.getActiveTab().setLoading(false);
  432. var localJson = new Ext.decode(response.responseText);
  433. if(localJson.success){
  434. cleanSuccess(function(){
  435. //add成功后刷新页面进入可编辑的页面
  436. var condition = 'ppdd_ppdid='+lastselect.data['ppd_id'].toString();
  437. grid2.getMyData(condition);
  438. });
  439. } else if(localJson.exceptionInfo){
  440. showError(localJson.exceptionInfo);return;
  441. } else{
  442. cleanFailure();//@i18n/i18n.js
  443. }
  444. }
  445. });
  446. }
  447. }else{
  448. return;
  449. }
  450. });
  451. }
  452. },
  453. //发票明细
  454. 'button[name=detail]':{
  455. click:function(btn){
  456. var det = Ext.getCmp('paypleasedetaildetGrid');
  457. if(det.store.data.items.length == 0) {
  458. showError('请先选择申请单明细!');
  459. return;
  460. }
  461. var id = det.store.data.items[0].get('ppdd_ppdid');
  462. if(id == 0) {
  463. showError('请先选择申请单明细!');
  464. return;
  465. }
  466. var win = Ext.getCmp('bill-win');
  467. if(!win) {
  468. var url = basePath +'jsps/common/datalist.jsp?whoami=APBill!CWIM!Detail&_noc=1';
  469. url += '&urlcondition=ab_code in (select ppdd_billcode from paypleasedetaildet where ppdd_ppdid=' +
  470. id + ')';
  471. win = new Ext.window.Window({
  472. id : 'bill-win',
  473. title: '发票明细',
  474. height: '100%',
  475. width: '80%',
  476. maximizable : true,
  477. buttonAlign : 'center',
  478. closeAction: 'hide',
  479. layout : 'anchor',
  480. items: [{
  481. tag : 'iframe',
  482. frame : true,
  483. anchor : '100% 100%',
  484. layout : 'fit',
  485. html : '<iframe src="' + url + '" height="100%" width="100%" frameborder="0" scrolling="no"></iframe>'
  486. }],
  487. buttons : [{
  488. text : '关 闭',
  489. iconCls: 'x-button-icon-close',
  490. cls: 'x-btn-gray',
  491. handler : function(){
  492. Ext.getCmp('bill-win').hide();
  493. }
  494. }]
  495. });
  496. }
  497. win.show();
  498. }
  499. }
  500. });
  501. },
  502. turnPayBalance: function(){
  503. var grid = Ext.getCmp('paypleasedetailGrid');
  504. var items = grid.selModel.getSelection();
  505. if(items.length==0){
  506. Ext.Msg.alert('警告','请勾选需要转付款单的明细行!');
  507. return;
  508. }
  509. Ext.each(items, function(item, index){
  510. if(this.data[grid.keyField] != null && this.data[grid.keyField] != ''
  511. && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
  512. grid.multiselected.push(item);
  513. }
  514. });
  515. var form = Ext.getCmp('form');
  516. var records = Ext.Array.unique(grid.multiselected);
  517. var r = form.getValues();
  518. if(records.length > 0){
  519. var params = new Object();
  520. params.caller = caller;
  521. var data = new Array();
  522. params.formStore = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  523. var bool = false;
  524. Ext.each(records, function(record, index){
  525. var f = form.fo_detailMainKeyField;
  526. if(((grid.keyField && this.data[grid.keyField] != null && this.data[grid.keyField] != ''
  527. && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0)
  528. ||(f && this.data[f] != null && this.data[f] != ''
  529. && this.data[f] != '0' && this.data[f] != 0))&&(record.data['ppd_statuscode']!='TURNPB')){
  530. bool = true;
  531. var o = new Object();
  532. if(grid.keyField){
  533. o[grid.keyField] = record.data[grid.keyField];
  534. } else {
  535. params.id[index] = record.data[form.fo_detailMainKeyField];
  536. }
  537. if(grid.toField){
  538. Ext.each(grid.toField, function(f, index){
  539. var v = Ext.getCmp(f).value;
  540. if(v != null && v.toString().trim() != '' && v.toString().trim() != 'null'){
  541. o[f] = v;
  542. }
  543. });
  544. }
  545. if(grid.necessaryFields){
  546. Ext.each(grid.necessaryFields, function(f, index){
  547. var v = record.data[f];
  548. if(Ext.isDate(v)){
  549. v = Ext.Date.toString(v);
  550. }
  551. o[f] = v;
  552. });
  553. }
  554. data.push(o);
  555. }
  556. });
  557. if(bool){
  558. params.data = Ext.encode(data);
  559. var main = parent.Ext.getCmp("content-panel");
  560. main.getActiveTab().setLoading(true);//loading...
  561. Ext.Ajax.request({
  562. url : basePath + 'fa/PayPleaseController/turnPayBalance.action',
  563. params: params,
  564. method : 'post',
  565. callback : function(options,success,response){
  566. main.getActiveTab().setLoading(false);
  567. var localJson = new Ext.decode(response.responseText);
  568. if(localJson.exceptionInfo){
  569. showError(localJson.exceptionInfo);
  570. return "";
  571. }
  572. if(localJson.success){
  573. if(localJson.log){
  574. showMessage("提示", localJson.log);
  575. }
  576. Ext.Msg.alert("提示", "处理成功!", function(){
  577. var me = this;
  578. //add成功后刷新页面进入可编辑的页面
  579. var value = r[form.keyField];
  580. var formCondition = form.keyField + "IS" + value ;
  581. if(me.contains(window.location.href, '?', true)){
  582. window.location.href = window.location.href + '&formCondition=' +
  583. formCondition;
  584. } else {
  585. window.location.href = window.location.href + '?formCondition=' +
  586. formCondition;
  587. }
  588. });
  589. }
  590. }
  591. });
  592. } else {
  593. showError("没有需要处理的数据!");
  594. }
  595. }
  596. },
  597. turnBankRegister: function(){
  598. var grid = Ext.getCmp('paypleasedetailGrid'), catecode = Ext.getCmp('pp_paymentcode').value;
  599. var items = grid.selModel.getSelection();
  600. var thisamount = Ext.getCmp('pp_thispayamount').value, amount = 0;
  601. var ppamount = Ext.getCmp('pp_total').value;
  602. var thispaydate = Ext.getCmp('pp_thispaydate').value;
  603. if(Ext.isEmpty(thispaydate)){
  604. Ext.Msg.alert('警告','请填写本次付款日期!');
  605. return;
  606. }
  607. Ext.each(grid.store.data.items,function(item,index){
  608. amount=amount+Number(item.data['ppd_account']);
  609. });
  610. if(thisamount-(ppamount-amount)>0.01){
  611. Ext.Msg.alert('警告','本次付款金额超过剩余未转金额!未转金额:'+ (ppamount-amount));
  612. return;
  613. }
  614. if(items.length==0){
  615. Ext.Msg.alert('警告','请勾选需要转银行登记的明细行!');
  616. return;
  617. }
  618. if(catecode == null || catecode == ''){
  619. Ext.Msg.alert('警告','请填写需要转银行登记的付款方信息!');
  620. return;
  621. }
  622. if(thisamount == null || thisamount=='' || thisamount==0){
  623. Ext.Msg.alert('警告','本次付款金额未填写!');
  624. return;
  625. }
  626. Ext.each(items, function(item, index){
  627. if(this.data[grid.keyField] != null && this.data[grid.keyField] != ''
  628. && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
  629. grid.multiselected.push(item);
  630. }
  631. });
  632. var form = Ext.getCmp('form');
  633. var records = Ext.Array.unique(grid.multiselected);
  634. var r = form.getValues();
  635. if(records.length > 0){
  636. var params = new Object();
  637. params.caller = caller;
  638. var data = new Array();
  639. params.formStore = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  640. var bool = false;
  641. Ext.each(records, function(record, index){
  642. var f = form.fo_detailMainKeyField;
  643. if(((grid.keyField && this.data[grid.keyField] != null && this.data[grid.keyField] != ''
  644. && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0)
  645. ||(f && this.data[f] != null && this.data[f] != ''
  646. && this.data[f] != '0' && this.data[f] != 0))&&(record.data['ppd_statuscode']!='TURNPB')){
  647. bool = true;
  648. var o = new Object();
  649. if(grid.keyField){
  650. o[grid.keyField] = record.data[grid.keyField];
  651. } else {
  652. params.id[index] = record.data[form.fo_detailMainKeyField];
  653. }
  654. if(grid.toField){
  655. Ext.each(grid.toField, function(f, index){
  656. var v = Ext.getCmp(f).value;
  657. if(v != null && v.toString().trim() != '' && v.toString().trim() != 'null'){
  658. o[f] = v;
  659. }
  660. });
  661. }
  662. if(grid.necessaryFields){
  663. Ext.each(grid.necessaryFields, function(f, index){
  664. var v = record.data[f];
  665. if(Ext.isDate(v)){
  666. v = Ext.Date.toString(v);
  667. }
  668. o[f] = v;
  669. });
  670. }
  671. data.push(o);
  672. }
  673. });
  674. if(bool){
  675. params.data = Ext.encode(data);
  676. var main = parent.Ext.getCmp("content-panel");
  677. main.getActiveTab().setLoading(true);//loading...
  678. Ext.Ajax.request({
  679. url : basePath + 'fa/PayPleaseController/turnBankRegister.action',
  680. params: params,
  681. method : 'post',
  682. callback : function(options,success,response){
  683. main.getActiveTab().setLoading(false);
  684. var localJson = new Ext.decode(response.responseText);
  685. if(localJson.exceptionInfo){
  686. showError(localJson.exceptionInfo);
  687. return "";
  688. }
  689. if(localJson.success){
  690. if(localJson.log){
  691. showMessage("提示", localJson.log);
  692. }
  693. Ext.Msg.alert("提示", "处理成功!", function(){
  694. var me = this;
  695. //add成功后刷新页面进入可编辑的页面
  696. var value = r[form.keyField];
  697. var formCondition = form.keyField + "IS" + value ;
  698. if(me.contains(window.location.href, '?', true)){
  699. window.location.href = window.location.href + '&formCondition=' +
  700. formCondition;
  701. } else {
  702. window.location.href = window.location.href + '?formCondition=' +
  703. formCondition;
  704. }
  705. });
  706. }
  707. }
  708. });
  709. } else {
  710. showError("没有需要处理的数据!");
  711. }
  712. }
  713. },
  714. turnBillAP: function(){
  715. var grid = Ext.getCmp('paypleasedetailGrid'), catecode = Ext.getCmp('pp_paymentcode').value;
  716. var items = grid.selModel.getSelection();
  717. var thisamount = Ext.getCmp('pp_thispayamount').value, amount = 0;
  718. var ppamount = Ext.getCmp('pp_total').value;
  719. var thispaydate = Ext.getCmp('pp_thispaydate').value;
  720. if(Ext.isEmpty(thispaydate)){
  721. Ext.Msg.alert('警告','请填写本次付款日期!');
  722. return;
  723. }
  724. Ext.each(grid.store.data.items,function(item,index){
  725. amount=amount+Number(item.data['ppd_account']);
  726. });
  727. if(thisamount-(ppamount-amount)>0.01){
  728. Ext.Msg.alert('警告','本次付款金额超过剩余未转金额!未转金额:'+ (ppamount-amount));
  729. return;
  730. }
  731. if(items.length==0){
  732. Ext.Msg.alert('警告','请勾选需要转应付票据的明细行!');
  733. return;
  734. }
  735. if(catecode == null || catecode == ''){
  736. Ext.Msg.alert('警告','请填写需要转应付票据的付款方信息!');
  737. return;
  738. }
  739. if(thisamount == null || thisamount=='' || thisamount==0){
  740. Ext.Msg.alert('警告','本次付款金额未填写!');
  741. return;
  742. }
  743. Ext.each(items, function(item, index){
  744. if(this.data[grid.keyField] != null && this.data[grid.keyField] != ''
  745. && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
  746. grid.multiselected.push(item);
  747. }
  748. });
  749. var form = Ext.getCmp('form');
  750. var records = Ext.Array.unique(grid.multiselected);
  751. var r = form.getValues();
  752. if(records.length > 0){
  753. var params = new Object();
  754. params.caller = caller;
  755. var data = new Array();
  756. params.formStore = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  757. var bool = false;
  758. Ext.each(records, function(record, index){
  759. var f = form.fo_detailMainKeyField;
  760. if(((grid.keyField && this.data[grid.keyField] != null && this.data[grid.keyField] != ''
  761. && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0)
  762. ||(f && this.data[f] != null && this.data[f] != ''
  763. && this.data[f] != '0' && this.data[f] != 0))&&(record.data['ppd_statuscode']!='TURNPB')){
  764. bool = true;
  765. var o = new Object();
  766. if(grid.keyField){
  767. o[grid.keyField] = record.data[grid.keyField];
  768. } else {
  769. params.id[index] = record.data[form.fo_detailMainKeyField];
  770. }
  771. if(grid.toField){
  772. Ext.each(grid.toField, function(f, index){
  773. var v = Ext.getCmp(f).value;
  774. if(v != null && v.toString().trim() != '' && v.toString().trim() != 'null'){
  775. o[f] = v;
  776. }
  777. });
  778. }
  779. if(grid.necessaryFields){
  780. Ext.each(grid.necessaryFields, function(f, index){
  781. var v = record.data[f];
  782. if(Ext.isDate(v)){
  783. v = Ext.Date.toString(v);
  784. }
  785. o[f] = v;
  786. });
  787. }
  788. data.push(o);
  789. }
  790. });
  791. if(bool){
  792. params.data = Ext.encode(data);
  793. var main = parent.Ext.getCmp("content-panel");
  794. main.getActiveTab().setLoading(true);//loading...
  795. Ext.Ajax.request({
  796. url : basePath + 'fa/PayPleaseController/turnBillAP.action',
  797. params: params,
  798. method : 'post',
  799. callback : function(options,success,response){
  800. main.getActiveTab().setLoading(false);
  801. var localJson = new Ext.decode(response.responseText);
  802. if(localJson.exceptionInfo){
  803. showError(localJson.exceptionInfo);
  804. return "";
  805. }
  806. if(localJson.success){
  807. if(localJson.log){
  808. showMessage("提示", localJson.log);
  809. }
  810. Ext.Msg.alert("提示", "处理成功!", function(){
  811. var me = this;
  812. //add成功后刷新页面进入可编辑的页面
  813. var value = r[form.keyField];
  814. var formCondition = form.keyField + "IS" + value ;
  815. if(me.contains(window.location.href, '?', true)){
  816. window.location.href = window.location.href + '&formCondition=' +
  817. formCondition;
  818. } else {
  819. window.location.href = window.location.href + '?formCondition=' +
  820. formCondition;
  821. }
  822. });
  823. }
  824. }
  825. });
  826. } else {
  827. showError("没有需要处理的数据!");
  828. }
  829. }
  830. },
  831. turnBillARChange: function(){
  832. var grid = Ext.getCmp('paypleasedetailGrid'), catecode = Ext.getCmp('pp_paymentcode').value;
  833. var items = grid.selModel.getSelection();
  834. var thisamount = Ext.getCmp('pp_thispayamount').value, amount = 0;
  835. var ppamount = Ext.getCmp('pp_total').value;
  836. var thispaydate = Ext.getCmp('pp_thispaydate').value;
  837. if(Ext.isEmpty(thispaydate)){
  838. Ext.Msg.alert('警告','请填写本次付款日期!');
  839. return;
  840. }
  841. Ext.each(grid.store.data.items,function(item,index){
  842. amount=amount+Number(item.data['ppd_account']);
  843. });
  844. if(thisamount-(ppamount-amount)>0.01){
  845. Ext.Msg.alert('警告','本次付款金额超过剩余未转金额!未转金额:'+ (ppamount-amount));
  846. return;
  847. }
  848. if(items.length==0){
  849. Ext.Msg.alert('警告','请勾选需要转应付票据的明细行!');
  850. return;
  851. }
  852. /*if(catecode == null || catecode == ''){
  853. Ext.Msg.alert('警告','请填写需要转应付票据的付款方信息!');
  854. return;
  855. }*/
  856. if(thisamount == null || thisamount=='' || thisamount==0){
  857. Ext.Msg.alert('警告','本次付款金额未填写!');
  858. return;
  859. }
  860. Ext.each(items, function(item, index){
  861. if(this.data[grid.keyField] != null && this.data[grid.keyField] != ''
  862. && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0){
  863. grid.multiselected.push(item);
  864. }
  865. });
  866. var form = Ext.getCmp('form');
  867. var records = Ext.Array.unique(grid.multiselected);
  868. var r = form.getValues();
  869. if(records.length > 0){
  870. var params = new Object();
  871. params.caller = caller;
  872. var data = new Array();
  873. params.formStore = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  874. var bool = false;
  875. Ext.each(records, function(record, index){
  876. var f = form.fo_detailMainKeyField;
  877. if(((grid.keyField && this.data[grid.keyField] != null && this.data[grid.keyField] != ''
  878. && this.data[grid.keyField] != '0' && this.data[grid.keyField] != 0)
  879. ||(f && this.data[f] != null && this.data[f] != ''
  880. && this.data[f] != '0' && this.data[f] != 0))&&(record.data['ppd_statuscode']!='TURNPB')){
  881. bool = true;
  882. var o = new Object();
  883. if(grid.keyField){
  884. o[grid.keyField] = record.data[grid.keyField];
  885. } else {
  886. params.id[index] = record.data[form.fo_detailMainKeyField];
  887. }
  888. if(grid.toField){
  889. Ext.each(grid.toField, function(f, index){
  890. var v = Ext.getCmp(f).value;
  891. if(v != null && v.toString().trim() != '' && v.toString().trim() != 'null'){
  892. o[f] = v;
  893. }
  894. });
  895. }
  896. if(grid.necessaryFields){
  897. Ext.each(grid.necessaryFields, function(f, index){
  898. var v = record.data[f];
  899. if(Ext.isDate(v)){
  900. v = Ext.Date.toString(v);
  901. }
  902. o[f] = v;
  903. });
  904. }
  905. data.push(o);
  906. }
  907. });
  908. if(bool){
  909. params.data = Ext.encode(data);
  910. var main = parent.Ext.getCmp("content-panel");
  911. main.getActiveTab().setLoading(true);//loading...
  912. Ext.Ajax.request({
  913. url : basePath + 'fa/PayPleaseController/turnBillARChange.action',
  914. params: params,
  915. method : 'post',
  916. callback : function(options,success,response){
  917. main.getActiveTab().setLoading(false);
  918. var localJson = new Ext.decode(response.responseText);
  919. if(localJson.exceptionInfo){
  920. showError(localJson.exceptionInfo);
  921. return "";
  922. }
  923. if(localJson.success){
  924. if(localJson.log){
  925. showMessage("提示", localJson.log);
  926. }
  927. Ext.Msg.alert("提示", "处理成功!", function(){
  928. var me = this;
  929. //add成功后刷新页面进入可编辑的页面
  930. var value = r[form.keyField];
  931. var formCondition = form.keyField + "IS" + value ;
  932. if(me.contains(window.location.href, '?', true)){
  933. window.location.href = window.location.href + '&formCondition=' +
  934. formCondition;
  935. } else {
  936. window.location.href = window.location.href + '?formCondition=' +
  937. formCondition;
  938. }
  939. });
  940. }
  941. }
  942. });
  943. } else {
  944. showError("没有需要处理的数据!");
  945. }
  946. }
  947. },
  948. //点击第一个grid
  949. onGridItemClick1: function(selModel,record){
  950. var me = this;
  951. me.gridLastSelected = record;
  952. var ppd_id = record.data['ppd_id'];
  953. this.ppdid = ppd_id;
  954. var grid = Ext.getCmp('paypleasedetailGrid');
  955. var ppddgrid = Ext.getCmp('paypleasedetaildetGrid');
  956. if(ppd_id > 0 && !me.GridUtil.isBlank(grid,record.data)){
  957. var condition = "ppdd_ppdid='"+ppd_id+"'";
  958. ppddgrid.getMyData(condition);
  959. }
  960. this.onGridItemClick(selModel,record,'paypleasedetailGrid');
  961. },
  962. //点击第二个GRID
  963. onGridItemClick2: function(selModel,record){
  964. this.onGridItemClick(selModel,record,'paypleasedetaildetGrid');
  965. },
  966. onGridItemClick: function(selModel, record,id){//grid行选择
  967. this.GridUtil.onGridItemClick(selModel, record,id);
  968. },
  969. getForm: function(btn){
  970. return btn.ownerCt.ownerCt;
  971. },
  972. beforeSavePayPlease: function(){
  973. this.beforeSave();
  974. },
  975. beforeUpdatePayPlease:function(){
  976. var s = ' ';
  977. var ppdgrid = Ext.getCmp('paypleasedetailGrid');
  978. var items = ppdgrid.store.data.items;
  979. var bool = true;
  980. var pptotal = Number(Ext.getCmp('pp_total').getValue());
  981. var amount = 0;
  982. Ext.each(items,function(item){
  983. var keys = Ext.Object.getKeys(item.modified);
  984. Ext.each(keys,function(key){
  985. if(key=='ppd_auditamount'||key=='ppd_ifpay'){
  986. item.set('ppd_editor',em_name);
  987. item.set('ppd_editorid',em_uu);
  988. }
  989. });
  990. var applyamount = item.data['ppd_applyamount'];
  991. var auditamount = item.data['ppd_auditamount'];
  992. if(applyamount<auditamount){
  993. s=s+(item.index+1)+' ';
  994. bool=false;
  995. }
  996. amount=amount+Number(applyamount);
  997. });
  998. if(bool){
  999. this.beforeUpdate();
  1000. // if(amount != pptotal){
  1001. // console.log('show error');
  1002. // showError($I18N.common.grid.updatePayPleaseError1);
  1003. // }else{
  1004. // this.beforeUpdate();
  1005. // }
  1006. }else{
  1007. showError($I18N.common.grid.auditApplyPayPlease1 + s + $I18N.common.grid.auditApplyPayPlease2);
  1008. }
  1009. },
  1010. /**
  1011. * 检查form未完善的字段
  1012. */
  1013. checkForm: function(){
  1014. var s = '';
  1015. var form = Ext.getCmp('form');
  1016. form.getForm().getFields().each(function (item,index,length){
  1017. if(!item.isValid()){
  1018. if(s != ''){
  1019. s = s + ',';
  1020. }
  1021. if(item.fieldLabel){
  1022. s = s + item.fieldLabel.replace(/&nbsp;/g,'');
  1023. }
  1024. }
  1025. });
  1026. if(s == ''){
  1027. return true;
  1028. }
  1029. showError($I18N.common.form.necessaryInfo1 + '(<font color=green>'+s+'</font>)' + $I18N.common.form.necessaryInfo2);
  1030. return false;
  1031. },
  1032. beforeUpdate: function(me){
  1033. var mm = this;
  1034. var form = Ext.getCmp('form');
  1035. if(! this.checkForm()){
  1036. return;
  1037. }
  1038. var grid = Ext.getCmp('paypleasedetailGrid');
  1039. var date = Ext.getCmp('pp_date').getValue();
  1040. grid.store.each(function(record){
  1041. if(record.dirty && !mm.GridUtil.isBlank(grid, record.data)){
  1042. if(Ext.isEmpty(record.get('ppd_startdate'))) {
  1043. record.set('ppd_startdate', Ext.Date.getFirstDateOfMonth(date));
  1044. }
  1045. if(Ext.isEmpty(record.get('ppd_overdate'))) {
  1046. record.set('ppd_overdate', Ext.Date.getLastDateOfMonth(date));
  1047. }
  1048. }
  1049. });
  1050. var gridsDet = Ext.getCmp('paypleasedetaildetGrid');
  1051. var currency1 = '';
  1052. if(this.gridLastSelected){
  1053. if(this.gridLastSelected.data['ppd_id']){
  1054. currency1 = this.gridLastSelected.data['ppd_currency'];
  1055. mm.ppdid = this.gridLastSelected.data['ppd_id'];
  1056. }
  1057. }else{
  1058. currency1 = grid.store.data.items[0].data['ppd_currency'];
  1059. }
  1060. var sameCurrency = true;
  1061. Ext.each(gridsDet.store.data.items,function(item, index){
  1062. if(item.dirty && !mm.GridUtil.isBlank(gridsDet, item.data)){
  1063. var thisapplyamount = item.data['ppdd_thisapplyamount'];
  1064. if(thisapplyamount == 0 || thisapplyamount == null){
  1065. showError('明细表第' + item.data['ppdd_detno'] + '行本次申请金额不能为空!');return;
  1066. return;
  1067. }
  1068. if(!Ext.isEmpty(currency1) && item.data['ppdd_currency'] != currency1){
  1069. sameCurrency = false;
  1070. }
  1071. }
  1072. });
  1073. if(!sameCurrency){
  1074. showError($I18N.common.msg.failure_update_currency);
  1075. return;
  1076. }
  1077. if(mm.ppdid == 0 || mm.ppdid == null){
  1078. if(grid){
  1079. mm.ppdid = grid.store.data.items[0].data['ppd_id'];
  1080. }else{
  1081. mm.ppdid = 0;
  1082. }
  1083. }
  1084. //如果ppdid == 0 则次页面为新建页面 活着以前也没有在grid1中添加数据
  1085. //grid1 中的数据
  1086. var param1 = mm.GridUtil.getGridStore(grid);
  1087. //grid2中的数据
  1088. var param2 = mm.getGridStoreDet(gridsDet);
  1089. //ppdid==0的情况为 grid1第一条没有数据的情况 次情况只能保存grid1中的数据 grid2中的数据保存不上
  1090. //如果ppdid!=0 则可能的情况为 1.点击grid1选择了一条数据 2.没有点击grid1 但是grid1中有数据 此时
  1091. //grid2中的数据自动保存在grid1中第一条数据下
  1092. if(mm.ppdid == 0){
  1093. if(param2 == null || param2 == ''){
  1094. //此时grid2数据为空 可以保存grid1的数据
  1095. mm.onUpdate(param1);
  1096. }else{
  1097. warnMsg('不能保存从表二中的数据,是否只保存从表一?',function(btn){
  1098. if(btn =='yes'){
  1099. //保存从表一中的数据
  1100. mm.onUpdate(param1);
  1101. }else{
  1102. //return
  1103. return;
  1104. }
  1105. });
  1106. }
  1107. }else{
  1108. if(param2 ==null||param2==''){
  1109. mm.onUpdate(param1);
  1110. }else{
  1111. mm.onUpdate(param1,param2);
  1112. }
  1113. }
  1114. },
  1115. beforeSave: function(me){
  1116. var mm = this;
  1117. var form = Ext.getCmp('form');
  1118. if(! this.checkForm()){
  1119. return;
  1120. }
  1121. if(Ext.getCmp(form.keyField).value == null || Ext.getCmp(form.keyField).value == ''){
  1122. mm.FormUtil.getSeqId(form);
  1123. }
  1124. var grid = Ext.getCmp('paypleasedetailGrid');
  1125. var date = Ext.getCmp('pp_date').getValue();
  1126. grid.store.each(function(record){
  1127. if(record.dirty && !mm.GridUtil.isBlank(grid, record.data)){
  1128. if(Ext.isEmpty(record.get('ppd_startdate'))) {
  1129. record.set('ppd_startdate', Ext.Date.getFirstDateOfMonth(date));
  1130. }
  1131. if(Ext.isEmpty(record.get('ppd_overdate'))) {
  1132. record.set('ppd_overdate', Ext.Date.getLastDateOfMonth(date));
  1133. }
  1134. }
  1135. });
  1136. var gridsDet = Ext.getCmp('paypleasedetaildetGrid');
  1137. var currency1 = '';
  1138. if(this.gridLastSelected){
  1139. currency1 = this.gridLastSelected.data['ppd_currency'];
  1140. mm.ppdid = this.gridLastSelected.data['ppd_id'];
  1141. } else{
  1142. currency1 = grid.store.first().data['ppd_currency'];
  1143. }
  1144. var sameCurrency = true;
  1145. Ext.each(gridsDet.store.data.items,function(item, index){
  1146. if(item.dirty && !mm.GridUtil.isBlank(gridsDet,item.data)){
  1147. if(!Ext.isEmpty(currency1) && item.data['ppdd_currency'] != currency1){
  1148. sameCurrency = false;
  1149. }
  1150. }
  1151. });
  1152. if(!sameCurrency){
  1153. showError($I18N.common.msg.failure_save_currency);
  1154. return;
  1155. }
  1156. if(mm.ppdid == 0 || mm.ppdid == null){
  1157. if(grid){
  1158. mm.ppdid = grid.store.data.items[0].data['ppd_id'];
  1159. }else{
  1160. mm.ppdid = 0;
  1161. }
  1162. }
  1163. //如果ppdid == 0 则次页面为新建页面 活着以前也没有在grid1中添加数据
  1164. //grid1 中的数据
  1165. var param1 = mm.GridUtil.getGridStore(grid);
  1166. //grid2中的数据
  1167. var param2 = mm.getGridStoreDet(gridsDet);
  1168. //ppdid==0的情况为 grid1第一条没有数据的情况 次情况只能保存grid1中的数据 grid2中的数据保存不上
  1169. //如果ppdid!=0 则可能的情况为 1.点击grid1选择了一条数据 2.没有点击grid1 但是grid1中有数据 此时
  1170. //grid2中的数据自动保存在grid1中第一条数据下
  1171. if(mm.ppdid == 0){
  1172. if(param2 == null || param2 == ''){
  1173. //此时grid2数据为空 可以保存grid1的数据
  1174. mm.onSave(param1);
  1175. }else{
  1176. warnMsg('不能保存从表二中的数据,是否只保存从表一?',function(btn){
  1177. if(btn =='yes'){
  1178. //保存从表一中的数据
  1179. mm.onSave(param1);
  1180. }else{
  1181. //return
  1182. return;
  1183. }
  1184. });
  1185. }
  1186. }else{
  1187. if(param2 ==null||param2==''){
  1188. mm.onSave(param1);
  1189. }else{
  1190. mm.onSave(param1,param2);
  1191. }
  1192. }
  1193. },
  1194. beforeSubmit: function(){
  1195. var me = this;
  1196. var grid1 = Ext.getCmp('paypleasedetailGrid'),items1=grid1.store.data.items;
  1197. var grid2 = Ext.getCmp('paypleasedetaildetGrid'),items2=grid2.store.data.items;
  1198. var applyamount = 0, nowamount=0,amount=0;
  1199. var bool = true;
  1200. Ext.each(items2,function(item,index){
  1201. if(!me.GridUtil.isBlank(grid2, item.data)){
  1202. nowamount = nowamount+Number(item.data['ppdd_thisapplyamount']);
  1203. if(Math.abs(Number(item.data['ppdd_billamount']))<Math.abs(Number(item.data['ppdd_account']))){
  1204. bool = false;
  1205. showError('发票的已付金额大于发票金额,不能提交');return;
  1206. }
  1207. if(!Ext.isEmpty(item.get('ppdd_ordercode'))) {
  1208. if(Math.abs(Number(item.data['ppdd_billamount'])-Number(item.data['ppdd_account'])) < Math.abs(Number(item.data['ppdd_thisapplyamount']))){
  1209. bool = false;
  1210. showError('本次申请金额大于发票未付的金额,不能提交');return;
  1211. }
  1212. }
  1213. }
  1214. });
  1215. var pptotal = Number(Ext.getCmp('pp_total').getValue());
  1216. var type=Ext.getCmp('pp_type').value;
  1217. if(type=='应付款'){
  1218. Ext.each(items1,function(item,index){
  1219. if(item.data[grid1.necessaryField]!=''&&item.data[grid1.necessaryField]!=null){
  1220. applyamount = Number(item.data['ppd_applyamount']);
  1221. amount = amount+ applyamount;
  1222. if(Math.abs(nowamount-applyamount)>0.001){
  1223. //冲账金额与明细行本次结算总和不等
  1224. //抛出异常
  1225. bool = false;
  1226. showError('申请金额与发票详情中本次申请金额不等,不能提交');return;
  1227. }
  1228. }
  1229. });
  1230. if(amount != pptotal){
  1231. bool = false;
  1232. showError($I18N.common.grid.submitPayPleaseError1);return;
  1233. }
  1234. if(bool)
  1235. me.FormUtil.onSubmit(Ext.getCmp('pp_id').value);
  1236. } else {
  1237. if(bool)
  1238. me.FormUtil.onSubmit(Ext.getCmp('pp_id').value);
  1239. }
  1240. },
  1241. /**
  1242. * 拿到grid里面要提交的数据
  1243. */
  1244. getGridStoreDet: function(grid){
  1245. if(grid == null){
  1246. grid = Ext.getCmp('grid');
  1247. }
  1248. var jsonGridData = new Array();
  1249. var form = Ext.getCmp('form');
  1250. var s = grid.getStore().data.items;//获取store里面的数据
  1251. var dd;
  1252. for(var i=0;i<s.length;i++){//将grid里面各行的数据获取并拼成jsonGridData
  1253. var data = s[i].data;
  1254. dd = new Object();
  1255. if(s[i].dirty && !grid.GridUtil.isBlank(grid, data)){
  1256. Ext.each(grid.columns, function(c){
  1257. if(c.logic != 'ignore'){//只需显示,无需后台操作的字段,自动略去
  1258. if(c.xtype == 'datecolumn'){
  1259. if(Ext.isDate(data[c.dataIndex])){
  1260. dd[c.dataIndex] = Ext.Date.toString(data[c.dataIndex]);//在这里把GMT日期转化成Y-m-d格式日期
  1261. } else {
  1262. dd[c.dataIndex] = Ext.Date.format(new Date(), 'Y-m-d');//如果用户没输入日期,或输入有误,就给个默认日期,
  1263. //或干脆return;并且提示一下用户
  1264. }
  1265. } else if(c.xtype == 'datetimecolumn'){
  1266. if(Ext.isDate(data[c.dataIndex])){
  1267. dd[c.dataIndex] = Ext.Date.format(data[c.dataIndex], 'Y-m-d H:i:s');//在这里把GMT日期转化成Y-m-d H:i:s格式日期
  1268. } else {
  1269. dd[c.dataIndex] = Ext.Date.format(new Date(), 'Y-m-d H:i:s');//默认日期,
  1270. }
  1271. } else if(c.xtype == 'numbercolumn'){//赋个默认值0吧,不然不好保存
  1272. if(data[c.dataIndex] == null || data[c.dataIndex] == ''){
  1273. dd[c.dataIndex] = '0';//也可以从data里面去掉这些字段
  1274. } else {
  1275. dd[c.dataIndex] = String(s[i].data[c.dataIndex]);
  1276. }
  1277. } else {
  1278. dd[c.dataIndex] = s[i].data[c.dataIndex];
  1279. }
  1280. }
  1281. });
  1282. if(grid.mainField){//例如,将pu_id的值赋给pd_puid
  1283. dd[grid.mainField] = this.ppdid;
  1284. }
  1285. jsonGridData.push(Ext.JSON.encode(dd));
  1286. }
  1287. }
  1288. return jsonGridData;
  1289. },
  1290. onUpdate:function(param1,param2){
  1291. var me = this;
  1292. var form =Ext.getCmp('form');
  1293. param1 = param1 == null ? [] : "[" + param1.toString() + "]";
  1294. param2 = param2 == null ? [] : "[" + param2.toString() + "]";
  1295. if(form.getForm().isValid()){
  1296. //form里面数据
  1297. Ext.each(form.items.items, function(item){
  1298. if(item.xtype == 'numberfield'){
  1299. //number类型赋默认值,不然sql无法执行
  1300. if(item.value == null || item.value == ''){
  1301. item.setValue(0);
  1302. }
  1303. }
  1304. });
  1305. var r = form.getValues();
  1306. if(!me.contains(form.updateUrl, '?caller=', true)){
  1307. form.updateUrl = form.updateUrl + "?caller=" + caller;
  1308. }
  1309. // 去除ignore字段
  1310. var keys = Ext.Object.getKeys(r), f;
  1311. var reg = /[!@#$%^&*()'":,\/?]/;
  1312. Ext.each(keys, function(k){
  1313. f = form.down('#' + k);
  1314. if(f && f.logic == 'ignore') {
  1315. delete r[k];
  1316. }
  1317. if(f) {
  1318. if(f.logic != 'ignore' && f.logic){
  1319. r[f.logic] = r[k];
  1320. delete r[k];
  1321. }
  1322. }
  1323. });
  1324. me.update(r, param1,param2);
  1325. }else{
  1326. me.checkForm();
  1327. }
  1328. },
  1329. onSave:function(param1,param2){
  1330. var me = this;
  1331. var form =Ext.getCmp('form');
  1332. param1 = param1 == null ? [] : "[" + param1.toString() + "]";
  1333. param2 = param2 == null ? [] : "[" + param2.toString() + "]";
  1334. if(form.getForm().isValid()){
  1335. //form里面数据
  1336. Ext.each(form.items.items, function(item){
  1337. if(item.xtype == 'numberfield'){
  1338. //number类型赋默认值,不然sql无法执行
  1339. if(item.value == null || item.value == ''){
  1340. item.setValue(0);
  1341. }
  1342. }
  1343. });
  1344. var r = form.getValues();
  1345. // 去除ignore字段
  1346. var keys = Ext.Object.getKeys(r), f;
  1347. var reg = /[!@#$%^&*()'":,\/?]/;
  1348. Ext.each(keys, function(k){
  1349. f = form.down('#' + k);
  1350. if(f && f.logic == 'ignore') {
  1351. delete r[k];
  1352. }
  1353. if(f) {
  1354. if(f.logic != 'ignore' && f.logic){
  1355. r[f.logic] = r[k];
  1356. delete r[k];
  1357. }
  1358. }
  1359. });
  1360. if(!me.contains(form.saveUrl, '?caller=', true)){
  1361. form.saveUrl = form.saveUrl + "?caller=" + caller;
  1362. }
  1363. me.save(r, param1,param2);
  1364. }else{
  1365. me.checkForm();
  1366. }
  1367. },
  1368. /*
  1369. * 修改
  1370. */
  1371. update:function(){
  1372. var params = new Object();
  1373. var r = arguments[0];
  1374. Ext.each(Ext.Object.getKeys(r), function(k){//去掉页面非表单定义字段
  1375. if(contains(k, 'ext-', true)){
  1376. delete r[k];
  1377. }
  1378. });
  1379. params.formStore = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  1380. params.param1 = unescape(arguments[1].toString().replace(/\\/g,"%"));
  1381. for(var i=2; i<arguments.length; i++) { //兼容多参数
  1382. params['param' + i] = unescape(arguments[i].toString().replace(/\\/g,"%"));
  1383. }
  1384. var me = this;
  1385. var form = Ext.getCmp('form');
  1386. me.getActiveTab().setLoading(true);//loading...
  1387. Ext.Ajax.request({
  1388. url : basePath + form.updateUrl,
  1389. params : params,
  1390. method : 'post',
  1391. callback : function(options,success,response){
  1392. me.getActiveTab().setLoading(false);
  1393. var localJson = new Ext.decode(response.responseText);
  1394. if(localJson.success){
  1395. saveSuccess(function(){
  1396. //add成功后刷新页面进入可编辑的页面
  1397. var value = r[form.keyField];
  1398. var formCondition = form.keyField + "IS" + value ;
  1399. if(me.contains(window.location.href, '?', true)){
  1400. window.location.href = window.location.href + '&formCondition=' +
  1401. formCondition;
  1402. } else {
  1403. window.location.href = window.location.href + '?formCondition=' +
  1404. formCondition;
  1405. }
  1406. });
  1407. } else if(localJson.exceptionInfo){
  1408. var str = localJson.exceptionInfo;
  1409. if(str.trim().substr(0, 12) == 'AFTERSUCCESS'){//特殊情况:操作成功,但是出现警告,允许刷新页面
  1410. str = str.replace('AFTERSUCCESS', '');
  1411. saveSuccess(function(){
  1412. //add成功后刷新页面进入可编辑的页面
  1413. var value = r[form.keyField];
  1414. var formCondition = form.keyField + "IS" + value ;
  1415. if(me.contains(window.location.href, '?', true)){
  1416. window.location.href = window.location.href + '&formCondition=' +
  1417. formCondition;
  1418. } else {
  1419. window.location.href = window.location.href + '?formCondition=' +
  1420. formCondition;
  1421. }
  1422. });
  1423. showError(str);
  1424. } else {
  1425. showError(str);
  1426. return;
  1427. }
  1428. } else{
  1429. saveFailure();//@i18n/i18n.js
  1430. }
  1431. }
  1432. });
  1433. },
  1434. /**
  1435. * 保存
  1436. */
  1437. save: function(){
  1438. var params = new Object();
  1439. var r = arguments[0];
  1440. Ext.each(Ext.Object.getKeys(r), function(k){//去掉页面非表单定义字段
  1441. if(contains(k, 'ext-', true)){
  1442. delete r[k];
  1443. }
  1444. });
  1445. params.formStore = unescape(Ext.JSON.encode(r).replace(/\\/g,"%"));
  1446. params.param1 = unescape(arguments[1].toString().replace(/\\/g,"%"));
  1447. for(var i=2; i<arguments.length; i++) { //兼容多参数
  1448. params['param' + i] = unescape(arguments[i].toString().replace(/\\/g,"%"));
  1449. }
  1450. var me = this;
  1451. var form = Ext.getCmp('form');
  1452. me.getActiveTab().setLoading(true);//loading...
  1453. Ext.Ajax.request({
  1454. url : basePath + form.saveUrl,
  1455. params : params,
  1456. method : 'post',
  1457. callback : function(options,success,response){
  1458. me.getActiveTab().setLoading(false);
  1459. var localJson = new Ext.decode(response.responseText);
  1460. if(localJson.success){
  1461. saveSuccess(function(){
  1462. //add成功后刷新页面进入可编辑的页面
  1463. var value = r[form.keyField];
  1464. var formCondition = form.keyField + "IS" + value ;
  1465. if(me.contains(window.location.href, '?', true)){
  1466. window.location.href = window.location.href + '&formCondition=' +
  1467. formCondition;
  1468. } else {
  1469. window.location.href = window.location.href + '?formCondition=' +
  1470. formCondition;
  1471. }
  1472. });
  1473. } else if(localJson.exceptionInfo){
  1474. var str = localJson.exceptionInfo;
  1475. if(str.trim().substr(0, 12) == 'AFTERSUCCESS'){//特殊情况:操作成功,但是出现警告,允许刷新页面
  1476. str = str.replace('AFTERSUCCESS', '');
  1477. saveSuccess(function(){
  1478. //add成功后刷新页面进入可编辑的页面
  1479. var value = r[form.keyField];
  1480. var formCondition = form.keyField + "IS" + value ;
  1481. if(me.contains(window.location.href, '?', true)){
  1482. window.location.href = window.location.href + '&formCondition=' +
  1483. formCondition;
  1484. } else {
  1485. window.location.href = window.location.href + '?formCondition=' +
  1486. formCondition;
  1487. }
  1488. });
  1489. showError(str);
  1490. } else {
  1491. showError(str);
  1492. return;
  1493. }
  1494. } else{
  1495. saveFailure();//@i18n/i18n.js
  1496. }
  1497. }
  1498. });
  1499. },
  1500. getActiveTab: function(){
  1501. var tab = null;
  1502. if(Ext.getCmp("content-panel")){
  1503. tab = Ext.getCmp("content-panel").getActiveTab();
  1504. }
  1505. if(!tab && parent.Ext.getCmp("content-panel"))
  1506. tab = parent.Ext.getCmp("content-panel").getActiveTab();
  1507. if(!tab && parent.parent.Ext.getCmp("content-panel"))
  1508. tab = parent.parent.Ext.getCmp("content-panel").getActiveTab();
  1509. if(!tab){
  1510. var win = parent.Ext.ComponentQuery.query('window');
  1511. if(win.length > 0){
  1512. tab = win[win.length-1];
  1513. }
  1514. }
  1515. return tab;
  1516. },
  1517. /**
  1518. * string:原始字符串
  1519. * substr:子字符串
  1520. * isIgnoreCase:忽略大小写
  1521. */
  1522. contains: function(string,substr,isIgnoreCase){
  1523. if(isIgnoreCase){
  1524. string=string.toLowerCase();
  1525. substr=substr.toLowerCase();
  1526. }
  1527. var startChar=substr.substring(0,1);
  1528. var strLen=substr.length;
  1529. for(var j=0;j<string.length-strLen+1;j++){
  1530. if(string.charAt(j)==startChar){//如果匹配起始字符,开始查找
  1531. if(string.substring(j,j+strLen)==substr){//如果从j开始的字符与str匹配,那ok
  1532. return true;
  1533. }
  1534. }
  1535. }
  1536. return false;
  1537. }
  1538. });