From 318382ad5975c4d227f8f03905fd588d58ae6dd4 Mon Sep 17 00:00:00 2001
From: Juliana <juliana@le-filament.com>
Date: Tue, 1 Mar 2022 16:38:33 +0100
Subject: [PATCH] [ADD]Pre-commit
---
.gitignore | 78 +-
README.rst | 1 -
__init__.py | 2 +-
__manifest__.py | 28 +-
models/__init__.py | 1 +
models/acc_counter.py | 29 +-
models/acc_operation_graph.py | 73 +-
security/ir.model.access.csv | 2 +-
static/src/js/operation_graph.js | 194 ++--
.../chartjs-plugin-datalabels.min.js | 857 +++++++++++++++++-
views/acc_operation_templates.xml | 104 ++-
views/acc_operation_views.xml | 17 +-
views/res_partner_views.xml | 19 +-
13 files changed, 1213 insertions(+), 192 deletions(-)
mode change 100755 => 100644 README.rst
mode change 100755 => 100644 __manifest__.py
mode change 100755 => 100644 security/ir.model.access.csv
diff --git a/.gitignore b/.gitignore
index 75bb204..818770f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,75 @@
-.*
-*.pyc
-!.gitignore
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+/.venv
+/.pytest_cache
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+env/
+bin/
+build/
+develop-eggs/
+dist/
+eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+*.egg-info/
+.installed.cfg
+*.egg
+*.eggs
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.cache
+nosetests.xml
+coverage.xml
+
+# Translations
+*.mo
+
+# Pycharm
+.idea
+
+# Eclipse
+.settings
+
+# Visual Studio cache/options directory
+.vs/
+.vscode
+
+# OSX Files
+.DS_Store
+
+# Django stuff:
+*.log
+
+# Mr Developer
+.mr.developer.cfg
+.project
+.pydevproject
+
+# Rope
+.ropeproject
+
+# Sphinx documentation
+docs/_build/
+
+# Backup files
+*~
+*.swp
+
+# OCA rules
+!static/lib/
diff --git a/README.rst b/README.rst
old mode 100755
new mode 100644
index 6caa06a..9cf555f
--- a/README.rst
+++ b/README.rst
@@ -33,4 +33,3 @@ Maintainer
:target: https://le-filament.com
This module is maintained by Le Filament
-
diff --git a/__init__.py b/__init__.py
index e352eeb..957992f 100644
--- a/__init__.py
+++ b/__init__.py
@@ -1,4 +1,4 @@
# Copyright 2021 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-from . import models
\ No newline at end of file
+from . import models
diff --git a/__manifest__.py b/__manifest__.py
old mode 100755
new mode 100644
index 1bddc39..c08f61f
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -1,26 +1,24 @@
{
- 'name': "ACC - Gestion des CDC",
- 'summary': "Gestion des Courbes de charges",
- 'author': "Le Filament",
- 'website': "https://www.le-filament.com",
- 'version': '14.0.1.0.1',
- 'license': "AGPL-3",
- 'depends': [
- 'acc_operation', 'acc_enedis_api'
- ],
- 'data': [
+ "name": "ACC - Gestion des CDC",
+ "summary": "Gestion des Courbes de charges",
+ "author": "Le Filament",
+ "website": "https://www.le-filament.com",
+ "version": "14.0.1.0.1",
+ "license": "AGPL-3",
+ "depends": ["acc_operation", "acc_enedis_api"],
+ "data": [
"security/ir.model.access.csv",
# datas
# wizard
# views
- 'views/acc_operation_views.xml',
- 'views/acc_operation_templates.xml',
+ "views/acc_operation_views.xml",
+ "views/acc_operation_templates.xml",
# 'views/res_partner_views.xml',
# views menu
],
- 'qweb': [
+ "qweb": [
# "static/src/xml/*.xml",
],
- 'installable': True,
- 'auto_install': False,
+ "installable": True,
+ "auto_install": False,
}
diff --git a/models/__init__.py b/models/__init__.py
index dc15038..571b67b 100644
--- a/models/__init__.py
+++ b/models/__init__.py
@@ -3,4 +3,5 @@
from . import acc_operation
from . import acc_operation_graph
+
# from . import acc_counter
diff --git a/models/acc_counter.py b/models/acc_counter.py
index 0604722..c4d72a3 100644
--- a/models/acc_counter.py
+++ b/models/acc_counter.py
@@ -1,13 +1,13 @@
# Copyright 2021 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-from odoo import _, models
+from odoo import models
DEFAULT_MONTH_RANGE = 3
class AccCounter(models.Model):
- _inherit = 'acc.counter'
+ _inherit = "acc.counter"
# ------------------------------------------------------
# Actions
@@ -18,17 +18,20 @@ class AccCounter(models.Model):
:return: Vue Qweb
"""
self.ensure_one()
- counter_id = self.env['acc.counter'].browse(self.env.context.get('default_counter_id'))
+ counter_id = self.env["acc.counter"].browse(
+ self.env.context.get("default_counter_id")
+ )
action = self.env["ir.actions.actions"]._for_xml_id(
- "acc_cdc.acc_operation_action_client_courbes")
- action['params'] = {
- 'operation_ids': self.operation_id.id,
- 'acc_counter_id': counter_id.id
+ "acc_cdc.acc_operation_action_client_courbes"
+ )
+ action["params"] = {
+ "operation_ids": self.operation_id.id,
+ "acc_counter_id": counter_id.id,
}
- action['context'] = {
- 'active_id': self.operation_id.id,
- 'active_ids': self.operation_id.ids,
- 'search_default_name': self.operation_id.name,
- 'search_default_acc_delivery_operation_ids': counter_id.name,
+ action["context"] = {
+ "active_id": self.operation_id.id,
+ "active_ids": self.operation_id.ids,
+ "search_default_name": self.operation_id.name,
+ "search_default_acc_delivery_operation_ids": counter_id.name,
}
- return action
\ No newline at end of file
+ return action
diff --git a/models/acc_operation_graph.py b/models/acc_operation_graph.py
index 88ab67e..ecd7983 100644
--- a/models/acc_operation_graph.py
+++ b/models/acc_operation_graph.py
@@ -1,13 +1,13 @@
# Copyright 2021 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-from odoo import _, models
+from odoo import models
DEFAULT_MONTH_RANGE = 3
class AccOperation(models.Model):
- _inherit = 'acc.operation'
+ _inherit = "acc.operation"
def _qweb_prepare_qcontext(self, view_id, domain):
values = super()._qweb_prepare_qcontext(view_id, domain)
@@ -20,52 +20,67 @@ class AccOperation(models.Model):
def _plan_prepare_values(self):
values = {}
- date_day_start, date_day_end = self.get_last_day('day')
+ date_day_start, date_day_end = self.get_last_day("day")
last_day = date_day_start.strftime("%d %B %Y")
date_day_start = date_day_start.strftime("%Y-%m-%d")
date_day_end = date_day_end.strftime("%Y-%m-%d")
- date_week_start, date_week_end = self.get_last_day('week')
- last_week = date_week_start.strftime("%d %B %Y") + '-' + date_week_end.strftime("%d %B %Y")
+ date_week_start, date_week_end = self.get_last_day("week")
+ last_week = (
+ date_week_start.strftime("%d %B %Y")
+ + "-"
+ + date_week_end.strftime("%d %B %Y")
+ )
date_week_start = date_week_start.strftime("%Y-%m-%d")
date_week_end = date_week_end.strftime("%Y-%m-%d")
- date_month_start, date_month_end = self.get_last_day('month')
- last_month = date_month_start.strftime("%d %B %Y") + '-' + date_month_end.strftime("%d %B %Y")
+ date_month_start, date_month_end = self.get_last_day("month")
+ last_month = (
+ date_month_start.strftime("%d %B %Y")
+ + "-"
+ + date_month_end.strftime("%d %B %Y")
+ )
date_month_start = date_month_start.strftime("%Y-%m-%d")
date_month_end = date_month_end.strftime("%Y-%m-%d")
# range_date = date_start.strftime("%d/%m/%Y") + ' - ' + date_end.strftime("%d/%m/%Y")
- date_semestre_start, date_semestre_end = self.get_last_day('semestre')
- last_semester = date_semestre_start.strftime("%d %B %Y") + '-' + date_semestre_end.strftime("%d %B %Y")
+ date_semestre_start, date_semestre_end = self.get_last_day("semestre")
+ last_semester = (
+ date_semestre_start.strftime("%d %B %Y")
+ + "-"
+ + date_semestre_end.strftime("%d %B %Y")
+ )
date_semestre_start = date_semestre_start.strftime("%Y-%m-%d")
date_semestre_end = date_semestre_end.strftime("%Y-%m-%d")
- date_year_start, date_year_end = self.get_last_day('year')
- last_year = date_year_start.strftime("%d %B %Y") + '- ' + date_year_end.strftime("%d %B %Y")
+ date_year_start, date_year_end = self.get_last_day("year")
+ last_year = (
+ date_year_start.strftime("%d %B %Y")
+ + "- "
+ + date_year_end.strftime("%d %B %Y")
+ )
date_year_start = date_year_start.strftime("%Y-%m-%d")
date_year_end = date_year_end.strftime("%Y-%m-%d")
data_values = {
- 'last_day': last_day,
- 'last_week': last_week,
- 'last_month': last_month,
- 'last_semestre': last_semester,
- 'last_year': last_year,
+ "last_day": last_day,
+ "last_week": last_week,
+ "last_month": last_month,
+ "last_semestre": last_semester,
+ "last_year": last_year,
# 'range_date': range_date,
- 'date_day_start': date_day_start,
- 'date_day_end': date_day_end,
- 'date_week_start': date_week_start,
- 'date_week_end': date_week_end,
- 'date_month_start': date_month_start,
- 'date_month_end': date_month_end,
- 'date_semestre_start': date_semestre_start,
- 'date_semestre_end': date_semestre_end,
- 'date_year_start': date_year_start,
- 'date_year_end': date_year_end,
-
+ "date_day_start": date_day_start,
+ "date_day_end": date_day_end,
+ "date_week_start": date_week_start,
+ "date_week_end": date_week_end,
+ "date_month_start": date_month_start,
+ "date_month_end": date_month_end,
+ "date_semestre_start": date_semestre_start,
+ "date_semestre_end": date_semestre_end,
+ "date_year_start": date_year_start,
+ "date_year_end": date_year_end,
}
- values['data_values'] = data_values
- return values
\ No newline at end of file
+ values["data_values"] = data_values
+ return values
diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv
old mode 100755
new mode 100644
index 2b833a8..5863e10
--- a/security/ir.model.access.csv
+++ b/security/ir.model.access.csv
@@ -1,2 +1,2 @@
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
-access_acc_enedis_cdc_portal,acc.enedis.cdc.portal,acc_operation.model_acc_enedis_cdc,base.group_portal,1,0,0,0
\ No newline at end of file
+access_acc_enedis_cdc_portal,acc.enedis.cdc.portal,acc_operation.model_acc_enedis_cdc,base.group_portal,1,0,0,0
diff --git a/static/src/js/operation_graph.js b/static/src/js/operation_graph.js
index e0b7ff7..6cc7e90 100644
--- a/static/src/js/operation_graph.js
+++ b/static/src/js/operation_graph.js
@@ -1,15 +1,14 @@
-odoo.define('acc_cdc.operation_graph', function (require) {
+odoo.define("acc_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;
+ var qweb = require("web.qweb");
+ var viewRegistry = require("web.view_registry");
+ var core = require("web.core");
let chartValues;
const Renderer = qweb.Renderer.extend({
- events:_.extend({}, qweb.Renderer.prototype.events, {
- 'click .o_acc_button': '_onChartClicked',
+ events: _.extend({}, qweb.Renderer.prototype.events, {
+ "click .o_acc_button": "_onChartClicked",
}),
_render: async function () {
@@ -21,111 +20,110 @@ odoo.define('acc_cdc.operation_graph', function (require) {
var chart_histo_conso;
var chart_histo_prod;
- if (chart_line_conso != undefined){
+ if (chart_line_conso != undefined) {
chart_line_conso.destroy();
}
- if (chart_line_prod != undefined){
+ if (chart_line_prod != undefined) {
chart_line_prod.destroy();
}
- if (chart_donuts_conso != undefined){
+ if (chart_donuts_conso != undefined) {
chart_donuts_conso.destroy();
}
- if (chart_donuts_prod != undefined){
+ if (chart_donuts_prod != undefined) {
chart_donuts_prod.destroy();
}
- if (chart_histo_conso != undefined){
+ if (chart_histo_conso != undefined) {
chart_histo_conso.destroy();
}
- if (chart_histo_prod != undefined){
+ if (chart_histo_prod != undefined) {
chart_histo_prod.destroy();
}
await this._super(...arguments);
var result = self.state.chartValues;
- 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');
+ 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'){
+ if (result.scale != "week" && result.scale != "day") {
line_conso.hide();
line_prod.hide();
}
- if (result.scale == 'week' || result.scale == 'day'){
+ if (result.scale == "week" || result.scale == "day") {
chart_line_conso = new Chart(
line_conso,
Object.assign({}, result.line_chart_conso_line)
);
}
- chart_donuts_conso = new Chart(
- donuts_conso,
- Object.assign({}, result.donuts_chart_conso)
- );
-// chart_donuts_conso.config.options.plugins =
-// {
-// color: "#1f4e56",
-// font: {
-// weight: "bold",
-// size: 16
-// },
-// formatter: (value) => {
-// return value + "%";
-// }
-// };
-// console.log(chart_donuts_conso);
-
- chart_histo_conso = new Chart(
- histo_conso,
- Object.assign({}, result.histo_chart_conso)
- );
-
- if (result.scale == 'week' || result.scale == 'day'){
+ chart_donuts_conso = new Chart(
+ donuts_conso,
+ Object.assign({}, result.donuts_chart_conso)
+ );
+ // Chart_donuts_conso.config.options.plugins =
+ // {
+ // color: "#1f4e56",
+ // font: {
+ // weight: "bold",
+ // size: 16
+ // },
+ // formatter: (value) => {
+ // return value + "%";
+ // }
+ // };
+ // console.log(chart_donuts_conso);
+
+ chart_histo_conso = new Chart(
+ histo_conso,
+ Object.assign({}, result.histo_chart_conso)
+ );
+
+ if (result.scale == "week" || result.scale == "day") {
chart_line_prod = new Chart(
line_prod,
Object.assign({}, result.line_chart_prod_line)
);
}
- chart_donuts_prod = new Chart(
- donuts_prod,
- Object.assign({}, result.donuts_chart_prod)
- );
+ chart_donuts_prod = new Chart(
+ donuts_prod,
+ Object.assign({}, result.donuts_chart_prod)
+ );
- chart_histo_prod = new Chart(
- histo_prod,
- Object.assign({}, result.histo_chart_prod)
- );
- this.$el.find('.o_acc_button').removeClass('active');
+ chart_histo_prod = new Chart(
+ histo_prod,
+ Object.assign({}, result.histo_chart_prod)
+ );
+ this.$el.find(".o_acc_button").removeClass("active");
if (this.state.scale) {
- var $but = this.$el.find('.o_acc_button[data-mode="' + this.state.scale + '"]')
- }
- else {
- var $but = this.$el.find('.o_acc_button[data-mode="month"]')
+ var $but = this.$el.find(
+ '.o_acc_button[data-mode="' + this.state.scale + '"]'
+ );
+ } else {
+ var $but = this.$el.find('.o_acc_button[data-mode="month"]');
}
- $but.addClass('active');
-
+ $but.addClass("active");
},
_onChartClicked: function (e) {
e.preventDefault();
var $action = $(e.currentTarget);
- $action.addClass('active');
- var context = JSON.parse($action.attr('context').replace(/'/g, '"'));
+ $action.addClass("active");
+ var context = JSON.parse($action.attr("context").replace(/'/g, '"'));
var first_day = context.first_day;
var last_day = context.last_day;
- this.trigger_up('chart_open_action', {
- action_name: $action.attr('name'),
- action_context: $action.attr('context'),
+ this.trigger_up("chart_open_action", {
+ action_name: $action.attr("name"),
+ action_context: $action.attr("context"),
action_first_day: first_day,
action_last_day: last_day,
});
},
-
});
const Model = qweb.Model.extend({
@@ -153,7 +151,7 @@ odoo.define('acc_cdc.operation_graph', function (require) {
* @returns {Promise}
*/
__load: function (params) {
- if ('scales' in params) {
+ if ("scales" in params) {
this.scales = params.scales;
this.first_day = params.first_day;
this.last_day = params.last_day;
@@ -165,7 +163,7 @@ odoo.define('acc_cdc.operation_graph', function (require) {
* @returns {Promise}
*/
__reload: function (handle, params) {
- if ('scales' in params) {
+ if ("scales" in params) {
this.scales = params.scales;
this.first_day = params.first_day;
this.last_day = params.last_day;
@@ -178,24 +176,30 @@ odoo.define('acc_cdc.operation_graph', function (require) {
* @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) {
+ _loadChart: function (super_def) {
var self = this;
- var acc_counter_id = self._state.context.search_default_acc_delivery_operation_ids
- var domain = self._state.domain
+ var acc_counter_id =
+ self._state.context.search_default_acc_delivery_operation_ids;
+ var domain = self._state.domain;
var chart_def = this._rpc({
- model: 'acc.operation',
- method: 'graph_view',
- args: [domain, this.scales, this.first_day, this.last_day, acc_counter_id],
+ model: "acc.operation",
+ method: "graph_view",
+ args: [
+ domain,
+ this.scales,
+ this.first_day,
+ this.last_day,
+ acc_counter_id,
+ ],
context: this._state.context,
});
- return Promise.all([super_def, chart_def]).then(function(results) {
+ 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) {
@@ -206,13 +210,12 @@ odoo.define('acc_cdc.operation_graph', function (require) {
this.first_day = first_day;
this.last_day = last_day;
},
-
});
const Controller = qweb.Controller.extend({
custom_events: _.extend({}, qweb.Controller.prototype.custom_events, {
- chart_open_action: '_onChartClicked',
- cal_open_action: '_onCalClicked',
+ chart_open_action: "_onChartClicked",
+ cal_open_action: "_onCalClicked",
}),
init: function (parent, model, renderer, params) {
@@ -230,10 +233,9 @@ odoo.define('acc_cdc.operation_graph', function (require) {
this.model.setScale(e.data.action_name);
this.model.setDate(e.data.action_first_day, e.data.action_last_day);
var state = this.model.get();
- state.scale = e.data.action_name
- var context = e.data.action_context
- state.first_day = e.data.action_first_day
- state.last_day = e.data.action_last_day
+ state.scale = e.data.action_name;
+ state.first_day = e.data.action_first_day;
+ state.last_day = e.data.action_last_day;
this.reload();
},
@@ -242,19 +244,20 @@ odoo.define('acc_cdc.operation_graph', function (require) {
* @param {OdooEvent} e
*/
_onCalClicked: function (e) {
- state.date_start = e.data.date_start
- state.date_end = e.data.date_end
+ var state = this.model.get();
+ 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'],
+ searchMenuTypes: ["filter", "favorite"],
jsLibs: [
- '/web/static/lib/Chart/Chart.js',
- '/acc_cdc/static/src/lib/chartjs-plugin-datalabels/chartjs-plugin-datalabels.min.js',
- '/web/static/lib/moment/moment.js',
+ "/web/static/lib/Chart/Chart.js",
+ "/acc_cdc/static/src/lib/chartjs-plugin-datalabels/chartjs-plugin-datalabels.min.js",
+ "/web/static/lib/moment/moment.js",
],
config: _.extend({}, qweb.View.prototype.config, {
Model: Model,
@@ -264,15 +267,14 @@ odoo.define('acc_cdc.operation_graph', function (require) {
init: function (viewInfo, params) {
this._super.apply(this, arguments);
- this.controllerParams.scales = 'month';
- this.loadParams.scales = 'month';
- this.controllerParams.first_day = '';
- this.controllerParams.last_day = '';
- this.loadParams.first_day = '';
- this.loadParams.last_day = '';
+ this.controllerParams.scales = "month";
+ this.loadParams.scales = "month";
+ this.controllerParams.first_day = "";
+ this.controllerParams.last_day = "";
+ this.loadParams.first_day = "";
+ this.loadParams.last_day = "";
},
-
});
- viewRegistry.add('operation_graph', OperationGraph);
+ viewRegistry.add("operation_graph", OperationGraph);
});
diff --git a/static/src/lib/chartjs-plugin-datalabels/chartjs-plugin-datalabels.min.js b/static/src/lib/chartjs-plugin-datalabels/chartjs-plugin-datalabels.min.js
index 867126c..e27a913 100644
--- a/static/src/lib/chartjs-plugin-datalabels/chartjs-plugin-datalabels.min.js
+++ b/static/src/lib/chartjs-plugin-datalabels/chartjs-plugin-datalabels.min.js
@@ -1,7 +1,860 @@
-/*!
+/* !
* chartjs-plugin-datalabels v1.0.0
* https://chartjs-plugin-datalabels.netlify.app
* (c) 2017-2021 chartjs-plugin-datalabels contributors
* Released under the MIT license
*/
-!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("chart.js")):"function"==typeof define&&define.amd?define(["chart.js"],e):(t="undefined"!=typeof globalThis?globalThis:t||self).ChartDataLabels=e(t.Chart)}(this,(function(t){"use strict";function e(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var r=e(t),n=r.default.helpers,a=function(){if("undefined"!=typeof window){if(window.devicePixelRatio)return window.devicePixelRatio;var t=window.screen;if(t)return(t.deviceXDPI||1)/(t.logicalXDPI||1)}return 1}(),i={toTextLines:function(t){var e,r=[];for(t=[].concat(t);t.length;)"string"==typeof(e=t.pop())?r.unshift.apply(r,e.split("\n")):Array.isArray(e)?t.push.apply(t,e):n.isNullOrUndef(t)||r.unshift(""+e);return r},toFontString:function(t){return!t||n.isNullOrUndef(t.size)||n.isNullOrUndef(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family},textSize:function(t,e,r){var n,a=[].concat(e),i=a.length,o=t.font,l=0;for(t.font=r.string,n=0;n<i;++n)l=Math.max(t.measureText(a[n]).width,l);return t.font=o,{height:i*r.lineHeight,width:l}},parseFont:function(t){var e=r.default.defaults.global,a=n.valueOrDefault(t.size,e.defaultFontSize),o={family:n.valueOrDefault(t.family,e.defaultFontFamily),lineHeight:n.options.toLineHeight(t.lineHeight,a),size:a,style:n.valueOrDefault(t.style,e.defaultFontStyle),weight:n.valueOrDefault(t.weight,null),string:""};return o.string=i.toFontString(o),o},bound:function(t,e,r){return Math.max(t,Math.min(e,r))},arrayDiff:function(t,e){var r,n,a,i,o=t.slice(),l=[];for(r=0,a=e.length;r<a;++r)i=e[r],-1===(n=o.indexOf(i))?l.push([i,1]):o.splice(n,1);for(r=0,a=o.length;r<a;++r)l.push([o[r],-1]);return l},rasterize:function(t){return Math.round(t*a)/a}};function o(t,e){var r=e.x,n=e.y;if(null===r)return{x:0,y:-1};if(null===n)return{x:1,y:0};var a=t.x-r,i=t.y-n,o=Math.sqrt(a*a+i*i);return{x:o?a/o:0,y:o?i/o:-1}}function l(t,e,r){var n=0;return t<r.left?n|=1:t>r.right&&(n|=2),e<r.top?n|=8:e>r.bottom&&(n|=4),n}function s(t,e){var r,n,a=e.anchor,i=t;return e.clamp&&(i=function(t,e){for(var r,n,a,i=t.x0,o=t.y0,s=t.x1,u=t.y1,d=l(i,o,e),f=l(s,u,e);d|f&&!(d&f);)8&(r=d||f)?(n=i+(s-i)*(e.top-o)/(u-o),a=e.top):4&r?(n=i+(s-i)*(e.bottom-o)/(u-o),a=e.bottom):2&r?(a=o+(u-o)*(e.right-i)/(s-i),n=e.right):1&r&&(a=o+(u-o)*(e.left-i)/(s-i),n=e.left),r===d?d=l(i=n,o=a,e):f=l(s=n,u=a,e);return{x0:i,x1:s,y0:o,y1:u}}(i,e.area)),"start"===a?(r=i.x0,n=i.y0):"end"===a?(r=i.x1,n=i.y1):(r=(i.x0+i.x1)/2,n=(i.y0+i.y1)/2),function(t,e,r,n,a){switch(a){case"center":r=n=0;break;case"bottom":r=0,n=1;break;case"right":r=1,n=0;break;case"left":r=-1,n=0;break;case"top":r=0,n=-1;break;case"start":r=-r,n=-n;break;case"end":break;default:a*=Math.PI/180,r=Math.cos(a),n=Math.sin(a)}return{x:t,y:e,vx:r,vy:n}}(r,n,t.vx,t.vy,e.align)}var u=function(t,e){var r=(t.startAngle+t.endAngle)/2,n=Math.cos(r),a=Math.sin(r),i=t.innerRadius,o=t.outerRadius;return s({x0:t.x+n*i,y0:t.y+a*i,x1:t.x+n*o,y1:t.y+a*o,vx:n,vy:a},e)},d=function(t,e){var r=o(t,e.origin),n=r.x*t.radius,a=r.y*t.radius;return s({x0:t.x-n,y0:t.y-a,x1:t.x+n,y1:t.y+a,vx:r.x,vy:r.y},e)},f=function(t,e){var r=o(t,e.origin),n=t.x,a=t.y,i=0,l=0;return t.horizontal?(n=Math.min(t.x,t.base),i=Math.abs(t.base-t.x)):(a=Math.min(t.y,t.base),l=Math.abs(t.base-t.y)),s({x0:n,y0:a+l,x1:n+i,y1:a,vx:r.x,vy:r.y},e)},c=function(t,e){var r=o(t,e.origin);return s({x0:t.x,y0:t.y,x1:t.x,y1:t.y,vx:r.x,vy:r.y},e)},h=r.default.helpers,x=i.rasterize;function y(t){var e=t._model.horizontal,r=t._scale||e&&t._xScale||t._yScale;if(!r)return null;if(void 0!==r.xCenter&&void 0!==r.yCenter)return{x:r.xCenter,y:r.yCenter};var n=r.getBasePixel();return e?{x:n,y:null}:{x:null,y:n}}function v(t,e,r){var n=t.shadowBlur,a=r.stroked,i=x(r.x),o=x(r.y),l=x(r.w);a&&t.strokeText(e,i,o,l),r.filled&&(n&&a&&(t.shadowBlur=0),t.fillText(e,i,o,l),n&&a&&(t.shadowBlur=n))}var b=function(t,e,r,n){var a=this;a._config=t,a._index=n,a._model=null,a._rects=null,a._ctx=e,a._el=r};h.extend(b.prototype,{_modelize:function(t,e,n,a){var o,l=this,s=l._index,x=h.options.resolve,v=i.parseFont(x([n.font,{}],a,s)),b=x([n.color,r.default.defaults.global.defaultFontColor],a,s);return{align:x([n.align,"center"],a,s),anchor:x([n.anchor,"center"],a,s),area:a.chart.chartArea,backgroundColor:x([n.backgroundColor,null],a,s),borderColor:x([n.borderColor,null],a,s),borderRadius:x([n.borderRadius,0],a,s),borderWidth:x([n.borderWidth,0],a,s),clamp:x([n.clamp,!1],a,s),clip:x([n.clip,!1],a,s),color:b,display:t,font:v,lines:e,offset:x([n.offset,0],a,s),opacity:x([n.opacity,1],a,s),origin:y(l._el),padding:h.options.toPadding(x([n.padding,0],a,s)),positioner:(o=l._el,o instanceof r.default.elements.Arc?u:o instanceof r.default.elements.Point?d:o instanceof r.default.elements.Rectangle?f:c),rotation:x([n.rotation,0],a,s)*(Math.PI/180),size:i.textSize(l._ctx,e,v),textAlign:x([n.textAlign,"start"],a,s),textShadowBlur:x([n.textShadowBlur,0],a,s),textShadowColor:x([n.textShadowColor,b],a,s),textStrokeColor:x([n.textStrokeColor,b],a,s),textStrokeWidth:x([n.textStrokeWidth,0],a,s)}},update:function(t){var e,r,n,a=this,o=null,l=null,s=a._index,u=a._config,d=h.options.resolve([u.display,!0],t,s);d&&(e=t.dataset.data[s],r=h.valueOrDefault(h.callback(u.formatter,[e,t]),e),(n=h.isNullOrUndef(r)?[]:i.toTextLines(r)).length&&(l=function(t){var e=t.borderWidth||0,r=t.padding,n=t.size.height,a=t.size.width,i=-a/2,o=-n/2;return{frame:{x:i-r.left-e,y:o-r.top-e,w:a+r.width+2*e,h:n+r.height+2*e},text:{x:i,y:o,w:a,h:n}}}(o=a._modelize(d,n,u,t)))),a._model=o,a._rects=l},geometry:function(){return this._rects?this._rects.frame:{}},rotation:function(){return this._model?this._model.rotation:0},visible:function(){return this._model&&this._model.opacity},model:function(){return this._model},draw:function(t,e){var r,n=t.ctx,a=this._model,o=this._rects;this.visible()&&(n.save(),a.clip&&(r=a.area,n.beginPath(),n.rect(r.left,r.top,r.right-r.left,r.bottom-r.top),n.clip()),n.globalAlpha=i.bound(0,a.opacity,1),n.translate(x(e.x),x(e.y)),n.rotate(a.rotation),function(t,e,r){var n=r.backgroundColor,a=r.borderColor,i=r.borderWidth;(n||a&&i)&&(t.beginPath(),h.canvas.roundedRect(t,x(e.x)+i/2,x(e.y)+i/2,x(e.w)-i,x(e.h)-i,r.borderRadius),t.closePath(),n&&(t.fillStyle=n,t.fill()),a&&i&&(t.strokeStyle=a,t.lineWidth=i,t.lineJoin="miter",t.stroke()))}(n,o.frame,a),function(t,e,r,n){var a,i=n.textAlign,o=n.color,l=!!o,s=n.font,u=e.length,d=n.textStrokeColor,f=n.textStrokeWidth,c=d&&f;if(u&&(l||c))for(r=function(t,e,r){var n=r.lineHeight,a=t.w,i=t.x;return"center"===e?i+=a/2:"end"!==e&&"right"!==e||(i+=a),{h:n,w:a,x:i,y:t.y+n/2}}(r,i,s),t.font=s.string,t.textAlign=i,t.textBaseline="middle",t.shadowBlur=n.textShadowBlur,t.shadowColor=n.textShadowColor,l&&(t.fillStyle=o),c&&(t.lineJoin="round",t.lineWidth=f,t.strokeStyle=d),a=0,u=e.length;a<u;++a)v(t,e[a],{stroked:c,filled:l,w:r.w,x:r.x,y:r.y+r.h*a})}(n,a.lines,o.text,a),n.restore())}});var _=r.default.helpers,p=Number.MIN_SAFE_INTEGER||-9007199254740991,g=Number.MAX_SAFE_INTEGER||9007199254740991;function m(t,e,r){var n=Math.cos(r),a=Math.sin(r),i=e.x,o=e.y;return{x:i+n*(t.x-i)-a*(t.y-o),y:o+a*(t.x-i)+n*(t.y-o)}}function w(t,e){var r,n,a,i,o,l=g,s=p,u=e.origin;for(r=0;r<t.length;++r)a=(n=t[r]).x-u.x,i=n.y-u.y,o=e.vx*a+e.vy*i,l=Math.min(l,o),s=Math.max(s,o);return{min:l,max:s}}function k(t,e){var r=e.x-t.x,n=e.y-t.y,a=Math.sqrt(r*r+n*n);return{vx:(e.x-t.x)/a,vy:(e.y-t.y)/a,origin:t,ln:a}}var M=function(){this._rotation=0,this._rect={x:0,y:0,w:0,h:0}};function S(t,e,r){var n=e.positioner(t,e),a=n.vx,i=n.vy;if(!a&&!i)return{x:n.x,y:n.y};var o=r.w,l=r.h,s=e.rotation,u=Math.abs(o/2*Math.cos(s))+Math.abs(l/2*Math.sin(s)),d=Math.abs(o/2*Math.sin(s))+Math.abs(l/2*Math.cos(s)),f=1/Math.max(Math.abs(a),Math.abs(i));return u*=a*f,d*=i*f,u+=e.offset*a,d+=e.offset*i,{x:n.x+u,y:n.y+d}}_.extend(M.prototype,{center:function(){var t=this._rect;return{x:t.x+t.w/2,y:t.y+t.h/2}},update:function(t,e,r){this._rotation=r,this._rect={x:e.x+t.x,y:e.y+t.y,w:e.w,h:e.h}},contains:function(t){var e=this,r=e._rect;return!((t=m(t,e.center(),-e._rotation)).x<r.x-1||t.y<r.y-1||t.x>r.x+r.w+2||t.y>r.y+r.h+2)},intersects:function(t){var e,r,n,a=this._points(),i=t._points(),o=[k(a[0],a[1]),k(a[0],a[3])];for(this._rotation!==t._rotation&&o.push(k(i[0],i[1]),k(i[0],i[3])),e=0;e<o.length;++e)if(r=w(a,o[e]),n=w(i,o[e]),r.max<n.min||n.max<r.min)return!1;return!0},_points:function(){var t=this,e=t._rect,r=t._rotation,n=t.center();return[m({x:e.x,y:e.y},n,r),m({x:e.x+e.w,y:e.y},n,r),m({x:e.x+e.w,y:e.y+e.h},n,r),m({x:e.x,y:e.y+e.h},n,r)]}});var $={prepare:function(t){var e,r,n,a,i,o=[];for(e=0,n=t.length;e<n;++e)for(r=0,a=t[e].length;r<a;++r)i=t[e][r],o.push(i),i.$layout={_box:new M,_hidable:!1,_visible:!0,_set:e,_idx:r};return o.sort((function(t,e){var r=t.$layout,n=e.$layout;return r._idx===n._idx?n._set-r._set:n._idx-r._idx})),this.update(o),o},update:function(t){var e,r,n,a,i,o=!1;for(e=0,r=t.length;e<r;++e)a=(n=t[e]).model(),(i=n.$layout)._hidable=a&&"auto"===a.display,i._visible=n.visible(),o|=i._hidable;o&&function(t){var e,r,n,a,i,o;for(e=0,r=t.length;e<r;++e)(a=(n=t[e]).$layout)._visible&&(i=n.geometry(),o=S(n._el._model,n.model(),i),a._box.update(o,i,n.rotation()));(function(t,e){var r,n,a,i;for(r=t.length-1;r>=0;--r)for(a=t[r].$layout,n=r-1;n>=0&&a._visible;--n)(i=t[n].$layout)._visible&&a._box.intersects(i._box)&&e(a,i)})(t,(function(t,e){var r=t._hidable,n=e._hidable;r&&n||n?e._visible=!1:r&&(t._visible=!1)}))}(t)},lookup:function(t,e){var r,n;for(r=t.length-1;r>=0;--r)if((n=t[r].$layout)&&n._visible&&n._box.contains(e))return t[r];return null},draw:function(t,e){var r,n,a,i,o,l;for(r=0,n=e.length;r<n;++r)(i=(a=e[r]).$layout)._visible&&(o=a.geometry(),l=S(a._el._view,a.model(),o),i._box.update(l,o,a.rotation()),a.draw(t,l))}},C=r.default.helpers,z={align:"center",anchor:"center",backgroundColor:null,borderColor:null,borderRadius:0,borderWidth:0,clamp:!1,clip:!1,color:void 0,display:!0,font:{family:void 0,lineHeight:1.2,size:void 0,style:void 0,weight:null},formatter:function(t){if(C.isNullOrUndef(t))return null;var e,r,n,a=t;if(C.isObject(t))if(C.isNullOrUndef(t.label))if(C.isNullOrUndef(t.r))for(a="",n=0,r=(e=Object.keys(t)).length;n<r;++n)a+=(0!==n?", ":"")+e[n]+": "+t[e[n]];else a=t.r;else a=t.label;return""+a},labels:void 0,listeners:{},offset:4,opacity:1,padding:{top:4,right:4,bottom:4,left:4},rotation:0,textAlign:"start",textStrokeColor:void 0,textStrokeWidth:0,textShadowBlur:0,textShadowColor:void 0},A=r.default.helpers,O="$default";function D(t,e,r){if(e){var n,a=r.$context,i=r.$groups;e[i._set]&&(n=e[i._set][i._key])&&!0===A.callback(n,[a])&&(t.$datalabels._dirty=!0,r.update(a))}}function N(t,e){var r,n,a=t.$datalabels,i=a._listeners;if(i.enter||i.leave){if("mousemove"===e.type)n=$.lookup(a._labels,e);else if("mouseout"!==e.type)return;r=a._hovered,a._hovered=n,function(t,e,r,n){var a,i;(r||n)&&(r?n?r!==n&&(i=a=!0):i=!0:a=!0,i&&D(t,e.leave,r),a&&D(t,e.enter,n))}(t,i,r,n)}}return r.default.defaults.global.plugins.datalabels=z,{id:"datalabels",beforeInit:function(t){t.$datalabels={_actives:[]}},beforeUpdate:function(t){var e=t.$datalabels;e._listened=!1,e._listeners={},e._datasets=[],e._labels=[]},afterDatasetUpdate:function(t,e,r){var n,a,i,o,l,s,u,d,f=e.index,c=t.$datalabels,h=c._datasets[f]=[],x=t.isDatasetVisible(f),y=t.data.datasets[f],v=function(t,e){var r,n,a,i=t.datalabels,o=[];return!1===i?null:(!0===i&&(i={}),e=A.merge({},[e,i]),n=e.labels||{},a=Object.keys(n),delete e.labels,a.length?a.forEach((function(t){n[t]&&o.push(A.merge({},[e,n[t],{_key:t}]))})):o.push(e),r=o.reduce((function(t,e){return A.each(e.listeners||{},(function(r,n){t[n]=t[n]||{},t[n][e._key||O]=r})),delete e.listeners,t}),{}),{labels:o,listeners:r})}(y,r),_=e.meta.data||[],p=t.ctx;for(p.save(),n=0,i=_.length;n<i;++n)if((u=_[n]).$datalabels=[],x&&u&&!u.hidden&&!u._model.skip)for(a=0,o=v.labels.length;a<o;++a)s=(l=v.labels[a])._key,(d=new b(l,p,u,n)).$groups={_set:f,_key:s||O},d.$context={active:!1,chart:t,dataIndex:n,dataset:y,datasetIndex:f},d.update(d.$context),u.$datalabels.push(d),h.push(d);p.restore(),A.merge(c._listeners,v.listeners,{merger:function(t,r,n){r[t]=r[t]||{},r[t][e.index]=n[t],c._listened=!0}})},afterUpdate:function(t,e){t.$datalabels._labels=$.prepare(t.$datalabels._datasets,e)},afterDatasetsDraw:function(t){$.draw(t,t.$datalabels._labels)},beforeEvent:function(t,e){if(t.$datalabels._listened)switch(e.type){case"mousemove":case"mouseout":N(t,e);break;case"click":!function(t,e){var r=t.$datalabels,n=r._listeners.click,a=n&&$.lookup(r._labels,e);a&&D(t,n,a)}(t,e)}},afterEvent:function(t){var e,n,a,o,l,s,u,d=t.$datalabels,f=d._actives,c=d._actives=t.lastActive||[],h=i.arrayDiff(f,c);for(e=0,n=h.length;e<n;++e)if((l=h[e])[1])for(a=0,o=(u=l[0].$datalabels||[]).length;a<o;++a)(s=u[a]).$context.active=1===l[1],s.update(s.$context);(d._dirty||h.length)&&($.update(d._labels),function(t){if(!t.animating){for(var e=r.default.animationService.animations,n=0,a=e.length;n<a;++n)if(e[n].chart===t)return;t.render({duration:1,lazy:!0})}}(t)),delete d._dirty}}}));
+!(function (t, e) {
+ typeof exports === "object" && typeof module !== "undefined"
+ ? (module.exports = e(require("chart.js")))
+ : typeof define === "function" && define.amd
+ ? define(["chart.js"], e)
+ : ((t =
+ typeof globalThis !== "undefined"
+ ? globalThis
+ : t || self).ChartDataLabels = e(t.Chart));
+})(this, function (t) {
+ "use strict";
+ function e(t) {
+ return t && typeof t === "object" && "default" in t ? t : {default: t};
+ }
+ var r = e(t),
+ n = r.default.helpers,
+ a = (function () {
+ if (typeof window !== "undefined") {
+ if (window.devicePixelRatio) return window.devicePixelRatio;
+ var t = window.screen;
+ if (t) return (t.deviceXDPI || 1) / (t.logicalXDPI || 1);
+ }
+ return 1;
+ })(),
+ i = {
+ toTextLines: function (t) {
+ var e,
+ r = [];
+ for (t = [].concat(t); t.length; )
+ typeof (e = t.pop()) === "string"
+ ? r.unshift.apply(r, e.split("\n"))
+ : Array.isArray(e)
+ ? t.push.apply(t, e)
+ : n.isNullOrUndef(t) || r.unshift(String(e));
+ return r;
+ },
+ toFontString: function (t) {
+ return !t || n.isNullOrUndef(t.size) || n.isNullOrUndef(t.family)
+ ? null
+ : (t.style ? t.style + " " : "") +
+ (t.weight ? t.weight + " " : "") +
+ t.size +
+ "px " +
+ t.family;
+ },
+ textSize: function (t, e, r) {
+ var n,
+ a = [].concat(e),
+ i = a.length,
+ o = t.font,
+ l = 0;
+ for (t.font = r.string, n = 0; n < i; ++n)
+ l = Math.max(t.measureText(a[n]).width, l);
+ return (t.font = o), {height: i * r.lineHeight, width: l};
+ },
+ parseFont: function (t) {
+ var e = r.default.defaults.global,
+ a = n.valueOrDefault(t.size, e.defaultFontSize),
+ o = {
+ family: n.valueOrDefault(t.family, e.defaultFontFamily),
+ lineHeight: n.options.toLineHeight(t.lineHeight, a),
+ size: a,
+ style: n.valueOrDefault(t.style, e.defaultFontStyle),
+ weight: n.valueOrDefault(t.weight, null),
+ string: "",
+ };
+ return (o.string = i.toFontString(o)), o;
+ },
+ bound: function (t, e, r) {
+ return Math.max(t, Math.min(e, r));
+ },
+ arrayDiff: function (t, e) {
+ var r,
+ n,
+ a,
+ i,
+ o = t.slice(),
+ l = [];
+ for (r = 0, a = e.length; r < a; ++r)
+ (i = e[r]),
+ (n = o.indexOf(i)) === -1 ? l.push([i, 1]) : o.splice(n, 1);
+ for (r = 0, a = o.length; r < a; ++r) l.push([o[r], -1]);
+ return l;
+ },
+ rasterize: function (t) {
+ return Math.round(t * a) / a;
+ },
+ };
+ function o(t, e) {
+ var r = e.x,
+ n = e.y;
+ if (r === null) return {x: 0, y: -1};
+ if (n === null) return {x: 1, y: 0};
+ var a = t.x - r,
+ i = t.y - n,
+ o = Math.sqrt(a * a + i * i);
+ return {x: o ? a / o : 0, y: o ? i / o : -1};
+ }
+ function l(t, e, r) {
+ var n = 0;
+ return (
+ t < r.left ? (n |= 1) : t > r.right && (n |= 2),
+ e < r.top ? (n |= 8) : e > r.bottom && (n |= 4),
+ n
+ );
+ }
+ function s(t, e) {
+ var r,
+ n,
+ a = e.anchor,
+ i = t;
+ return (
+ e.clamp &&
+ (i = (function (t, e) {
+ for (
+ var r,
+ n,
+ a,
+ i = t.x0,
+ o = t.y0,
+ s = t.x1,
+ u = t.y1,
+ d = l(i, o, e),
+ f = l(s, u, e);
+ d | f && !(d & f);
+
+ )
+ 8 & (r = d || f)
+ ? ((n = i + ((s - i) * (e.top - o)) / (u - o)), (a = e.top))
+ : 4 & r
+ ? ((n = i + ((s - i) * (e.bottom - o)) / (u - o)),
+ (a = e.bottom))
+ : 2 & r
+ ? ((a = o + ((u - o) * (e.right - i)) / (s - i)),
+ (n = e.right))
+ : 1 & r &&
+ ((a = o + ((u - o) * (e.left - i)) / (s - i)),
+ (n = e.left)),
+ r === d
+ ? (d = l((i = n), (o = a), e))
+ : (f = l((s = n), (u = a), e));
+ return {x0: i, x1: s, y0: o, y1: u};
+ })(i, e.area)),
+ a === "start"
+ ? ((r = i.x0), (n = i.y0))
+ : a === "end"
+ ? ((r = i.x1), (n = i.y1))
+ : ((r = (i.x0 + i.x1) / 2), (n = (i.y0 + i.y1) / 2)),
+ (function (t, e, r, n, a) {
+ switch (a) {
+ case "center":
+ r = n = 0;
+ break;
+ case "bottom":
+ (r = 0), (n = 1);
+ break;
+ case "right":
+ (r = 1), (n = 0);
+ break;
+ case "left":
+ (r = -1), (n = 0);
+ break;
+ case "top":
+ (r = 0), (n = -1);
+ break;
+ case "start":
+ (r = -r), (n = -n);
+ break;
+ case "end":
+ break;
+ default:
+ (a *= Math.PI / 180), (r = Math.cos(a)), (n = Math.sin(a));
+ }
+ return {x: t, y: e, vx: r, vy: n};
+ })(r, n, t.vx, t.vy, e.align)
+ );
+ }
+ var u = function (t, e) {
+ var r = (t.startAngle + t.endAngle) / 2,
+ n = Math.cos(r),
+ a = Math.sin(r),
+ i = t.innerRadius,
+ o = t.outerRadius;
+ return s(
+ {
+ x0: t.x + n * i,
+ y0: t.y + a * i,
+ x1: t.x + n * o,
+ y1: t.y + a * o,
+ vx: n,
+ vy: a,
+ },
+ e
+ );
+ },
+ d = function (t, e) {
+ var r = o(t, e.origin),
+ n = r.x * t.radius,
+ a = r.y * t.radius;
+ return s(
+ {x0: t.x - n, y0: t.y - a, x1: t.x + n, y1: t.y + a, vx: r.x, vy: r.y},
+ e
+ );
+ },
+ f = function (t, e) {
+ var r = o(t, e.origin),
+ n = t.x,
+ a = t.y,
+ i = 0,
+ l = 0;
+ return (
+ t.horizontal
+ ? ((n = Math.min(t.x, t.base)), (i = Math.abs(t.base - t.x)))
+ : ((a = Math.min(t.y, t.base)), (l = Math.abs(t.base - t.y))),
+ s({x0: n, y0: a + l, x1: n + i, y1: a, vx: r.x, vy: r.y}, e)
+ );
+ },
+ c = function (t, e) {
+ var r = o(t, e.origin);
+ return s({x0: t.x, y0: t.y, x1: t.x, y1: t.y, vx: r.x, vy: r.y}, e);
+ },
+ h = r.default.helpers,
+ x = i.rasterize;
+ function y(t) {
+ var e = t._model.horizontal,
+ r = t._scale || (e && t._xScale) || t._yScale;
+ if (!r) return null;
+ if (void 0 !== r.xCenter && void 0 !== r.yCenter)
+ return {x: r.xCenter, y: r.yCenter};
+ var n = r.getBasePixel();
+ return e ? {x: n, y: null} : {x: null, y: n};
+ }
+ function v(t, e, r) {
+ var n = t.shadowBlur,
+ a = r.stroked,
+ i = x(r.x),
+ o = x(r.y),
+ l = x(r.w);
+ a && t.strokeText(e, i, o, l),
+ r.filled &&
+ (n && a && (t.shadowBlur = 0),
+ t.fillText(e, i, o, l),
+ n && a && (t.shadowBlur = n));
+ }
+ var b = function (t, e, r, n) {
+ var a = this;
+ (a._config = t),
+ (a._index = n),
+ (a._model = null),
+ (a._rects = null),
+ (a._ctx = e),
+ (a._el = r);
+ };
+ h.extend(b.prototype, {
+ _modelize: function (t, e, n, a) {
+ var o,
+ l = this,
+ s = l._index,
+ x = h.options.resolve,
+ v = i.parseFont(x([n.font, {}], a, s)),
+ b = x([n.color, r.default.defaults.global.defaultFontColor], a, s);
+ return {
+ align: x([n.align, "center"], a, s),
+ anchor: x([n.anchor, "center"], a, s),
+ area: a.chart.chartArea,
+ backgroundColor: x([n.backgroundColor, null], a, s),
+ borderColor: x([n.borderColor, null], a, s),
+ borderRadius: x([n.borderRadius, 0], a, s),
+ borderWidth: x([n.borderWidth, 0], a, s),
+ clamp: x([n.clamp, !1], a, s),
+ clip: x([n.clip, !1], a, s),
+ color: b,
+ display: t,
+ font: v,
+ lines: e,
+ offset: x([n.offset, 0], a, s),
+ opacity: x([n.opacity, 1], a, s),
+ origin: y(l._el),
+ padding: h.options.toPadding(x([n.padding, 0], a, s)),
+ positioner:
+ ((o = l._el),
+ o instanceof r.default.elements.Arc
+ ? u
+ : o instanceof r.default.elements.Point
+ ? d
+ : o instanceof r.default.elements.Rectangle
+ ? f
+ : c),
+ rotation: x([n.rotation, 0], a, s) * (Math.PI / 180),
+ size: i.textSize(l._ctx, e, v),
+ textAlign: x([n.textAlign, "start"], a, s),
+ textShadowBlur: x([n.textShadowBlur, 0], a, s),
+ textShadowColor: x([n.textShadowColor, b], a, s),
+ textStrokeColor: x([n.textStrokeColor, b], a, s),
+ textStrokeWidth: x([n.textStrokeWidth, 0], a, s),
+ };
+ },
+ update: function (t) {
+ var e,
+ r,
+ n,
+ a = this,
+ o = null,
+ l = null,
+ s = a._index,
+ u = a._config,
+ d = h.options.resolve([u.display, !0], t, s);
+ d &&
+ ((e = t.dataset.data[s]),
+ (r = h.valueOrDefault(h.callback(u.formatter, [e, t]), e)),
+ (n = h.isNullOrUndef(r) ? [] : i.toTextLines(r)).length &&
+ (l = (function (t) {
+ var e = t.borderWidth || 0,
+ r = t.padding,
+ n = t.size.height,
+ a = t.size.width,
+ i = -a / 2,
+ o = -n / 2;
+ return {
+ frame: {
+ x: i - r.left - e,
+ y: o - r.top - e,
+ w: a + r.width + 2 * e,
+ h: n + r.height + 2 * e,
+ },
+ text: {x: i, y: o, w: a, h: n},
+ };
+ })((o = a._modelize(d, n, u, t))))),
+ (a._model = o),
+ (a._rects = l);
+ },
+ geometry: function () {
+ return this._rects ? this._rects.frame : {};
+ },
+ rotation: function () {
+ return this._model ? this._model.rotation : 0;
+ },
+ visible: function () {
+ return this._model && this._model.opacity;
+ },
+ model: function () {
+ return this._model;
+ },
+ draw: function (t, e) {
+ var r,
+ n = t.ctx,
+ a = this._model,
+ o = this._rects;
+ this.visible() &&
+ (n.save(),
+ a.clip &&
+ ((r = a.area),
+ n.beginPath(),
+ n.rect(r.left, r.top, r.right - r.left, r.bottom - r.top),
+ n.clip()),
+ (n.globalAlpha = i.bound(0, a.opacity, 1)),
+ n.translate(x(e.x), x(e.y)),
+ n.rotate(a.rotation),
+ (function (t, e, r) {
+ var n = r.backgroundColor,
+ a = r.borderColor,
+ i = r.borderWidth;
+ (n || (a && i)) &&
+ (t.beginPath(),
+ h.canvas.roundedRect(
+ t,
+ x(e.x) + i / 2,
+ x(e.y) + i / 2,
+ x(e.w) - i,
+ x(e.h) - i,
+ r.borderRadius
+ ),
+ t.closePath(),
+ n && ((t.fillStyle = n), t.fill()),
+ a &&
+ i &&
+ ((t.strokeStyle = a),
+ (t.lineWidth = i),
+ (t.lineJoin = "miter"),
+ t.stroke()));
+ })(n, o.frame, a),
+ (function (t, e, r, n) {
+ var a,
+ i = n.textAlign,
+ o = n.color,
+ l = Boolean(o),
+ s = n.font,
+ u = e.length,
+ d = n.textStrokeColor,
+ f = n.textStrokeWidth,
+ c = d && f;
+ if (u && (l || c))
+ for (
+ r = (function (t, e, r) {
+ var n = r.lineHeight,
+ a = t.w,
+ i = t.x;
+ return (
+ e === "center"
+ ? (i += a / 2)
+ : (e !== "end" && e !== "right") || (i += a),
+ {h: n, w: a, x: i, y: t.y + n / 2}
+ );
+ })(r, i, s),
+ t.font = s.string,
+ t.textAlign = i,
+ t.textBaseline = "middle",
+ t.shadowBlur = n.textShadowBlur,
+ t.shadowColor = n.textShadowColor,
+ l && (t.fillStyle = o),
+ c &&
+ ((t.lineJoin = "round"),
+ (t.lineWidth = f),
+ (t.strokeStyle = d)),
+ a = 0,
+ u = e.length;
+ a < u;
+ ++a
+ )
+ v(t, e[a], {
+ stroked: c,
+ filled: l,
+ w: r.w,
+ x: r.x,
+ y: r.y + r.h * a,
+ });
+ })(n, a.lines, o.text, a),
+ n.restore());
+ },
+ });
+ var _ = r.default.helpers,
+ p = Number.MIN_SAFE_INTEGER || -9007199254740991,
+ g = Number.MAX_SAFE_INTEGER || 9007199254740991;
+ function m(t, e, r) {
+ var n = Math.cos(r),
+ a = Math.sin(r),
+ i = e.x,
+ o = e.y;
+ return {
+ x: i + n * (t.x - i) - a * (t.y - o),
+ y: o + a * (t.x - i) + n * (t.y - o),
+ };
+ }
+ function w(t, e) {
+ var r,
+ n,
+ a,
+ i,
+ o,
+ l = g,
+ s = p,
+ u = e.origin;
+ for (r = 0; r < t.length; ++r)
+ (a = (n = t[r]).x - u.x),
+ (i = n.y - u.y),
+ (o = e.vx * a + e.vy * i),
+ (l = Math.min(l, o)),
+ (s = Math.max(s, o));
+ return {min: l, max: s};
+ }
+ function k(t, e) {
+ var r = e.x - t.x,
+ n = e.y - t.y,
+ a = Math.sqrt(r * r + n * n);
+ return {vx: (e.x - t.x) / a, vy: (e.y - t.y) / a, origin: t, ln: a};
+ }
+ var M = function () {
+ (this._rotation = 0), (this._rect = {x: 0, y: 0, w: 0, h: 0});
+ };
+ function S(t, e, r) {
+ var n = e.positioner(t, e),
+ a = n.vx,
+ i = n.vy;
+ if (!a && !i) return {x: n.x, y: n.y};
+ var o = r.w,
+ l = r.h,
+ s = e.rotation,
+ u = Math.abs((o / 2) * Math.cos(s)) + Math.abs((l / 2) * Math.sin(s)),
+ d = Math.abs((o / 2) * Math.sin(s)) + Math.abs((l / 2) * Math.cos(s)),
+ f = 1 / Math.max(Math.abs(a), Math.abs(i));
+ return (
+ (u *= a * f),
+ (d *= i * f),
+ (u += e.offset * a),
+ (d += e.offset * i),
+ {x: n.x + u, y: n.y + d}
+ );
+ }
+ _.extend(M.prototype, {
+ center: function () {
+ var t = this._rect;
+ return {x: t.x + t.w / 2, y: t.y + t.h / 2};
+ },
+ update: function (t, e, r) {
+ (this._rotation = r),
+ (this._rect = {x: e.x + t.x, y: e.y + t.y, w: e.w, h: e.h});
+ },
+ contains: function (t) {
+ var e = this,
+ r = e._rect;
+ return !(
+ (t = m(t, e.center(), -e._rotation)).x < r.x - 1 ||
+ t.y < r.y - 1 ||
+ t.x > r.x + r.w + 2 ||
+ t.y > r.y + r.h + 2
+ );
+ },
+ intersects: function (t) {
+ var e,
+ r,
+ n,
+ a = this._points(),
+ i = t._points(),
+ o = [k(a[0], a[1]), k(a[0], a[3])];
+ for (
+ this._rotation !== t._rotation && o.push(k(i[0], i[1]), k(i[0], i[3])),
+ e = 0;
+ e < o.length;
+ ++e
+ )
+ if (
+ ((r = w(a, o[e])), (n = w(i, o[e])), r.max < n.min || n.max < r.min)
+ )
+ return !1;
+ return !0;
+ },
+ _points: function () {
+ var t = this,
+ e = t._rect,
+ r = t._rotation,
+ n = t.center();
+ return [
+ m({x: e.x, y: e.y}, n, r),
+ m({x: e.x + e.w, y: e.y}, n, r),
+ m({x: e.x + e.w, y: e.y + e.h}, n, r),
+ m({x: e.x, y: e.y + e.h}, n, r),
+ ];
+ },
+ });
+ var $ = {
+ prepare: function (t) {
+ var e,
+ r,
+ n,
+ a,
+ i,
+ o = [];
+ for (e = 0, n = t.length; e < n; ++e)
+ for (r = 0, a = t[e].length; r < a; ++r)
+ (i = t[e][r]),
+ o.push(i),
+ (i.$layout = {
+ _box: new M(),
+ _hidable: !1,
+ _visible: !0,
+ _set: e,
+ _idx: r,
+ });
+ return (
+ o.sort(function (t, e) {
+ var r = t.$layout,
+ n = e.$layout;
+ return r._idx === n._idx ? n._set - r._set : n._idx - r._idx;
+ }),
+ this.update(o),
+ o
+ );
+ },
+ update: function (t) {
+ var e,
+ r,
+ n,
+ a,
+ i,
+ o = !1;
+ for (e = 0, r = t.length; e < r; ++e)
+ (a = (n = t[e]).model()),
+ ((i = n.$layout)._hidable = a && a.display === "auto"),
+ (i._visible = n.visible()),
+ (o |= i._hidable);
+ o &&
+ (function (t) {
+ var e, r, n, a, i, o;
+ for (e = 0, r = t.length; e < r; ++e)
+ (a = (n = t[e]).$layout)._visible &&
+ ((i = n.geometry()),
+ (o = S(n._el._model, n.model(), i)),
+ a._box.update(o, i, n.rotation()));
+ (function (t, e) {
+ var r, n, a, i;
+ for (r = t.length - 1; r >= 0; --r)
+ for (
+ a = t[r].$layout, n = r - 1;
+ n >= 0 && a._visible;
+ --n
+ )
+ (i = t[n].$layout)._visible &&
+ a._box.intersects(i._box) &&
+ e(a, i);
+ })(t, function (t, e) {
+ var r = t._hidable,
+ n = e._hidable;
+ (r && n) || n ? (e._visible = !1) : r && (t._visible = !1);
+ });
+ })(t);
+ },
+ lookup: function (t, e) {
+ var r, n;
+ for (r = t.length - 1; r >= 0; --r)
+ if ((n = t[r].$layout) && n._visible && n._box.contains(e))
+ return t[r];
+ return null;
+ },
+ draw: function (t, e) {
+ var r, n, a, i, o, l;
+ for (r = 0, n = e.length; r < n; ++r)
+ (i = (a = e[r]).$layout)._visible &&
+ ((o = a.geometry()),
+ (l = S(a._el._view, a.model(), o)),
+ i._box.update(l, o, a.rotation()),
+ a.draw(t, l));
+ },
+ },
+ C = r.default.helpers,
+ z = {
+ align: "center",
+ anchor: "center",
+ backgroundColor: null,
+ borderColor: null,
+ borderRadius: 0,
+ borderWidth: 0,
+ clamp: !1,
+ clip: !1,
+ color: void 0,
+ display: !0,
+ font: {
+ family: void 0,
+ lineHeight: 1.2,
+ size: void 0,
+ style: void 0,
+ weight: null,
+ },
+ formatter: function (t) {
+ if (C.isNullOrUndef(t)) return null;
+ var e,
+ r,
+ n,
+ a = t;
+ if (C.isObject(t))
+ if (C.isNullOrUndef(t.label))
+ if (C.isNullOrUndef(t.r))
+ for (
+ a = "", n = 0, r = (e = Object.keys(t)).length;
+ n < r;
+ ++n
+ )
+ a += (n !== 0 ? ", " : "") + e[n] + ": " + t[e[n]];
+ else a = t.r;
+ else a = t.label;
+ return String(a);
+ },
+ labels: void 0,
+ listeners: {},
+ offset: 4,
+ opacity: 1,
+ padding: {top: 4, right: 4, bottom: 4, left: 4},
+ rotation: 0,
+ textAlign: "start",
+ textStrokeColor: void 0,
+ textStrokeWidth: 0,
+ textShadowBlur: 0,
+ textShadowColor: void 0,
+ },
+ A = r.default.helpers,
+ O = "$default";
+ function D(t, e, r) {
+ if (e) {
+ var n,
+ a = r.$context,
+ i = r.$groups;
+ e[i._set] &&
+ (n = e[i._set][i._key]) &&
+ !0 === A.callback(n, [a]) &&
+ ((t.$datalabels._dirty = !0), r.update(a));
+ }
+ }
+ function N(t, e) {
+ var r,
+ n,
+ a = t.$datalabels,
+ i = a._listeners;
+ if (i.enter || i.leave) {
+ if (e.type === "mousemove") n = $.lookup(a._labels, e);
+ else if (e.type !== "mouseout") return;
+ (r = a._hovered),
+ (a._hovered = n),
+ (function (t, e, r, n) {
+ var a, i;
+ (r || n) &&
+ (r ? (n ? r !== n && (i = a = !0) : (i = !0)) : (a = !0),
+ i && D(t, e.leave, r),
+ a && D(t, e.enter, n));
+ })(t, i, r, n);
+ }
+ }
+ return (
+ (r.default.defaults.global.plugins.datalabels = z),
+ {
+ id: "datalabels",
+ beforeInit: function (t) {
+ t.$datalabels = {_actives: []};
+ },
+ beforeUpdate: function (t) {
+ var e = t.$datalabels;
+ (e._listened = !1),
+ (e._listeners = {}),
+ (e._datasets = []),
+ (e._labels = []);
+ },
+ afterDatasetUpdate: function (t, e, r) {
+ var n,
+ a,
+ i,
+ o,
+ l,
+ s,
+ u,
+ d,
+ f = e.index,
+ c = t.$datalabels,
+ h = (c._datasets[f] = []),
+ x = t.isDatasetVisible(f),
+ y = t.data.datasets[f],
+ v = (function (t, e) {
+ var r,
+ n,
+ a,
+ i = t.datalabels,
+ o = [];
+ return !1 === i
+ ? null
+ : (!0 === i && (i = {}),
+ (e = A.merge({}, [e, i])),
+ (n = e.labels || {}),
+ (a = Object.keys(n)),
+ delete e.labels,
+ a.length
+ ? a.forEach(function (t) {
+ n[t] &&
+ o.push(A.merge({}, [e, n[t], {_key: t}]));
+ })
+ : o.push(e),
+ (r = o.reduce(function (t, e) {
+ return (
+ A.each(e.listeners || {}, function (r, n) {
+ (t[n] = t[n] || {}), (t[n][e._key || O] = r);
+ }),
+ delete e.listeners,
+ t
+ );
+ }, {})),
+ {labels: o, listeners: r});
+ })(y, r),
+ _ = e.meta.data || [],
+ p = t.ctx;
+ for (p.save(), n = 0, i = _.length; n < i; ++n)
+ if (
+ (((u = _[n]).$datalabels = []),
+ x && u && !u.hidden && !u._model.skip)
+ )
+ for (a = 0, o = v.labels.length; a < o; ++a)
+ (s = (l = v.labels[a])._key),
+ ((d = new b(l, p, u, n)).$groups = {
+ _set: f,
+ _key: s || O,
+ }),
+ (d.$context = {
+ active: !1,
+ chart: t,
+ dataIndex: n,
+ dataset: y,
+ datasetIndex: f,
+ }),
+ d.update(d.$context),
+ u.$datalabels.push(d),
+ h.push(d);
+ p.restore(),
+ A.merge(c._listeners, v.listeners, {
+ merger: function (t, r, n) {
+ (r[t] = r[t] || {}),
+ (r[t][e.index] = n[t]),
+ (c._listened = !0);
+ },
+ });
+ },
+ afterUpdate: function (t, e) {
+ t.$datalabels._labels = $.prepare(t.$datalabels._datasets, e);
+ },
+ afterDatasetsDraw: function (t) {
+ $.draw(t, t.$datalabels._labels);
+ },
+ beforeEvent: function (t, e) {
+ if (t.$datalabels._listened)
+ switch (e.type) {
+ case "mousemove":
+ case "mouseout":
+ N(t, e);
+ break;
+ case "click":
+ !(function (t, e) {
+ var r = t.$datalabels,
+ n = r._listeners.click,
+ a = n && $.lookup(r._labels, e);
+ a && D(t, n, a);
+ })(t, e);
+ }
+ },
+ afterEvent: function (t) {
+ var e,
+ n,
+ a,
+ o,
+ l,
+ s,
+ u,
+ d = t.$datalabels,
+ f = d._actives,
+ c = (d._actives = t.lastActive || []),
+ h = i.arrayDiff(f, c);
+ for (e = 0, n = h.length; e < n; ++e)
+ if ((l = h[e])[1])
+ for (a = 0, o = (u = l[0].$datalabels || []).length; a < o; ++a)
+ ((s = u[a]).$context.active = l[1] === 1),
+ s.update(s.$context);
+ (d._dirty || h.length) &&
+ ($.update(d._labels),
+ (function (t) {
+ if (!t.animating) {
+ for (
+ var e = r.default.animationService.animations,
+ n = 0,
+ a = e.length;
+ n < a;
+ ++n
+ )
+ if (e[n].chart === t) return;
+ t.render({duration: 1, lazy: !0});
+ }
+ })(t)),
+ delete d._dirty;
+ },
+ }
+ );
+});
diff --git a/views/acc_operation_templates.xml b/views/acc_operation_templates.xml
index d56dbf6..a77ae13 100644
--- a/views/acc_operation_templates.xml
+++ b/views/acc_operation_templates.xml
@@ -1,9 +1,16 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8" ?>
<odoo>
- <template id="assets_backend" name="operation assets" inherit_id="web.assets_backend">
+ <template
+ id="assets_backend"
+ name="operation assets"
+ inherit_id="web.assets_backend"
+ >
<xpath expr="." position="inside">
- <script type="text/javascript" src="/acc_cdc/static/src/js/operation_graph.js"></script>
+ <script
+ type="text/javascript"
+ src="/acc_cdc/static/src/js/operation_graph.js"
+ />
</xpath>
</template>
@@ -20,11 +27,56 @@
<div class="o_timesheet_plan_sale_timesheet">
<div class="o_timesheet_plan_sale_timesheet_dashboard">
<div class="container text-center mt32 mb32">
- <button t-att-context="{'first_day': data_values['date_day_start'], 'last_day': ''}" name="day" class="btn btn-secondary o_acc_button" title="Dernier jour" aria-label="Dernier jour" data-mode="day"><strong>Dernière journée</strong><br/><t t-esc="data_values['last_day']"/></button>
- <button t-att-context="{'first_day': data_values['date_week_start'], 'last_day': data_values['date_week_end']}" name="week" class="btn btn-secondary o_acc_button" title="7 derniers jours" aria-label="7 derniers jours" data-mode="week"><strong>7 derniers jours</strong><br/><t t-esc="data_values['last_week']"/></button>
- <button t-att-context="{'first_day': data_values['date_month_start'], 'last_day': data_values['date_month_end']}" name="month" class="btn btn-secondary o_acc_button" title="Dernier mois" aria-label="Dernier mois" data-mode="month"><strong>Dernier mois</strong><br/><t t-esc="data_values['last_month']"/></button>
- <button t-att-context="{'first_day': data_values['date_semestre_start'], 'last_day': data_values['date_semestre_end']}" name="semestre" class="btn btn-secondary o_acc_button" title="6 derniers mois" aria-label="6 derniers mois" data-mode="semestre"><strong>6 derniers mois</strong><br/><t t-esc="data_values['last_semestre']"/></button>
- <button t-att-context="{'first_day': data_values['date_year_start'], 'last_day': data_values['date_year_end']}" name="year" class="btn btn-secondary o_acc_button" title="12 derniers mois" aria-label="12 derniers mois" data-mode="year"><strong>12 derniers mois</strong><br/><t t-esc="data_values['last_year']"/></button>
+ <button
+ t-att-context="{'first_day': data_values['date_day_start'], 'last_day': ''}"
+ name="day"
+ class="btn btn-secondary o_acc_button"
+ title="Dernier jour"
+ aria-label="Dernier jour"
+ data-mode="day"
+ ><strong>Dernière journée</strong><br /><t
+ t-esc="data_values['last_day']"
+ /></button>
+ <button
+ t-att-context="{'first_day': data_values['date_week_start'], 'last_day': data_values['date_week_end']}"
+ name="week"
+ class="btn btn-secondary o_acc_button"
+ title="7 derniers jours"
+ aria-label="7 derniers jours"
+ data-mode="week"
+ ><strong>7 derniers jours</strong><br /><t
+ t-esc="data_values['last_week']"
+ /></button>
+ <button
+ t-att-context="{'first_day': data_values['date_month_start'], 'last_day': data_values['date_month_end']}"
+ name="month"
+ class="btn btn-secondary o_acc_button"
+ title="Dernier mois"
+ aria-label="Dernier mois"
+ data-mode="month"
+ ><strong>Dernier mois</strong><br /><t
+ t-esc="data_values['last_month']"
+ /></button>
+ <button
+ t-att-context="{'first_day': data_values['date_semestre_start'], 'last_day': data_values['date_semestre_end']}"
+ name="semestre"
+ class="btn btn-secondary o_acc_button"
+ title="6 derniers mois"
+ aria-label="6 derniers mois"
+ data-mode="semestre"
+ ><strong>6 derniers mois</strong><br /><t
+ t-esc="data_values['last_semestre']"
+ /></button>
+ <button
+ t-att-context="{'first_day': data_values['date_year_start'], 'last_day': data_values['date_year_end']}"
+ name="year"
+ class="btn btn-secondary o_acc_button"
+ title="12 derniers mois"
+ aria-label="12 derniers mois"
+ data-mode="year"
+ ><strong>12 derniers mois</strong><br /><t
+ t-esc="data_values['last_year']"
+ /></button>
</div>
<div class="text-center o_title mt32">
<h2>Vues Consommateurs</h2>
@@ -33,13 +85,25 @@
<div class="container">
<div class="row mb32">
<div class="col-12 p-5">
- <canvas id="line_chart_conso" width="auto" height="200"></canvas>
+ <canvas
+ id="line_chart_conso"
+ width="auto"
+ height="200"
+ />
</div>
<div class="col-md-6 col-12 p-5">
- <canvas id="donuts_chart_conso" width="auto" height="200"></canvas>
+ <canvas
+ id="donuts_chart_conso"
+ width="auto"
+ height="200"
+ />
</div>
<div class="col-md-6 col-12 p-5">
- <canvas id="histo_chart_conso" width="auto" height="200"></canvas>
+ <canvas
+ id="histo_chart_conso"
+ width="auto"
+ height="200"
+ />
</div>
</div>
</div>
@@ -53,13 +117,25 @@
<div class="container">
<div class="row mb32">
<div class="col-12 p-5">
- <canvas id="line_chart_prod" width="auto" height="200"></canvas>
+ <canvas
+ id="line_chart_prod"
+ width="auto"
+ height="200"
+ />
</div>
<div class="col-md-6 col-12 p-5">
- <canvas id="donuts_chart_prod" width="auto" height="200"></canvas>
+ <canvas
+ id="donuts_chart_prod"
+ width="auto"
+ height="200"
+ />
</div>
<div class="col-md-6 col-12 p-5">
- <canvas id="histo_chart_prod" width="auto" height="200"></canvas>
+ <canvas
+ id="histo_chart_prod"
+ width="auto"
+ height="200"
+ />
</div>
</div>
</div>
diff --git a/views/acc_operation_views.xml b/views/acc_operation_views.xml
index f5236d3..5162354 100644
--- a/views/acc_operation_views.xml
+++ b/views/acc_operation_views.xml
@@ -1,19 +1,20 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<record id="cdc_acc_operation_form_view" model="ir.ui.view">
<field name="name">cdc.acc_operation_form_view.api.form</field>
<field name="model">acc.operation</field>
- <field name="inherit_id" ref="acc_enedis_api.acc_operation_form_view"/>
+ <field name="inherit_id" ref="acc_enedis_api.acc_operation_form_view" />
<field name="arch" type="xml">
<header position="inside">
<button
- string="Voir les courbes"
- type="object"
- class="btn-primary"
- name="action_view_courbes"
- attrs="{'invisible':[('is_data_enedis', '!=', True)]}"/>
+ string="Voir les courbes"
+ type="object"
+ class="btn-primary"
+ name="action_view_courbes"
+ attrs="{'invisible':[('is_data_enedis', '!=', True)]}"
+ />
</header>
</field>
</record>
@@ -25,4 +26,4 @@
</record>
</data>
-</odoo>
\ No newline at end of file
+</odoo>
diff --git a/views/res_partner_views.xml b/views/res_partner_views.xml
index 9a510bb..02c40e2 100644
--- a/views/res_partner_views.xml
+++ b/views/res_partner_views.xml
@@ -1,23 +1,24 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<record id="acc_place_form_view" model="ir.ui.view">
<field name="name">cdc.acc_place_form_view.api.form</field>
<field name="model">acc.counter</field>
- <field name="inherit_id" ref="acc_operation.acc_place_form_view"/>
+ <field name="inherit_id" ref="acc_operation.acc_place_form_view" />
<field name="arch" type="xml">
<xpath expr="//field[@name='acc_operation_id']" position="after">
- <button icon="fa-times"
- class="text-danger"
- string="Voir les courbes"
- type="object"
- name="action_view_courbes"
- />
+ <button
+ icon="fa-times"
+ class="text-danger"
+ string="Voir les courbes"
+ type="object"
+ name="action_view_courbes"
+ />
</xpath>
</field>
</record>
</data>
-</odoo>
\ No newline at end of file
+</odoo>
--
GitLab