diff --git a/__manifest__.py b/__manifest__.py
index e1af3a9382442af67a1ef30e4b24da288f5b0fdc..cc9170aac6289ff8e7e30ac4e7237962d4f06b55 100755
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -15,6 +15,8 @@
         # views
         'views/enercoop_operation_views.xml',
         'views/enercoop_operation_templates.xml',
+        'views/res_partner_views.xml',
+        # 'views/res_partner_templates.xml',
         # views menu
     ],
     'qweb': [
diff --git a/models/__init__.py b/models/__init__.py
index 8c1f6df2eda1811288bc6b16497ae6fd86607c6d..5e7ed1ea9cae8bdfa2b325f27210334ea0f2948d 100644
--- a/models/__init__.py
+++ b/models/__init__.py
@@ -3,3 +3,4 @@
 
 from . import enercoop_operation
 from . import enercoop_operation_graph
+from . import enercoop_counter
diff --git a/models/enercoop_counter.py b/models/enercoop_counter.py
new file mode 100644
index 0000000000000000000000000000000000000000..392e3a37a78d982eb135af651a35f252faf1ec4b
--- /dev/null
+++ b/models/enercoop_counter.py
@@ -0,0 +1,74 @@
+# 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
+
+DEFAULT_MONTH_RANGE = 3
+
+
+class EnercoopCounter(models.Model):
+    _inherit = 'enercoop.counter.operation'
+
+    # def _qweb_prepare_qcontext(self, view_id, domain):
+    #     values = super()._qweb_prepare_qcontext(view_id, domain)
+    #     partners = self.search(domain)
+    #
+    #     # Prepare Values to display in qweb view
+    #     values.update(partners._plan_prepare_values())
+    #
+    #     return values
+    #
+    # def _plan_prepare_values(self):
+    #     values = {}
+    #     date_start, date_end = self.get_last_day('day')
+    #     last_day = date_start.strftime("%d %B %Y")
+    #
+    #     date_start, date_end = self.get_last_day('week')
+    #     last_week = date_start.strftime("%d %B %Y") + '-' + date_end.strftime("%d %B %Y")
+    #
+    #     date_start, date_end = self.get_last_day('month')
+    #     last_month = date_start.strftime("%d %B %Y") + '-' + date_end.strftime("%d %B %Y")
+    #
+    #     range_date = date_start.strftime("%d/%m/%Y") + ' - ' + date_end.strftime("%d/%m/%Y")
+    #
+    #     date_start, date_end = self.get_last_day('semestre')
+    #     last_semester = date_start.strftime("%d %B %Y") + '-' + date_end.strftime("%d %B %Y")
+    #
+    #     date_start, date_end = self.get_last_day('year')
+    #     last_year = date_start.strftime("%d %B %Y") + '- ' + date_end.strftime("%d %B %Y")
+    #
+    #     data_values = {
+    #         'last_day': last_day,
+    #         'last_week': last_week,
+    #         'last_month': last_month,
+    #         'last_semestre': last_semester,
+    #         'last_year': last_year,
+    #         'range_date': range_date,
+    #     }
+    #
+    #     values['data_values'] = data_values
+    #     return values
+
+    # ------------------------------------------------------
+    # Actions
+    # ------------------------------------------------------
+    def action_view_courbes(self):
+        """
+        Action qui ouvre la vue Qweb
+        :return: Vue Qweb
+        """
+        self.ensure_one()
+        counter_id = self.env['enercoop.counter'].browse(self.env.context.get('default_counter_id'))
+        action = self.env["ir.actions.actions"]._for_xml_id(
+            "enercoop_cdc.enercoop_operation_action_client_courbes")
+        action['params'] = {
+            'operation_ids': self.operation_id.id,
+            'enercoop_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_enercoop_delivery_operation_ids': counter_id.name,
+        }
+        return action
\ No newline at end of file
diff --git a/models/enercoop_operation.py b/models/enercoop_operation.py
index 07d76cdc0a346d70ac2e4b200dff9e35e3550ba0..03d13ef35224555e05d70ac77db3f11c198b494f 100644
--- a/models/enercoop_operation.py
+++ b/models/enercoop_operation.py
@@ -34,7 +34,7 @@ class EnercoopOperation(models.Model):
     # CRUD methods (ORM overrides)
     # ------------------------------------------------------
     @api.model
-    def graph_view(self, domain, scale):
+    def graph_view(self, domain, scale, enercoop_counter_id=None):
         """
         Fonction appelée lors du chargement de la vue Qweb
         :param  domain: représente le champ recherche de la vue
@@ -58,9 +58,11 @@ class EnercoopOperation(models.Model):
 
             # Get date start and date end depending on type of scale
             date_start, date_end = operation_ids.get_last_day(scale)
-
+            counter_id = None
+            if enercoop_counter_id:
+                counter_id = self.env['enercoop.counter'].search([('name', '=', enercoop_counter_id)]).id
             # Get the data to display in chart
-            chart_data = operation_ids.get_cdc(type=scale, date_start=date_start, date_end=date_end)
+            chart_data = operation_ids.get_cdc(type=scale, date_start=date_start, date_end=date_end, prm_id=counter_id)
 
             # Build the chart depending on data calculated
             result_graph = operation_ids.chart_data_cons(chart_data)
@@ -88,6 +90,7 @@ class EnercoopOperation(models.Model):
         :return: Vue Qweb
         """
         self.ensure_one()
+        partner_id = self.env['res.partner'].browse(self.env.context.get('default_partner_id'))
         action = self.env["ir.actions.actions"]._for_xml_id(
             "enercoop_cdc.enercoop_operation_action_client_courbes")
         action['params'] = {
@@ -722,19 +725,19 @@ class EnercoopOperation(models.Model):
         power_tot = power_autocons + power_cons
 
         if power_tot > 0:
-            percent_autocons = round(power_autocons * 100 / power_tot, 2)
-            percent_cons = round(power_cons * 100 / power_tot, 2)
+            percent_autocons = int(power_autocons * 100 / power_tot)
+            percent_cons = int(power_cons * 100 / power_tot)
         else:
-            percent_autocons = round(power_autocons * 100, 2)
-            percent_cons = round(power_cons * 100, 2)
+            percent_autocons = int(power_autocons * 100)
+            percent_cons = int(power_cons * 100)
 
         power_prod_tot = power_autocons + power_surplus
         if power_prod_tot > 0:
-            percent_autocons_prod = round(power_autocons * 100 / power_prod_tot, 2)
-            percent_surplus_prod = round(power_surplus * 100 / power_prod_tot, 2)
+            percent_autocons_prod = int(power_autocons * 100 / power_prod_tot)
+            percent_surplus_prod = int(power_surplus * 100 / power_prod_tot)
         else:
-            percent_autocons_prod = round(power_autocons * 100, 2)
-            percent_surplus_prod = round(power_surplus * 100, 2)
+            percent_autocons_prod = int(power_autocons * 100)
+            percent_surplus_prod = int(power_surplus * 100)
 
         cdc_jour = {
             'autocons': data_autocons,
diff --git a/models/enercoop_operation_graph.py b/models/enercoop_operation_graph.py
index 5e1155c3ef86236cf7159a6fdfb136b66c54a445..ef3825336549309bfa8fda69c2a418c983d1f667 100644
--- a/models/enercoop_operation_graph.py
+++ b/models/enercoop_operation_graph.py
@@ -1,8 +1,7 @@
 # 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 fields, _, models, api
-from datetime import datetime, timedelta
+from odoo import _, models
 
 DEFAULT_MONTH_RANGE = 3
 
diff --git a/static/src/js/operation_graph.js b/static/src/js/operation_graph.js
index f698094121ebcbb8f62cf8bc654c890c83c2cd55..939cac61bfdc485118dc3a39e341f34b87728dc6 100644
--- a/static/src/js/operation_graph.js
+++ b/static/src/js/operation_graph.js
@@ -120,11 +120,34 @@ odoo.define('enercoop_cdc.operation_graph', function (require) {
             }};
 
             var options_donuts = { options: {
-                showDatasetLabels : true,
-                cutoutPercentage: 41,
+//                showDatasetLabels : true,
+//                cutoutPercentage: 41,
+                plugins: {
+                    color: "#1f4e56",
+                    font: {
+                      weight: "bold",
+                      size: 16
+                    },
+                    padding: 6,
+                    formatter: (value) => {
+                      return value + "%";
+                    }
+                }
             }};
 
             var options_histo_stacked = { options: {
+                plugins: {
+                  datalabels: {
+                    color: 'white',
+                    display: function(context) {
+                      return context.dataset.data[context.dataIndex] > 0;
+                    },
+                    font: {
+                      weight: 'bold'
+                    },
+                    formatter: Math.round
+                  }
+                },
                 interaction: {
                   intersect: false,
                 },
@@ -150,6 +173,18 @@ odoo.define('enercoop_cdc.operation_graph', function (require) {
             }};
 
             var options_histo = { options: {
+                plugins: {
+                  datalabels: {
+                    color: 'white',
+                    display: function(context) {
+                      return context.dataset.data[context.dataIndex] > 0;
+                    },
+                    font: {
+                      weight: 'bold'
+                    },
+                    formatter: Math.round
+                  }
+                },
                 interaction: {
                   intersect: false,
                 },
@@ -197,6 +232,8 @@ odoo.define('enercoop_cdc.operation_graph', function (require) {
 	    		donuts_conso,
 	    		Object.assign({}, result.donuts_chart_conso, options_donuts)
 	    	);
+	    	console.log(options_donuts);
+            console.log(chart_donuts_conso);
 
 	    	chart_histo_conso = new Chart(
 	    		histo_conso,
@@ -291,11 +328,12 @@ odoo.define('enercoop_cdc.operation_graph', function (require) {
         _loadChart: function (super_def, params) {
             var self = this;
 
+            var enercoop_counter_id = self._state.context.search_default_enercoop_delivery_operation_ids
             var domain = self._state.domain
             var chart_def = this._rpc({
                 model: 'enercoop.operation',
                 method: 'graph_view',
-                args: [domain, this.scales],
+                args: [domain, this.scales, enercoop_counter_id],
                 context: this._state.context,
             });
             return Promise.all([super_def, chart_def]).then(function(results) {
@@ -351,6 +389,7 @@ odoo.define('enercoop_cdc.operation_graph', function (require) {
         searchMenuTypes: ['filter', 'favorite'],
         jsLibs: [
             '/web/static/lib/Chart/Chart.js',
+            '/enercoop_cdc/static/src/lib/chartjs-plugin-datalabels/chartjs-plugin-datalabels.min.js',
             '/web/static/lib/moment/moment.js',
         ],
         config: _.extend({}, qweb.View.prototype.config, {
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
new file mode 100644
index 0000000000000000000000000000000000000000..867126cbaa3ba6e55b206a3ce96fe421ea063799
--- /dev/null
+++ b/static/src/lib/chartjs-plugin-datalabels/chartjs-plugin-datalabels.min.js
@@ -0,0 +1,7 @@
+/*!
+ * 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}}}));
diff --git a/views/res_partner_templates.xml b/views/res_partner_templates.xml
new file mode 100644
index 0000000000000000000000000000000000000000..eb82c836d26606a6e87198bdb97109ad7700de49
--- /dev/null
+++ b/views/res_partner_templates.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+
+    <template id="assets_backend" name="operation assets" inherit_id="web.assets_backend">
+        <xpath expr="." position="inside">
+            <script type="text/javascript" src="/enercoop_cdc/static/src/js/partner_graph.js"></script>
+        </xpath>
+    </template>
+
+    <record id="graph_courbes_partner" model="ir.ui.view">
+        <field name="name">Courbes</field>
+        <field name="type">qweb</field>
+        <field name="model">res.partner</field>
+        <field name="arch" type="xml">
+        <qweb js_class="partner_graph">
+
+        <div class="o_form_view o_form_readonly o_project_plan">
+            <div class="o_form_sheet_bg">
+                <div class="o_form_sheet o_timesheet_plan_content">
+                    <div class="o_timesheet_plan_sale_timesheet">
+                        <div class="o_timesheet_plan_sale_timesheet_dashboard">
+                            <div class="container text-center mt32 mb32">
+                                <button name="day" class="btn btn-secondary o_enercoop_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 name="week" class="btn btn-secondary o_enercoop_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 name="month" class="btn btn-secondary o_enercoop_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 name="semestre" class="btn btn-secondary o_enercoop_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 name="year" class="btn btn-secondary o_enercoop_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>
+                            </div>
+                            <div>
+                                <div class="container">
+                                    <div class="row mb32">
+                                        <div class="col-12 p-5">
+                                            <canvas id="line_chart_conso" width="auto" height="200"></canvas>
+                                        </div>
+                                        <div class="col-md-6 col-12 p-5">
+                                            <canvas id="donuts_chart_conso" width="auto" height="200"></canvas>
+                                        </div>
+                                        <div class="col-md-6 col-12 p-5">
+                                            <canvas id="histo_chart_conso" width="auto" height="200"></canvas>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+
+                        <div class="text-center o_title mt32">
+                            <h2>Vues Producteurs</h2>
+                        </div>
+                        <div>
+                            <div class="container">
+                                <div class="row mb32">
+                                    <div class="col-12 p-5">
+                                        <canvas id="line_chart_prod" width="auto" height="200"></canvas>
+                                    </div>
+                                    <div class="col-md-6 col-12 p-5">
+                                        <canvas id="donuts_chart_prod" width="auto" height="200"></canvas>
+                                    </div>
+                                    <div class="col-md-6 col-12 p-5">
+                                        <canvas id="histo_chart_prod" width="auto" height="200"></canvas>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+
+
+                        <div class="o_project_plan_project_timesheet_forecast">
+
+                        </div>
+
+                    </div>
+                </div>
+            </div>
+        </div>
+        </qweb>
+        </field>
+    </record>
+
+<!--    <template id="graph">-->
+<!--        <div t-name="enercoop_cdc.renderGraph" class="hello-world">-->
+<!--            <div class="container">-->
+<!--                <div class="row mt32 mb32">-->
+<!--                    <div class="col-md-6 col-12 p-5">-->
+<!--                        <h3>Moyenne du thème supérieure à 3</h3>-->
+<!--                        <canvas id="radar_theme_sup" width="auto" height="200"></canvas>-->
+<!--                    </div>-->
+<!--                </div>-->
+<!--            </div>-->
+<!--        </div>-->
+
+<!--    </template>-->
+
+</odoo>
diff --git a/views/res_partner_views.xml b/views/res_partner_views.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2b5aa2d012c8e8020f5bbc30faaa9b1de81bbab9
--- /dev/null
+++ b/views/res_partner_views.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+    <data>
+
+        <record id="enercoop_place_form_view" model="ir.ui.view">
+            <field name="name">cdc.enercoop_place_form_view.api.form</field>
+            <field name="model">enercoop.counter</field>
+            <field name="inherit_id" ref="enercoop_partner.enercoop_place_form_view"/>
+            <field name="arch" type="xml">
+                <xpath expr="//notebook//page//field[@name='enercoop_operation_ids']//tree//field[@name='is_delivery']" position="after">
+                    <button icon="fa-times"
+                            class="text-danger"
+                            string="Voir les courbes"
+                            type="object"
+                            name="action_view_courbes"
+                  />
+                </xpath>
+
+            </field>
+        </record>
+
+<!--        <record id="res_partner_action_client_courbes" model="ir.actions.act_window">-->
+<!--            <field name="name">Voir les courbes</field>-->
+<!--            <field name="res_model">res.partner</field>-->
+<!--            <field name="view_mode">qweb</field>-->
+<!--        </record>-->
+
+    </data>
+</odoo>
\ No newline at end of file