diff --git a/models/api_enedis.py b/models/api_enedis.py index e3d71a3bd6b8e0608fa9471e1beb14229e2e5162..9715e231fa3ce4c653c0a641e2842664c1a226ca 100644 --- a/models/api_enedis.py +++ b/models/api_enedis.py @@ -3,6 +3,7 @@ import requests import logging +import pytz from datetime import datetime, date @@ -190,30 +191,46 @@ class ApiEnedis(models.AbstractModel): if usage_point_name: counter_id = self.env['enercoop.counter'].search([ ('name', '=', usage_point_name), - ('enercoop_operation_id', '=', self.id)]) + ('enercoop_operation_ids', 'in', self.id)]) type = curve['type'] if counter_id: name = counter_id.name + '_' + str(date_start) + '_' + str(date_end) + '_' + type else: name = self.name + '_' + str(date_start) + '_' + str(date_end) + '_' + type + enercoop_enedis_cdc_ids = self.env['enercoop.enedis.cdc'].search([ + ('date_slot', '>=', date_start), + ('date_slot', '<=', date_end), + ('enercoop_operation_id', '=', self.id), + '|', ('enercoop_counter_id', '=', counter_id.id), ('enercoop_counter_id', '=', False), + ('comp_data_type', '=', type), + ]) + record_created = False + timezone = self.env.context.get('tz') or self.env.user.tz + user_tz = pytz.timezone(timezone) + for point in curve['interval_reading']: - date_slot = datetime.strptime(point['timestamp'], "%Y-%m-%dT%H:%M:%SZ") - self.env['enercoop.enedis.cdc'].create({ + date_slot = pytz.utc.localize(datetime.strptime(point['timestamp'], "%Y-%m-%dT%H:%M:%SZ")).astimezone(user_tz).replace(tzinfo=None) + + record = enercoop_enedis_cdc_ids.filtered(lambda l: l.date_slot == date_slot) + if not record: + self.env['enercoop.enedis.cdc'].create({ + 'name': name, + 'enercoop_operation_id': self.id, + 'enercoop_counter_id': counter_id.id or False, + 'comp_data_type': type, + 'power': point['value'], + 'date_slot': date_slot, + }) + record_created = True + + if record_created: + # Logs information loaded + self.env['enercoop.enedis.import.logs'].create({ 'name': name, 'enercoop_operation_id': self.id, - 'enercoop_counter_id': counter_id.id or False, - 'comp_data_type': type, - 'power': point['value'], - 'date_slot': date_slot, }) - # Logs information loaded - self.env['enercoop.enedis.import.logs'].create({ - 'name': name, - 'enercoop_operation_id': self.id, - }) - def perimeter(self): """ Fonction permettant d'appeler l'API Enedis et retourne le périmètre d'une opréation donées