Explorar o código

[FIX] Corrección de cálculos para multi divisa Widget tenes para cobrar hoy

adrielso %!s(int64=7) %!d(string=hai) anos
pai
achega
6c9e9dfab0
Modificáronse 1 ficheiros con 81 adicións e 61 borrados
  1. 81 61
      static/src/js/widgets/expired_account_counters_now.js

+ 81 - 61
static/src/js/widgets/expired_account_counters_now.js

@@ -5,12 +5,12 @@ function expired_account_counters_now (widget) {
     var Qweb = openerp.web.qweb;
 
     widget.ExpiredAccountCountersNowWidget = widget.Base.extend({
-        template: 'ExpiredAccountCountersNow',
-        resPartner : [],
+        template : 'ExpiredAccountCountersNow',
         moveLine : [],
         resCompany : [],
-        resCompany :[],
-        modelId:[],
+        resCompany : [],
+        modelId : [],
+        accountInvoice : [],
 
         events: {
             'click a': 'showCustomers',
@@ -36,17 +36,18 @@ function expired_account_counters_now (widget) {
             });
             self.$el.find('.widget-content.widget-loading').css('display','flex');
 
-            self.fetchPartner().then(function(resPartner){
-                return resPartner;
-            }).then(function(resPartner){
-                self.resPartner = resPartner;
-                return self.fetchMoveLine(resPartner);
+            self.fetchMoveLine().then(function(moveLine){
+                return moveLine;
             }).then(function(moveLine){
                 self.moveLine= moveLine;
+                // console.log(moveLine);
+                return self.fetchInvoice(moveLine);
+            }).then(function(accountInvoice){
+                self.accountInvoice = accountInvoice
                 return self.fetchResCompany();
             }).then(function(resCompany){
                 self.resCompany=resCompany;
-                return self.fetchResCurrecy(resCompany);
+                return self.fetchResCurrecy();
             }).then(function(resCurrecy){
                 self.resCurrecy= resCurrecy;
                 return self.fetchGetModelId();
@@ -65,37 +66,38 @@ function expired_account_counters_now (widget) {
             this.alive(getObtjectReference('account', 'invoice_form')).then(function(results){
                 defer.resolve(results);
             });
-            return defer;
-        },
-        // Partner
-        fetchPartner: function () {
-            var self = this;
-            var defer = $.Deferred();
-            var fields =['id', 'name', 'unreconciled_aml_ids', 'credit'];
-            var domain =[['active', '=', true], ['credit', '>', 0]];
-            var resPartner = new model.web.Model('res.partner');
-
-            resPartner.query(fields).filter(domain).all().then(function (results) {
-                defer.resolve(results);
-            });
 
             return defer;
         },
         // Move line
-        fetchMoveLine: function (partner) {
+        fetchMoveLine: function () {
             var self = this;
             var hoy =moment().format('YYYY-MM-DD');
             var defer = $.Deferred();
-            var move_id = _.flatten(_.map(partner, function (map) {
-                return map.unreconciled_aml_ids
-            }));
-            var field = ['id', 'partner_id', 'amount_residual', 'credit', 'debit', 'date_maturity', 'invoice','ref'];
-            var domain = [['credit', '<=', 0], ['id', 'in', move_id], ['date_maturity', '=', hoy]];
+            var field = ['id', 'partner_id', 'amount_residual', 'credit', 'debit', 'date_maturity', 'invoice','ref', 'invoice', 'amount_residual_currency', 'currency_id'];
+            var domain = [['credit', '<=', 0], ['date_maturity', '=', hoy]];
             var moveLine = new model.web.Model('account.move.line');
 
             moveLine.query(field).filter(domain).all().then(function (results) {
                 defer.resolve(results);
             });
+
+            return defer;
+        },
+        // invoice
+        fetchInvoice: function(moveline){
+            var self = this ;
+            var defer = $.Deferred()
+            var ref = _.map(moveline, function(map) {
+                return map.invoice[0];
+            });
+            var fields = ['id', 'currency_id', 'number', 'currency_id'];
+            var domain = [['id', 'in', ref]];
+            var accountInvoice = new model.web.Model('account.invoice');
+            accountInvoice.query(fields).filter(domain).all().then(function(results) {
+                defer.resolve(results);
+            });
+
             return defer;
         },
         //Comapnia
@@ -109,53 +111,75 @@ function expired_account_counters_now (widget) {
             resComapy.query(fields).filter(domain).all().then(function (results) {
                 defer.resolve(results);
             });
+
             return defer ;
         } ,
         // Res currecy
-        fetchResCurrecy : function(company){
+        fetchResCurrecy : function(){
             var self = this;
             var defer = $.Deferred();
-
-            var id_curency = _.flatten(_.map(company,function(map){
-                return map.currency_id[0];
-            }));
-
-            var fields =['id','name', 'symbol'];
-            var domain =[['id','in',id_curency]];
+            var fields =['id','name', 'symbol', 'rate_silent', 'base', 'decimal_separator', 'decimal_places', 'thousands_separator', 'symbol_position'];
+            var domain =[['active','=', true]];
             var resCurrecy = new model.web.Model('res.currency');
 
             resCurrecy.query(fields).filter(domain).all().then(function(results){
                 defer.resolve(results);
             });
+
             return defer;
         },
         // Reduce Move line
         fetchReduceMoveLine: function () {
             var self = this;
+            var newmoveLine = [];
+            var inteMove;
             var residual =0;
-            var moneda =self.resCurrecy.shift();
-            var company = _.map(self.resCompany, function(map){
-                return map.currency_id[1];
-            });
+            var currencyInvoice;
+            var company = self.resCompany.shift();
+            var currencyBase = self.getCurrency(company.currency_id[0]).shift();
 
-            if (self.moveLine.length > 0){
-                residual = _.reduce(_.map(self.moveLine, function(map){
-                    return map.amount_residual;
-                }),function(memo, num){
-                    return memo + num;
+            for (var i = 0; i < self.moveLine.length; i++) {
+                inteMove = self.moveLine[i];
+
+                currencyInvoice = self.getInvoiceCurrency(inteMove.invoice[0]).shift();
+
+                if(!currencyInvoice){
+                    currencyInvoice = {};
+                    currencyInvoice.rate=currencyBase.rate_silent;
+                }
+
+                newmoveLine.push({
+                    amount_residual : inteMove.amount_residual,
+                    amount_residual_currency :(inteMove.amount_residual_currency * (currencyBase.rate_silent / currencyInvoice.rate_silent))
                 });
             }
 
-            if (moneda.id !=166){
-                residual= accounting.formatNumber(residual,2, ".", ",");
-            }else{
-                residual= accounting.formatNumber(residual,",", ".");
+            if (newmoveLine.length > 0){
+                residual = _.reduce(_.map(newmoveLine, function (map) {
+                    return map.amount_residual_currency;
+                }), function (memo, num) {
+                    return memo + num;
+                });
             }
 
             self.$el.find('.widget-content.widget-loading').css('display','none');
-            self.$el.find('.widget-content').find('a').text(residual).append(' <small>'+moneda.symbol+'</small>');
-            // self.$el.find('.widget-footer').find('span').text("Monto en " + company);
-            self.$el.find('#morosidad').unblock()
+            self.$el.find('.widget-content').find('a').text(accounting.formatMoney(residual, currencyBase.symbol, currencyBase.decimal_places, currencyBase.thousands_separator, currencyBase.decimal_separator));
+            self.$el.find('#morosidad').unblock();
+        },
+        // Obtener moneda
+        getCurrency: function (id) {
+            var self = this;
+            return _.filter(self.resCurrecy,function (item) {
+                return item.id === id;
+            });
+        },
+        // Moneda de la factura
+        getInvoiceCurrency: function(id){
+            var self = this;
+            var  currency_invoice = _.filter(self.accountInvoice, function(filter) {
+                return filter.id === id;
+            }).shift();
+            return self.getCurrency(currency_invoice.currency_id[0]);
         },
         showCustomers: function (e) {
             var self = this;
@@ -195,7 +219,7 @@ function expired_account_counters_now (widget) {
             });
 
             $('.openerp_webclient_container').after(modal);
-            $('.expired-account-modal').modal()
+            $('.expired-account-modal').modal();
             $('.expired-account-modal').on('hidden.bs.modal', function (e) {
                 self.removeModal(e);
             })
@@ -210,19 +234,15 @@ function expired_account_counters_now (widget) {
         },
         // Remover <Modal></Modal>
         removeModal: function (e) {
-            $('.expired-account-modal').remove()
-            $('.modal-backdrop').remove()
+            $('.expired-account-modal').remove();
+            $('.modal-backdrop').remove();
         },
         // Llamar form
         renderForm: function(id){
             var self= this;
-
-            id = parseInt(id)
-
-            // if (!id) return
+            id = parseInt(id);
 
             this.do_action({
-                // name : "factura",
                 type : "ir.actions.act_window",
                 res_model : "account.invoice",
                 views : [[self.modelId[1], 'form']],