Select Git revision
entrypoint.sh
-
Théo - Le Filament authoredThéo - Le Filament authored
scop_membership_out_wizard.py NaN GiB
# © 2019 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
class ScopMembershipOutWizard(models.TransientModel):
_name = "scop.membership.out.wizard"
_description = "Radiation"
# Default functions
@api.model
def _default_partner_id(self):
return self.env.context.get("active_id")
partner_id = fields.Many2one(
comodel_name="res.partner", string="Partner", default=_default_partner_id
)
type_all = fields.Boolean(string="Tous types d'adhésion", default=True)
type_id = fields.Many2one(
"scop.membership.type", string="Type d'adhésion", ondelete="restrict"
)
end = fields.Date("Fin d'adhésion", required=True, default=lambda self: fields.Date.today())
end_reason_id = fields.Many2one(
"scop.membership.reason.end",
string="Motif de fin d’adhésion",
ondelete="restrict",
required=True,
)
note = fields.Text("Commentaires")
# ............................................................
# Fermeture des périodes
# ............................................................
def member_out(self):
for period in self:
# On veut cloture toutes les périodes
if period.type_all:
last_periods = self.env["scop.membership.period"].search(
[
("partner_id", "=", period.partner_id.id),
("end", "=", False),
]
)
for lp in last_periods:
period_type_id = lp.type_id.id
period.member_out_period(
period.partner_id.id,
period_type_id,
period.end,
period.end_reason_id.id,
period.note,
)
# On ne veut cloturer qu'une seule période
else:
period_type_id = period.type_id.id
period.member_out_period(
period.partner_id.id,
period_type_id,
period.end,
period.end_reason_id.id,
period.note,
)
self.partner_id.write({"membership_status": "out"})
return
# ............................................................
# Fermeture d'une période
# ............................................................
def member_out_period(self, partner_id, period_type_id, end, end_reason_id, note):
# Lecture de la dernière période active
last_period = self.env["scop.membership.period"].search(
[
("partner_id", "=", partner_id),
("end", "=", False),
("type_id", "=", period_type_id),
],
limit=1,
)
if last_period:
if end >= last_period.start:
last_period.write(
{
"end": end,
"end_reason_id": end_reason_id,
"note": note,
}
)
else:
raise ValidationError(
_(
"La date de fin doit être postèrieure à la date de "
+ "début de la dernière période: "
)
+ str(last_period.start)
)
else:
raise ValidationError(
_("Il n'existe pas de période avec ce type à fermer.")
)
return