Sélectionner une révision Git
export_journal_field.py
operation_graph.js 9,55 Kio
odoo.define('enercoop_cdc.operation_graph', function (require) {
"use strict";
var qweb = require('web.qweb');
var viewRegistry = require('web.view_registry');
var core = require('web.core');
var QWeb = core.qweb;
let chartValues;
const Renderer = qweb.Renderer.extend({
events:_.extend({}, qweb.Renderer.prototype.events, {
'click .o_enercoop_button': '_onChartClicked',
}),
_render: async function () {
var self = this;
await this._super(...arguments);
var result = self.state.chartValues;
if (result.scale == 'week'){
var unit = 'day';
}
if (result.scale == 'day'){
var unit = 'hour';
}
if (result.scale == 'week' || result.scale == 'day'){
var options_line = { options: {
scales: {
xAxes: [{
type: 'time',
time: {
// Luxon format string
unit: unit
},
title: {
display: true,
text: 'Date'
}
}]
}
}};
}
var options = { options: {
scales: {
yAxes: {
beginAtZero: true,
}
}
}};
var options_stacked = { options: {
interaction: {
intersect: false,
},
scales: {
xAxes: [{
stacked: true,
}],
yAxes: [{
stacked: true,
ticks: {
beginAtZero: true,
},
type: 'linear',
}]
}
}};
var line_conso = self.$el.find('#line_chart_conso');
var donuts_conso = self.$el.find('#donuts_chart_conso');
var histo_conso = self.$el.find('#histo_chart_conso');
var line_prod = self.$el.find('#line_chart_prod');
var donuts_prod = self.$el.find('#donuts_chart_prod');
var histo_prod = self.$el.find('#histo_chart_prod');
if (result.scale != 'week' && result.scale != 'day'){
line_conso.hide();
line_prod.hide();
}
if (result.scale == 'week' || result.scale == 'day'){
var chart = new Chart(
line_conso,
Object.assign({}, result.line_chart_conso_line, options_line)
);
}
var chart = new Chart(
donuts_conso,
Object.assign({}, result.donuts_chart_conso, options)
);
var chart = new Chart(
histo_conso,
Object.assign({}, result.histo_chart_conso, options_stacked)
);
console.log(chart);
if (result.scale == 'week' || result.scale == 'day'){
var chart = new Chart(
line_prod,
Object.assign({}, result.line_chart_prod_line, options_line)
);
}
var chart = new Chart(
donuts_prod,
Object.assign({}, result.donuts_chart_prod, options)
);
var chart = new Chart(
histo_prod,
Object.assign({}, result.histo_chart_prod, options_stacked)
);
this.$el.find('.o_enercoop_button').removeClass('active');
if (this.state.scale) {
var $but = this.$el.find('.o_enercoop_button[data-mode="' + this.state.scale + '"]')
}
else {
var $but = this.$el.find('.o_enercoop_button[data-mode="month"]')
}
$but.addClass('active');
var pickerLocale = {
applyLabel: 'OK',
cancelLabel: 'Annuler',
fromLabel: 'Entre',
toLabel: 'et',
customRangeLabel: 'Période personnalisée',
daysOfWeek: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"],
monthNames: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Decembre"],
monthNamesShort: ["Jan", "Fev", "Mar", "Avr", "Mai", "Juin", "Juil", "Aoû", "Sep", "Oct", "Nov", "Dec"],
firstDay: 0,
format: 'DD/MM/YYYY',
};
// var cal = self.$el.find('#periode');
// cal.daterangepicker({
// showDropdowns: false,
// format: 'DD/MM/YYYY',
// separator: ' à ',
// locale: pickerLocale,
// maxDate: result.date_end,
// minDate: result.date_min,
// },
//
// function(start, end, label) {
//// this.trigger_up('cal_open_action', {
//// date_start: start.format('DD/MM/YYYY'),
//// date_end: end.format('DD/MM/YYYY'),
//// });
// console.log('New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD') + ' (predefined range: ' + label + ')');
// });
},
_onChartClicked: function (e) {
e.preventDefault();
var $action = $(e.currentTarget);
$action.addClass('active');
this.trigger_up('chart_open_action', {
action_name: $action.attr('name'),
action_context: $action.attr('context'),
});
},
});
const Model = qweb.Model.extend({
/**
* @override
*/
init: function () {
this.chartValues = {};
this._super.apply(this, arguments);
},
/**
* @override
*/
__get: function (localID) {
var result = this._super.apply(this, arguments);
if (_.isObject(result)) {
result.chartValues = this.chartValues[localID];
}
return result;
},
/**
* @override
* @returns {Promise}
*/
__load: function (params) {
if ('scales' in params) {
this.scales = params.scales;
}
return this._loadChart(this._super.apply(this, arguments), params);
},
/**
* @override
* @returns {Promise}
*/
__reload: function (handle, params) {
if ('scales' in params) {
this.scales = params.scales;
}
return this._loadChart(this._super.apply(this, arguments), params);
},
/**
* @private
* @param {Promise} super_def a promise that resolves with a dataPoint id
* @returns {Promise -> string} resolves to the dataPoint id
*/
_loadChart: function (super_def, params) {
var self = this;
var domain = self._state.domain
var chart_def = this._rpc({
model: 'enercoop.operation',
method: 'graph_view',
args: [domain, this.scales],
context: this._state.context,
});
return Promise.all([super_def, chart_def]).then(function(results) {
var id = results[0];
chartValues = results[1];
self.chartValues[id] = chartValues;
return id;
});
},
setScale: function (scale) {
this.scales = scale;
},
});
const Controller = qweb.Controller.extend({
custom_events: _.extend({}, qweb.Controller.prototype.custom_events, {
chart_open_action: '_onChartClicked',
cal_open_action: '_onCalClicked',
}),
init: function (parent, model, renderer, params) {
this._super.apply(this, arguments);
this.scales = params.scales;
},
/**
* @private
* @param {OdooEvent} e
*/
_onChartClicked: function (e) {
this.model.setScale(e.data.action_name);
var state = this.model.get();
state.scale = e.data.action_name
this.reload();
},
/**
* @private
* @param {OdooEvent} e
*/
_onCalClicked: function (e) {
state.date_start = e.data.date_start
state.date_end = e.data.date_end
this.reload();
},
});
var OperationGraph = qweb.View.extend({
withSearchBar: true,
searchMenuTypes: ['filter', 'favorite'],
jsLibs: [
'/web/static/lib/Chart/Chart.js',
'/web/static/lib/moment/moment.js',
// '/web/static/lib/daterangepicker/daterangepicker.js',
],
cssLibs: [
'/web/static/lib/daterangepicker/daterangepicker.css',
],
config: _.extend({}, qweb.View.prototype.config, {
Model: Model,
Renderer: Renderer,
Controller: Controller,
}),
init: function (viewInfo, params) {
this._super.apply(this, arguments);
this.controllerParams.scales = 'month';
this.loadParams.scales = 'month';
},
});
viewRegistry.add('operation_graph', OperationGraph);
});