ソースを参照

[ADD] New widget

Adrielso 7 年 前
コミット
c2e5ea8351

+ 49 - 24
static/src/js/dashboard.js

@@ -20,31 +20,56 @@ function dashboard_widget (instance, widget) {
             this.renderWidgets();
         },
         renderWidgets: function () {
-            for (var i = 1; i <= 4; i++) {
-                var widget = new widgets.CustomerCounterWidget(this);
-                widget.renderElement();
-                // widget.start();
+            // Cliente con Saldo Vencido
+            var wExpiredAccount = new widgets.ExpiredAccountCountersWidget(this);
+            wExpiredAccount.renderElement();
+            wExpiredAccount.start();
+            this.grid.addWidget(wExpiredAccount.$el, 0, 0, wExpiredAccount.size.width,  wExpiredAccount.size.height, true);
+            // Cliente a Cobrar oi
+            var wExpiredAccountNow = new widgets.ExpiredAccountCountersNowWidget(this);
+            wExpiredAccountNow.renderElement();
+            wExpiredAccountNow.start();
+            this.grid.addWidget(wExpiredAccountNow.$el, 0, 0, wExpiredAccountNow.size.width,  wExpiredAccountNow.size.height, true);
+            // Pagados oi
+            var wVocuherToday = new widgets.VoucherTodayCountersWidget(this);
+            wVocuherToday.renderElement();
+            wVocuherToday.start();
+            this.grid.addWidget(wVocuherToday.$el, 0, 0, wVocuherToday.size.width,  wVocuherToday.size.height, true);
 
-                this.grid.addWidget(widget.$el, 0, 0, widget.getWidth(),  widget.getHeight(), true);
-            }
-
-            var w = new widgets.SalesInTheWeekWidget(this);
-            w.renderElement();
-            w.start();
-
-            this.grid.addWidget(w.$el, 0, 0, w.size.width,  w.size.height, true);
-
-            var w2 = new widgets.TopSalesProductWidget(this);
-            w2.renderElement();
-            w2.start();
-
-            this.grid.addWidget(w2.$el, 0, 0, w2.size.width,  w2.size.height, true);
-
-            var w3 = new widgets.SalesInWarehouseByBrandWidget(this);
-            w3.renderElement();
-            w3.start();
-
-            this.grid.addWidget(w3.$el, 0, 0, w3.size.width,  w3.size.height, true);
+            var wInvoiceToday = new widgets.InvoiceTodayCountersWidget(this);
+            wInvoiceToday.renderElement();
+            wInvoiceToday.start();
+            this.grid.addWidget(wInvoiceToday.$el, 0, 0, wInvoiceToday.size.width,  wInvoiceToday.size.height, true);
+            //Ranking de Ventas de Producto por Mes
+            var wRankingProduct = new widgets.RankingSalesProductWidget(this);
+            wRankingProduct.renderElement();
+            wRankingProduct.start();
+            this.grid.addWidget(wRankingProduct.$el, 0, 0, wRankingProduct.size.width,  wRankingProduct.size.height, true);
+            // for (var i = 1; i <= 4; i++) {
+            //     var widget = new widgets.CustomerCounterWidget(this);
+            //     widget.renderElement();
+            //     // widget.start();
+            //
+            //     this.grid.addWidget(widget.$el, 0, 0, widget.getWidth(),  widget.getHeight(), true);
+            // }
+            //
+            // var w = new widgets.SalesInTheWeekWidget(this);
+            // w.renderElement();
+            // w.start();
+            //
+            // this.grid.addWidget(w.$el, 0, 0, w.size.width,  w.size.height, true);
+            //
+            // var w2 = new widgets.TopSalesProductWidget(this);
+            // w2.renderElement();
+            // w2.start();
+            //
+            // this.grid.addWidget(w2.$el, 0, 0, w2.size.width,  w2.size.height, true);
+            //
+            // var w3 = new widgets.SalesInWarehouseByBrandWidget(this);
+            // w3.renderElement();
+            // w3.start();
+            //
+            // this.grid.addWidget(w3.$el, 0, 0, w3.size.width,  w3.size.height, true);
         }
     });
 }

