diff --git a/__manifest__.py b/__manifest__.py
index 7d33905cdef0bfba262ae1ef7301474a510430f0..7176cfb699989c4116dabe2fff9d3723646f343b 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -19,6 +19,9 @@
     "auto_install": False,
     "assets": {
         "web.assets_frontend": [
+            "/web/static/lib/Chart/Chart.js",
+            "/oacc_portal_overview_cdc/static/src/js/lib/chartjs-plugin-datalabels.min.js",
+            "/oacc_portal_overview_cdc/static/lib/daterangepicker/daterangepicker.js",
             "oacc_portal_overview_cdc/static/src/css/style.css",
             "oacc_portal_overview_cdc/static/src/js/operation_chart.js",
             "oacc_portal_overview_cdc/static/src/js/select2_fr.js",
diff --git a/controllers/main.py b/controllers/main.py
index 92888b551b96abbaac48b9dd51e1d70d941e28a4..d39f43b0b451c9b0b31953c6feb5e4bbf8e6e851 100644
--- a/controllers/main.py
+++ b/controllers/main.py
@@ -7,12 +7,12 @@ from odoo.addons.oacc_portal.controllers.main import CustomerPortal as CustomerP
 
 
 class CustomerPortal(CustomerPortal):
-    def _get_data_date(self, is_data_cdc, operation=None):
+    def _get_data_date(self, is_data_cdc, operation=None, partner_id=None):
         vals = {}
         # Si des données existent, récupérer les dates min/max/début/fin
         # de l'opération
         if is_data_cdc:
-            vals["data_values"] = operation.get_values_init_graph()
+            vals["data_values"] = operation.get_values_init_graph(partner_id)
 
         else:
             vals["data_values"] = {
@@ -26,7 +26,7 @@ class CustomerPortal(CustomerPortal):
                 "date_year_end": False,
             }
 
-        vals["data_values"].update(operation.get_date_min_max())
+        vals["data_values"].update(operation.get_date_min_max(partner_id))
 
         return vals
 
@@ -63,13 +63,27 @@ class CustomerPortal(CustomerPortal):
         render_values = {}
         render_values.update(self._get_role(operation))
 
-        render_values.update(
-            self._get_data_date(render_values.get("isDataCdc"), operation)
-        )
+        if (
+            render_values.get("isAdmin")
+            or render_values.get("isSuperAdmin")
+            or render_values.get("isPmo")
+        ):
+            render_values.update(
+                self._get_data_date(render_values.get("isDataCdc"), operation)
+            )
+            partner_ids = operation.acc_delivery_period_ids.mapped("partner_id").sorted(
+                key=lambda p: p.name
+            )
+        elif render_values.get("isConsumer"):
+            render_values.update(
+                self._get_data_date(
+                    render_values.get("isDataCdc"),
+                    operation,
+                    request.env.user.commercial_partner_id,
+                )
+            )
+            partner_ids = request.env.user.commercial_partner_id
 
-        partner_ids = operation.acc_delivery_period_ids.mapped("partner_id").sorted(
-            key=lambda p: p.name
-        )
         render_values.update(
             {
                 "partners": partner_ids,
@@ -95,13 +109,27 @@ class CustomerPortal(CustomerPortal):
         render_values = {}
         render_values.update(self._get_role(operation))
 
-        render_values.update(
-            self._get_data_date(render_values.get("isDataCdc"), operation)
-        )
+        if (
+            render_values.get("isAdmin")
+            or render_values.get("isSuperAdmin")
+            or render_values.get("isPmo")
+        ):
+            render_values.update(
+                self._get_data_date(render_values.get("isDataCdc"), operation)
+            )
+            partner_ids = operation.acc_injection_period_ids.mapped(
+                "partner_id"
+            ).sorted(key=lambda p: p.name)
+        elif render_values.get("isProd"):
+            render_values.update(
+                self._get_data_date(
+                    render_values.get("isDataCdc"),
+                    operation,
+                    request.env.user.commercial_partner_id,
+                )
+            )
+            partner_ids = request.env.user.commercial_partner_id
 
-        partner_ids = operation.acc_injection_period_ids.mapped("partner_id").sorted(
-            key=lambda p: p.name
-        )
         render_values.update(
             {
                 "partners": partner_ids,
diff --git a/models/acc_operation.py b/models/acc_operation.py
index 82faeb742c82a316e8c94a842db518350d6bb45a..daa382ff2b40732087773dd4f781b5a558b1cffc 100644
--- a/models/acc_operation.py
+++ b/models/acc_operation.py
@@ -37,11 +37,11 @@ class AccOperation(models.Model):
     # ------------------------------------------------------
     # Business methods
     # ------------------------------------------------------
-    def get_values_init_graph(self):
+    def get_values_init_graph(self, partner_id=None):
         self.ensure_one()
 
         values = {}
-        last_record = self.get_last_cdc_record()
+        last_record = self.get_last_cdc_record(partner_id)
 
         date_day_start, date_day_end = self.get_interval("day", last_record)
         date_day_start = date_day_start.strftime("%d/%m/%Y")
diff --git a/static/src/js/operation_chart.js b/static/src/js/operation_chart.js
index 872623e7c0fe1263c1c4787e4857ffe13160fe82..158bf5b6d918a39bc5511f885e959bf929f38203 100644
--- a/static/src/js/operation_chart.js
+++ b/static/src/js/operation_chart.js
@@ -5,7 +5,6 @@
 odoo.define("oacc_portal_overview_cdc.operation_chart", function (require) {
     "use strict";
 
-    const { loadJS } = require("@web/core/assets");
     var publicWidget = require("web.public.widget");
 
     publicWidget.registry.OaccOperationChart = publicWidget.Widget.extend({
@@ -47,14 +46,10 @@ odoo.define("oacc_portal_overview_cdc.operation_chart", function (require) {
             this.chartData = null;
         },
 
-        willStart: async function () {
-            await loadJS("/web/static/lib/Chart/Chart.js");
-            await loadJS(
-                "/oacc_portal_overview_cdc/static/src/js/lib/chartjs-plugin-datalabels.min.js"
-            );
-            await loadJS(
-                "/oacc_portal_overview_cdc/static/lib/daterangepicker/daterangepicker.js"
-            );
+        /**
+         * @override
+         */
+        willStart: function () {
             var self = this;
             var def = this._rpc({
                 model: "acc.operation",
@@ -64,6 +59,7 @@ odoo.define("oacc_portal_overview_cdc.operation_chart", function (require) {
                 self.minDate = data.date_min;
                 self.maxDate = data.date_max;
             });
+            return Promise.all([this._super.apply(this, arguments), def]);
         },
 
         /**
@@ -85,10 +81,10 @@ odoo.define("oacc_portal_overview_cdc.operation_chart", function (require) {
                 self.last_day = obj.last_day;
 
                 self.data_type = self.$el.data("name");
-                if (self.data_type == "cons") {
+                if (self.data_type === "cons") {
                     self.title_name = "Consommation globale";
                 }
-                if (self.data_type == "prod") {
+                if (self.data_type === "prod") {
                     self.title_name = "Production globale";
                 }
                 self.render_daterangepicker();
@@ -187,7 +183,7 @@ odoo.define("oacc_portal_overview_cdc.operation_chart", function (require) {
                     autoUpdateInput: true,
                     linkedCalendars: true,
                 },
-                function (start, end, label) {
+                function (start, end) {
                     self.first_day = start.format("DD/MM/YYYY");
                     self.last_day = end.format("DD/MM/YYYY");
                     self._rpc({
@@ -213,7 +209,11 @@ odoo.define("oacc_portal_overview_cdc.operation_chart", function (require) {
          * @private
          */
         _getBarChartData: function (typeData) {
-            var data, data_autocons, data_allocons, data_label, data_surplus;
+            var data = {};
+            var data_autocons = [];
+            var data_allocons = [];
+            var data_label = [];
+            var data_surplus = [];
 
             if (typeData === "cons") {
                 if (this.scale === "day") {
@@ -282,9 +282,6 @@ odoo.define("oacc_portal_overview_cdc.operation_chart", function (require) {
                 type: "bar",
                 data: data,
                 options: {
-                    legend: {
-                        onHover: (event, chartElement) => {},
-                    },
                     interaction: {
                         intersect: false,
                     },
@@ -328,9 +325,9 @@ odoo.define("oacc_portal_overview_cdc.operation_chart", function (require) {
                                     .locale("fr-FR")
                                     .format("DD/MM/YYYY HH:ss");
                             },
-                            label: function (context, data) {
+                            label: function (context, chart) {
                                 return (
-                                    data.datasets[context.datasetIndex].label +
+                                    chart.datasets[context.datasetIndex].label +
                                     " : " +
                                     context.yLabel.toLocaleString("fr", {
                                         maximumFractionDigits: 1,
@@ -350,7 +347,8 @@ odoo.define("oacc_portal_overview_cdc.operation_chart", function (require) {
          * @private
          */
         _getPieChartData: function (typeData) {
-            var data, res;
+            var data = {};
+            var res = [];
             var sum_res1 = 0;
             var sum_res2 = 0;
             if (typeData === "cons") {
@@ -442,9 +440,9 @@ odoo.define("oacc_portal_overview_cdc.operation_chart", function (require) {
                                 size: 18,
                                 weight: "bold",
                             },
-                            formatter: (value, data) => {
+                            formatter: (value, chart) => {
                                 var total = 0;
-                                data.dataset.data.forEach((num) => {
+                                chart.dataset.data.forEach((num) => {
                                     total += num;
                                 });
                                 var labelPercentage = Math.round(
@@ -458,12 +456,12 @@ odoo.define("oacc_portal_overview_cdc.operation_chart", function (require) {
                     },
                     tooltips: {
                         callbacks: {
-                            label: function (tooltipItem, data) {
+                            label: function (tooltipItem, chart) {
                                 var allData =
-                                    data.datasets[tooltipItem.datasetIndex]
+                                    chart.datasets[tooltipItem.datasetIndex]
                                         .data;
                                 var tooltipLabel =
-                                    data.labels[tooltipItem.index];
+                                    chart.labels[tooltipItem.index];
                                 var tooltipData = allData[tooltipItem.index];
                                 var total = 0;
                                 for (var i in allData) {
@@ -493,7 +491,7 @@ odoo.define("oacc_portal_overview_cdc.operation_chart", function (require) {
          * @private
          */
         _getLineChartData: function (typeData) {
-            var data;
+            var data = {};
             if (typeData === "cons") {
                 data = {
                     labels: this.chartData.label,
@@ -560,11 +558,9 @@ odoo.define("oacc_portal_overview_cdc.operation_chart", function (require) {
 
         _getLineChartConfig: function (typeData) {
             var data = this._getLineChartData(typeData);
-            var stacked;
+            var stacked = true;
             if (typeData === "cons") {
                 stacked = false;
-            } else {
-                stacked = true;
             }
             return {
                 type: "line",
@@ -611,9 +607,9 @@ odoo.define("oacc_portal_overview_cdc.operation_chart", function (require) {
                                     .locale("fr-FR")
                                     .format("DD/MM/YYYY HH:ss");
                             },
-                            label: function (context, data) {
+                            label: function (context, chart) {
                                 return (
-                                    data.datasets[context.datasetIndex].label +
+                                    chart.datasets[context.datasetIndex].label +
                                     " : " +
                                     context.yLabel.toLocaleString("fr", {
                                         maximumFractionDigits: 1,
@@ -661,12 +657,20 @@ odoo.define("oacc_portal_overview_cdc.operation_chart", function (require) {
         },
 
         _updateDataTemplate: function (data) {
-            self = this;
+            var self = this;
 
             self.chartData = data.chart_data;
-
             self.scale = data.scale;
-
+            self.minDate = data.date_min;
+            self.maxDate = data.date_max;
+            self.date_range_picker.data("daterangepicker").minDate = moment(
+                data.date_min,
+                "DD/MM/YYYY"
+            );
+            self.date_range_picker.data("daterangepicker").maxDate = moment(
+                data.date_max,
+                "DD/MM/YYYY"
+            );
             if (data.is_curve_line) {
                 $(".js_curv_line").removeClass("d-none");
             } else {
@@ -675,16 +679,16 @@ odoo.define("oacc_portal_overview_cdc.operation_chart", function (require) {
 
             // Disable buttons if first or last date
             if (
-                moment(this.last_day, "DD/MM/YYYY") >=
-                moment(this.maxDate, "DD/MM/YYYY")
+                moment(self.last_day, "DD/MM/YYYY") >=
+                moment(self.maxDate, "DD/MM/YYYY")
             ) {
                 $('button[id="next-period"]').prop("disabled", true);
             } else {
                 $('button[id="next-period"]').prop("disabled", false);
             }
             if (
-                moment(this.first_day, "DD/MM/YYYY") <=
-                moment(this.minDate, "DD/MM/YYYY")
+                moment(self.first_day, "DD/MM/YYYY") <=
+                moment(self.minDate, "DD/MM/YYYY")
             ) {
                 $('button[id="previous-period"]').prop("disabled", true);
             } else {
@@ -752,10 +756,10 @@ odoo.define("oacc_portal_overview_cdc.operation_chart", function (require) {
             this._updateChartData(this.title_name);
         },
 
-        _onPreviousPeriod: function (ev) {
+        _onPreviousPeriod: function () {
             this._onChangePeriod("previous");
         },
-        _onNextPeriod: function (ev) {
+        _onNextPeriod: function () {
             this._onChangePeriod("next");
         },
         _onChangePeriod: function (type) {
@@ -771,7 +775,7 @@ odoo.define("oacc_portal_overview_cdc.operation_chart", function (require) {
                 delta_month = last_day.month() - first_day.month() + 1;
             }
 
-            if (type == "previous") {
+            if (type === "previous") {
                 // Compare for first day
                 let next_first = first_day
                     .clone()
@@ -792,7 +796,7 @@ odoo.define("oacc_portal_overview_cdc.operation_chart", function (require) {
                     .max([next_first, moment_min])
                     .format("DD/MM/YYYY");
             }
-            if (type == "next") {
+            if (type === "next") {
                 // Compare for last day
                 let next_last = last_day.clone().add(delta_days).add(1, "d");
                 const moment_max = moment(this.maxDate, "DD/MM/YYYY");