VoucherNumber.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. Ext.QuickTips.init();
  2. Ext.define('erp.controller.fa.ars.VoucherNumber', {
  3. extend: 'Ext.app.Controller',
  4. FormUtil: Ext.create('erp.util.FormUtil'),
  5. BaseUtil: Ext.create('erp.util.BaseUtil'),
  6. GridUtil: Ext.create('erp.util.GridUtil'),
  7. views:[
  8. 'fa.ars.VoucherNumber', 'core.form.MonthDateField', 'common.editorColumn.GridPanel'
  9. ],
  10. init:function(){
  11. var me = this;
  12. this.control({
  13. 'button[id=query]': {
  14. click: function(btn) {
  15. var grid = btn.up('form').ownerCt.down('gridpanel');
  16. me.query(grid);
  17. }
  18. },
  19. 'button[id=number]': {
  20. click: function(btn) {
  21. var grid = btn.up('form').ownerCt.down('gridpanel');
  22. me.insertBreakNumber(grid);
  23. Ext.getCmp('vo_breaks').setValue('');
  24. grid.store.sort({
  25. property : 'vo_number',
  26. direction: 'ASC'
  27. });
  28. }
  29. },
  30. 'button[id=save]': {
  31. click: function(btn) {
  32. var grid = btn.up('form').ownerCt.down('gridpanel');
  33. me.save(grid);
  34. }
  35. },
  36. 'monthdatefield': {
  37. change: function(f) {
  38. if(f.hasValid()) {
  39. var grid = f.up('form').ownerCt.down('gridpanel');
  40. me.query(grid);
  41. }
  42. }
  43. }
  44. });
  45. },
  46. getForm: function(btn){
  47. return btn.ownerCt.ownerCt;
  48. },
  49. query: function(grid){
  50. grid.getGridColumnsAndStore('vo_yearmonth=' + Ext.getCmp('vo_yearmonth').value +
  51. ' order by vo_number');
  52. this.getBreakNumber(grid);
  53. },
  54. getBreakNumber: function(grid){
  55. var max = grid.store.max('vo_number'),diff = [];
  56. if(max > 0) {
  57. var numbers = [];
  58. for(var i = 1;i <= max;i++) {
  59. numbers.push(i);
  60. }
  61. var nums = [];
  62. grid.store.each(function(item){
  63. nums.push(Number(item.get('vo_number')));
  64. });
  65. grid.difference = diff = Ext.Array.difference(numbers, nums);
  66. Ext.getCmp('vo_breaks').setValue('断号:' + Ext.Array.concate(diff, '&nbsp;&nbsp;&nbsp;'));
  67. } else {
  68. Ext.getCmp('vo_breaks').setValue('');
  69. }
  70. },
  71. insertBreakNumber: function(grid){
  72. var items = grid.store.data.items,len = items.length;
  73. for(var i = len-1;i>=0;i--) {
  74. if(grid.difference.length > 0) {
  75. if(grid.difference[0] < Number(items[i].get('vo_number'))) {
  76. items[i].set('vo_number', grid.difference[0]);
  77. Ext.Array.remove(grid.difference, grid.difference[0]);
  78. }
  79. } else {
  80. return;
  81. }
  82. }
  83. },
  84. save: function(grid){
  85. var dir = new Array(),numbers = [],num,bool = true,i = 0;
  86. grid.store.each(function(item){
  87. i++;
  88. num = item.get('vo_number');
  89. if(!Ext.Array.contains(numbers, num)) {
  90. numbers.push(num);
  91. } else {
  92. showError('有重号,位于第' + i + '行,凭证号:' + num);
  93. bool = false;return;
  94. }
  95. if(item.dirty) {
  96. dir.push({
  97. vo_id: item.get('vo_id'),
  98. vo_number: num
  99. });
  100. }
  101. });
  102. if(bool && dir.length > 0) {
  103. grid.setLoading(true);
  104. Ext.Ajax.request({
  105. url: basePath + 'fa/ars/insertBreakVoNumber.action',
  106. params: {
  107. data: Ext.encode(dir)
  108. },
  109. async: false,
  110. callback: function(opt, s, r) {
  111. grid.setLoading(false);
  112. var res = Ext.decode(r.responseText);
  113. if(res.success) {
  114. alert('保存成功');
  115. }
  116. }
  117. });
  118. this.query(grid);
  119. }
  120. }
  121. });