Browse Source

[ADD] Graficos por usuario

Rodney Elpidio Enciso Arias 7 years ago
parent
commit
6b4ea26f17

+ 39 - 0
static/src/css/dashboard.css

@@ -0,0 +1,39 @@
+.container {
+    width: 100%;
+    height: 100%;
+    padding: 30px 20px;
+}
+.grid-stack.reporting-dashboard {
+    width: 100%;
+    height: 100%;
+}
+.grid-stack-item-content.reporting-dashboard {
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    padding: 1em;
+    border-bottom: 3px solid #1e88e5;
+    background-color: #fff;
+    overflow-y: hidden !important;
+}
+.grid-stack-item-content.reporting-dashboard > .widget-title {
+    font-size: 12pt;
+    font-weight: bold;
+    margin: 0 !important;
+}
+.grid-stack-item-content.reporting-dashboard > .widget-content {
+    flex-grow: 1;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+}
+.widget.widget-loading {
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    color : #000;
+}
+.grid-stack-item-content.reporting-dashboard > .widget-content > a {
+    font-size: 24pt;
+    font-weight: bold;
+}

+ 141 - 34
static/src/js/dashboard.js

@@ -16,51 +16,158 @@ function dashboard_reporting_widget (instance, widget) {
 
         grid: {},
         start: function () {
-            this.$el.find('.grid-stack.dashboard').gridstack({
+            this.$el.find('.grid-stack.reporting-dashboard').gridstack({
                 animate: true,
             });
-            this.grid = this.$el.find('.grid-stack.dashboard').data('gridstack');
+            this.grid = this.$el.find('.grid-stack.reporting-dashboard').data('gridstack');
             this.renderWidgets();
         },
         renderWidgets: function () { 
-            var self = this; 
+            var self = this;
 
-            // var wChartInvoice = new widgets.ChartInvoiceWidget(self);
-            // wChartInvoice.renderElement();
-            // wChartInvoice.start();
-            // self.grid.addWidget(wChartInvoice.$el, 0, 0, wChartInvoice.size.width,  wChartInvoice.size.height, true);
-
-            //Ranking pos orders Salesman
-            // var wChartPosOrderSalesman = new widgets.ChartPosOrderSalesmanWidget(self);
-            // wChartPosOrderSalesman.renderElement();
-            // wChartPosOrderSalesman.start();
-            // self.grid.addWidget(wChartPosOrderSalesman.$el, 0, 0, wChartPosOrderSalesman.size.width,  wChartPosOrderSalesman.size.height, true);
+            // **************************** Historico de Facturas
+            var wChartInvoice = new widgets.ChartInvoiceWidget(self);
+            wChartInvoice.fetchCurrentUser().then(function(CurrentUser){
+                return CurrentUser;
+            }).then(function(CurrentUser){
+                wChartInvoice.fetchResUser(CurrentUser).then(function(chart_ids){
+                    return chart_ids;
+                }).then(function(chart_ids){
+                    var charts = chart_ids[0].chart_ids;
+                    wChartInvoice.fetchChartList(charts).then(function(ChartList){
+                        return ChartList;
+                    }).then(function(ChartList){
+                        var chart =  _.flatten(_.filter(ChartList,function (inv) {
+                            return inv.name == 'ChartInvoice';
+                        }));
+                        if(chart.length > 0){
+                            wChartInvoice.renderElement();
+                            wChartInvoice.start();
+                            self.grid.addWidget(wChartInvoice.$el, 0, 0, wChartInvoice.size.width,  wChartInvoice.size.height, true);
+                        }
+                    });
+                });
+            });
 
-            // ventas
+            // *************************** Historico de 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);
+            wChartPosOrder.fetchCurrentUser().then(function(CurrentUser){
+                return CurrentUser;
+            }).then(function(CurrentUser){
+                wChartPosOrder.fetchResUser(CurrentUser).then(function(chart_ids){
+                    return chart_ids;
+                }).then(function(chart_ids){
+                    var charts = chart_ids[0].chart_ids;
+                    wChartPosOrder.fetchChartList(charts).then(function(ChartList){
+                        return ChartList;
+                    }).then(function(ChartList){
+                        var chart =  _.flatten(_.filter(ChartList,function (inv) {
+                            return inv.name == 'ChartPosOrder';
+                        }));
+                        if(chart.length > 0){
+                            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);
-            wChartPosOrderCustomer.renderElement();
-            wChartPosOrderCustomer.start();
-            self.grid.addWidget(wChartPosOrderCustomer.$el, 0, 0, wChartPosOrderCustomer.size.width,  wChartPosOrderCustomer.size.height, true);
-            
-            //Ranking de Ventas de Producto por Mes - Point Of Sale
+            wChartPosOrderCustomer.fetchCurrentUser().then(function(CurrentUser){
+                return CurrentUser;
+            }).then(function(CurrentUser){
+                wChartPosOrderCustomer.fetchResUser(CurrentUser).then(function(chart_ids){
+                    return chart_ids;
+                }).then(function(chart_ids){
+                    var charts = chart_ids[0].chart_ids;
+                    wChartPosOrderCustomer.fetchChartList(charts).then(function(ChartList){
+                        return ChartList;
+                    }).then(function(ChartList){
+                        var chart =  _.flatten(_.filter(ChartList,function (inv) {
+                            return inv.name == 'ChartPosOrderCustomer';
+                        }));
+                        if(chart.length > 0){
+                            wChartPosOrderCustomer.renderElement();
+                            wChartPosOrderCustomer.start();
+                            self.grid.addWidget(wChartPosOrderCustomer.$el, 0, 0, wChartPosOrderCustomer.size.width,  wChartPosOrderCustomer.size.height, true);
+                        }
+                    });
+                });
+            });
+
+            // *************************** Ranking de Productos
             var wChartPosOrderProduct = new widgets.ChartPosOrderProductWidget(self);
-            wChartPosOrderProduct.renderElement();
-            wChartPosOrderProduct.start();
-            self.grid.addWidget(wChartPosOrderProduct.$el, 0, 0, wChartPosOrderProduct.size.width,  wChartPosOrderProduct.size.height, true);
-        
-            
+            wChartPosOrderProduct.fetchCurrentUser().then(function(CurrentUser){
+                return CurrentUser;
+            }).then(function(CurrentUser){
+                wChartPosOrderProduct.fetchResUser(CurrentUser).then(function(chart_ids){
+                    return chart_ids;
+                }).then(function(chart_ids){
+                    var charts = chart_ids[0].chart_ids;
+                    wChartPosOrderProduct.fetchChartList(charts).then(function(ChartList){
+                        return ChartList;
+                    }).then(function(ChartList){
+                        var chart =  _.flatten(_.filter(ChartList,function (inv) {
+                            return inv.name == 'ChartPosOrderProduct';
+                        }));
+                        if(chart.length > 0){
+                            wChartPosOrderProduct.renderElement();
+                            wChartPosOrderProduct.start();
+                            self.grid.addWidget(wChartPosOrderProduct.$el, 0, 0, wChartPosOrderProduct.size.width,  wChartPosOrderProduct.size.height, true);
+                        }
+                    });
+                });
+            });
+
+            // *************************** Vendedores
+            var wChartPosOrderSalesman = new widgets.ChartPosOrderSalesmanWidget(self);
+            wChartPosOrderSalesman.fetchCurrentUser().then(function(CurrentUser){
+                return CurrentUser;
+            }).then(function(CurrentUser){
+                wChartPosOrderSalesman.fetchResUser(CurrentUser).then(function(chart_ids){
+                    return chart_ids;
+                }).then(function(chart_ids){
+                    var charts = chart_ids[0].chart_ids;
+                    wChartPosOrderSalesman.fetchChartList(charts).then(function(ChartList){
+                        return ChartList;
+                    }).then(function(ChartList){
+                        var chart =  _.flatten(_.filter(ChartList,function (inv) {
+                            return inv.name == 'ChartPosOrderSalesman';
+                        }));
+                        if(chart.length > 0){
+                            wChartPosOrderSalesman.renderElement();
+                            wChartPosOrderSalesman.start();
+                            self.grid.addWidget(wChartPosOrderSalesman.$el, 0, 0, wChartPosOrderSalesman.size.width,  wChartPosOrderSalesman.size.height, true);
+                        }
+                    });
+                });
+            });
+
+            // *************************** Compras y Gastos
+            var wChartPurchaseExpense = new widgets.ChartPurchaseExpenseWidget(self);
+            wChartPurchaseExpense.fetchCurrentUser().then(function(CurrentUser){
+                return CurrentUser;
+            }).then(function(CurrentUser){
+                wChartPurchaseExpense.fetchResUser(CurrentUser).then(function(chart_ids){
+                    return chart_ids;
+                }).then(function(chart_ids){
+                    var charts = chart_ids[0].chart_ids;
+                    wChartPurchaseExpense.fetchChartList(charts).then(function(ChartList){
+                        return ChartList;
+                    }).then(function(ChartList){
+                        var chart =  _.flatten(_.filter(ChartList,function (inv) {
+                            return inv.name == 'ChartPurchaseExpense';
+                        }));
+                        if(chart.length > 0){
+                            wChartPurchaseExpense.renderElement();
+                            wChartPurchaseExpense.start();
+                            self.grid.addWidget(wChartPurchaseExpense.$el, 0, 0, wChartPurchaseExpense.size.width,  wChartPurchaseExpense.size.height, true);
+                        }
+                    });
+                });
+            });            
         }
     });
 }

+ 32 - 13
static/src/js/widgets/chart_invoice.js

@@ -38,26 +38,46 @@ function chart_invoice (widget) {
                 return AccountInvoice;
             }).then(function (AccountInvoice) {
                 self.AccountInvoice = AccountInvoice;
-                return self.fetchGetModelId();
-            }).then(function(modelId) {
-                self.modelId = modelId;
                 return self.BuildChart();
             });
         },
 
-        // getModelId
-        fetchGetModelId: function() {
+        // Usuario Logeado
+        fetchCurrentUser: function() {
             var self = this;
-            var defer = $.Deferred();
-            var irModelData = new model.web.Model('ir.model.data');
-            var getObtjectReference = irModelData.get_func('get_object_reference');
+            var ResUser = new model.web.Model('res.users');
+            return ResUser.call('get_user', {
+                context: new model.web.CompoundContext()
+            });
+        },
 
-            this.alive(getObtjectReference('base', 'view_partner_form')).then(function(results) {
+        // Lista de Graficos disponibles para el usuario
+        fetchResUser: function(id) {
+            var self = this;
+            var defer = $.Deferred();
+            var fields = ['id','name','chart_ids'];
+            var domain = [['id','=',id]];
+            var ResUser = new model.web.Model('res.users');
+            ResUser.query(fields).filter(domain).all().then(function (results) {
                 defer.resolve(results);
             });
 
             return defer;
         },
+
+        // Obtener detalles de la lista de graficos
+        fetchChartList: function(chart_ids) {
+            var self = this;
+            var defer = $.Deferred();
+            var fields = ['id','name'];
+            var domain = [['id','in',chart_ids]];
+            var ChartList = new model.web.Model('chart.list');
+            ChartList.query(fields).filter(domain).all().then(function (results) {
+                defer.resolve(results);
+            });
+            return defer;
+        },
+  
         // Obtener Pedidos
         fecthAccountInvoice: function() {
             var self = this;
@@ -68,7 +88,6 @@ function chart_invoice (widget) {
             AccountInvoice.query(fields).filter(domain).all().then(function (results) {
                 defer.resolve(results);
             });
-
             return defer;
         },
 
@@ -101,6 +120,7 @@ function chart_invoice (widget) {
         // Generar el Ranking
         BuildChart: function() {
             var self = this;
+            // console.log(self);
             var invoices;
             var mes = 0;
             var dataIn = [];
@@ -133,7 +153,6 @@ function chart_invoice (widget) {
             // self.data = data;
             self.$el.unblock();
             self.$el.find('.widget-content.widget-loading').css('display','none');
-            self.$el.find('.widget-title').find('span').text("Historico de Facturas");
             self.fetchChart(dataIn, dataOut);
         },
 
@@ -196,7 +215,7 @@ function chart_invoice (widget) {
                     labels: label,
                     datasets: [
                         {
-                            label: 'Facturas de clientes  ',
+                            label: 'Ingreso  ',
                             data: bodyOut,
                             backgroundColor: '#e3f2fd',
                             borderColor: '#64b5f6',
@@ -204,7 +223,7 @@ function chart_invoice (widget) {
                             fill: false,
                         },
                         {
-                            label: 'Facturas de proveedor  ',                            
+                            label: 'Egreso  ',                            
                             data: bodyIn,
                             backgroundColor: '#c8e6c9',
                             borderColor: '#66bb6a',

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

@@ -41,6 +41,42 @@ function chart_pos_order (widget) {
                 return self.showWeek();
             });
         },
+
+        // Usuario Logeado
+        fetchCurrentUser: function() {
+            var self = this;
+            var ResUser = new model.web.Model('res.users');
+            return ResUser.call('get_user', {
+                context: new model.web.CompoundContext()
+            });
+        },
+
+        // Lista de Graficos disponibles para el usuario
+        fetchResUser: function(id) {
+            var self = this;
+            var defer = $.Deferred();
+            var fields = ['id','name','chart_ids'];
+            var domain = [['id','=',id]];
+            var ResUser = new model.web.Model('res.users');
+            ResUser.query(fields).filter(domain).all().then(function (results) {
+                defer.resolve(results);
+            });
+
+            return defer;
+        },
+
+        // Obtener detalles de la lista de graficos
+        fetchChartList: function(chart_ids) {
+            var self = this;
+            var defer = $.Deferred();
+            var fields = ['id','name'];
+            var domain = [['id','in',chart_ids]];
+            var ChartList = new model.web.Model('chart.list');
+            ChartList.query(fields).filter(domain).all().then(function (results) {
+                defer.resolve(results);
+            });
+            return defer;
+        },
         
         fecthPosOrder: function() {
             var self = this;

+ 38 - 0
static/src/js/widgets/chart_pos_order_customer.js

@@ -41,6 +41,44 @@ function chart_pos_order_customer (widget) {
                 return self.fetchProductRanking();
             });
         },
+
+        // Usuario Logeado
+        fetchCurrentUser: function() {
+            var self = this;
+            var ResUser = new model.web.Model('res.users');
+            return ResUser.call('get_user', {
+                context: new model.web.CompoundContext()
+            });
+        },
+
+        // Lista de Graficos disponibles para el usuario
+        fetchResUser: function(id) {
+            var self = this;
+            var defer = $.Deferred();
+            var fields = ['id','name','chart_ids'];
+            var domain = [['id','=',id]];
+            var ResUser = new model.web.Model('res.users');
+            ResUser.query(fields).filter(domain).all().then(function (results) {
+                defer.resolve(results);
+            });
+
+            return defer;
+        },
+
+        // Obtener detalles de la lista de graficos
+        fetchChartList: function(chart_ids) {
+            var self = this;
+            var defer = $.Deferred();
+            var fields = ['id','name'];
+            var domain = [['id','in',chart_ids]];
+            var ChartList = new model.web.Model('chart.list');
+            ChartList.query(fields).filter(domain).all().then(function (results) {
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
+
         // Obtener Pedidos
         fecthPosOrder: function() {
             var self = this;

+ 36 - 0
static/src/js/widgets/chart_pos_order_product.js

@@ -43,6 +43,42 @@ function chart_pos_order_product (widget) {
                 return self.fetchProductRanking();
             });
         },
+
+        // Usuario Logeado
+        fetchCurrentUser: function() {
+            var self = this;
+            var ResUser = new model.web.Model('res.users');
+            return ResUser.call('get_user', {
+                context: new model.web.CompoundContext()
+            });
+        },
+
+        // Lista de Graficos disponibles para el usuario
+        fetchResUser: function(id) {
+            var self = this;
+            var defer = $.Deferred();
+            var fields = ['id','name','chart_ids'];
+            var domain = [['id','=',id]];
+            var ResUser = new model.web.Model('res.users');
+            ResUser.query(fields).filter(domain).all().then(function (results) {
+                defer.resolve(results);
+            });
+
+            return defer;
+        },
+
+        // Obtener detalles de la lista de graficos
+        fetchChartList: function(chart_ids) {
+            var self = this;
+            var defer = $.Deferred();
+            var fields = ['id','name'];
+            var domain = [['id','in',chart_ids]];
+            var ChartList = new model.web.Model('chart.list');
+            ChartList.query(fields).filter(domain).all().then(function (results) {
+                defer.resolve(results);
+            });
+            return defer;
+        },
         
         // Obtener Pedido
         fecthPosOrder: function() {

+ 30 - 9
static/src/js/widgets/chart_pos_order_salesman.js

@@ -41,25 +41,46 @@ function chart_pos_order_salesman (widget) {
                 return self.fecthResUser();
             }).then(function (ResUser) {
                 self.ResUser = ResUser;
-                return self.fetchGetModelId();
-            }).then(function(modelId) {
-                self.modelId = modelId;
                 return self.fetchProductRanking();
             });
         },
-        // getModelId
-        fetchGetModelId: function() {
+
+        // Usuario Logeado
+        fetchCurrentUser: function() {
             var self = this;
-            var defer = $.Deferred();
-            var irModelData = new model.web.Model('ir.model.data');
-            var getObtjectReference = irModelData.get_func('get_object_reference');
+            var ResUser = new model.web.Model('res.users');
+            return ResUser.call('get_user', {
+                context: new model.web.CompoundContext()
+            });
+        },
 
-            this.alive(getObtjectReference('base', 'view_partner_form')).then(function(results) {
+        // Lista de Graficos disponibles para el usuario
+        fetchResUser: function(id) {
+            var self = this;
+            var defer = $.Deferred();
+            var fields = ['id','name','chart_ids'];
+            var domain = [['id','=',id]];
+            var ResUser = new model.web.Model('res.users');
+            ResUser.query(fields).filter(domain).all().then(function (results) {
                 defer.resolve(results);
             });
 
             return defer;
         },
+
+        // Obtener detalles de la lista de graficos
+        fetchChartList: function(chart_ids) {
+            var self = this;
+            var defer = $.Deferred();
+            var fields = ['id','name'];
+            var domain = [['id','in',chart_ids]];
+            var ChartList = new model.web.Model('chart.list');
+            ChartList.query(fields).filter(domain).all().then(function (results) {
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
         // Obtener Pedidos
         fecthPosOrder: function() {
             var self = this;

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

@@ -43,6 +43,42 @@ function chart_purchase_expense (widget) {
             });
         },
 
+        // Usuario Logeado
+        fetchCurrentUser: function() {
+            var self = this;
+            var ResUser = new model.web.Model('res.users');
+            return ResUser.call('get_user', {
+                context: new model.web.CompoundContext()
+            });
+        },
+
+        // Lista de Graficos disponibles para el usuario
+        fetchResUser: function(id) {
+            var self = this;
+            var defer = $.Deferred();
+            var fields = ['id','name','chart_ids'];
+            var domain = [['id','=',id]];
+            var ResUser = new model.web.Model('res.users');
+            ResUser.query(fields).filter(domain).all().then(function (results) {
+                defer.resolve(results);
+            });
+
+            return defer;
+        },
+
+        // Obtener detalles de la lista de graficos
+        fetchChartList: function(chart_ids) {
+            var self = this;
+            var defer = $.Deferred();
+            var fields = ['id','name'];
+            var domain = [['id','in',chart_ids]];
+            var ChartList = new model.web.Model('chart.list');
+            ChartList.query(fields).filter(domain).all().then(function (results) {
+                defer.resolve(results);
+            });
+            return defer;
+        },
+
         fecthAccountInvoice: function() {
             var self = this;
             var defer = $.Deferred();

+ 1 - 1
static/src/xml/dashboard.xml

@@ -3,7 +3,7 @@
 <template xml:space="preserve">
     <t t-name="DashboardReportingTemplate">
         <div class="container">
-            <div class="grid-stack dashboard"></div>
+            <div class="grid-stack reporting-dashboard"></div>
         </div>
     </t>
 </template>

+ 1 - 1
static/src/xml/widget_base.xml

@@ -3,7 +3,7 @@
 <template xml:space="preserve">
     <t t-name="WidgetReportingBaseTemplate">
         <div>
-            <div class="grid-stack-item-content dashboard">
+            <div class="grid-stack-item-content reporting-dashboard">
                 <t t-raw="0" />
             </div>
         </div>

+ 3 - 1
static/src/xml/widgets/chart_invoice.xml

@@ -5,7 +5,9 @@
         <t t-call="WidgetReportingBaseTemplate">
             <h2  class="widget-title">
                 <i class="fa fa-bar-chart" aria-hidden="true"></i>
-                <span>Historico de facturas</span>
+                <span>Ingreso y Egreso</span>
+                <a class="btn btn-default week" role="button">Esta Semana</a>
+                <a class="btn btn-default month" role="button">Meses</a>
             </h2>
             <div class="widget-content">
                 <br/>

+ 0 - 1
templates.xml

@@ -13,7 +13,6 @@
                 <!-- LIB -->
                 <script type="text/javascript" src="/eiru_reporting_dashboard/static/src/lib/jquery.timeago.es.js" />
 
-                <!-- Point Of Sale -->
                 <script type="text/javascript" src="/eiru_reporting_dashboard/static/src/js/widgets/chart_invoice.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" />