Skip to content
Extraits de code Groupes Projets
scop_membership_out_wizard.py 3,68 ko
Newer Older
  • Learn to ignore specific revisions
  • Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
    # © 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
    
    Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
    from odoo.exceptions import ValidationError
    
    
    class ScopMembershipOutWizard(models.TransientModel):
    
    Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
        _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)
    
    Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
        type_id = fields.Many2one(
    
            "scop.membership.type", string="Type d'adhésion", ondelete="restrict"
        )
    
    Benjamin - Le Filament's avatar
    Benjamin - Le Filament a validé
        end = fields.Date("Fin d'adhésion", required=True, default=lambda self: fields.Date.today())
    
    Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
        end_reason_id = fields.Many2one(
    
    Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
            string="Motif de fin d’adhésion",
    
            ondelete="restrict",
            required=True,
        )
        note = fields.Text("Commentaires")
    
        # ............................................................
    
        # Fermeture des périodes
    
        # ............................................................
    
    Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
        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),
    
                    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,
    
                # 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,
    
    Juliana's avatar
    Juliana a validé
            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,
                        }
                    )
    
    Rémi - Le Filament's avatar
    Rémi - Le Filament a validé
                else:
                    raise ValidationError(
    
                        _(
                            "La date de fin doit être postèrieure à la date de "
                            + "début de la dernière période: "
                        )
    
            else:
    
                raise ValidationError(
                    _("Il n'existe pas de période avec ce type à fermer.")
                )