|
@@ -1,21 +1,21 @@
|
|
|
function ranking_sales_partner (widget) {
|
|
|
"use strict";
|
|
|
|
|
|
- var model= openerp;
|
|
|
+ var model = openerp;
|
|
|
|
|
|
widget.RankingSalesPartnerWidget = widget.Base.extend({
|
|
|
template: 'RankingSalesPartner',
|
|
|
- data : [],
|
|
|
- accountInvoice : [],
|
|
|
- resPartner : [],
|
|
|
- modelId:[],
|
|
|
+ data: [],
|
|
|
+ accountInvoice: [],
|
|
|
+ resPartner: [],
|
|
|
+ modelId: [],
|
|
|
|
|
|
events: {
|
|
|
'click canvas': 'showCustomers'
|
|
|
},
|
|
|
init: function (parent) {
|
|
|
this._super(parent, {
|
|
|
- width : 6,
|
|
|
+ width: 6,
|
|
|
height: 4
|
|
|
});
|
|
|
},
|
|
@@ -23,7 +23,7 @@ function ranking_sales_partner (widget) {
|
|
|
var self = this;
|
|
|
self.fetchInitial();
|
|
|
},
|
|
|
- fetchInitial:function(){
|
|
|
+ fetchInitial:function() {
|
|
|
var self = this;
|
|
|
self.$el.block({
|
|
|
message: null,
|
|
@@ -31,7 +31,9 @@ function ranking_sales_partner (widget) {
|
|
|
backgroundColor: '#FAFAFA'
|
|
|
}
|
|
|
});
|
|
|
+
|
|
|
self.$el.find('.widget-content.widget-loading').css('display','flex');
|
|
|
+
|
|
|
self.fecthInvoice().then(function (accountInvoice) {
|
|
|
return accountInvoice;
|
|
|
}).then(function (accountInvoice) {
|
|
@@ -40,28 +42,29 @@ function ranking_sales_partner (widget) {
|
|
|
}).then(function (resPartner) {
|
|
|
self.resPartner = resPartner;
|
|
|
return self.fetchGetModelId();
|
|
|
- }).then(function(modelId){
|
|
|
+ }).then(function(modelId) {
|
|
|
self.modelId = modelId;
|
|
|
return self.fetchProductRanking();
|
|
|
});
|
|
|
},
|
|
|
// getModelId
|
|
|
- fetchGetModelId: function(){
|
|
|
+ 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){
|
|
|
+ this.alive(getObtjectReference('base', 'view_partner_form')).then(function(results) {
|
|
|
defer.resolve(results);
|
|
|
});
|
|
|
+
|
|
|
return defer;
|
|
|
},
|
|
|
// Obtener factura
|
|
|
- fecthInvoice: function(){
|
|
|
+ fecthInvoice: function() {
|
|
|
var self = this;
|
|
|
- var desde =moment().format('YYYY-MM-01');
|
|
|
- var hasta =moment().add(1,'months').format('YYYY-MM-01');
|
|
|
+ var desde = moment().format('YYYY-MM-01');
|
|
|
+ var hasta = moment().add(1,'months').format('YYYY-MM-01');
|
|
|
var defer = $.Deferred();
|
|
|
var fields = ['id', 'invoice_line', 'date_invoice','partner_id','amount_total'];
|
|
|
var domain = [['type', '=', 'out_invoice'], ['date_invoice', '>=', desde], ['date_invoice', '<', hasta], ['state', 'in', ['open','paid']]];
|
|
@@ -69,31 +72,33 @@ function ranking_sales_partner (widget) {
|
|
|
invoice.query(fields).filter(domain).all().then(function (results) {
|
|
|
defer.resolve(results);
|
|
|
});
|
|
|
+
|
|
|
return defer;
|
|
|
},
|
|
|
// Partner
|
|
|
- fecthPartner: function(invoice){
|
|
|
+ fecthPartner: function(invoice) {
|
|
|
var self = this;
|
|
|
var defer = $.Deferred();
|
|
|
var partner_id = _.map(invoice,function(map){
|
|
|
return map.partner_id[0];
|
|
|
});
|
|
|
- var fields =['id', 'name'];
|
|
|
- var domain =[['id', 'in', partner_id],['active', '=', true],['customer','=',true]];
|
|
|
+ var fields = ['id', 'name'];
|
|
|
+ var domain = [['id', 'in', partner_id],['active', '=', true],['customer','=',true]];
|
|
|
var resPartner = new model.web.Model('res.partner');
|
|
|
- resPartner.query(fields).filter(domain).all().then(function(results){
|
|
|
+ resPartner.query(fields).filter(domain).all().then(function(results) {
|
|
|
defer.resolve(results);
|
|
|
});
|
|
|
+
|
|
|
return defer;
|
|
|
},
|
|
|
// Obtener facturas por cada clientes
|
|
|
- getAccountInvoice:function(id_partner){
|
|
|
+ getAccountInvoice:function(id_partner) {
|
|
|
var self = this;
|
|
|
return _.flatten(_.filter(self.accountInvoice,function (inv) {
|
|
|
return inv.partner_id[0] === id_partner;
|
|
|
}));
|
|
|
},
|
|
|
- fetchProductRanking: function(){
|
|
|
+ fetchProductRanking: function() {
|
|
|
var self = this;
|
|
|
var itemPartner;
|
|
|
var itemInvoice;
|
|
@@ -103,26 +108,23 @@ function ranking_sales_partner (widget) {
|
|
|
for (var i = 0; i < self.resPartner.length; i++) {
|
|
|
itemPartner = self.resPartner[i];
|
|
|
itemInvoice = self.getAccountInvoice(itemPartner.id);
|
|
|
- // countInvoice =_.countBy(_.map(itemInvoice,function(map){
|
|
|
- // return map.id;
|
|
|
- // }),function(num){
|
|
|
- // return num ? 'even': 'odd';
|
|
|
- // });
|
|
|
- var quantity = _.reduce(_.map(itemInvoice,function(item){
|
|
|
+
|
|
|
+ var quantity = _.reduce(_.map(itemInvoice,function(item) {
|
|
|
return item.amount_total;
|
|
|
- }),function(memo, num){
|
|
|
+ }),function(memo, num) {
|
|
|
return memo + num;
|
|
|
},0);
|
|
|
|
|
|
- ranking.push({ id : itemPartner.id,
|
|
|
- name : itemPartner.name,
|
|
|
- countInvoice : quantity
|
|
|
- });
|
|
|
+ ranking.push({
|
|
|
+ id: itemPartner.id,
|
|
|
+ name: itemPartner.name,
|
|
|
+ countInvoice: quantity
|
|
|
+ });
|
|
|
}
|
|
|
ranking.sort(function (a, b) {
|
|
|
return b.countInvoice - a.countInvoice
|
|
|
});
|
|
|
- self.ranking=ranking;
|
|
|
+ self.ranking = ranking;
|
|
|
|
|
|
self.$el.unblock();
|
|
|
self.$el.find('.widget-content.widget-loading').css('display','none');
|
|
@@ -130,7 +132,7 @@ function ranking_sales_partner (widget) {
|
|
|
self.fetchChart(ranking);
|
|
|
},
|
|
|
// Generar Grafico
|
|
|
- fetchChart: function (ranking){
|
|
|
+ fetchChart: function (ranking) {
|
|
|
var self = this;
|
|
|
var label = [];
|
|
|
var body = [];
|
|
@@ -141,7 +143,7 @@ function ranking_sales_partner (widget) {
|
|
|
rank= ranking.length;
|
|
|
|
|
|
for (var i = 0; i < rank; i++) {
|
|
|
- if (ranking[i]){
|
|
|
+ if (ranking[i]) {
|
|
|
item = ranking[i];
|
|
|
}
|
|
|
if (ranking.length === 0) {
|
|
@@ -171,7 +173,7 @@ function ranking_sales_partner (widget) {
|
|
|
labels: label,
|
|
|
datasets: [
|
|
|
{
|
|
|
- backgroundColor: [ '#EF5350', '#F06292', '#AB47BC', '#7E57C2', '#5C6BC0', '#42A5F5', '#26C6DA', '#26A69A', '#66BB6A', '#9CCC65'],
|
|
|
+ backgroundColor: ['#EF5350', '#F06292', '#AB47BC', '#7E57C2', '#5C6BC0', '#42A5F5', '#26C6DA', '#26A69A', '#66BB6A', '#9CCC65'],
|
|
|
data: body,
|
|
|
}
|
|
|
]
|
|
@@ -185,11 +187,11 @@ function ranking_sales_partner (widget) {
|
|
|
display: false,
|
|
|
},
|
|
|
layout: {
|
|
|
- padding:{
|
|
|
+ padding: {
|
|
|
top: 20,
|
|
|
- bottom:0,
|
|
|
+ bottom: 0,
|
|
|
left : 0,
|
|
|
- rigth:0,
|
|
|
+ rigth: 0,
|
|
|
}
|
|
|
},
|
|
|
}
|
|
@@ -202,12 +204,12 @@ function ranking_sales_partner (widget) {
|
|
|
model.web.notification.do_warn("Atención","Sin datos");
|
|
|
return
|
|
|
}
|
|
|
- var hoy =moment().format('YYYY-MM-DD');
|
|
|
- var partner_id= _.map(self.ranking,function(map){
|
|
|
+ var hoy = moment().format('YYYY-MM-DD');
|
|
|
+ var partner_id = _.map(self.ranking,function(map){
|
|
|
return map.id;
|
|
|
})
|
|
|
this.do_action({
|
|
|
- name:"Listado de clientes con más compras",
|
|
|
+ name: "Listado de clientes con más compras",
|
|
|
type: 'ir.actions.act_window',
|
|
|
res_model: "res.partner",
|
|
|
views: [[false,'list'],[self.modelId[1],'form']],
|