diff --git a/wizard/scop_membership_out_wizard.py b/wizard/scop_membership_out_wizard.py index 0ef03db691f3cc2761e3fdeb8a6491112c3623fb..ff93026c6684def0a792a6dd4c3321c3b9b5d4db 100644 --- a/wizard/scop_membership_out_wizard.py +++ b/wizard/scop_membership_out_wizard.py @@ -15,10 +15,13 @@ class ScopMembershipOutWizard(models.TransientModel): 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', required=True) + ondelete='restrict') end = fields.Date( "Fin d'adhésion", required=True, default=fields.Date.today()) end_reason_id = fields.Many2one( @@ -28,26 +31,55 @@ class ScopMembershipOutWizard(models.TransientModel): required=True) note = fields.Text('Commentaires') + + #............................................................ + # Fermeture des périodes + #............................................................ @api.multi def member_out(self): - # Close previous period + for period in self: - last_period = self.env['scop.membership.period'].search( - [('partner_id', '=', period.partner_id), - ('end', '=', False), ('type_id', '=', period.type_id.id)], - limit=1) - if last_period: - if period.end >= last_period.start: - last_period.write({ - 'end': period.end, - 'end_reason_id': period.end_reason_id.id, - 'note': period.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)) + + # 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( - "Il n'existe pas de période avec ce type à fermer.") + "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 + diff --git a/wizard/scop_membership_out_wizard.xml b/wizard/scop_membership_out_wizard.xml index 7778d9724a200e6867d91f55ca76c44ead409759..81b6de724e942c11c434a002f3a55245c7da3863 100644 --- a/wizard/scop_membership_out_wizard.xml +++ b/wizard/scop_membership_out_wizard.xml @@ -7,7 +7,8 @@ <field name="arch" type="xml"> <form string="Radiation"> <group name="period" string="Radiation"> - <field name="type_id" options="{'no_open': True, 'no_create': True}"/> + <field name="type_all"/> + <field name="type_id" options="{'no_open': True, 'no_create': True}" attrs="{'required' : [('type_all','=', False)] ,'invisible': [('type_all','=', True)]}"/> <field name="end"/> <field name="end_reason_id" options="{'no_open': True, 'no_create': True}"/> <field name="note"/>