You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

540 lines
16 KiB

odoo.define('dashboard_pos.Dashboard', function (require) {
"use strict";
var AbstractAction = require('web.AbstractAction');
var core = require('web.core');
const { loadBundle } = require("@web/core/assets");
var ajax = require('web.ajax');
var session = require('web.session');
var web_client = require('web.web_client');
var rpc = require('web.rpc');
var _t = core._t;
var QWeb = core.qweb;
var PosDashboard = AbstractAction.extend({
template: 'PosDashboard',
events: {
'click .pos_order_today':'pos_order_today',
'click .pos_order':'pos_order',
'click .pos_total_sales':'pos_order',
'click .pos_session':'pos_session',
'click .pos_refund_orders':'pos_refund_orders',
'click .pos_refund_today_orders':'pos_refund_today_orders',
'change #pos_sales': 'onclick_pos_sales',
},
init: function(parent, context) {
this._super(parent, context);
this.dashboards_templates = ['PosOrders','PosChart','PosCustomer'];
this.payment_details = [];
this.top_salesperson = [];
this.selling_product = [];
this.total_sale = [];
this.total_order_count = [];
this.total_refund_count = [];
this.total_session = [];
this.today_refund_total = [];
this.today_sale = [];
},
// willStart: function() {
// var self = this;
// return $.when(ajax.loadLibs(this), this._super()).then(function() {
// return self.fetch_data();
// });
// },
willStart: function() {
var self = this;
return $.when(loadBundle(this), this._super()).then(function() {
return self.fetch_data();
});
},
// willStart: function() {
// var self = this;
// return Promise.all([loadBundle(this), this._super()]).then(function() {
// return self.fetch_data();
start: function() {
var self = this;
this.set("title", 'Dashboard');
return this._super().then(function() {
self.render_dashboards();
self.render_graphs();
self.$el.parent().addClass('oe_background_grey');
});
},
fetch_data: function() {
var self = this;
var def1 = this._rpc({
model: 'pos.order',
method: 'get_refund_details'
}).then(function(result) {
self.total_sale = result['total_sale'],
self.total_order_count = result['total_order_count']
self.total_refund_count = result['total_refund_count']
self.total_session = result['total_session']
self.today_refund_total = result['today_refund_total']
self.today_sale = result['today_sale']
});
var def2 = self._rpc({
model: "pos.order",
method: "get_details",
})
.then(function (res) {
self.payment_details = res['payment_details'];
self.top_salesperson = res['salesperson'];
self.selling_product = res['selling_product'];
});
return $.when(def1,def2);
},
render_dashboards: function() {
var self = this;
_.each(this.dashboards_templates, function(template) {
self.$('.o_pos_dashboard').append(QWeb.render(template, {widget: self}));
});
},
render_graphs: function(){
var self = this;
self.render_top_customer_graph();
self.render_top_product_graph();
self.render_product_category_graph();
},
pos_order_today: function(e){
var self = this;
var date = new Date();
var yesterday = new Date(date.getTime());
yesterday.setDate(date.getDate() - 1);
e.stopPropagation();
e.preventDefault();
session.user_has_group('hr.group_hr_user').then(function(has_group){
if(has_group){
var options = {
on_reverse_breadcrumb: self.on_reverse_breadcrumb,
};
self.do_action({
name: _t("Today Order"),
type: 'ir.actions.act_window',
res_model: 'pos.order',
view_mode: 'tree,form,calendar',
view_type: 'form',
views: [[false, 'list'],[false, 'form']],
domain: [['date_order','<=', date],['date_order', '>=', yesterday]],
target: 'current'
}, options)
}
});
},
pos_refund_orders: function(e){
var self = this;
var date = new Date();
var yesterday = new Date(date.getTime());
yesterday.setDate(date.getDate() - 1);
e.stopPropagation();
e.preventDefault();
session.user_has_group('hr.group_hr_user').then(function(has_group){
if(has_group){
var options = {
on_reverse_breadcrumb: self.on_reverse_breadcrumb,
};
self.do_action({
name: _t("Refund Orders"),
type: 'ir.actions.act_window',
res_model: 'pos.order',
view_mode: 'tree,form,calendar',
view_type: 'form',
views: [[false, 'list'],[false, 'form']],
domain: [['amount_total', '<', 0.0]],
target: 'current'
}, options)
}
});
},
pos_refund_today_orders: function(e){
var self = this;
var date = new Date();
var yesterday = new Date(date.getTime());
yesterday.setDate(date.getDate() - 1);
e.stopPropagation();
e.preventDefault();
session.user_has_group('hr.group_hr_user').then(function(has_group){
if(has_group){
var options = {
on_reverse_breadcrumb: self.on_reverse_breadcrumb,
};
self.do_action({
name: _t("Refund Orders"),
type: 'ir.actions.act_window',
res_model: 'pos.order',
view_mode: 'tree,form,calendar',
view_type: 'form',
views: [[false, 'list'],[false, 'form']],
domain: [['amount_total', '<', 0.0],['date_order','<=', date],['date_order', '>=', yesterday]],
target: 'current'
}, options)
}
});
},
pos_order: function(e){
var self = this;
var date = new Date();
var yesterday = new Date(date.getTime());
yesterday.setDate(date.getDate() - 1);
e.stopPropagation();
e.preventDefault();
session.user_has_group('hr.group_hr_user').then(function(has_group){
if(has_group){
var options = {
on_reverse_breadcrumb: self.on_reverse_breadcrumb,
};
self.do_action({
name: _t("Total Order"),
type: 'ir.actions.act_window',
res_model: 'pos.order',
view_mode: 'tree,form,calendar',
view_type: 'form',
views: [[false, 'list'],[false, 'form']],
target: 'current'
}, options)
}
});
},
pos_session: function(e){
var self = this;
e.stopPropagation();
e.preventDefault();
session.user_has_group('hr.group_hr_user').then(function(has_group){
if(has_group){
var options = {
on_reverse_breadcrumb: self.on_reverse_breadcrumb,
};
self.do_action({
name: _t("sessions"),
type: 'ir.actions.act_window',
res_model: 'pos.session',
view_mode: 'tree,form,calendar',
view_type: 'form',
views: [[false, 'list'],[false, 'form']],
target: 'current'
}, options)
}
});
},
onclick_pos_sales:function(events){
var option = $(events.target).val();
var self = this
var ctx = self.$("#canvas_1");
rpc.query({
model: "pos.order",
method: "get_department",
args: [option],
}).then(function (arrays) {
var data = {
labels: arrays[1],
datasets: [
{
label: arrays[2],
data: arrays[0],
backgroundColor: [
"rgba(255, 99, 132,1)",
"rgba(54, 162, 235,1)",
"rgba(75, 192, 192,1)",
"rgba(153, 102, 255,1)",
"rgba(10,20,30,1)"
],
borderColor: [
"rgba(255, 99, 132, 0.2)",
"rgba(54, 162, 235, 0.2)",
"rgba(75, 192, 192, 0.2)",
"rgba(153, 102, 255, 0.2)",
"rgba(10,20,30,0.3)"
],
borderWidth: 1
},
]
};
//options
var options = {
responsive: true,
title: {
display: true,
position: "top",
text: "SALE DETAILS",
fontSize: 18,
fontColor: "#111"
},
legend: {
display: true,
position: "bottom",
labels: {
fontColor: "#333",
fontSize: 16
}
},
scales: {
yAxes: [{
ticks: {
min: 0
}
}]
}
};
//create Chart class object
if (window.myCharts != undefined)
window.myCharts.destroy();
window.myCharts = new Chart(ctx, {
type: "bar",
data: data,
options: options
});
});
},
render_top_customer_graph:function(){
var self = this
var ctx = self.$(".top_customer");
rpc.query({
model: "pos.order",
method: "get_the_top_customer",
}).then(function (arrays) {
var data = {
labels: arrays[1],
datasets: [
{
label: "",
data: arrays[0],
backgroundColor: [
"rgb(148, 22, 227)",
"rgba(54, 162, 235)",
"rgba(75, 192, 192)",
"rgba(153, 102, 255)",
"rgba(10,20,30)"
],
borderColor: [
"rgba(255, 99, 132,)",
"rgba(54, 162, 235,)",
"rgba(75, 192, 192,)",
"rgba(153, 102, 255,)",
"rgba(10,20,30,)"
],
borderWidth: 1
},
]
};
//options
var options = {
responsive: true,
title: {
display: true,
position: "top",
text: " Top Customer",
fontSize: 18,
fontColor: "#111"
},
legend: {
display: true,
position: "bottom",
labels: {
fontColor: "#333",
fontSize: 16
}
},
scales: {
yAxes: [{
ticks: {
min: 0
}
}]
}
};
//create Chart class object
var chart = new Chart(ctx, {
type: "pie",
data: data,
options: options
});
});
},
render_top_product_graph:function(){
var self = this
var ctx = self.$(".top_selling_product");
rpc.query({
model: "pos.order",
method: "get_the_top_products",
}).then(function (arrays) {
var data = {
labels: arrays[1],
datasets: [
{
label: "Quantity",
data: arrays[0],
backgroundColor: [
"rgba(255, 99, 132,1)",
"rgba(54, 162, 235,1)",
"rgba(75, 192, 192,1)",
"rgba(153, 102, 255,1)",
"rgba(10,20,30,1)"
],
borderColor: [
"rgba(255, 99, 132, 0.2)",
"rgba(54, 162, 235, 0.2)",
"rgba(75, 192, 192, 0.2)",
"rgba(153, 102, 255, 0.2)",
"rgba(10,20,30,0.3)"
],
borderWidth: 1
},
]
};
//options
var options = {
responsive: true,
title: {
display: true,
position: "top",
text: " Top products",
fontSize: 18,
fontColor: "#111"
},
legend: {
display: true,
position: "bottom",
labels: {
fontColor: "#333",
fontSize: 16
}
},
scales: {
yAxes: [{
ticks: {
min: 0
}
}]
}
};
//create Chart class object
var chart = new Chart(ctx, {
type: "horizontalBar",
data: data,
options: options
});
});
},
render_product_category_graph:function(){
var self = this
var ctx = self.$(".top_product_categories");
rpc.query({
model: "pos.order",
method: "get_the_top_categories",
}).then(function (arrays) {
var data = {
labels: arrays[1],
datasets: [
{
label: "Quantity",
data: arrays[0],
backgroundColor: [
"rgba(255, 99, 132,1)",
"rgba(54, 162, 235,1)",
"rgba(75, 192, 192,1)",
"rgba(153, 102, 255,1)",
"rgba(10,20,30,1)"
],
borderColor: [
"rgba(255, 99, 132, 0.2)",
"rgba(54, 162, 235, 0.2)",
"rgba(75, 192, 192, 0.2)",
"rgba(153, 102, 255, 0.2)",
"rgba(10,20,30,0.3)"
],
borderWidth: 1
},
]
};
//options
var options = {
responsive: true,
title: {
display: true,
position: "top",
text: " Top product categories",
fontSize: 18,
fontColor: "#111"
},
legend: {
display: true,
position: "bottom",
labels: {
fontColor: "#333",
fontSize: 16
}
},
scales: {
yAxes: [{
ticks: {
min: 0
}
}]
}
};
//create Chart class object
var chart = new Chart(ctx, {
type: "horizontalBar",
data: data,
options: options
});
});
},
});
core.action_registry.add('pos_dashboard', PosDashboard);
return PosDashboard;
});