account_payment_term.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. openerp.eiru_payment_term_generator = function (instance, local) {
  2. local.widgetInstance = null;
  3. local.parentInstance = null;
  4. local.AccountPaymentTermWidget = instance.Widget.extend({
  5. template : "eiru_payment_term_generator.AccountPaymentTerm",
  6. init:function(parent){
  7. this._super(parent);
  8. this.buttons = parent.$buttons;
  9. },
  10. updateId : function(id){
  11. var self = this;
  12. self.id=id;
  13. },
  14. reloadLine: function() {
  15. local.parentInstance.reload();
  16. },
  17. start: function () {
  18. var self = this;
  19. this.$el.click(function () {
  20. self.fecthInitial();
  21. });
  22. },
  23. fecthInitial: function(){
  24. var id= openerp.webclient._current_state.id;
  25. var self = this;
  26. self.fecthAccountPaymentTerm(id).then(function(PaymentTerm){
  27. return PaymentTerm;
  28. }).then(function(PaymentTerm){
  29. self.PaymentTerm = PaymentTerm;
  30. return self.fetchAccountPaymentTermLine();
  31. }).then(function(PaymentTermLine){
  32. self.PaymentTermLine = PaymentTermLine;
  33. self.fectchCalculatePaymentTerm();
  34. });
  35. return false;
  36. },
  37. fecthAccountPaymentTerm: function(id){
  38. var self = this;
  39. var defer = $.Deferred();
  40. var domain=[['id','=', id]];
  41. var fields=['id','name','invoice_amount','amount','frequency','active'];
  42. var PaymentTerm = new instance.web.Model('account.payment.term');
  43. PaymentTerm.query(fields).filter(domain).order_by('id').all().then(function(results){
  44. defer.resolve(results);
  45. });
  46. return defer;
  47. },
  48. fetchAccountPaymentTermLine: function () {
  49. var self = this;
  50. var defer = $.Deferred();
  51. var id = _.flatten(_.map(self.PaymentTerm,function(map){
  52. return map.id;
  53. }));
  54. var fields=['id','payment_id','value','days','days2','weeks','months','value_amount','amount_round'];
  55. var domain=[['payment_id','in', id]];
  56. var PaymentTermLine = new instance.web.Model('account.payment.term.line');
  57. PaymentTermLine.query(fields).filter(domain).order_by('id').all().then(function(results){
  58. defer.resolve(results);
  59. });
  60. return defer;
  61. },
  62. fectchCalculatePaymentTerm: function () {
  63. var self = this;
  64. var defer = $.Deferred();
  65. var data = [];
  66. var type = 'fixed';
  67. var PaymentTerm = self.PaymentTerm;
  68. var months_count = 0;
  69. var weeks_count = 0;
  70. var days_count = 0;
  71. var paid = 0;
  72. var value_amount = 0;
  73. var qty = PaymentTerm[0].invoice_amount / PaymentTerm[0].amount;
  74. if (qty % 1 == 0) {
  75. qty-=1
  76. }else{
  77. qty = Math.trunc(qty)
  78. }
  79. for (var i = 0; i <= qty; i++) {
  80. value_amount = PaymentTerm[0].amount;
  81. if(i == qty){
  82. type = 'balance';
  83. value_amount = PaymentTerm[0].invoice_amount - paid;
  84. }
  85. paid += PaymentTerm[0].amount;
  86. data.push({
  87. payment_id : PaymentTerm[0].id,
  88. value : type,
  89. value_amount : value_amount,
  90. days : days_count,
  91. days2 : 0,
  92. weeks : weeks_count,
  93. months : months_count
  94. });
  95. if(PaymentTerm[0].frequency == 'week'){
  96. weeks_count += 1;
  97. }else{
  98. if(PaymentTerm[0].frequency == 'month'){
  99. months_count += 1;
  100. }else{
  101. days_count += 15;
  102. }
  103. }
  104. }
  105. self.joinPaymentTermLine(data).then(function(results) {
  106. return results;
  107. }).then(function(){
  108. self.reloadLine();
  109. });
  110. },
  111. joinPaymentTermLine: function(data) {
  112. var self = this;
  113. var defer = $.Deferred();
  114. var AccountPaymentTerm = new openerp.web.Model('account.payment.term');
  115. AccountPaymentTerm.call('join_payment_term_lines',[data], {
  116. context: new openerp.web.CompoundContext()
  117. }).then(function(results) {
  118. defer.resolve(results);
  119. });
  120. return defer;
  121. },
  122. });
  123. if (instance.web && instance.web.FormView) {
  124. instance.web.FormView.include({
  125. load_form: function (record) {
  126. this._super.apply(this, arguments);
  127. if (this.model !== 'account.payment.term') return;
  128. local.parentInstance = this;
  129. if (local.widgetInstance) {
  130. local.widgetInstance.updateId(record.id);
  131. }
  132. local.widgetInstance = new local.AccountPaymentTermWidget(this);
  133. var elemento = this.$el.find('.oe_form_nosheet');
  134. elemento = elemento.find('.calculate_term_box');
  135. local.widgetInstance.appendTo(elemento);
  136. local.widgetInstance.updateId(record.id);
  137. }
  138. });
  139. }
  140. }