Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • 66ccca52bc38ccda62a9ce012db15e23fa94b8a1
  • 14.0 par défaut
  • 12.0 protégée
  • 13.0
  • 12.0-lm-00 protégée
5 résultats

__init__.py

Blame
  • acc_operation_wizard.py 6,72 Kio
    # 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 AccOperationWizard(models.TransientModel):
        _name = "acc.operation.wizard"
        _description = "Récupération des courbes pour une date donnée"
    
        # ------------------------------------------------------
        # Fields declaration
        # ------------------------------------------------------
        def _default_operation_id(self):
            op = self.env["acc.operation"].browse(
                self.env.context.get("active_ids")[0]
                if self.env.context.get("active_ids")
                else []
            )
            return op
    
        operation_id = fields.Many2one(
            "acc.operation", default=lambda self: self._default_operation_id()
        )
        date_start = fields.Date("Date de début")
        date_end = fields.Date("Date de fin (exclue)")
        prm_cons_ids = fields.Many2many(
            "acc.counter",
            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(
            "acc.counter",
            relation="acc_counter_prod_rel",
            column1="prod_id",
            column2="op_id",
            # TODO: rework domain ?
            # domain=[("is_injection", "=", True)],
            string="PRM d'injection",
        )
    
        # ------------------------------------------------------
        # SQL Constraints
        # ------------------------------------------------------
    
        # ------------------------------------------------------
        # Default methods
        # ------------------------------------------------------
    
        # ------------------------------------------------------
        # Computed fields / Search Fields
        # ------------------------------------------------------
    
        # ------------------------------------------------------
        # Onchange / Constraints
        # ------------------------------------------------------
    
        # ------------------------------------------------------
        # CRUD methods (ORM overrides)
        # ------------------------------------------------------
    
        # ------------------------------------------------------
        # Actions
        # ------------------------------------------------------
        def get_curves(self):
            if not self.date_end and not self.date_start:
                raise UserError(
                    _("Les champs Date de début et Date de fin sont obligatoires")
                )
            if (self.date_end - self.date_start).days > 31:
                raise UserError(_("L'intervalle de temps ne doit pas dépasser 31 Jours"))
    
            if self.date_end <= self.date_start:
                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.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),
                    ("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 += [
                    ("acc_counter_id", "in", self.prm_cons_ids.ids),
                    ("comp_data_type", "in", ("autocons", "cons")),
                ]
            elif self.prm_prod_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)
            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):
            if not self.operation_id.date_start_contract:
                raise UserError(
                    _(
                        "Renseigner une date de début de contrat pour"
                        " pouvoir récupérer les courbes à partir de cette date."
                    )
                )
    
            rec_ids = self.env["acc.enedis.cdc"].search(
                [("acc_operation_id", "=", self.operation_id.id)]
            )
            if rec_ids:
                wizard = self.env["acc.operation.wizard.confirm"].create(
                    {
                        "operation_id": self.operation_id.id,
                        "prm_cons_ids": self.prm_cons_ids,
                        "prm_prod_ids": self.prm_prod_ids,
                        "rec_ids": rec_ids,
                        "mess": _(
                            "Des données existent pour cette période. Etes-vous"
                            " sûr de vouloir écraser toutes 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.get_curves_all(self.prm_cons_ids, self.prm_prod_ids)
                return {"type": "ir.actions.act_window_close"}
    
        # ------------------------------------------------------
        # Business methods
        # ------------------------------------------------------