Browse Source

[ADD] nuevos graficos

Rodney Elpidio Enciso Arias 7 years ago
parent
commit
7a7539ddd3

+ 21 - 9
static/src/js/dashboard.js

@@ -25,16 +25,28 @@ function dashboard_reporting_widget (instance, widget) {
         renderWidgets: function () { 
         renderWidgets: function () { 
             var self = this; 
             var self = this; 
 
 
-            var wChartInvoice = new widgets.ChartInvoiceWidget(self);
+            // var wChartInvoice = new widgets.ChartInvoiceWidget(self);
-            wChartInvoice.renderElement();
+            // wChartInvoice.renderElement();
-            wChartInvoice.start();
+            // wChartInvoice.start();
-            self.grid.addWidget(wChartInvoice.$el, 0, 0, wChartInvoice.size.width,  wChartInvoice.size.height, true);
+            // self.grid.addWidget(wChartInvoice.$el, 0, 0, wChartInvoice.size.width,  wChartInvoice.size.height, true);
-            
+
             //Ranking pos orders Salesman
             //Ranking pos orders Salesman
-            var wChartPosOrderSalesman = new widgets.ChartPosOrderSalesmanWidget(self);
+            // var wChartPosOrderSalesman = new widgets.ChartPosOrderSalesmanWidget(self);
-            wChartPosOrderSalesman.renderElement();
+            // wChartPosOrderSalesman.renderElement();
-            wChartPosOrderSalesman.start();
+            // wChartPosOrderSalesman.start();
-            self.grid.addWidget(wChartPosOrderSalesman.$el, 0, 0, wChartPosOrderSalesman.size.width,  wChartPosOrderSalesman.size.height, true);
+            // self.grid.addWidget(wChartPosOrderSalesman.$el, 0, 0, wChartPosOrderSalesman.size.width,  wChartPosOrderSalesman.size.height, true);
+
+            // ventas
+            var wChartPosOrder = new widgets.ChartPosOrderWidget(self);
+            wChartPosOrder.renderElement();
+            wChartPosOrder.start();
+            self.grid.addWidget(wChartPosOrder.$el, 0, 0, wChartPosOrder.size.width,  wChartPosOrder.size.height, true);
+
+             // Compras Gastos
+            var wChartPurchaseExpense = new widgets.ChartPurchaseExpenseWidget(self);
+            wChartPurchaseExpense.renderElement();
+            wChartPurchaseExpense.start();
+            self.grid.addWidget(wChartPurchaseExpense.$el, 0, 0, wChartPurchaseExpense.size.width,  wChartPurchaseExpense.size.height, true);
             
             
             // Ranking de clientes
             // Ranking de clientes
             var wChartPosOrderCustomer = new widgets.ChartPosOrderCustomerWidget(self);
             var wChartPosOrderCustomer = new widgets.ChartPosOrderCustomerWidget(self);

+ 2 - 0
static/src/js/main.js

@@ -15,6 +15,8 @@ openerp.eiru_reporting_dashboard = function (instance) {
         chart_pos_order_customer(dashboard);
         chart_pos_order_customer(dashboard);
         chart_pos_order_product(dashboard);
         chart_pos_order_product(dashboard);
         chart_pos_order_salesman(dashboard);
         chart_pos_order_salesman(dashboard);
+        chart_pos_order(dashboard);
+        chart_purchase_expense(dashboard);
     }catch(e){
     }catch(e){
         // error
         // error
     }
     }

+ 8 - 0
static/src/js/widgets/chart_invoice.js

@@ -222,6 +222,14 @@ function chart_invoice (widget) {
                         mode: 'nearest',
                         mode: 'nearest',
                         intersect: true
                         intersect: true
                     },
                     },
+                    layout: {
+                        padding: {
+                            top: 5,
+                            bottom: 0,
+                            left : 0,
+                            rigth: 0,
+                        }
+                    },
                 }
                 }
             });
             });
         },
         },

+ 186 - 0
static/src/js/widgets/chart_pos_order.js

