Skip to content
Extraits de code Groupes Projets
Valider a14d7284 rédigé par Rémi - Le Filament's avatar Rémi - Le Filament
Parcourir les fichiers

[UPD] documentation, get UTC datetime from dates, compute partner on cdc

parent 5ff89b93
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -85,9 +85,15 @@ class AccOperation(models.Model):
self, start_date, end_date, usage_point_cons_ids=None, usage_point_prod_ids=None
):
"""
Récupère les données de l'opération concernant le périmètre:
- liste des PRM
- date de début opération
Vérifie les périodes, crée un log et appelle les courbes de conso / prod
à partir de l'API Enedis (cet appel passe par un job queue)
:param date start_date : date de début à récupérer (incluse)
:param date end_date : date de fin à récupérer (exclue)
:param recordset usage_point_cons_ids : liste de PRMs de soutirage à récupérer
:param recordset usage_point_prod_ids : liste de PRMs d'injection à récupérer
Les PRMs sont optionnels,
si non renseignés, tous les PRMs liés à l'opération seront récupérés
"""
self._check_access_api()
# TODO: Update to get curves only for existing periods
......@@ -245,13 +251,24 @@ class AccOperation(models.Model):
def get_definitive_load_curves(
self, start_date, end_date, usage_point_id, type_prm
):
"""
Appelle les courbes de conso / prod à partir de l'API Enedis
:param date start_date : date de début à récupérer (incluse)
:param date end_date : date de fin à récupérer (exclue)
:param record usage_point_id : PRM à récupérer
:param char type_prm : type de PRM à récupérer ("cons" ou "prod")
"""
message = ""
message += "PRM " + usage_point_id.name + "\n"
message += "Appel API ...\n"
# Transformation des dates naives en datetime UTC
start_datetime = pytz.timezone("Europe/Paris").localize(fields.Datetime.to_datetime(start_date)).astimezone(pytz.UTC).replace(tzinfo=None)
end_datetime = pytz.timezone("Europe/Paris").localize(fields.Datetime.to_datetime(start_date)).astimezone(pytz.UTC).replace(tzinfo=None)
curves_data = self._get_definitive_load_curves(
self.name,
start_date,
end_date,
start_datetime,
end_datetime,
usage_point_id.name,
self.client_id,
self.secret_id,
......@@ -268,15 +285,6 @@ class AccOperation(models.Model):
for point in curve["interval_reading"]:
date_slot = datetime.strptime(point["timestamp"], "%Y-%m-%dT%H:%M:%SZ")
slot_datetime_tz = datetime.strftime(date_slot, "%Y-%m-%d %H:%M:%S")
slot_date_tz = datetime.fromisoformat(slot_datetime_tz).replace(
tzinfo=tz.gettz("Europe/Paris")
)
date_slot_utc = slot_date_tz.astimezone(timezone.utc).replace(
tzinfo=None
)
self.env["acc.enedis.cdc"].create(
{
"name": name,
......@@ -285,9 +293,15 @@ class AccOperation(models.Model):
"comp_data_type": type_curve,
"power": point["value"],
"date_slot": date_slot,
"date_slot_utc": date_slot_utc,
}
)
# Update partner_id for retrieved cdc
domain = [
("acc_operation_id", "=", self.id),
("acc_counter_id", "=", usage_point_id.id or False),
("type_prm", "=", "delivery" if type_prm == "cons" else "injection")
]
self.env["acc.counter.period"]._get_periods_from_interval(domain, start_date, end_date)._update_cdc_partner_id()
message += "Fin du traitement des données\n"
_logger.info(message)
return message
......@@ -299,7 +313,6 @@ class AccOperation(models.Model):
de mois entre la date de début de contrat et la date du jour. Puis
récupération des données de tous les mois
"""
# TODO: Update to get curves only for existing periods
nb_months = (date.today().year - self.date_start_contract.year) * 12 + (
date.today().month - self.date_start_contract.month
)
......@@ -307,14 +320,12 @@ class AccOperation(models.Model):
start_date_it = self.date_start_contract
end_date_it = self.date_start_contract + relativedelta(months=1)
i = 1
while i < nb_months:
for i in range(nb_months):
self.curves(
start_date_it, end_date_it, usage_point_cons_ids, usage_point_prod_ids
)
start_date_it = start_date_it + relativedelta(months=1)
end_date_it = start_date_it + relativedelta(months=1)
i += 1
def perimeter(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