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

[UPD] import CDC and perimeter

Import Courbes de charges :
 * Modification contenu des logs (fait référence aux jobs plutôt qu'aux appels API)
 * Ajoute la période dans le nom du job créé
 * Modification import de toutes les courbes : permet de sélectionner des PRM (injection ou soutirage) à importer et si définis limite l'import de toutes les périodes à ces PRMs
 * Modification vérification si courbes existantes : vérifie le type de courbe en plus du numéro de PRM (pour éviter de supprimer les données de soutirage si on veut importer les données d'injection du même PRM)

Périmètre :
 * S'il trouve plusieurs PRMs avec le même nom, il le logge mais ne modifie rien
 * Mise à jour des dates sur PRM uniquement si non définis
 * Alerte si les dates récupérées d'Enedis ne correspondent pas à celles configurées dans Odoo (mais pas de modification automatique)
 * Modification de la date de début d'une opération uniquement si non configurée ou si date de début est après la date de début du PRM d'injection
 * Plus de modification de la date de fin d'une opération (à faire manuellement)
parent f5746ada
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -98,17 +98,18 @@ class AccOperation(models.Model): ...@@ -98,17 +98,18 @@ class AccOperation(models.Model):
message = "" message = ""
message += ( message += (
"<h1>API Enedis OACC - Appel Courbes " "<h1>API Enedis OACC - Création des jobs de récupération des Courbes "
+ str(fields.Datetime.now()) + str(fields.Datetime.now())
+ "</h1>" + "</h1>"
"Appel API pour la période " "Appels API pour la période "
"" + str(date_start) + " " + str(date_end) + "<br/>" "" + str(date_start) + " " + str(date_end) + "<br/>"
) )
if usage_point_cons_ids: if usage_point_cons_ids:
# Traitement données de cons # Traitement données de cons
message += ( message += (
"<br/><strong>Traitement des données de consommation</strong><br/>" "<br/><strong>Création des jobs de récupération des courbes "
"de consommation</strong><br/>"
) )
for usage_point_id in usage_point_cons_ids: for usage_point_id in usage_point_cons_ids:
desc = ( desc = (
...@@ -118,14 +119,22 @@ class AccOperation(models.Model): ...@@ -118,14 +119,22 @@ class AccOperation(models.Model):
+ usage_point_id.name + usage_point_id.name
+ " - Date: " + " - Date: "
+ str(fields.Datetime.today()) + str(fields.Datetime.today())
+ " - Période: du "
+ str(date_start)
+ " au "
+ str(date_end)
) )
message += desc + "<br/>"
self.with_delay(description=desc).get_definitive_load_curves( self.with_delay(description=desc).get_definitive_load_curves(
date_end, date_start, usage_point_id, "cons" date_end, date_start, usage_point_id, "cons"
) )
if usage_point_prod_ids: if usage_point_prod_ids:
# Traitement données de prod # Traitement données de prod
message += "<br/><strong>Traitement des données de production</strong><br/>" message += (
"<br/><strong>Création des jobs de récupération des courbes "
"de production</strong><br/>"
)
for usage_point_id in usage_point_prod_ids: for usage_point_id in usage_point_prod_ids:
desc = ( desc = (
"Opération: " "Opération: "
...@@ -134,7 +143,12 @@ class AccOperation(models.Model): ...@@ -134,7 +143,12 @@ class AccOperation(models.Model):
+ usage_point_id.name + usage_point_id.name
+ " - Date: " + " - Date: "
+ str(fields.Datetime.today()) + str(fields.Datetime.today())
+ " - Période: du "
+ str(date_start)
+ " au "
+ str(date_end)
) )
message += desc + "<br/>"
self.with_delay(description=desc).get_definitive_load_curves( self.with_delay(description=desc).get_definitive_load_curves(
date_end, date_end,
date_start, date_start,
...@@ -143,7 +157,9 @@ class AccOperation(models.Model): ...@@ -143,7 +157,9 @@ class AccOperation(models.Model):
) )
message += ( message += (
"<br/><h1>Fin appel API Courbes: " + str(fields.Datetime.now()) + "</h1>" "<br/><h1>Fin de création des jobs de récupération des courbes: "
+ str(fields.Datetime.now())
+ "</h1>"
) )
if not self.is_cdc_data_exists: if not self.is_cdc_data_exists:
self.is_cdc_data_exists = True self.is_cdc_data_exists = True
...@@ -213,7 +229,7 @@ class AccOperation(models.Model): ...@@ -213,7 +229,7 @@ class AccOperation(models.Model):
_logger.info(message) _logger.info(message)
return message return message
def get_curves_all(self): def get_curves_all(self, usage_point_cons_ids=None, usage_point_prod_ids=None):
""" """
Récupère les données de l'opération depuis le début de la mise en place Récupère les données de l'opération depuis le début de la mise en place
de l'opération. A partir de la date de début de contrat, calcul du nombre de l'opération. A partir de la date de début de contrat, calcul du nombre
...@@ -229,7 +245,9 @@ class AccOperation(models.Model): ...@@ -229,7 +245,9 @@ class AccOperation(models.Model):
i = 1 i = 1
while i < nb_months: while i < nb_months:
self.curves(date_start_it, date_end_it) self.curves(
date_start_it, date_end_it, usage_point_cons_ids, usage_point_prod_ids
)
date_start_it = date_start_it + relativedelta(months=1) date_start_it = date_start_it + relativedelta(months=1)
date_end_it = date_start_it + relativedelta(months=1) date_end_it = date_start_it + relativedelta(months=1)
i += 1 i += 1
...@@ -258,29 +276,63 @@ class AccOperation(models.Model): ...@@ -258,29 +276,63 @@ class AccOperation(models.Model):
list_soutirage = [] list_soutirage = []
for usage_point in usage_points: for usage_point in usage_points:
usage_point_start = date.fromisoformat(usage_point["start"])
usage_point_end = (
date.fromisoformat(usage_point["end"])
if usage_point["end"] != "9999-12-31"
else False
)
usage_id = self.env["acc.counter"].search( usage_id = self.env["acc.counter"].search(
[ [
("acc_operation_id", "=", self.id), ("acc_operation_id", "=", self.id),
("name", "=", usage_point["usage_point_id"]), ("name", "=", usage_point["usage_point_id"]),
] ]
) )
message += "<br/>PRM " + usage_point["usage_point_id"] + "<br/>"
if usage_id:
message += ( message += (
"PRM existe : mise à jour des dates - " "<br/>PRM "
"Du " + usage_point["start"] + " au " + usage_point["end"] + "<br/>" + usage_point["usage_point_id"]
+ " - Dates Enedis : "
+ usage_point["start"]
+ " - "
+ usage_point["end"]
+ "<br/>"
) )
usage_id.write( if usage_id and len(usage_id) == 1:
{ message += "PRM existe dans Odoo<br/>"
"date_start_contract": date.fromisoformat(usage_point["start"]), if not usage_id.date_start_contract:
} usage_id.date_start_contract = usage_point_start
message += (
"mise à jour date de début " + usage_point["start"] + "<br/>"
) )
if usage_point["end"] != "9999-12-31": elif usage_id.date_start_contract != usage_point_start:
usage_id.write( message += (
{ "date de début ne correspond pas, "
"date_end_contract": date.fromisoformat(usage_point["end"]), "merci de vérifier manuellement ce PRM : "
} "date de début Odoo : "
+ fields.Date.to_string(usage_id.date_start_contract)
+ "<br/>"
)
if usage_point_end and not usage_id.date_end_contract:
usage_id.date_end_contract = usage_point_end
message += (
"mise à jour date de fin : " + usage_point["end"] + "<br/>"
)
elif usage_id.date_end_contract != usage_point_end:
message += (
"date de fin ne correspond pas"
", merci de vérifier manuellement ce PRM : "
"date de fin Odoo : "
+ fields.Date.to_string(usage_id.date_end_contract)
+ "<br/>"
) )
if usage_point["type"] == "CONS" and not usage_id.is_delivery:
usage_id.is_delivery = True
message += "PRM configuré comme point de soutirage <br/>"
if usage_point["type"] == "PROD" and not usage_id.is_injection:
usage_id.is_injection = True
message += "PRM configuré comme point d'injection <br/>"
elif len(usage_id) > 1:
message += "Plusieurs PRMs trouvés avec ce numéro - pas de modif<br/>"
else: else:
message += "PRM n'existe pas : Création ...<br/>" message += "PRM n'existe pas : Création ...<br/>"
is_delivery = False is_delivery = False
...@@ -289,33 +341,31 @@ class AccOperation(models.Model): ...@@ -289,33 +341,31 @@ class AccOperation(models.Model):
is_delivery = True is_delivery = True
if usage_point["type"] == "PROD": if usage_point["type"] == "PROD":
is_injection = True is_injection = True
self.date_start_contract = date.fromisoformat(usage_point["start"]) # Si la date de l'opération n'est pas renseignée ou
if usage_point["end"] != "9999-12-31": # après la date de démarrage du point d'injection
self.date_end_contract = date.fromisoformat(usage_point["end"]) # alors on force la date à celle du point d'injection
else: if (
self.date_end_contract = None not self.date_start_contract
or self.date_start_contract > usage_point_start
if usage_point["end"] != "9999-12-31": ):
date_end = date.fromisoformat(usage_point["end"]) self.date_start_contract = usage_point_start
else:
date_end = None
usage_id = self.env["acc.counter"].create( usage_id = self.env["acc.counter"].create(
{ {
"name": usage_point["usage_point_id"], "name": usage_point["usage_point_id"],
"is_delivery": is_delivery, "is_delivery": is_delivery,
"is_injection": is_injection, "is_injection": is_injection,
"acc_operation_id": self.id, "acc_operation_id": self.id,
"date_start_contract": date.fromisoformat(usage_point["start"]), "date_start_contract": usage_point_start,
"date_end_contract": date_end, "date_end_contract": usage_point_end,
} }
) )
message += "Fin de la création du PRM<br/>" message += "Fin de la création du PRM<br/>"
if usage_id.is_injection: if usage_point["type"] == "PROD":
if usage_id.name not in list_injection: if usage_point["usage_point_id"] not in list_injection:
list_injection.append(usage_id.name) list_injection.append(usage_point["usage_point_id"])
if usage_id.is_delivery: if usage_point["type"] == "CONS":
if usage_id.name not in list_soutirage: if usage_point["usage_point_id"] not in list_soutirage:
list_soutirage.append(usage_id.name) list_soutirage.append(usage_point["usage_point_id"])
message += "<p>LISTE TOTAL DE PRMs: </br>" "PRM Injection </br>" message += "<p>LISTE TOTAL DE PRMs: </br>" "PRM Injection </br>"
......
...@@ -86,13 +86,23 @@ class AccOperationWizard(models.TransientModel): ...@@ -86,13 +86,23 @@ class AccOperationWizard(models.TransientModel):
if self.prm_cons_ids and self.prm_prod_ids: if self.prm_cons_ids and self.prm_prod_ids:
domain_all += [ domain_all += [
"|", "|",
"&",
("acc_counter_id", "in", self.prm_cons_ids.ids), ("acc_counter_id", "in", self.prm_cons_ids.ids),
("comp_data_type", "in", ("autocons", "cons")),
"&",
("acc_counter_id", "in", self.prm_prod_ids.ids), ("acc_counter_id", "in", self.prm_prod_ids.ids),
("comp_data_type", "in", ("prod", "surplus")),
] ]
elif self.prm_cons_ids: elif self.prm_cons_ids:
domain_all += [("acc_counter_id", "in", self.prm_cons_ids.ids)] domain_all += [
("acc_counter_id", "in", self.prm_cons_ids.ids),
("comp_data_type", "in", ("autocons", "cons")),
]
elif self.prm_prod_ids: elif self.prm_prod_ids:
domain_all += [("acc_counter_id", "in", self.prm_prod_ids.ids)] domain_all += [
("acc_counter_id", "in", self.prm_prod_ids.ids),
("comp_data_type", "in", ("prod", "surplus")),
]
rec_ids = self.env["acc.enedis.cdc"].search(domain_all) rec_ids = self.env["acc.enedis.cdc"].search(domain_all)
if rec_ids: if rec_ids:
...@@ -140,6 +150,8 @@ class AccOperationWizard(models.TransientModel): ...@@ -140,6 +150,8 @@ class AccOperationWizard(models.TransientModel):
wizard = self.env["acc.operation.wizard.confirm"].create( wizard = self.env["acc.operation.wizard.confirm"].create(
{ {
"operation_id": self.operation_id.id, "operation_id": self.operation_id.id,
"prm_cons_ids": self.prm_cons_ids,
"prm_prod_ids": self.prm_prod_ids,
"rec_ids": rec_ids, "rec_ids": rec_ids,
"mess": _( "mess": _(
"Des données existent pour cette période. Etes-vous" "Des données existent pour cette période. Etes-vous"
...@@ -156,7 +168,7 @@ class AccOperationWizard(models.TransientModel): ...@@ -156,7 +168,7 @@ class AccOperationWizard(models.TransientModel):
"target": "new", "target": "new",
} }
else: else:
self.operation_id.get_curves_all() self.operation_id.get_curves_all(self.prm_cons_ids, self.prm_prod_ids)
return {"type": "ir.actions.act_window_close"} return {"type": "ir.actions.act_window_close"}
# ------------------------------------------------------ # ------------------------------------------------------
......
...@@ -69,7 +69,7 @@ class AccOperationWizardConfirm(models.TransientModel): ...@@ -69,7 +69,7 @@ class AccOperationWizardConfirm(models.TransientModel):
) )
else: else:
# Pas de date renseignée, récupération de toutes les données # Pas de date renseignée, récupération de toutes les données
self.operation_id.get_curves_all() self.operation_id.get_curves_all(self.prm_cons_ids, self.prm_prod_ids)
return {"type": "ir.actions.act_window_close"} return {"type": "ir.actions.act_window_close"}
# ------------------------------------------------------ # ------------------------------------------------------
......
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