@@ -0,0 +1,186 @@
+function chart_pos_order (widget) {
+    "use strict";
+
+    var model = openerp;
+
+    widget.ChartPosOrderWidget = widget.Base.extend({
+        template: 'ChartPosOrder',
+        data: [],
+        modelId: [],
+
+        events: {
+            // 'click canvas': 'showCustomers'
+        },
+        init: function (parent) {
+            this._super(parent, {
+                width: 6,
+                height: 4
+            });
+        },
+        start: function () {
+            var self = this;
+            self.fetchInitial();
+        },
+        fetchInitial:function() {
+            var self = this;
+            self.$el.block({
+                message: null,
+                overlayCSS: {
+                    backgroundColor: '#FAFAFA'
+                }
+            });
+
+            self.$el.find('.widget-content.widget-loading').css('display','flex');
+
+            self.fecthPosOrder().then(function (PosOrder) {
+                return PosOrder;
+            }).then(function (PosOrder) {
+                self.PosOrder = PosOrder;
+                return self.fetchGetModelId();
+            }).then(function(modelId) {
+                self.modelId = modelId;
+                return self.BuildChart();
+            });
+        },
+
+        // getModelId
+        fetchGetModelId: function() {
+            var self = this;
+            var defer = $.Deferred();
+            var irModelData = new model.web.Model('ir.model.data');
+            var getObtjectReference = irModelData.get_func('get_object_reference');
+
+            this.alive(getObtjectReference('base', 'view_partner_form')).then(function(results) {
+                defer.resolve(results);
+            });
+
+            return defer;
+        },
+        // Obtener Pedidos
+        fecthPosOrder: function() {
+            var self = this;
+            var defer = $.Deferred();
+            var fields = ['id','name','date_order','amount_total'];
+            var domain = [['state','in',['paid','done','invoiced']]];
+            var PosOrder = new model.web.Model('pos.order');
+            PosOrder.query(fields).filter(domain).all().then(function (results) {
+                defer.resolve(results);
+            });
+
+            return defer;
+        },
+
+        // Obtener facturas por cada proveedores
+        getPosOrder:function(mes) {
+            var self = this;
+            if (mes < 10){
+                var fecha = moment().format('YYYY')+'-'+'0'+mes;    
+            }else{
+                var fecha = moment().format('YYYY')+'-'+mes;    
+            }
+            return _.flatten(_.filter(self.PosOrder,function (inv) {
+                return moment(inv.date_order).format('YYYY-MM') === fecha;
+            }));
+        },
+        
+        // Generar el Ranking
+        BuildChart: function() {
+            var self = this;
+            var order;
+            var mes = 0;
+            var data = [];
+            
+            for (var i = 1; i <= 12; i++) {
+                order = self.getPosOrder(i);
+                var total = _.reduce(_.map(order,function(item) {
+                    return item.amount_total;
+                }),function(memo, num) {
+                    return memo + num;
+                },0);
+                data.push({
+                    amount_total: accounting.formatNumber(total,0,".",","),
+                })
+            }
+
+            // self.data = data;
+            self.$el.unblock();
+            self.$el.find('.widget-content.widget-loading').css('display','none');
+            self.fetchChart(data);
+        },
+
+        // Generar Grafico
+        fetchChart: function (data) {
+            var self = this;
+            var label = ['Enero', 'Febrero', 'Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'];
+            var body = [];
+            var item;
+            var rank = 12;
+
+            // InInvoice
+            if (data.length < rank && data.length > 0){
+                rank= ranking.length;
+            }
+            for (var i = 0; i < rank; i++) {
+                if (data[i]) {
+                    item = data[i];
+                }
+                if (data.length === 0) {
+                    item = {};
+                    item.amount_total = 0;
+                }
+                body.push(item.amount_total);
+            }
+
+            // Global method for setting Y axis number format.
+            Chart.scaleService.updateScaleDefaults('linear', {
+              ticks: {
+                callback: function(tick) {
+                    return tick.toLocaleString('de-DE');
+                }
+              }
+            });
+            Chart.defaults.global.tooltips.callbacks.label = function(tooltipItem, data) {
+                var dataset = data.datasets[tooltipItem.datasetIndex];
+                var datasetLabel = dataset.label || '';
+                return datasetLabel +  dataset.data[tooltipItem.index].toLocaleString('de-DE');
+            };
+            var chart = new Chart(this.$el.find(".widget-content").find('canvas'), {
+                type: 'line',
+                data: {
+                    labels: label,
+                    datasets: [
+                        {
+                            label: false,
+                            data: body,
+                            backgroundColor: '#e3f2fd',
+                            borderColor: '#64b5f6',
+                            borderWidth: 2,
+                            fill: false,
+                        }
+                    ]
+                },
+                options: {
+                    responsive: true,
+                    title: {
+                        display: false,
+                    },
+                    hover: {
+                        mode: 'nearest',
+                        intersect: true
+                    },
+                    legend: {
+                       display: false,
+                    },
+                    layout: {
+                        padding: {
+                            top: 30,
+                            bottom: 0,
+                            left : 0,
+                            rigth: 0,
+                        }
+                    },
+                }
+            });
+        },
+    });
+}

