(function() { openerp.widgetInstanceEiruUtilityToolSale = null; openerp.parentInstanceEiruUtilityToolSale = null; var Qweb = openerp.web.qweb; var instance = openerp; var instanceWeb = openerp.web; openerp.EiruUtilityToolSale = instance.Widget.extend({ template: 'EiruUtilityTool.Sale', id: undefined, order: [], calculatorTerm: [], termType: [], accountSaleTerm: [], /************ | INIT | ************/ init: function(parent) { this._super(parent); this.buttons = parent.$buttons; }, /************ | START | ************/ start: function() { var self = this; this.$el.click(function() { self.fectchInitial(); }); self.buttons.click(function(e) { /* E (Editar) */ if (e.target.accessKey === 'E') self.$el.css('display','none'); /* S (Guarrdar) */ if (e.target.accessKey === 'S') self.$el.css('display','flex'); /* D (Cancelar) */ if (e.target.accessKey === 'D') self.$el.css('display','flex'); /* CREAR */ if (e.target.accessKey === 'C') self.$el.css('display','none'); }); }, /*=============== | ID ORDER | ===============*/ updateId: function(id) { var self = this; self.id = id; self.$el.css('display','flex'); if (!id) self.$el.css('display','none'); }, /*===================== | Remover Modal | =====================*/ removeModal: function() { $('.expired-account-modal').remove(); $('.modal-backdrop').remove(); }, /*=============================== | Recargar la Pagina | ===============================*/ reloadPage: function() { openerp.parentInstanceEiruUtilityToolSale.reload(); }, /****************************** || Metodo Inicial || ******************************/ fectchInitial: function() { var self = this; self.fetchSaleOrder(self.id).then(function(order) { return order; }).then(function(order) { self.order = order; return self.fetchTypeTerm(); }).then(function(termType) { self.termType = termType; return self.fetchTermSale(self.id); }).then(function(accountSaleTerm) { self.accountSaleTerm = accountSaleTerm; return self.showModal(); }); }, /*=============================== | GET Order | ===============================*/ fetchSaleOrder: function(id) { var order = new openerp.web.Model('sale.order'); return order.call('getSaleOrder',[id],{ context: new openerp.web.CompoundContext() }); }, /*=============================== | GET Sale term | ===============================*/ fetchTermSale: function(id) { var order = new openerp.web.Model('sale.order'); return order.call('getSaleTerm',[id],{ context: new openerp.web.CompoundContext() }); }, /*========================================= | GET Tipo de condicion de pagos | =========================================*/ fetchTypeTerm: function() { var typeTerm = new openerp.web.Model('account.payment.term.type'); return typeTerm.query(['id','name']).all() }, /*=================== | Modal | ===================*/ showModal: function() { var self = this; var defer = $.Deferred(); var state = true; /*Curency Order*/ var saleOrder = self.order[0]; var accountSaleTerm = self.accountSaleTerm[0]; var currencyOrder = saleOrder.currency; // /*term type */ var numberFormat = { 'decimalSeparator': ',', 'decimalPlaces': 0, 'thousandsSeparator': '.' } var interstFormat = { 'decimalSeparator': ',', 'decimalPlaces': 2, 'thousandsSeparator': '.' } var typeTerm = self.termType; if (!typeTerm.length){ instanceWeb.notification.do_warn("Atencion", "No existe tipo de condiciones de pagos."); return ; } typeTerm.unshift({"id": '', 'name': ''}) /* Modal */ var modal = Qweb.render('EiruUtilityTool.SaleModal',{'termTypes':typeTerm}); $('.openerp_webclient_container').after(modal); $('.expired-account-modal').modal(); var amountOrder = $('.expired-account-modal').find('.amount-order'); //Valor de la orden. var symbolCurrency = $('.expired-account-modal').find('.symbol-currency'); //Symbolo de moneda. var dateSale = $('.expired-account-modal').find('.date-sale'); //Fecha de venta. var initialPaymentsAmount = $('.expired-account-modal').find('.initial-payments-amount'); //Valor de Entrega. var amountResidual = $('.expired-account-modal').find('.amount-residual'); //Valor Residual (Venta - Entrega). var interestQty = $('.expired-account-modal').find('.interest-qty'); // % de interest. var amountInterest = $('.expired-account-modal').find('.amount-interest'); //Total Interest. var btInterestCalc = $('.expired-account-modal').find('.bt-interest-calc'); //Botton CALCULAR Interest. var amountFinal = $('.expired-account-modal').find('.amount-final'); //Valor final (residual + interest). var dateQuotaInit = $('.expired-account-modal').find('.date-quota-init'); //Fecha de Primera Cuota. var termSelect = $('.expired-account-modal').find('.term-select'); //Termino de Pago. var amountQuota = $('.expired-account-modal').find('.amount-quota'); //Valor de Cuota. var qtyQuota = $('.expired-account-modal').find('.qty-quota'); //Cantidad de Cuota. var btQuotaCalc = $('.expired-account-modal').find('.bt-quota-calc'); //Calcular Cuotas. var tableRow = $('.expired-account-modal').find('.table-tbody'); //Table. var buttonAccept = $('.expired-account-modal').find('.button-accept'); // /*###### Data INIT ###############################################*/ amountOrder.val(instanceWeb.formatCurrency(saleOrder.amountTotal, currencyOrder)); amountResidual.val(instanceWeb.formatCurrency(saleOrder.amountTotal, currencyOrder)); amountFinal.val(instanceWeb.formatCurrency(saleOrder.amountTotal, currencyOrder)); symbolCurrency.text(currencyOrder.symbol); dateSale.val(moment(saleOrder.dateOrder).format("YYYY-MM-DD")); dateQuotaInit.val(moment(saleOrder.dateOrder).format("YYYY-MM-DD")); /*######## SALE TERM ##########################################*/ if (!!accountSaleTerm) { amountOrder.val(instanceWeb.formatCurrency(accountSaleTerm.saleAmount, currencyOrder)); initialPaymentsAmount.val(instanceWeb.formatCurrency(accountSaleTerm.salePaymentsInit, currencyOrder)); amountResidual.val(instanceWeb.formatCurrency(accountSaleTerm.saleResidual, currencyOrder)); interestQty.val(instanceWeb.formatCurrency(accountSaleTerm.interestQty, interstFormat)); amountInterest.val(instanceWeb.formatCurrency(accountSaleTerm.interestAmount, currencyOrder)); amountFinal.val(instanceWeb.formatCurrency(accountSaleTerm.amountTotal, currencyOrder)); dateQuotaInit.val(!!accountSaleTerm.dateInit ?accountSaleTerm.dateInit :moment(saleOrder.dateOrder).format("YYYY-MM-DD")) termSelect.val(accountSaleTerm.termTypeId) amountQuota.val(instanceWeb.formatCurrency(accountSaleTerm.quotaAmount, currencyOrder)); qtyQuota.val(instanceWeb.formatCurrency(accountSaleTerm.quotaQty, numberFormat)); tableRow.find('tr').remove(); var htmlLine = ''; self.calculatorTerm = accountSaleTerm.lines _.each(self.calculatorTerm, function(line) { var dateMaturity = moment(line.date).format('DD/MM/YYYY'); var amount = instanceWeb.formatCurrency(line.amount, currencyOrder) +" "+currencyOrder.symbol; htmlLine +=''+line.cuotaNumber+''+dateMaturity+''+amount+''; }) tableRow.append(htmlLine); } /*###### FOCUSIN initialPaymentsAmount ##########################*/ initialPaymentsAmount.focusin(function(e){ var amount = instanceWeb.unFormatCurrency(initialPaymentsAmount.val()); if (amount === 0) initialPaymentsAmount.val(''); }); initialPaymentsAmount.keyup(function(e) { var amountPayments = instanceWeb.unFormatCurrency(initialPaymentsAmount.val()); var saleAmount = instanceWeb.unFormatCurrency(amountOrder.val()); if (e.key === currencyOrder.decimalSeparator && currencyOrder.decimalPlaces > 0) return false ; initialPaymentsAmount.val(instanceWeb.formatCurrency(amountPayments, currencyOrder)); amountResidual.val(instanceWeb.formatCurrency((saleAmount - amountPayments), currencyOrder)) amountFinal.val(instanceWeb.formatCurrency((saleAmount - amountPayments), currencyOrder)) interestQty.val(0) amountInterest.val(0) }); initialPaymentsAmount.focusout(function(e) { var saleAmount = instanceWeb.unFormatCurrency(amountOrder.val()); var amount = instanceWeb.unFormatCurrency(initialPaymentsAmount.val()); if (amount > saleAmount) { instanceWeb.notification.do_warn("Atencion", "El valor de la entrega supera el valor de la venta."); initialPaymentsAmount.focus(); return false; } $('.expired-account-modal').find('.widget-content.widget-loading-term-configurator').css('display','flex'); self.saleTermPaymentsInitial(amount).then(function(paymentsUpdate) { return paymentsUpdate; }).then(function(paymentsUpdate) { $('.expired-account-modal').find('.widget-content.widget-loading-term-configurator').css('display','none'); }); amountResidual.val(instanceWeb.formatCurrency((saleAmount - amount), currencyOrder)) amountFinal.val(instanceWeb.formatCurrency((saleAmount - amount), currencyOrder)) interestQty.val(0) amountInterest.val(0) amountQuota.val(0) qtyQuota.val(0) self.calculatorTerm = []; tableRow.find('tr').remove(); }); /*###### interestQty focusin #####################################*/ interestQty.focusin(function(e) { var values = instanceWeb.unFormatCurrency(interestQty.val()); if (values === 0) interestQty.val(''); }); interestQty.keyup(function(e) { var qtyInterest = instanceWeb.unFormatCurrency(interestQty.val()); if (e.key === interstFormat.decimalSeparator && interstFormat.decimalPlaces > 0) return false ; interestQty.val(instanceWeb.formatCurrency(qtyInterest, interstFormat)); }); interestQty.focusout(function(e) { amountQuota.val(0) qtyQuota.val(0) calculatorTerm = [] tableRow.find('tr').remove(); }) /*###### CLICK btInterestCalc ###################################*/ btInterestCalc.click(function(e) { var interest = instanceWeb.unFormatCurrency(interestQty.val()); var residual = instanceWeb.unFormatCurrency(amountResidual.val()); var paymentsAmount = instanceWeb.unFormatCurrency(initialPaymentsAmount.val()); $('.expired-account-modal').find('.widget-content.widget-loading-term-configurator').css('display','flex'); self.calculateInterest(interest, paymentsAmount, instanceWeb.formatCurrency(paymentsAmount, interstFormat)).then(function(interestcalc) { return interestcalc; }).then(function(interestcalc) { amountInterest.val(0) amountFinal.val(instanceWeb.formatCurrency(residual, currencyOrder)) amountQuota.val(0) qtyQuota.val(0) calculatorTerm = [] tableRow.find('tr').remove(); if (interestcalc.state) { amountInterest.val(instanceWeb.formatCurrency(interestcalc.amountInterest, currencyOrder)) amountFinal.val(instanceWeb.formatCurrency(residual + interestcalc.amountInterest, currencyOrder)) } $('.expired-account-modal').find('.widget-content.widget-loading-term-configurator').css('display','none'); }); }); /*###### VALOR DE LA CUOTA ######################################*/ amountQuota.focusin(function(e) { var amount = instanceWeb.unFormatCurrency( amountQuota.val()); if (amount === 0) { amountQuota.val(''); qtyQuota.removeAttr("disabled"); } }); amountQuota.keyup(function(e) { qtyQuota.attr("disabled", true); if (e.key === currencyOrder.decimalSeparator && currencyOrder.decimalPlaces > 0) return false ; cuotaAmount = instanceWeb.unFormatCurrency(amountQuota.val()); amountQuota.val(instanceWeb.formatCurrency(cuotaAmount, currencyOrder)); }); amountQuota.focusout(function(e) { var saleAmount = instanceWeb.unFormatCurrency(amountFinal.val()); var amount = instanceWeb.unFormatCurrency(amountQuota.val()); if (amount <= 0) { amountQuota.val('0'); qtyQuota.removeAttr("disabled"); qtyQuota.focus(); } if (amount > (saleAmount)) { instanceWeb.notification.do_warn("Atencion", "El valor de la cuota no puede superar el Saldo.\nSaldo ="+saleAmount+"\nCuota = "+amount); amountQuota.focus(); return false; } }); /*###### CANTIDAD DE CUOTA #######################################*/ qtyQuota.focusin(function(e){ var qty = instanceWeb.unFormatCurrency( qtyQuota.val()); if (qty === 0){ amountQuota.removeAttr("disabled"); qtyQuota.val(''); } }); qtyQuota.keyup(function(e) { amountQuota.attr("disabled", true); if (e.key === numberFormat.decimalSeparator && numberFormat.decimalPlaces > 0) return false ; cuotaAmount = instanceWeb.unFormatCurrency(qtyQuota.val()); qtyQuota.val(instanceWeb.formatCurrency(cuotaAmount, numberFormat)); }); qtyQuota.focusout(function(e) { var qty = instanceWeb.unFormatCurrency(qtyQuota.val()); if (qty <= 0) { qtyQuota.val('0'); amountQuota.removeAttr("disabled"); amountQuota.focus(); } }); /*###### GENERAR CUOTAS ##########################################*/ btQuotaCalc.click(function(e) { tableRow.find('tr').remove(); var htmlLine = ''; var finalAmount = instanceWeb.unFormatCurrency(amountFinal.val()); var quotaAmount = instanceWeb.unFormatCurrency(amountQuota.val()); var quotaQty = instanceWeb.unFormatCurrency(qtyQuota.val()); var amountPayments = instanceWeb.unFormatCurrency(initialPaymentsAmount.val()); if (!dateQuotaInit.val()) { instanceWeb.notification.do_warn("Atencion", "Debes ingresa la fecha de la primera cuota."); dateQuotaInit.focus(); return; } if(!termSelect.val()) { instanceWeb.notification.do_warn("Atencion", "Debes de Seleccionar el tipo de plazo de pago."); termSelect.focus(); return; } if (quotaAmount > finalAmount) { instanceWeb.notification.do_warn("Atencion", "EL valor de la cuota no puede superar el valor del saldo."); quotaAmount.focus(); return; } if (quotaAmount <=0 && quotaQty<= 0){ instanceWeb.notification.do_warn("Atencion", "Debes ingresar un monto o la cantidad de las cuota."); return; } var termSale = { 'orderId': self.id, 'typeTerm': parseInt(termSelect.val().trim()), 'amountCuota': quotaAmount, 'qtyCuota': quotaQty, 'dateInit': dateQuotaInit.val(), 'amountResidual': finalAmount, 'amountPayments':amountPayments, } /* GENERAR LA LISTA DE CUOTA */ $('.expired-account-modal').find('.widget-content.widget-loading-term-configurator').css('display','flex'); self.calculatePaymentTerm(termSale).then(function(calculatorTerm) { return calculatorTerm; }).then(function(calculatorTerm) { self.calculatorTerm = calculatorTerm; $('.expired-account-modal').find('.widget-content.widget-loading-term-configurator').css('display','none'); if (!!calculatorTerm.length) { _.each(calculatorTerm, function(line) { var dateMaturity = moment(line.date).format('DD/MM/YYYY'); var amount = instanceWeb.formatCurrency(line.amount, currencyOrder) +" "+currencyOrder.symbol; htmlLine +=''+line.cuotaNumber+''+dateMaturity+''+amount+''; }) tableRow.append(htmlLine); } }); }); /*###### ACEPTAR --> GUARDAR #####################################*/ buttonAccept.click(function(e) { if (!self.calculatorTerm.length) { instanceWeb.notification.do_warn("Atencion", "Debes de calcular las cuota antes de guardar."); return ; } $('.expired-account-modal').find('.widget-content.widget-loading-term-configurator').css('display','flex'); self.accountPaymentTermConfigurator(self.calculatorTerm, self.id).then(function(termConfigurator) { return termConfigurator; }).then(function(termConfigurator) { $('.expired-account-modal').find('.widget-content.widget-loading-term-configurator').css('display','none'); self.removeModal(e); state = termConfigurator.state; self.reloadPage(); }); defer.resolve(state); }); /*###### CERRAR ###########################################*/ $('.expired-account-modal').on('hidden.bs.modal', function (e) { defer.resolve(false); self.removeModal(e); self.reloadPage(); }); return defer; }, /*=============================== | Calcular interest | ===============================*/ calculateInterest: function(qty, amountPaymenst, paymentsFormat) { var self = this; var order = new instance.web.Model('sale.order'); return order.call('calculateInterestSale',[self.id, qty, amountPaymenst, paymentsFormat], { context: new instance.web.CompoundContext() }); }, /*=========================== | Update Patments Line | ===========================*/ saleTermPaymentsInitial: function(amount) { var self = this; var order = new instance.web.Model('sale.order'); return order.call('saleTermUpdatePaymentsInitial',[self.id, amount], { context: new instance.web.CompoundContext() }); }, /*=========================== | CALCULATOR TERM | ===========================*/ calculatePaymentTerm: function(values) { var order = new instance.web.Model('sale.order'); return order.call('calculatePaymentTermSaleOrder',[values], { context: new instance.web.CompoundContext() }); }, /*=========================================== | Create / writer - Term Paymen | ===========================================*/ accountPaymentTermConfigurator: function(values, id){ var term = new instance.web.Model('sale.order'); return term.call('accountPaymentTermConfiguratorSale',[values, id], { context: new instance.web.CompoundContext() }); } }); /* INSTANCE*/ if (instance.web && instance.web.FormView) { instance.web.FormView.include({ load_record: function(record) { this._super.apply(this, arguments); if (this.model !== 'sale.order') return; openerp.parentInstanceEiruUtilityToolSale = this; if (openerp.widgetInstanceEiruUtilityToolSale) { openerp.widgetInstanceEiruUtilityToolSale.updateId(record.id); if (this.$el.find('.bottom-eiru-utility-tool-sale').length !== 0){ return } } if (this.$el.find('.bottom-eiru-utility-tool-sale').length !== 0 ) return; openerp.widgetInstanceEiruUtilityToolSale = new openerp.EiruUtilityToolSale(this); var elemento = this.$el.find('.oe_form').find('.eiru-sale-utility-tool-sale'); openerp.widgetInstanceEiruUtilityToolSale.appendTo(elemento); openerp.widgetInstanceEiruUtilityToolSale.updateId(record.id); }, }); } })();