From eb5aeb4388db21803a56501f71fc8c0863f5036f Mon Sep 17 00:00:00 2001 From: Juliana <juliana@le-filament.com> Date: Wed, 5 Jul 2023 12:04:52 +0200 Subject: [PATCH] [UPD]Add control existence data before call API --- __manifest__.py | 1 + security/ir.model.access.csv | 2 + wizards/__init__.py | 1 + wizards/acc_operation_wizard.py | 46 +++++++++++- wizards/acc_operation_wizard_confirm.py | 73 +++++++++++++++++++ .../acc_operation_wizard_confirm_views.xml | 41 +++++++++++ 6 files changed, 160 insertions(+), 4 deletions(-) create mode 100644 wizards/acc_operation_wizard_confirm.py create mode 100644 wizards/acc_operation_wizard_confirm_views.xml diff --git a/__manifest__.py b/__manifest__.py index ae22c7a..8f6511c 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -11,6 +11,7 @@ # datas # views "wizards/acc_operation_wizard_views.xml", + "wizards/acc_operation_wizard_confirm_views.xml", "views/acc_operation_views.xml", # views menu ], diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index 8dfe7dd..a00115a 100644 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -1,3 +1,5 @@ id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink "access_acc_operation_wizard_group_partner_manager","acc_operation_wizard group_partner_manager","model_acc_operation_wizard","base.group_partner_manager",1,1,1,1 "access_acc_operation_wizard_group_user","acc_operation_wizard group_user","model_acc_operation_wizard","base.group_user",1,0,0,0 +"access_acc_operation_wizard_confirm_group_partner_manager","acc_operation_wizard_confirm group_partner_manager","model_acc_operation_wizard_confirm","base.group_partner_manager",1,1,1,1 +"access_acc_operation_wizard_confirm_group_user","acc_operation_wizard_confirm group_user","model_acc_operation_wizard_confirm","base.group_user",1,0,0,0 diff --git a/wizards/__init__.py b/wizards/__init__.py index ddbfb3b..c318662 100644 --- a/wizards/__init__.py +++ b/wizards/__init__.py @@ -2,3 +2,4 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from . import acc_operation_wizard +from . import acc_operation_wizard_confirm diff --git a/wizards/acc_operation_wizard.py b/wizards/acc_operation_wizard.py index 01a2345..31b7de2 100644 --- a/wizards/acc_operation_wizard.py +++ b/wizards/acc_operation_wizard.py @@ -76,10 +76,48 @@ class AccOperationWizard(models.TransientModel): if self.date_end <= self.date_start: raise UserError(_("La date de fin doit être supérieure à la date de début")) - self.operation_id.curves( - self.date_start, self.date_end, self.prm_cons_ids, self.prm_prod_ids - ) - return {"type": "ir.actions.act_window_close"} + # Vérification si des données existent déjà + # pour cet intervalle de date + domain_all = [ + ("date_slot", ">=", self.date_start), + ("date_slot", "<=", self.date_end), + ("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), + ("acc_counter_id", "in", self.prm_prod_ids.ids)] + elif self.prm_cons_ids: + domain_all += [("acc_counter_id", "in", self.prm_cons_ids.ids)] + elif self.prm_prod_ids: + domain_all += [("acc_counter_id", "in", self.prm_prod_ids.ids)] + + rec_ids = self.env["acc.enedis.cdc"].search(domain_all) + if rec_ids: + wizard = self.env["acc.operation.wizard.confirm"].create( + { + "operation_id": self.operation_id.id, + "date_start": self.date_start, + "date_end": self.date_end, + "prm_cons_ids": self.prm_cons_ids, + "prm_prod_ids": self.prm_prod_ids, + "rec_ids": rec_ids, + "mess": _("Des données existent déjà pour cette période. Etes-vous" + " sûr de vouloir écraser les données existantes?") + } + ) + return { + "name": "Confirmation récupération des données", + "type": "ir.actions.act_window", + "view_mode": "form", + "res_model": "acc.operation.wizard.confirm", + "res_id": wizard.id, + "target": "new", + } + else: + self.operation_id.curves( + self.date_start, self.date_end, self.prm_cons_ids, self.prm_prod_ids + ) + return {"type": "ir.actions.act_window_close"} # def get_curves_all(self): # context = dict(self._context or {}) diff --git a/wizards/acc_operation_wizard_confirm.py b/wizards/acc_operation_wizard_confirm.py new file mode 100644 index 0000000..2b9c813 --- /dev/null +++ b/wizards/acc_operation_wizard_confirm.py @@ -0,0 +1,73 @@ +# Copyright 2023 Le Filament (<http://www.le-filament.com>) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import _, fields, models +from odoo.exceptions import UserError + + +class AccOperationWizardConfirm(models.TransientModel): + _name = "acc.operation.wizard.confirm" + _description = "Confirmation récupération des données vie API" + + # ------------------------------------------------------ + # Fields declaration + # ------------------------------------------------------ + operation_id = fields.Many2one( + "acc.operation") + date_start = fields.Date("Date de début") + date_end = fields.Date("Date de fin") + prm_cons_ids = fields.Many2many( + "acc.counter", + relation="acc_counter_cons_confirm_rel", + column1="cons_id", + column2="op_id", + domain=[("is_delivery", "=", True)], + string="PRM de soutirage", + ) + prm_prod_ids = fields.Many2many( + "acc.counter", + relation="acc_counter_prod_confirm_rel", + column1="prod_id", + column2="op_id", + domain=[("is_injection", "=", True)], + string="PRM d'injection", + ) + rec_ids = fields.Many2many("acc.enedis.cdc", string="Records") + mess = fields.Text( + string="Message", + ) + # ------------------------------------------------------ + # SQL Constraints + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Default methods + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Computed fields / Search Fields + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Onchange / Constraints + # ------------------------------------------------------ + + # ------------------------------------------------------ + # CRUD methods (ORM overrides) + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Actions + # ------------------------------------------------------ + def get_valid(self): + # Suppression des enregistrements existants + self.rec_ids.unlink() + + # Appel API + self.operation_id.curves( + self.date_start, self.date_end, self.prm_cons_ids, self.prm_prod_ids + ) + return {"type": "ir.actions.act_window_close"} + # ------------------------------------------------------ + # Business methods + # ------------------------------------------------------ diff --git a/wizards/acc_operation_wizard_confirm_views.xml b/wizards/acc_operation_wizard_confirm_views.xml new file mode 100644 index 0000000..dc84e09 --- /dev/null +++ b/wizards/acc_operation_wizard_confirm_views.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<odoo> + <!-- WIZARD FORM --> + <record id="acc_operation_wizard_confirm_view_form" model="ir.ui.view"> + <field name="name">acc.operation.wizard.confirm.form</field> + <field name="model">acc.operation.wizard.confirm</field> + <field name="arch" type="xml"> + <form> + <div> + <field + class="o_field_header" + name="mess" + readonly="1" + /> + </div> + <group> + <field name="operation_id" invisible="1" /> + <field name="prm_cons_ids" invisible="1"/> + <field name="prm_prod_ids" invisible="1"/> + <field name="date_start" invisible="1"/> + <field name="date_end" invisible="1"/> + <field name="rec_ids" invisible="1"/> + </group> + <footer> + <button + class="btn btn-sm btn-primary" + name="get_valid" + string="Valider" + type="object" + /> + <button + class="btn btn-sm btn-default" + special="cancel" + string="Annuler" + /> + </footer> + </form> + </field> + </record> + +</odoo> -- GitLab