From b1413ad43004c44c85c4d657ab2524e0e29b0e59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20-=20Le=20Filament?= <remi@le-filament.com> Date: Tue, 19 Dec 2023 11:00:49 +0100 Subject: [PATCH] [REF] PRM periods --- models/acc_operation.py | 108 +++++++++++++----------- wizards/acc_operation_wizard.py | 6 +- wizards/acc_operation_wizard_confirm.py | 6 +- wizards/acc_operation_wizard_views.xml | 5 +- 4 files changed, 69 insertions(+), 56 deletions(-) diff --git a/models/acc_operation.py b/models/acc_operation.py index bd62b81..4c203b2 100644 --- a/models/acc_operation.py +++ b/models/acc_operation.py @@ -90,11 +90,14 @@ class AccOperation(models.Model): - date de début opération """ self._check_access_api() + # TODO: Update to get curves only for existing periods # Si pas de PRM sélectionnés if not usage_point_cons_ids and not usage_point_prod_ids: - usage_point_cons_ids = self.acc_delivery_ids - usage_point_prod_ids = self.acc_injection_ids + usage_point_cons_ids = self.acc_delivery_period_ids.mapped("acc_counter_id") + usage_point_prod_ids = self.acc_injection_period_ids.mapped( + "acc_counter_id" + ) message = "" message += ( @@ -236,6 +239,7 @@ 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 ) @@ -258,6 +262,7 @@ class AccOperation(models.Model): - liste des PRM - date de début opération """ + # TODO : refactor, too complex self._check_access_api() message = "" message += ( @@ -282,12 +287,11 @@ class AccOperation(models.Model): if usage_point["end"] != "9999-12-31" else False ) - usage_id = self.env["acc.counter"].search( - [ - ("acc_operation_id", "=", self.id), - ("name", "=", usage_point["usage_point_id"]), - ] - ) + usage_point_prm_type = False + if usage_point["type"] == "CONS": + usage_point_prm_type = "delivery" + elif usage_point["type"] == "PROD": + usage_point_prm_type = "injection" message += ( "<br/>PRM " + usage_point["usage_point_id"] @@ -297,50 +301,50 @@ class AccOperation(models.Model): + usage_point["end"] + "<br/>" ) - if usage_id and len(usage_id) == 1: + counter_id = self.env["acc.counter"].search( + [ + ("acc_operation_id", "=", self.id), + ("name", "=", usage_point["usage_point_id"]), + ] + ) + if counter_id and len(counter_id) == 1: message += "PRM existe dans Odoo<br/>" - if not usage_id.date_start_contract: - usage_id.date_start_contract = usage_point_start + counter_period_ids = counter_id.period_ids + if counter_period_ids.filtered( + lambda p: p.date_start == usage_point_start + and p.date_end == usage_point_end + ): message += ( - "mise à jour date de début " + usage_point["start"] + "<br/>" + "période existante avec les mêmes dates, pas de modif<br/>" ) - elif usage_id.date_start_contract != usage_point_start: + elif counter_period_ids.filtered( + lambda p: p.date_start == usage_point_start + ): + counter_period_ids.filtered( + lambda p: p.date_start == usage_point_start + ).date_end = usage_point_end message += ( - "date de début ne correspond pas, " - "merci de vérifier manuellement ce PRM : " - "date de début Odoo : " - + fields.Date.to_string(usage_id.date_start_contract) - + "<br/>" + "période existante avec la même date de début, mais date de " + "fin différente, mise à jour date de fin<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/>" + else: + self.env["acc.counter.period"].create( + { + "acc_counter_id": counter_id.id, + "prm_type": usage_point_prm_type, + "acc_operation_id": self.id, + "date_start": usage_point_start, + "date_end": usage_point_end, + } ) - 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/>" + "période inexistante avec les mêmes dates : création<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: + elif len(counter_id) > 1: message += "Plusieurs PRMs trouvés avec ce numéro - pas de modif<br/>" else: message += "PRM n'existe pas : Création ...<br/>" - is_delivery = False - is_injection = False - if usage_point["type"] == "CONS": - is_delivery = True - if usage_point["type"] == "PROD": - is_injection = True + if usage_point_prm_type == "injection": # Si la date de l'opération n'est pas renseignée ou # après la date de démarrage du point d'injection # alors on force la date à celle du point d'injection @@ -349,25 +353,29 @@ class AccOperation(models.Model): or self.date_start_contract > usage_point_start ): self.date_start_contract = usage_point_start - usage_id = self.env["acc.counter"].create( + counter_id = self.env["acc.counter"].create( { "name": usage_point["usage_point_id"], - "is_delivery": is_delivery, - "is_injection": is_injection, + } + ) + self.env["acc.counter.period"].create( + { + "acc_counter_id": counter_id.id, + "prm_type": usage_point_prm_type, "acc_operation_id": self.id, - "date_start_contract": usage_point_start, - "date_end_contract": usage_point_end, + "date_start": usage_point_start, + "date_end": usage_point_end, } ) message += "Fin de la création du PRM<br/>" - if usage_point["type"] == "PROD": + if usage_point_prm_type == "injection": if usage_point["usage_point_id"] not in list_injection: list_injection.append(usage_point["usage_point_id"]) - if usage_point["type"] == "CONS": + if usage_point_prm_type == "delivery": if usage_point["usage_point_id"] not in list_soutirage: 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>" i = 1 for inj in list_injection: @@ -375,7 +383,7 @@ class AccOperation(models.Model): i += 1 message += "Total: " + str(len(list_injection)) + "</br>" - message += "<br/>PRM Soutirage <br/>" + message += "<br/>PRM Soutirage<br/>" i = 1 for inj in list_soutirage: message += str(i) + " - " + inj + "<br/>" diff --git a/wizards/acc_operation_wizard.py b/wizards/acc_operation_wizard.py index 8f5ed7d..0876854 100644 --- a/wizards/acc_operation_wizard.py +++ b/wizards/acc_operation_wizard.py @@ -30,7 +30,8 @@ class AccOperationWizard(models.TransientModel): relation="acc_counter_cons_rel", column1="cons_id", column2="op_id", - domain=[("is_delivery", "=", True)], + # TODO: rework domain ? + # domain=[("prm_type", "=", "injection")], string="PRM de soutirage", ) prm_prod_ids = fields.Many2many( @@ -38,7 +39,8 @@ class AccOperationWizard(models.TransientModel): relation="acc_counter_prod_rel", column1="prod_id", column2="op_id", - domain=[("is_injection", "=", True)], + # TODO: rework domain ? + # domain=[("is_injection", "=", True)], string="PRM d'injection", ) diff --git a/wizards/acc_operation_wizard_confirm.py b/wizards/acc_operation_wizard_confirm.py index 463d401..b9754d1 100644 --- a/wizards/acc_operation_wizard_confirm.py +++ b/wizards/acc_operation_wizard_confirm.py @@ -19,7 +19,8 @@ class AccOperationWizardConfirm(models.TransientModel): relation="acc_counter_cons_confirm_rel", column1="cons_id", column2="op_id", - domain=[("is_delivery", "=", True)], + # TODO: rework domain ? + # domain=[("is_delivery", "=", True)], string="PRM de soutirage", ) prm_prod_ids = fields.Many2many( @@ -27,7 +28,8 @@ class AccOperationWizardConfirm(models.TransientModel): relation="acc_counter_prod_confirm_rel", column1="prod_id", column2="op_id", - domain=[("is_injection", "=", True)], + # TODO: rework domain ? + # domain=[("is_injection", "=", True)], string="PRM d'injection", ) rec_ids = fields.Many2many("acc.enedis.cdc", string="Records") diff --git a/wizards/acc_operation_wizard_views.xml b/wizards/acc_operation_wizard_views.xml index 0433371..793ac05 100644 --- a/wizards/acc_operation_wizard_views.xml +++ b/wizards/acc_operation_wizard_views.xml @@ -11,15 +11,16 @@ <field name="prm_cons_ids" widget="many2many_tags" - domain="[('is_delivery', '=', True), ('acc_operation_id', '=', operation_id)]" options="{'no_create_edit': True, 'no_create': True}" /> + <!-- 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="[('is_injection', '=', True), ('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="date_start" /> -- GitLab