# © 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