|
@@ -2,13 +2,13 @@ function ranking_sales_product (widget) {
|
|
|
"use strict";
|
|
|
|
|
|
var model= openerp;
|
|
|
+
|
|
|
widget.RankingSalesProductWidget = widget.Base.extend({
|
|
|
template: 'RankingSalesProductTmpl',
|
|
|
data : [],
|
|
|
accountInvoice : [],
|
|
|
invoiceLine : [],
|
|
|
- productProdcut : [],
|
|
|
-
|
|
|
+ productProduct : [],
|
|
|
init: function (parent) {
|
|
|
this._super(parent, {
|
|
|
width : 6,
|
|
@@ -17,116 +17,141 @@ function ranking_sales_product (widget) {
|
|
|
},
|
|
|
start: function () {
|
|
|
var self = this;
|
|
|
- self.fecthInitial();
|
|
|
+ self.fetchInitial();
|
|
|
},
|
|
|
- fecthInitial:function(){
|
|
|
+ fetchInitial:function(){
|
|
|
var self = this;
|
|
|
- self.$el.block({ message: null, overlayCSS: { backgroundColor: '#FAFAFA' }});
|
|
|
+ self.$el.block({
|
|
|
+ message: null,
|
|
|
+ overlayCSS: {
|
|
|
+ backgroundColor: '#FAFAFA'
|
|
|
+ }
|
|
|
+ });
|
|
|
self.$el.find('.widget-content.widget-loading').css('display','flex');
|
|
|
- self.fecthInvoice().then(function(accountInvoice){
|
|
|
+ self.fecthInvoice().then(function (accountInvoice) {
|
|
|
return accountInvoice;
|
|
|
- }).then(function(accountInvoice){
|
|
|
+ }).then(function (accountInvoice) {
|
|
|
self.accountInvoice = accountInvoice;
|
|
|
return self.fecthInvoiceLine(accountInvoice);
|
|
|
- }).then(function(invoiceLine){
|
|
|
+ }).then(function (invoiceLine) {
|
|
|
self.invoiceLine = invoiceLine;
|
|
|
return self.fecthProductProduct(invoiceLine);
|
|
|
- }).then(function(productProdcut){
|
|
|
- self.productProdcut = productProdcut;
|
|
|
- return self.fecthRankingProdcuto();
|
|
|
+ }).then(function(productProduct){
|
|
|
+ self.productProduct = productProduct;
|
|
|
+ return self.fetchProductRanking();
|
|
|
});
|
|
|
- return false;
|
|
|
},
|
|
|
// Obtener factura
|
|
|
- fecthInvoice :function(){
|
|
|
+ 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']]];
|
|
|
+ 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){
|
|
|
+
|
|
|
+ invoice.query(fields).filter(domain).all().then(function (results) {
|
|
|
defer.resolve(results);
|
|
|
});
|
|
|
+
|
|
|
return defer;
|
|
|
},
|
|
|
// Obtener linea de la factura
|
|
|
- fecthInvoiceLine : function(accountInvoice){
|
|
|
+ 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 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){
|
|
|
+
|
|
|
+ invoiceLine.query(fields).filter(domain).all().then(function (results) {
|
|
|
defer.resolve(results);
|
|
|
});
|
|
|
+
|
|
|
return defer;
|
|
|
},
|
|
|
// Obtener Prodcutos
|
|
|
- fecthProductProduct : function(invoiceLine){
|
|
|
+ fecthProductProduct: function (invoiceLine) {
|
|
|
var self = this;
|
|
|
- var defer =$.Deferred();
|
|
|
- var prodcut_id = _.flatten(_.map(invoiceLine,function(item){return item.product_id[0]}));
|
|
|
+ var defer = $.Deferred();
|
|
|
+ var product_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){
|
|
|
+ var domain =[['id', '=', product_id]];
|
|
|
+ var product= new model.web.Model('product.product');
|
|
|
+
|
|
|
+ product.query(fields).filter(domain).all().then(function (results) {
|
|
|
defer.resolve(results);
|
|
|
});
|
|
|
+
|
|
|
return defer;
|
|
|
},
|
|
|
-
|
|
|
- fecthRankingProdcuto : function(){
|
|
|
+ fetchProductRanking: function(){
|
|
|
var self = this;
|
|
|
var itemProduct;
|
|
|
var itemLine;
|
|
|
- var ranking=[];
|
|
|
- var cat=0;
|
|
|
+ var ranking = [];
|
|
|
+ var cat = 0;
|
|
|
var lineUnik;
|
|
|
- for (var i = 0; i < self.productProdcut.length; i++) {
|
|
|
- itemProduct = self.productProdcut[i];
|
|
|
+ for (var i = 0; i < self.productProduct.length; i++) {
|
|
|
+ itemProduct = self.productProduct[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 });
|
|
|
+ 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()
|
|
|
+ ranking.sort(function (a, b) {
|
|
|
+ return b.qty - a.qty
|
|
|
+ });
|
|
|
+
|
|
|
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);
|
|
|
+ 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.fetchChart(ranking);
|
|
|
+ self.$el.unblock()
|
|
|
},
|
|
|
// get line
|
|
|
- getInvoiceLine(product_id){
|
|
|
+ getInvoiceLine: function (product_id){
|
|
|
var self = this;
|
|
|
- return _.flatten(_.filter(self.invoiceLine,function(line){return line.product_id[0] === product_id}));
|
|
|
+ return _.flatten(_.filter(self.invoiceLine,function (line) {
|
|
|
+ return line.product_id[0] === product_id
|
|
|
+ }));
|
|
|
},
|
|
|
// Generar Grafico
|
|
|
- fecthChart: function(ranking){
|
|
|
+ fetchChart: function (ranking){
|
|
|
var self = this;
|
|
|
- var label=[];
|
|
|
- var body=[];
|
|
|
+ var label = [];
|
|
|
+ var body = [];
|
|
|
var item;
|
|
|
- var rank=10;
|
|
|
+ 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;
|
|
|
+ } else {
|
|
|
+ item = {};
|
|
|
+ item.product = "N/A";
|
|
|
+ item.qty = 0;
|
|
|
}
|
|
|
label.push(item.product);
|
|
|
body.push(item.qty);
|
|
@@ -157,7 +182,6 @@ function ranking_sales_product (widget) {
|
|
|
display: false,
|
|
|
},
|
|
|
}
|
|
|
-
|
|
|
});
|
|
|
}
|
|
|
});
|