+ 8 - 13
static/src/js/widgets/chart_pos_order_customer.js

@@ -138,7 +138,7 @@ function chart_pos_order_customer (widget) {
             var label = [];
             var label = [];
             var body = [];
             var body = [];
             var item;
             var item;
-            var rank = 5;
+            var rank = 3;
 
 
             if (ranking.length < rank && ranking.length > 0 )
             if (ranking.length < rank && ranking.length > 0 )
                 rank= ranking.length;
                 rank= ranking.length;
@@ -155,7 +155,6 @@ function chart_pos_order_customer (widget) {
                 label.push(item.name);
                 label.push(item.name);
                 body.push(item.countPosOrder);
                 body.push(item.countPosOrder);
             }
             }
-            console.log(body);
             // Global method for setting Y axis number format.
             // Global method for setting Y axis number format.
             Chart.scaleService.updateScaleDefaults('linear', {
             Chart.scaleService.updateScaleDefaults('linear', {
               ticks: {
               ticks: {
@@ -186,23 +185,19 @@ function chart_pos_order_customer (widget) {
                 },
                 },
                 options: {
                 options: {
                     responsive: true,
                     responsive: true,
-                    // title: {
+                    title: {
-                    //     display: false,
+                        display: false,
-                    // },
+                    },
                     hover: {
                     hover: {
                         mode: 'nearest',
                         mode: 'nearest',
                         intersect: true
                         intersect: true
                     },
                     },
-                   // scales: {
+                    legend: {
-                   //     xAxes: [{ stacked: true }],
+                       display: false,
-                   //     yAxes: [{ stacked: true }],
+                    },
-                   // },
-                   // legend: {
-                   //     display: false,
-                   // },
                     layout: {
                     layout: {
                         padding: {
                         padding: {
-                            top: 20,
+                            top: 30,
                             bottom: 0,
                             bottom: 0,
                             left : 0,
                             left : 0,
                             rigth: 0,
                             rigth: 0,

+ 237 - 0
static/src/js/widgets/chart_purchase_expense.js

@@ -0,0 +1,237 @@
+function chart_purchase_expense (widget) {
+    "use strict";
+
+    var model = openerp;
+
+    widget.ChartPurchaseExpenseWidget = widget.Base.extend({
+        template: 'ChartPurchaseExpense',
+        data: [],
+        resPartner: [],
+        modelId: [],
+
+        events: {
+           
+        },
+        init: function (parent) {
+            this._super(parent, {
+                width: 6,
+                height: 4
+            });
+        },
+        start: function () {
+            var self = this;
+            self.fetchInitial();
+        },
+        fetchInitial:function() {
+            var self = this;
+            self.$el.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) {
+                self.AccountInvoice = AccountInvoice;
+                return self.fetchGetModelId();
+            }).then(function(modelId) {
+                self.modelId = modelId;
+                return self.BuildChart();
+            });
+        },
+
+        // getModelId
+        fetchGetModelId: function() {
+            var self = this;
+            var defer = $.Deferred();
+            var irModelData = new model.web.Model('ir.model.data');
+            var getObtjectReference = irModelData.get_func('get_object_reference');
+
+            this.alive(getObtjectReference('base', 'view_partner_form')).then(function(results) {
+                defer.resolve(results);
+            });
+
+            return defer;
+        },
+
+        // Obtener facturas
+        fecthAccountInvoice: function() {
+            var self = this;
+            var defer = $.Deferred();
+            var fields = ['id','date_invoice','amount_total','origin'];
+            var domain = [['state','in',['paid','open']],['type','=','in_invoice']];
+            var AccountInvoice = new model.web.Model('account.invoice');
+            AccountInvoice.query(fields).filter(domain).all().then(function (results) {
+                defer.resolve(results);
+            });
+
+            return defer;
+        },
+
+        // Obtener facturas por cada proveedores
+        getAccountInvoicePurchase:function(mes) {
+            var self = this;
+            if (mes < 10){
+                var fecha = moment().format('YYYY')+'-'+'0'+mes;    
+            }else{
+                var fecha = moment().format('YYYY')+'-'+mes;    
+            }
+            return _.flatten(_.filter(self.AccountInvoice,function (inv) {
+                return moment(inv.date_invoice).format('YYYY-MM') === fecha & inv.origin !== false;
+            }));
+        },
+
+        // Obtener facturas de clientes
+        getAccountInvoiceExpense:function(mes) {
+            var self = this;
+            if (mes < 10){
+                var fecha = moment().format('YYYY')+'-'+'0'+mes;    
+            }else{
+                var fecha = moment().format('YYYY')+'-'+mes;    
+            }
+            return _.flatten(_.filter(self.AccountInvoice,function (inv) {
+                return moment(inv.date_invoice).format('YYYY-MM') === fecha & inv.origin === false;
+            }));
+        },
+        
+        // Generar el Ranking
+        BuildChart: function() {
+            var self = this;
+            console.log(self);
+            var invoices;
+            var mes = 0;
+            var dataPurchase = [];
+            var dataExpense = [];
+
+            for (var i = 1; i <= 12; i++) {
+                invoices = self.getAccountInvoicePurchase(i);
+                var total = _.reduce(_.map(invoices,function(item) {
+                    return item.amount_total;
+                }),function(memo, num) {
+                    return memo + num;
+                },0);
+                dataPurchase.push({
+                    amount_total: accounting.formatNumber(total,0,".",","),
+                })
+            }
+            
+            for (var i = 1; i <= 12; i++) {
+                invoices = self.getAccountInvoiceExpense(i);
+                var total = _.reduce(_.map(invoices,function(item) {
+                    return item.amount_total;
+                }),function(memo, num) {
+                    return memo + num;
+                },0);
+                dataExpense.push({
+                    amount_total: accounting.formatNumber(total,0,".",","),
+                })
+            }
+
+            // self.data = data;
+            self.$el.unblock();
+            self.$el.find('.widget-content.widget-loading').css('display','none');
+            self.fetchChart(dataPurchase, dataExpense);
+        },
+
+        // Generar Grafico
+        fetchChart: function (dataPurchase,dataExpense) {
+            var self = this;
+            var label = ['Enero', 'Febrero', 'Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'];
+            var bodyPurchase = [];
+            var bodyExpense = [];
+            var item;
+            var rank = 12;
+
+            // InInvoice
+            if (dataPurchase.length < rank && dataPurchase.length > 0){
+                rank= ranking.length;
+            }
+            for (var i = 0; i < rank; i++) {
+                if (dataPurchase[i]) {
+                    item = dataPurchase[i];
+                }
+                if (dataPurchase.length === 0) {
+                    item = {};
+                    item.amount_total = 0;
+                }
+                bodyPurchase.push(item.amount_total);
+            }
+
+
+            // OutInvoice
+            if (dataExpense.length < rank && dataExpense.length > 0){
+                rank= ranking.length;
+            }
+            for (var i = 0; i < rank; i++) {
+                if (dataExpense[i]) {
+                    item = dataExpense[i];
+                }
+                if (dataExpense.length === 0) {
+                    item = {};
+                    item.amount_total = 0;
+                }
+                bodyExpense.push(item.amount_total);
+            } 
+
+            // Global method for setting Y axis number format.
+            Chart.scaleService.updateScaleDefaults('linear', {
+              ticks: {
+                callback: function(tick) {
+                    return tick.toLocaleString('de-DE');
+                }
+              }
+            });
+            Chart.defaults.global.tooltips.callbacks.label = function(tooltipItem, data) {
+                var dataset = data.datasets[tooltipItem.datasetIndex];
+                var datasetLabel = dataset.label || '';
+                return datasetLabel +  dataset.data[tooltipItem.index].toLocaleString('de-DE');
+            };
+            var chart = new Chart(this.$el.find(".widget-content").find('canvas'), {
+                type: 'line',
+                data: {
+                    labels: label,
+                    datasets: [
+                        {
+                            label: 'Compras  ',
+                            data: bodyPurchase,
+                            backgroundColor: '#e3f2fd',
+                            borderColor: '#64b5f6',
+                            borderWidth: 2,
+                            fill: false,
+                        },
+                        {
+                            label: 'Gastos  ',                            
+                            data: bodyExpense,
+                            backgroundColor: '#c8e6c9',
+                            borderColor: '#66bb6a',
+                            borderWidth: 2,
+                            fill: false,
+                        }
+                    ]
+                },
+                options: {
+                    responsive: true,
+                    title: {
+                        display: true,
+                    },
+                    hover: {
+                        mode: 'nearest',
+                        intersect: true
+                    },
+                    layout: {
+                        padding: {
+                            top: 0,
+                            bottom: 0,
+                            left : 0,
+                            rigth: 0,
+                        }
+                    },
+                }
+            });
+        },
+    });
+}

+ 19 - 0
static/src/xml/widgets/chart_pos_order.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<template xml:space="preserve">
+    <t t-name="ChartPosOrder">
+        <t t-call="WidgetReportingBaseTemplate">
+            <h2  class="widget-title">
+                <i class="fa fa-bar-chart" aria-hidden="true"></i>
+                <span> Ventas </span>
+            </h2>
+            <div class="widget-content">
+                <br/>
+                <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>

+ 19 - 0
static/src/xml/widgets/chart_purchase_expense.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<template xml:space="preserve">
+    <t t-name="ChartPurchaseExpense">
+        <t t-call="WidgetReportingBaseTemplate">
+            <h2  class="widget-title">
+                <i class="fa fa-bar-chart" aria-hidden="true"></i>
+                <span>Compras y Gastos</span>
+            </h2>
+            <div class="widget-content">
+                <br/>
+                <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>

+ 2 - 0
templates.xml

@@ -18,6 +18,8 @@
                 <script type="text/javascript" src="/eiru_reporting_dashboard/static/src/js/widgets/chart_pos_order_customer.js" />
                 <script type="text/javascript" src="/eiru_reporting_dashboard/static/src/js/widgets/chart_pos_order_customer.js" />
                 <script type="text/javascript" src="/eiru_reporting_dashboard/static/src/js/widgets/chart_pos_order_product.js" />
                 <script type="text/javascript" src="/eiru_reporting_dashboard/static/src/js/widgets/chart_pos_order_product.js" />
                 <script type="text/javascript" src="/eiru_reporting_dashboard/static/src/js/widgets/chart_pos_order_salesman.js" />
                 <script type="text/javascript" src="/eiru_reporting_dashboard/static/src/js/widgets/chart_pos_order_salesman.js" />
+                <script type="text/javascript" src="/eiru_reporting_dashboard/static/src/js/widgets/chart_pos_order.js" />
+                <script type="text/javascript" src="/eiru_reporting_dashboard/static/src/js/widgets/chart_purchase_expense.js" />
 
 
                 <!-- Dashboard Main  -->
                 <!-- Dashboard Main  -->
                 <script type="text/javascript" src="/eiru_reporting_dashboard/static/src/js/dashboard.js" />
                 <script type="text/javascript" src="/eiru_reporting_dashboard/static/src/js/dashboard.js" />