Skip to content
Snippets Groups Projects
Select Git revision
  • 18.0
  • 17.0
  • 14.0 protected
  • 16.0 default protected
  • 15.0 protected
  • 12.0 protected
  • 10.0 protected
7 results

entrypoint.sh

Blame
  • 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