Sélectionner une révision Git
scop_federation_activity.cpython-36.pyc
Bifurcation depuis
Le Filament / Confédération Générale des SCOP / cgscop_partner
Le projet source a une visibilité limitée.
acc_operation_wizard.py 6,71 Kio
# Copyright 2021- Le Filament (https://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()
)
start_date = fields.Date("Date de début")
end_date = 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.end_date and not self.start_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:
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),
("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,
"start_date": self.start_date,
"end_date": self.end_date,
"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.start_date, self.end_date, 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
# ------------------------------------------------------