+ 9 - 4
static/src/js/main.js

@@ -12,10 +12,15 @@ openerp.eiru_dashboard = function (instance) {
     configuration_widget(instance, dashboard);
 
     // Widgets
-    customer_counter(dashboard);
-    sales_in_the_week(dashboard);
-    top_sales_product(dashboard);
-    sales_in_warehouse_by_brand(dashboard);
+    expired_account_counters(dashboard);
+    expired_account_counters_now(dashboard);
+    voucher_today_counters(dashboard);
+    invoice_today_counters(dashboard);
+    ranking_sales_product(dashboard);
+    // customer_counter(dashboard);
+    // sales_in_the_week(dashboard);
+    // top_sales_product(dashboard);
+    // sales_in_warehouse_by_brand(dashboard);
 
     // Action
     instance.web.client_actions.add('eiru_dashboard.action_dashboard', 'instance.eiru_dashboard.DashboardWidget');

+ 94 - 0
static/src/js/widgets/expired_account_counters.js

@@ -0,0 +1,94 @@
+function expired_account_counters (widget) {
+    "use strict";
+    var model= openerp;
+    widget.ExpiredAccountCountersWidget = widget.Base.extend({
+        template: 'ExpiredAccountCounters',
+        // data : [],
+        resPartner : [],
+        moveLine : [],
+        resCompany : [],
+
+        init: function (parent) {
+            this._super(parent, {
+                width : 3,
+                height: 2
+            });
+        },
+        start: function () {
+            var self = this;
+            self.fecthInitial();
+        },
+        fecthInitial:function(){
+            var self = this;
+            self.$el.find('.grid-stack-item-content dashboard').block({ message: null, overlayCSS: { backgroundColor: '#FAFAFA' }});
+            self.$el.find('.widget-content.widget-loading').css('display','flex');
+
+            self.fecthPartner().then(function(resPartner){
+                return resPartner;
+            }).then(function(resPartner){
+                self.resPartner = resPartner;
+                return self.fecthMoveLine(resPartner);
+            }).then(function(moveLine){
+                self.moveLine= moveLine;
+                return self.fecthResComapny();
+            }).then(function(resCompany){
+                self.resCompany=resCompany;
+                return self.fecthReduceMoveLine();
+            });
+            return false;
+        },
+        // Partner
+        fecthPartner(){
+            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
+        fecthMoveLine(partner){
+            var self = this;
+            var fecha = new Date();
+            var hoy = (fecha.getFullYear()+"-"+(fecha.getMonth()+1)+"-"+fecha.getDate());
+            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'];
+            var domain=[['credit', '<=', 0],['id', '=', move_id],['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;
+        },
+        //Comapnia
+        fecthResComapny: function(){
+            var self = this;
+            var defer = $.Deferred();
+            var fields =['id','name', 'currency_id','logo'];
+            var domain =[['id', '=', 1]];
+            var resComapy = new model.web.Model('res.company');
+            resComapy.query(fields).filter(domain).all().then(function(results){
+                defer.resolve(results);
+            });
+            return defer ;
+        } ,
+        // Reduce Move line
+        fecthReduceMoveLine(){
+            var self = this;
+            var residual =0;
+            var company = _.map(self.resCompany, function(map){return map.currency_id[1]});
+            if (self.moveLine.length > 0){
+                residual = _.reduce(_.map(self.moveLine, function(map){return map.amount_residual}),function(memo, num){return memo + num});
+            }
+
+            self.$el.find('.grid-stack-item-content dashboard').unblock()
+            self.$el.find('.widget-content.widget-loading').css('display','none');
+            self.$el.find('.widget-content').find('a').text(accounting.formatNumber(residual,2, ".", ","));
+            self.$el.find('.widget-footer').find('span').text("Monto en "+company);
+        },
+    });
+}

+ 93 - 0
static/src/js/widgets/expired_account_counters_now.js

@@ -0,0 +1,93 @@
+function expired_account_counters_now (widget) {
+    "use strict";
+    var model= openerp;
+    widget.ExpiredAccountCountersNowWidget = widget.Base.extend({
+        template: 'ExpiredAccountCountersNow',
+        // data : [],
+        resPartner : [],
+        moveLine : [],
+        resCompany : [],
+
+        init: function (parent) {
+            this._super(parent, {
+                width : 3,
+                height: 2
+            });
+        },
+        start: function () {
+            var self = this;
+            self.fecthInitial();
+        },
+        fecthInitial:function(){
+            var self = this;
+            self.$el.find('#morosidad').block({ message: null, overlayCSS: { backgroundColor: '#FAFAFA' }});
+            self.$el.find('.widget-content.widget-loading').css('display','flex');
+
+            self.fecthPartner().then(function(resPartner){
+                return resPartner;
+            }).then(function(resPartner){
+                self.resPartner = resPartner;
+                return self.fecthMoveLine(resPartner);
+            }).then(function(moveLine){
+                self.moveLine= moveLine;
+                return self.fecthResComapny();
+            }).then(function(resCompany){
+                self.resCompany=resCompany;
+                return self.fecthReduceMoveLine();
+            });
+            return false;
+        },
+        // Partner
+        fecthPartner(){
+            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
+        fecthMoveLine(partner){
+            var self = this;
+            var fecha = new Date();
+            var hoy = (fecha.getFullYear()+"-"+(fecha.getMonth()+1)+"-"+fecha.getDate());
+            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'];
+            var domain=[['credit', '<=', 0],['id', '=', move_id],['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;
+        },
+        //Comapnia
+        fecthResComapny: function(){
+            var self = this;
+            var defer = $.Deferred();
+            var fields =['id','name', 'currency_id','logo'];
+            var domain =[['id', '=', 1]];
+            var resComapy = new model.web.Model('res.company');
+            resComapy.query(fields).filter(domain).all().then(function(results){
+                defer.resolve(results);
+            });
+            return defer ;
+        } ,
+        // Reduce Move line
+        fecthReduceMoveLine(){
+            var self = this;
+            var residual =0;
+            var company = _.map(self.resCompany, function(map){return map.currency_id[1]});
+            if (self.moveLine.length > 0){
+                residual = _.reduce(_.map(self.moveLine, function(map){return map.amount_residual}),function(memo, num){return memo + num});
+            }
+            self.$el.find('#morosidad').unblock()
+            self.$el.find('.widget-content.widget-loading').css('display','none');
+            self.$el.find('.widget-content').find('a').text(accounting.formatNumber(residual,2, ".", ","));
+            self.$el.find('.widget-footer').find('span').text("Monto en "+company);
+        },
+    });
+}

+ 55 - 0
static/src/js/widgets/invoice_today_counters.js

@@ -0,0 +1,55 @@
+function invoice_today_counters (widget) {
+    "use strict";
+    var model= openerp;
+    widget.InvoiceTodayCountersWidget = widget.Base.extend({
+        template: 'InvoiceTodayCounters',
+
+        init: function (parent) {
+            this._super(parent, {
+                width : 3,
+                height: 2
+            });
+        },
+        start: function () {
+            var self = this;
+            self.fecthInitial();
+        },
+        fecthInitial:function(){
+            var self = this;
+            self.$el.find('#morosidad').block({ message: null, overlayCSS: { backgroundColor: '#FAFAFA' }});
+            self.$el.find('.widget-content.widget-loading').css('display','flex');
+            self.fecthAccountInvoice().then(function(accountInvoice){
+                return accountInvoice;
+            }).then(function(accountInvoice){
+                return self.fecthReduceInvoice(accountInvoice);
+            });
+            return false;
+        },
+        // Invoice
+        fecthAccountInvoice: function(){
+            var self = this;
+            var defer = $.Deferred();
+            var fecha = new Date();
+            var hoy = fecha.getFullYear()+"-"+(fecha.getMonth()+1)+"-"+fecha.getDate();
+            var fields = ['id', 'residual'];
+            var domain = [['type', '=', 'out_invoice'],['state', '=', ['open','paid']],['date_invoice', '=', hoy]];
+            var accountInvoice = new model.web.Model('account.invoice');
+            accountInvoice.query(fields).filter(domain).all().then(function(results){
+                defer.resolve(results);
+            });
+            return defer;
+        },
+        fecthReduceInvoice(accountInvoice){
+            var self = this;
+            var fecha= new Date();
+            var cat =0;
+            if (accountInvoice.length > 0){
+                cat=accountInvoice.length;
+            }
+            self.$el.find('#morosidad').unblock()
+            self.$el.find('.widget-content.widget-loading').css('display','none');
+            self.$el.find('.widget-content').find('a').text(accounting.formatNumber(cat, ".", ","));
+            self.$el.find('.widget-footer').find('span').text("Facturas Creadas en "+fecha.getDate()+"/"+(fecha.getMonth()+1)+"/"+fecha.getFullYear());
+        },
+    });
+}

+ 164 - 0
static/src/js/widgets/ranking_sales_product.js

@@ -0,0 +1,164 @@
+function ranking_sales_product (widget) {
+    "use strict";
+
+    var model= openerp;
+    widget.RankingSalesProductWidget = widget.Base.extend({
+        template: 'RankingSalesProductTmpl',
+        data : [],
+        accountInvoice : [],
+        invoiceLine : [],
+        productProdcut : [],
+
+        init: function (parent) {
+            this._super(parent, {
+                width : 6,
+                height: 4
+            });
+        },
+        start: function () {
+            var self = this;
+            self.fecthInitial();
+        },
+        fecthInitial:function(){
+            var self = this;
+            self.$el.block({ message: null, overlayCSS: { backgroundColor: '#FAFAFA' }});
+            self.$el.find('.widget-content.widget-loading').css('display','flex');
+            self.fecthInvoice().then(function(accountInvoice){
+                return accountInvoice;
+            }).then(function(accountInvoice){
+                self.accountInvoice = accountInvoice;
+                return self.fecthInvoiceLine(accountInvoice);
+            }).then(function(invoiceLine){
+                self.invoiceLine = invoiceLine;
+                return self.fecthProductProduct(invoiceLine);
+            }).then(function(productProdcut){
+                self.productProdcut = productProdcut;
+                return self.fecthRankingProdcuto();
+            });
+            return false;
+        },
+        // Obtener factura
+        fecthInvoice :function(){
+            var self = this;
+            var fecha = new Date
+            var desde =fecha.getFullYear()+"-"+(fecha.getMonth()+1)+"-01";
+            var hasta =fecha.getFullYear()+"-"+(fecha.getMonth()+2)+"-01";
+            var defer =$.Deferred();
+            var fields =['id','invoice_line', 'date_invoice'];
+            var domain =[['type', '=', 'out_invoice'],['date_invoice', '>=', desde],['date_invoice', '<', hasta],['state', '=',['open','paid']]];
+            // date_invoice
+            var invoice = new model.web.Model('account.invoice');
+            invoice.query(fields).filter(domain).all().then(function(results){
+                defer.resolve(results);
+            });
+            return defer;
+        },
+        // Obtener linea de la factura
+        fecthInvoiceLine : function(accountInvoice){
+            var self = this;
+            var defer =$.Deferred();
+            var invoice_line =_.flatten(_.map(accountInvoice, function(item){return item.invoice_line}));
+            var fields =['id', 'product_id','quantity'];
+            var domain = [['id','=', invoice_line]];
+            var invoiceLine = new model.web.Model('account.invoice.line');
+            invoiceLine.query(fields).filter(domain).all().then(function(results){
+                defer.resolve(results);
+            });
+            return defer;
+        },
+        // Obtener Prodcutos
+        fecthProductProduct : function(invoiceLine){
+            var self = this;
+            var defer =$.Deferred();
+            var prodcut_id = _.flatten(_.map(invoiceLine,function(item){return item.product_id[0]}));
+            var fields = ['id', 'name_template', 'type'];
+            var domain =[['id', '=', prodcut_id]];
+            var prodcut= new model.web.Model('product.product');
+            prodcut.query(fields).filter(domain).all().then(function(results){
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
+        fecthRankingProdcuto : function(){
+            var self = this;
+            var itemProduct;
+            var itemLine;
+            var ranking=[];
+            var cat=0;
+            var lineUnik;
+            for (var i = 0; i < self.productProdcut.length; i++) {
+                itemProduct = self.productProdcut[i];
+                itemLine= self.getInvoiceLine(itemProduct.id);
+                if (itemProduct.type == 'product'){
+                    if (itemLine.length > 0){
+                        cat = _.reduce(_.map(itemLine,function(map){return map.quantity}),function(meno,num){return meno + num},0);
+                        lineUnik=itemLine.shift();
+                        ranking.push({  product :lineUnik.product_id[1],qty:cat });
+                    }
+                }
+            }
+            ranking.sort(function(a,b){return b.qty - a.qty});
+            self.$el.unblock()
+            self.$el.find('.widget-content.widget-loading').css('display','none');
+            var fecha = new Date();
+            var meses = new Array ("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
+            self.$el.find('.widget-title').find('span').text("Ranking de Producto mas Vendido Mes de "+meses[fecha.getMonth()]);
+
+            self.fecthChart(ranking);
+        },
+        // get line
+        getInvoiceLine(product_id){
+            var self = this;
+            return _.flatten(_.filter(self.invoiceLine,function(line){return  line.product_id[0] === product_id}));
+        },
+        // Generar Grafico
+        fecthChart: function(ranking){
+            var self = this;
+            var label=[];
+            var body=[];
+            var item;
+            var rank=10;
+
+            for (var i = 0; i < rank; i++) {
+                if (ranking[i]){
+                    item = ranking[i];
+                }else{
+                    item={};
+                    item.product="N/A";
+                    item.qty=0;
+                }
+                label.push(item.product);
+                body.push(item.qty);
+            }
+            var chart = new Chart(this.$el.find(".widget-content").find('canvas'), {
+                // type: 'doughnut',
+                type: 'horizontalBar',
+                // type: '',
+                data: {
+                    labels: label,
+                    datasets: [
+                        {
+                            backgroundColor: ['#7c7bad', '#7c7bad', '#7c7bad', '#7c7bad', '#7c7bad', '#7c7bad', '#7c7bad', '#7c7bad', '#7c7bad', '#7c7bad'],
+                            data: body,
+                        }
+                    ]
+                },
+                options: {
+                    maintainAspectRatio: false,
+                    layout: {
+                        padding: 20
+                    },
+                    scales: {
+                        xAxes: [{ stacked: true }],
+                        yAxes: [{ stacked: true }],
+                    },
+                    legend: {
+                        display: false,
+                    },
+                }
+
+            });
+        }
+    });
+}

+ 112 - 0
static/src/js/widgets/voucher_today_counters.js

@@ -0,0 +1,112 @@
+function voucher_today_counters (widget) {
+    "use strict";
+    var model= openerp;
+    widget.VoucherTodayCountersWidget = widget.Base.extend({
+        template: 'VoucherTodayCounters',
+        accountVoucher : [],
+        resCompany : [],
+        currecyRate :[],
+
+        init: function (parent) {
+            this._super(parent, {
+                width : 3,
+                height: 2
+            });
+        },
+        start: function () {
+            var self = this;
+            self.fecthInitial();
+        },
+        fecthInitial:function(){
+            var self = this;
+            self.$el.find('#morosidad').block({ message: null, overlayCSS: { backgroundColor: '#FAFAFA' }});
+            self.$el.find('.widget-content.widget-loading').css('display','flex');
+            self.fecthAccountVoucher().then(function(accountVoucher){
+                return accountVoucher;
+            }).then(function(accountVoucher){
+                self.accountVoucher = accountVoucher;
+                return self.fecthResComapny();
+            }).then(function(resCompany){
+                self.resCompany= resCompany;
+                return self.fetchCurency();
+            }).then(function(currecyRate){
+                self.currecyRate=currecyRate;
+                return self.fetchVoucherCurrency();
+            });
+            return false;
+        },
+        // Account Voucher
+        fecthAccountVoucher: function(){
+            var self = this;
+            var defer = $.Deferred();
+            var fecha = new Date();
+            var hoy = fecha.getFullYear()+"-"+(fecha.getMonth()+1)+"-"+fecha.getDate();
+            var fields = ['id', 'amount', 'currency_id','payment_rate_currency_id'];
+            var domain = [['state', '=', 'posted'], ['type', '=', 'receipt'],['date', '=', hoy]];
+            var accountVoucher = new model.web.Model('account.voucher');
+            accountVoucher.query(fields).filter(domain).all().then(function(results){
+                defer.resolve(results);
+            });
+            return defer;
+        },
+        //Comapnia
+        fecthResComapny: function(){
+            var self = this;
+            var defer = $.Deferred();
+            var fields =['id','name', 'currency_id','logo'];
+            var domain =[['id', '=', 1]];
+            var resComapy = new model.web.Model('res.company');
+            resComapy.query(fields).filter(domain).all().then(function(results){
+                defer.resolve(results);
+            });
+            return defer ;
+        } ,
+        // Buscar Cambio de Monedas USD,PYG,ARG,BRL
+        fetchCurency: function () {
+            var defer = $.Deferred();
+            var currency_Rate = new model.web.Model('res.currency.rate');
+            var fields = ['id', 'name', 'currency_id', 'rate', 'create_date'];
+            var domain = [['currency_id', '=', [166 , 20, 7, 3]]];
+            currency_Rate.query(fields).filter(domain).all().then(function (results) {
+              defer.resolve(results);
+            });
+            return defer;
+          },
+        //   voucherCurrencyRate
+        fetchVoucherCurrency : function(){
+            var self = this;
+            var newVoucher=[];
+            var itemvoucher;
+            var itemCurrencyRate;
+            for (var i = 0; i < self.accountVoucher.length; i++) {
+                itemvoucher = self.accountVoucher[i];
+                itemCurrencyRate = self.getCutrrencyRate(itemvoucher.payment_rate_currency_id[0]);
+                if(!itemCurrencyRate){
+                    itemCurrencyRate={};
+                    itemCurrencyRate.rate=1;
+                }
+                newVoucher.push({   amount : itemvoucher.amount,
+                                    amount_rate : (itemvoucher.amount/itemCurrencyRate.rate)
+                                });
+            }
+            self.fecthReduceMoveLine(newVoucher)
+        },
+        getCutrrencyRate:function(currency_id){
+            var self = this;
+             return _.filter(self.currecyRate,function(item){return item.currency_id[0]== currency_id}).shift();
+        },
+        // // Reduce Move line
+        fecthReduceMoveLine(newVoucher){
+            var self = this;
+            var residual =0;
+            var company = _.map(self.resCompany, function(map){return map.currency_id[1]});
+            if (newVoucher.length > 0){
+                residual = _.reduce(_.map(newVoucher, function(map){return map.amount_rate}),function(memo, num){return memo + num});
+            }
+            self.$el.find('#morosidad').unblock()
+            self.$el.find('.widget-content.widget-loading').css('display','none');
+            self.$el.find('.widget-content').find('a').text(accounting.formatNumber(residual,2, ".", ","));
+            self.$el.find('.widget-footer').find('span').text("Monto en "+company);
+        },
+    });
+}

+ 23 - 0
static/src/xml/widgets/expired_account_counters.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<template xml:space="preserve">
+    <t t-name="ExpiredAccountCounters">
+        <div>
+            <div class="grid-stack-item-content dashboard">
+                <h2 class="widget-title">
+                    <i class="fa fa-money" aria-hidden="true"> </i>
+                    Deudas  Atrasadas
+                </h2>
+                <div  class="widget-content">
+                    <a></a>
+                </div>
+                <div class="widget-footer">
+                    <span></span>
+                </div>
+                <div class="widget-content widget-loading">
+                    <i class='fa fa-cog fa-spin fa-3x fa-fw'></i>
+                </div>
+            </div>
+        </div>
+    </t>
+</template>

+ 23 - 0
static/src/xml/widgets/expired_account_counters_now.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<template xml:space="preserve">
+    <t t-name="ExpiredAccountCountersNow">
+        <div>
+            <div class="grid-stack-item-content dashboard">
+                <h2 class="widget-title">
+                    <i class="fa fa-money" aria-hidden="true"> </i>
+                    Deudas por Cobrar Hoy
+                </h2>
+                <div  class="widget-content">
+                    <a></a>
+                </div>
+                <div class="widget-footer">
+                    <span></span>
+                </div>
+                <div class="widget-content widget-loading">
+                    <i class='fa fa-cog fa-spin fa-3x fa-fw'></i>
+                </div>
+            </div>
+        </div>
+    </t>
+</template>

+ 23 - 0
static/src/xml/widgets/invoice_today_counters.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<template xml:space="preserve">
+    <t t-name="InvoiceTodayCounters">
+        <div>
+            <div class="grid-stack-item-content dashboard">
+                <h2 class="widget-title">
+                    <i class="fa fa-files-o" aria-hidden="true"></i>
+                    Facturas Realizada Hoy
+                </h2>
+                <div  class="widget-content">
+                    <a></a>
+                </div>
+                <div class="widget-footer">
+                    <span></span>
+                </div>
+                <div class="widget-content widget-loading">
+                    <i class='fa fa-cog fa-spin fa-3x fa-fw'></i>
+                </div>
+            </div>
+        </div>
+    </t>
+</template>

+ 18 - 0
static/src/xml/widgets/ranking_sales_product.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<template xml:space="preserve">
+    <t t-name="RankingSalesProductTmpl">
+        <t t-call="WidgetBaseTmpl">
+            <h2  class="widget-title">
+                <i class="fa fa-bar-chart" aria-hidden="true"></i>
+                <span>Ranking de Producto mas Vendido</span>
+            </h2>
+            <div  class="widget-content">
+                <canvas></canvas>
+            </div>
+            <div class="widget-content widget-loading">
+                <i class='fa fa-cog fa-spin fa-3x fa-fw'></i>
+            </div>
+        </t>
+    </t>
+</template>

+ 23 - 0
static/src/xml/widgets/voucher_today_counters.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<template xml:space="preserve">
+    <t t-name="VoucherTodayCounters">
+        <div>
+            <div class="grid-stack-item-content dashboard">
+                <h2 class="widget-title">
+                    <i class="fa fa-money" aria-hidden="true"> </i>
+                    Cobros de hoy
+                </h2>
+                <div  class="widget-content">
+                    <a></a>
+                </div>
+                <div class="widget-footer">
+                    <span></span>
+                </div>
+                <div class="widget-content widget-loading">
+                    <i class='fa fa-cog fa-spin fa-3x fa-fw'></i>
+                </div>
+            </div>
+        </div>
+    </t>
+</template>

+ 7 - 2
templates.xml

@@ -13,10 +13,15 @@
                 <script type="text/javascript" src="/eiru_dashboard/static/src/js/widget_base.js" />
 
                 <!-- Dashboard Widgets -->
-                <script type="text/javascript" src="/eiru_dashboard/static/src/js/widgets/customer_counter.js" />
+                <script type="text/javascript" src="/eiru_dashboard/static/src/js/widgets/ranking_sales_product.js" />
+                <script type="text/javascript" src="/eiru_dashboard/static/src/js/widgets/expired_account_counters.js" />
+                <script type="text/javascript" src="/eiru_dashboard/static/src/js/widgets/expired_account_counters_now.js" />
+                <script type="text/javascript" src="/eiru_dashboard/static/src/js/widgets/voucher_today_counters.js" />
+                <script type="text/javascript" src="/eiru_dashboard/static/src/js/widgets/invoice_today_counters.js" />
+                <!-- <script type="text/javascript" src="/eiru_dashboard/static/src/js/widgets/customer_counter.js" />
                 <script type="text/javascript" src="/eiru_dashboard/static/src/js/widgets/sales_in_the_week.js" />
                 <script type="text/javascript" src="/eiru_dashboard/static/src/js/widgets/top_sales_product.js" />
-                <script type="text/javascript" src="/eiru_dashboard/static/src/js/widgets/sales_in_warehouse_by_brand.js" />
+                <script type="text/javascript" src="/eiru_dashboard/static/src/js/widgets/sales_in_warehouse_by_brand.js" /> -->
 
                 <!-- Dashboard Main  -->
                 <script type="text/javascript" src="/eiru_dashboard/static/src/js/dashboard.js" />