Sélectionner une révision Git
scop_membership_out_wizard.py
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