openerp.eiru_payment_term_generator = function (instance, local) { local.widgetInstance = null; local.parentInstance = null; local.AccountPaymentTermWidget = instance.Widget.extend({ template : "eiru_payment_term_generator.AccountPaymentTerm", init:function(parent){ this._super(parent); this.buttons = parent.$buttons; }, updateId : function(id){ var self = this; self.id=id; }, reloadLine: function() { local.parentInstance.reload(); }, start: function () { var self = this; this.$el.click(function () { self.fecthInitial(); }); }, fecthInitial: function(){ var id= openerp.webclient._current_state.id; var self = this; self.fecthAccountPaymentTerm(id).then(function(PaymentTerm){ return PaymentTerm; }).then(function(PaymentTerm){ self.PaymentTerm = PaymentTerm; return self.fetchAccountPaymentTermLine(); }).then(function(PaymentTermLine){ self.PaymentTermLine = PaymentTermLine; self.fectchCalculatePaymentTerm(); }); return false; }, fecthAccountPaymentTerm: function(id){ var self = this; var defer = $.Deferred(); var domain=[['id','=', id]]; var fields=['id','name','invoice_amount','amount','frequency','active']; var PaymentTerm = new instance.web.Model('account.payment.term'); PaymentTerm.query(fields).filter(domain).order_by('id').all().then(function(results){ defer.resolve(results); }); return defer; }, fetchAccountPaymentTermLine: function () { var self = this; var defer = $.Deferred(); var id = _.flatten(_.map(self.PaymentTerm,function(map){ return map.id; })); var fields=['id','payment_id','value','days','days2','weeks','months','value_amount','amount_round']; var domain=[['payment_id','in', id]]; var PaymentTermLine = new instance.web.Model('account.payment.term.line'); PaymentTermLine.query(fields).filter(domain).order_by('id').all().then(function(results){ defer.resolve(results); }); return defer; }, fectchCalculatePaymentTerm: function () { var self = this; var defer = $.Deferred(); var data = []; var type = 'fixed'; var PaymentTerm = self.PaymentTerm; var months_count = 0; var weeks_count = 0; var days_count = 0; var paid = 0; var value_amount = 0; var qty = PaymentTerm[0].invoice_amount / PaymentTerm[0].amount; if (qty % 1 == 0) { qty-=1 }else{ qty = Math.trunc(qty) } for (var i = 0; i <= qty; i++) { value_amount = PaymentTerm[0].amount; if(i == qty){ type = 'balance'; value_amount = PaymentTerm[0].invoice_amount - paid; } paid += PaymentTerm[0].amount; data.push({ payment_id : PaymentTerm[0].id, value : type, value_amount : value_amount, days : days_count, days2 : 0, weeks : weeks_count, months : months_count }); if(PaymentTerm[0].frequency == 'week'){ weeks_count += 1; }else{ if(PaymentTerm[0].frequency == 'month'){ months_count += 1; }else{ days_count += 15; } } } self.joinPaymentTermLine(data).then(function(results) { return results; }).then(function(){ self.reloadLine(); }); }, joinPaymentTermLine: function(data) { var self = this; var defer = $.Deferred(); var AccountPaymentTerm = new openerp.web.Model('account.payment.term'); AccountPaymentTerm.call('join_payment_term_lines',[data], { context: new openerp.web.CompoundContext() }).then(function(results) { defer.resolve(results); }); return defer; }, }); if (instance.web && instance.web.FormView) { instance.web.FormView.include({ load_form: function (record) { this._super.apply(this, arguments); if (this.model !== 'account.payment.term') return; local.parentInstance = this; if (local.widgetInstance) { local.widgetInstance.updateId(record.id); } local.widgetInstance = new local.AccountPaymentTermWidget(this); var elemento = this.$el.find('.oe_form_nosheet'); elemento = elemento.find('.calculate_term_box'); local.widgetInstance.appendTo(elemento); local.widgetInstance.updateId(record.id); } }); } }