Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • ee91c68765190cf1216ad1a0c072ee97aa0c42aa
  • 14.0 par défaut protégée
  • 16.0
  • 14.0_optim
4 résultats

operation_graph.js

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