Sélectionner une révision Git
acc_operation_wizard.py

Rémi - Le Filament authored
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
# ------------------------------------------------------