Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • 8b5b9ddadd3cd45e9aeacd7dafcee97bf0e9f4ec
  • 14.0 par défaut
  • 12.0 protégée
  • 13.0
  • 12.0-lm-00 protégée
5 résultats

scop_membership_out_wizard.py

Blame
  • scop_membership_out_wizard.py 3,08 Kio
    # © 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.Integer('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=fields.Date.today())
        end_reason_id = fields.Many2one(
            'scop.membership.reason.end',
            string="Motif de fin d’adhésion",
            on_delete='restrict',
            required=True)
        note = fields.Text('Commentaires')
    
        
        #............................................................
        # Fermeture des périodes
        #............................................................
        @api.multi
        def member_out(self):
    
            for period in self:
    
                # On veut cloture toute les périodes
                if (period.type_all):
                    last_periods = self.env['scop.membership.period'].search(
                    [('partner_id', '=', period.partner_id),('end', '=', False)])
                    for lp in last_periods:
                        period_type_id = lp.type_id.id
                        period.member_out_period(period.partner_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, period_type_id, period.end, period.end_reason_id.id, period.note)
    
            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