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

[UPD] call Enedis API only if periods exist for counters

parent 74d62088
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -115,6 +115,32 @@ class AccOperation(models.Model):
"de consommation</strong><br/>"
)
for usage_point_id in usage_point_cons_ids:
# Vérification que le PRM est actif sur la période demandée
period_ids = self.env["acc.counter.period"]._get_periods_from_interval(
[
("acc_operation_id", "=", self.id),
("acc_counter_id", "=", usage_point_id.id),
("prm_type", "=", "delivery"),
],
start_date,
end_date,
)
# Si pas de période de PRM, on ne fait pas d'appel API
if not period_ids:
message += (
"Opération: "
+ self.name
+ " - PRM: "
+ usage_point_id.name + " - aucune période trouvée du " + str(start_date)
+ " au "
+ str(end_date) + "<br/>"")
# Si période de PRM on vérifie les dates puis on appelle l'API
else:
start_date_upd = max(start_date, period_ids[0].start_date)
if period_ids[-1].end_date:
end_date_upd = min(end_date, period_ids[-1].end_date)
else:
end_date_upd = end_date
desc = (
"Opération: "
+ self.name
......@@ -123,13 +149,13 @@ class AccOperation(models.Model):
+ " - Date: "
+ str(fields.Datetime.today())
+ " - Période: du "
+ str(start_date)
+ str(start_date_upd)
+ " au "
+ str(end_date)
+ str(end_date_upd)
)
message += desc + "<br/>"
self.with_delay(description=desc).get_definitive_load_curves(
start_date, end_date, usage_point_id, "cons"
start_date_upd, end_date_upd, usage_point_id, "cons"
)
if usage_point_prod_ids:
......@@ -139,6 +165,32 @@ class AccOperation(models.Model):
"de production</strong><br/>"
)
for usage_point_id in usage_point_prod_ids:
# Vérification que le PRM est actif sur la période demandée
period_ids = self.env["acc.counter.period"]._get_periods_from_interval(
[
("acc_operation_id", "=", self.id),
("acc_counter_id", "=", usage_point_id.id),
("prm_type", "=", "injection"),
],
start_date,
end_date,
)
# Si pas de période de PRM, on ne fait pas d'appel API
if not period_ids:
message += (
"Opération: "
+ self.name
+ " - PRM: "
+ usage_point_id.name + " - aucune période trouvée du " + str(start_date)
+ " au "
+ str(end_date) + "<br/>"")
# Si période de PRM on vérifie les dates puis on appelle l'API
else:
start_date_upd = max(start_date, period_ids[0].start_date)
if period_ids[-1].end_date:
end_date_upd = min(end_date, period_ids[-1].end_date)
else:
end_date_upd = end_date
desc = (
"Opération: "
+ self.name
......@@ -147,14 +199,14 @@ class AccOperation(models.Model):
+ " - Date: "
+ str(fields.Datetime.today())
+ " - Période: du "
+ str(start_date)
+ str(start_date_upd)
+ " au "
+ str(end_date)
+ str(end_date_upd)
)
message += desc + "<br/>"
self.with_delay(description=desc).get_definitive_load_curves(
start_date,
end_date,
start_date_upd,
end_date_upd,
usage_point_id,
"prod",
)
......
......@@ -2,6 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import _, fields, models
from odoo.exceptions import UserError
from odoo.osv import expression
class AccOperationWizard(models.TransientModel):
......@@ -29,8 +30,6 @@ class AccOperationWizard(models.TransientModel):
relation="acc_counter_cons_rel",
column1="cons_id",
column2="op_id",
# TODO: rework domain ?
# domain=[("prm_type", "=", "injection")],
string="PRM de soutirage",
)
prm_prod_ids = fields.Many2many(
......@@ -38,8 +37,6 @@ class AccOperationWizard(models.TransientModel):
relation="acc_counter_prod_rel",
column1="prod_id",
column2="op_id",
# TODO: rework domain ?
# domain=[("is_injection", "=", True)],
string="PRM d'injection",
)
......@@ -67,45 +64,63 @@ class AccOperationWizard(models.TransientModel):
# Actions
# ------------------------------------------------------
def get_curves(self):
if not self.end_date and not self.start_date:
if not self.start_date or not self.end_date:
raise UserError(
_("Les champs Date de début et Date de fin sont obligatoires")
)
if (self.end_date - self.start_date).days > 31:
raise UserError(_("L'intervalle de temps ne doit pas dépasser 31 Jours"))
if self.end_date <= self.start_date:
if self.start_date >= self.end_date:
raise UserError(_("La date de fin doit être supérieure à la date de début"))
# Vérification si des données existent déjà
# pour cet intervalle de date
domain_all = [
("date_slot", ">=", self.start_date),
("date_slot", "<", self.end_date),
# Instanciation des domaines de recherche
domain_base = [
("acc_operation_id", "=", self.operation_id.id),
]
if self.prm_cons_ids and self.prm_prod_ids:
domain_all += [
"|",
"&",
("acc_counter_id", "in", self.prm_cons_ids.ids),
("comp_data_type", "in", ("autocons", "cons")),
"&",
("acc_counter_id", "in", self.prm_prod_ids.ids),
("comp_data_type", "in", ("prod", "surplus")),
]
elif self.prm_cons_ids:
domain_all += [
domain_extra = []
domain_extra_cdc = []
if self.prm_cons_ids:
domain_cons = [
("acc_counter_id", "in", self.prm_cons_ids.ids),
("comp_data_type", "in", ("autocons", "cons")),
]
elif self.prm_prod_ids:
domain_all += [
domain_cons_cdc = expression.AND(
[domain_cons, [("comp_data_type", "in", ("autocons", "cons"))]]
)
domain_extra = domain_cons
domain_extra_cdc = domain_cons_cdc
if self.prm_prod_ids:
domain_prod = [
("acc_counter_id", "in", self.prm_prod_ids.ids),
("comp_data_type", "in", ("prod", "surplus")),
]
domain_prod_cdc = expression.AND(
[domain_prod, [("comp_data_type", "in", ("prod", "surplus"))]]
)
domain_extra = domain_prod
domain_extra_cdc = domain_prod_cdc
if self.prm_cons_ids and self.prm_prod_ids:
domain_extra = expression.OR([domain_cons, domain_prod])
domain_extra_cdc = expression.OR([domain_cons_cdc, domain_prod_cdc])
domain_periods = expression.AND([domain_base, domain_extra])
domain_date = [
("date_slot", ">=", self.start_date),
("date_slot", "<", self.end_date),
]
domain_cdc = expression.AND([domain_base, domain_extra_cdc, domain_date])
rec_ids = self.env["acc.enedis.cdc"].search(domain_all)
# Vérification que des périodes existent pour cet intervalle de date
period_ids = self.env["acc.counter.period"]._get_periods_from_interval(
domain_periods,
self.start_date,
self.end_date,
)
if not period_ids:
raise UserError(_("Aucun période trouvée pour le(s) PRM(s) et la période demandés"))
# Vérification si des données existent déjà
# pour cet intervalle de date
rec_ids = self.env["acc.enedis.cdc"].search(domain_cdc)
if rec_ids:
wizard = self.env["acc.operation.wizard.confirm"].create(
{
......
......@@ -18,8 +18,6 @@ class AccOperationWizardConfirm(models.TransientModel):
relation="acc_counter_cons_confirm_rel",
column1="cons_id",
column2="op_id",
# TODO: rework domain ?
# domain=[("is_delivery", "=", True)],
string="PRM de soutirage",
)
prm_prod_ids = fields.Many2many(
......@@ -27,8 +25,6 @@ class AccOperationWizardConfirm(models.TransientModel):
relation="acc_counter_prod_confirm_rel",
column1="prod_id",
column2="op_id",
# TODO: rework domain ?
# domain=[("is_injection", "=", True)],
string="PRM d'injection",
)
rec_ids = fields.Many2many("acc.enedis.cdc", string="Records")
......
......@@ -14,15 +14,14 @@
name="prm_cons_ids"
widget="many2many_tags"
options="{'no_create_edit': True, 'no_create': True}"
domain="[('type', 'in', ('del', 'del_inj')), ('acc_operation_id', '=', operation_id)]"
/>
<!-- TODO rework domain="[('prm_type', '=', 'delivery'), ('acc_operation_id', '=', operation_id)]" -->
<field
name="prm_prod_ids"
widget="many2many_tags"
options="{'no_create_edit': True, 'no_create': True}"
domain="[('type', 'in', ('del_inj', 'inj')), ('acc_operation_id', '=', operation_id)]"
/>
<!-- TODO rework domain="[('is_injection', '=', True), ('acc_operation_id', '=', operation_id)]" -->
</group>
<group name="period" string="Période" col="2">
<field name="start_date" />
......
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