123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514 |
- (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 +='<tr><td><span>'+line.cuotaNumber+'</span></td><td><span>'+dateMaturity+'</span></td><td><span>'+amount+'</span></td></tr>';
- })
- 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 +='<tr><td><span>'+line.cuotaNumber+'</span></td><td><span>'+dateMaturity+'</span></td><td><span>'+amount+'</span></td></tr>';
- })
- 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);
- },
- });
- }
- })();
|