diff --git a/models/enercoop_operation.py b/models/enercoop_operation.py index a00fabf7d2311f0c190784f85929ad7673d2aa45..a10c976ddc3811780e09a0c2d5ef343c688738a3 100644 --- a/models/enercoop_operation.py +++ b/models/enercoop_operation.py @@ -418,86 +418,63 @@ class EnercoopOperation(models.Model): if type == 'week': type_date = 'date_slot:hour' - enercoop_counter_id = self.env['enercoop.counter'] - if prm_id: - enercoop_counter_id = self.env['enercoop.counter'].browse(prm_id) + domain_all = [ + ('enercoop_operation_id', 'in', self.ids), + ('date_slot', '>=', date_start), + ('date_slot', '<', date_end), + ] + # Get PRM object if defined + enercoop_counter_id = self.env['enercoop.counter'].browse(prm_id) if prm_id else False if enercoop_counter_id: + domain_prm = domain_all + [('enercoop_counter_id', '=', enercoop_counter_id.id)] # Get all data group by curves type and date cdc_ids = self.env['enercoop.enedis.cdc'].sudo().read_group( - [('enercoop_operation_id', 'in', self.ids), - ('date_slot', '>=', date_start), - ('date_slot', '<', date_end), - '|', ('enercoop_counter_id', '=', False), ('enercoop_counter_id', '=', enercoop_counter_id.id) - ], + domain_prm, ['power', 'enercoop_operation_id', 'date_slot'], ['comp_data_type', type_date], orderby='comp_data_type, date_slot ASC', lazy=False) if type == 'week': cdc_histo_ids = self.env['enercoop.enedis.cdc'].sudo().read_group( - [('enercoop_operation_id', 'in', self.ids), - ('date_slot', '>=', date_start), - ('date_slot', '<', date_end), - '|', ('enercoop_counter_id', '=', False), ('enercoop_counter_id', '=', enercoop_counter_id.id) - ], + domain_prm, ['power', 'enercoop_operation_id', 'date_slot'], ['comp_data_type', type_date_histo], orderby='comp_data_type, date_slot ASC', lazy=False) # Get the date for the abscissa axis cdc_date_ids = self.env['enercoop.enedis.cdc'].sudo().read_group( - [('enercoop_operation_id', 'in', self.ids), - ('date_slot', '>=', date_start), - ('date_slot', '<', date_end), - '|', ('enercoop_counter_id', '=', False), ('enercoop_counter_id', '=', enercoop_counter_id.id) - ], + domain_prm, ['enercoop_operation_id', 'date_slot'], [type_date_abs], orderby='date_slot ASC', lazy=False) # Get the date for the abscissa axis (histo) if type == 'day': cdc_date_histo_ids = self.env['enercoop.enedis.cdc'].sudo().read_group( - [('enercoop_operation_id', 'in', self.ids), - ('date_slot', '>=', date_start), - ('date_slot', '<', date_end), - '|', ('enercoop_counter_id', '=', False), ('enercoop_counter_id', '=', enercoop_counter_id.id) - ], + domain_prm, ['enercoop_operation_id', 'date_slot'], [type_date], orderby='date_slot ASC', lazy=False) else: # Get all data group by curves type and date cdc_ids = self.env['enercoop.enedis.cdc'].sudo().read_group( - [('enercoop_operation_id', 'in', self.ids), - ('date_slot', '>=', date_start), - ('date_slot', '<', date_end) - ], + domain_all, ['power', 'enercoop_operation_id', 'date_slot'], ['comp_data_type', type_date], orderby='comp_data_type, date_slot ASC', lazy=False) if type == 'week': cdc_histo_ids = self.env['enercoop.enedis.cdc'].sudo().read_group( - [('enercoop_operation_id', 'in', self.ids), - ('date_slot', '>=', date_start), - ('date_slot', '<', date_end) - ], + domain_all, ['power', 'enercoop_operation_id', 'date_slot'], ['comp_data_type', type_date_histo], orderby='comp_data_type, date_slot ASC', lazy=False) # Get the date for the abscissa axis cdc_date_ids = self.env['enercoop.enedis.cdc'].sudo().read_group( - [('enercoop_operation_id', 'in', self.ids), - ('date_slot', '>=', date_start), - ('date_slot', '<', date_end), - ], + domain_all, ['enercoop_operation_id', 'date_slot'], [type_date_abs], orderby='date_slot ASC', lazy=False) # Get the date for the abscissa axis (histo) if type == 'day': cdc_date_histo_ids = self.env['enercoop.enedis.cdc'].sudo().read_group( - [('enercoop_operation_id', 'in', self.ids), - ('date_slot', '>=', date_start), - ('date_slot', '<', date_end), - ], + domain_all, ['enercoop_operation_id', 'date_slot'], [type_date], orderby='date_slot ASC', lazy=False) @@ -547,6 +524,7 @@ class EnercoopOperation(models.Model): if cdc['comp_data_type'] == 'surplus': data_surplus.append(value_power) + # SQL Data Query if type == 'day' or type == 'week': if enercoop_counter_id: query = """ @@ -604,21 +582,17 @@ class EnercoopOperation(models.Model): # Get the data to build the chart Bilan if enercoop_counter_id: bilan_cdc = self.env['enercoop.enedis.cdc'].sudo().read_group( - [('enercoop_operation_id', 'in', self.ids), - ('date_slot', '>=', date_start), - ('date_slot', '<', date_end), - '|', ('enercoop_counter_id', '=', False), ('enercoop_counter_id', '=', enercoop_counter_id.id)], + domain_prm, ['power', 'enercoop_operation_id'], ['comp_data_type'], orderby='comp_data_type', lazy=False) else: bilan_cdc = self.env['enercoop.enedis.cdc'].sudo().read_group( - [('enercoop_operation_id', 'in', self.ids), - ('date_slot', '>=', date_start), - ('date_slot', '<', date_end)], + domain_all, ['power', 'enercoop_operation_id'], ['comp_data_type'], orderby='comp_data_type', lazy=False) # Build the ordinate axis for each data type (autoconso/conso/prod/surplus) + power_autocons = power_cons = power_surplus = power_prod = 0 for bilan in bilan_cdc: if bilan['comp_data_type'] == 'autocons': power_autocons = bilan['power'] / 1000 / 2