Skip to content
Extraits de code Groupes Projets
Valider c77e027c rédigé par Juliana's avatar Juliana
Parcourir les fichiers

[FIX] Bug on date creation api

parent f3a342d1
Branches
Aucune étiquette associée trouvée
Chargement en cours
......@@ -8,7 +8,7 @@ import json
from datetime import datetime, date
from odoo import models, exceptions
from odoo import models, exceptions, fields
from requests.auth import _basic_auth_str
from odoo.exceptions import UserError
......@@ -128,46 +128,52 @@ class ApiEnedis(models.AbstractModel):
message))
return response
def definitive_load_curves(self, date_start, date_end, type, usage_point_name=None, token=None):
def definitive_load_curves(self, date_start, date_end, type, usage_point_id=None, token=None):
""" Fonction permettant d'appeler l'API Enedis et retourne les courbes
de chare en fonction d'un intervalle de date et d'un type
:param date_start: une date de début
date_end: une date de fin
type: type de courbe à récupérer
(cons/autocons/surplus/prod)
usage_point_name: nom du PRM
usage_point_id: id du PRM
:return Retourner les courbes de charge
à la maille d'une opération ou
d'un PRM en particulier
"""
url = 'v1/collective_self_consumption/agreements/' + self.name + '/definitive_load_curves'
if usage_point_name:
name = usage_point_name + '_' + str(date_start) + '_' + str(date_end) + '_' + type
if usage_point_id:
name = usage_point_id.name + '_' + str(date_start) + '_' + str(date_end) + '_' + type
else:
name = self.name + '_' + str(date_start) + '_' + str(date_end) + '_' + type
log_id = self.env['enercoop.enedis.import.logs'].search([
log_id = self.env['enercoop.enedis.cdc'].search([
('name', '=', name),
('enercoop_operation_id', '=', self.id)
])
if not log_id:
self.load_data(url, date_start, date_end, type, usage_point_name, token=token)
self.load_data(url, date_start, date_end, type, usage_point_id=usage_point_id, token=token)
return True
def load_data(self, url, date_start, date_end, type_courbe=None, usage_point_name=None, token=None):
def load_data(self, url, date_start, date_end, type_courbe=None, usage_point_id=None, token=None):
""" Read function
:param url : URL à appeler
date_start: une date de début
date_end: une date de fin
type_courbe: type de courbe à récupérer
(cons/autocons/surplus/prod)
usage_point_name: nom du PRM
usage_point_id: id du PRM
@return object: Retourner les courbes de charge
à la maille d'une opération ou
d'un PRM en particulier
"""
if usage_point_id:
usage_point_name = usage_point_id.name
counter_id = usage_point_id.id
else:
usage_point_name = None
counter_id = None
query = {
# Date de début de la période souhaitée.La date est incluse dans la période
'start': date_start,
......@@ -187,43 +193,43 @@ class ApiEnedis(models.AbstractModel):
# get the data
curves = response.json().get('curves')
for curve in curves:
usage_point = curve['usage_point_id']
# Get the counter ID from data
counter_id = self.env['enercoop.counter']
if usage_point_name:
counter_id = self.env['enercoop.counter'].search([
('name', '=', usage_point_name),
('enercoop_operation_ids', 'in', self.id)])
type = curve['type']
if counter_id:
name = counter_id.name + '_' + str(date_start) + '_' + str(date_end) + '_' + type
if usage_point_id:
name = usage_point_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([
domain_all = [
('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),
])
]
if counter_id:
domain_prm = domain_all + [('enercoop_counter_id', '=', counter_id)]
else:
domain_prm = domain_all + [('enercoop_counter_id', '=', False)]
enercoop_enedis_cdc_ids = self.env['enercoop.enedis.cdc'].search(domain_prm)
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 = pytz.utc.localize(datetime.strptime(point['timestamp'], "%Y-%m-%dT%H:%M:%SZ")).astimezone(user_tz).replace(tzinfo=None)
date_slot = pytz.utc.localize(datetime.strptime(point['timestamp'], "%Y-%m-%dT%H:%M:%SZ"))
date_slot3 = fields.Datetime.to_string(date_slot)
record = enercoop_enedis_cdc_ids.filtered(lambda l: l.date_slot == date_slot)
record = enercoop_enedis_cdc_ids.filtered(lambda l: l.date_slot == fields.Datetime.to_datetime(date_slot3))
if not record:
self.env['enercoop.enedis.cdc'].create({
'name': name,
'enercoop_operation_id': self.id,
'enercoop_counter_id': counter_id.id or False,
'enercoop_counter_id': counter_id or False,
'comp_data_type': type,
'power': point['value'],
'date_slot': date_slot,
'date_slot': date_slot3,
})
record_created = True
if record_created:
......
......@@ -61,15 +61,15 @@ class EnercoopOperation(models.Model):
token = self.access_token()
# Load consommation data by PRM
for delivery_counter_id in self.enercoop_delivery_operation_ids:
self.definitive_load_curves(date_start, date_end, 'cons', delivery_counter_id.enercoop_counter_id.name, token=token)
self.definitive_load_curves(date_start, date_end, 'autocons', delivery_counter_id.enercoop_counter_id.name, token=token)
self.definitive_load_curves(date_start, date_end, 'cons', delivery_counter_id.enercoop_counter_id, token=token)
self.definitive_load_curves(date_start, date_end, 'autocons', delivery_counter_id.enercoop_counter_id, token=token)
# Load production data by PRM
for injection_counter_id in self.enercoop_injection_operation_ids:
self.definitive_load_curves(date_start, date_end, 'prod', injection_counter_id.enercoop_counter_id.name, token=token)
self.definitive_load_curves(date_start, date_end, 'prod', injection_counter_id.enercoop_counter_id, token=token)
# Load surplus data by operation
self.definitive_load_curves(date_start, date_end, 'surplus', usage_point_name=None, token=token)
self.definitive_load_curves(date_start, date_end, 'surplus', usage_point_id=None, token=token)
def get_perimeter(self):
for operation in self:
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter