diff --git a/addons/membership/models/partner.py b/addons/membership/models/partner.py index 5528d7ada53e69f031b571de248baca6b640e07b..30de29f7e2d2cc5c9082219b8149aaefe8070154 100644 --- a/addons/membership/models/partner.py +++ b/addons/membership/models/partner.py @@ -43,60 +43,41 @@ class Partner(models.Model): 'member_lines.account_invoice_line.move_id.partner_id', 'free_member', 'member_lines.date_to', 'member_lines.date_from', - 'associate_member') + 'associate_member', 'associate_member.membership_state') def _compute_membership_state(self): today = fields.Date.today() for partner in self: - state = 'none' - partner.membership_start = self.env['membership.membership_line'].search([ - ('partner', '=', partner.associate_member.id or partner.id), ('date_cancel','=',False) + ('partner', '=', partner.associate_member.id or partner.id), ('date_cancel', '=', False) ], limit=1, order='date_from').date_from partner.membership_stop = self.env['membership.membership_line'].search([ - ('partner', '=', partner.associate_member.id or partner.id),('date_cancel','=',False) + ('partner', '=', partner.associate_member.id or partner.id), ('date_cancel', '=', False) ], limit=1, order='date_to desc').date_to partner.membership_cancel = self.env['membership.membership_line'].search([ ('partner', '=', partner.id) ], limit=1, order='date_cancel').date_cancel - if partner.membership_cancel and today > partner.membership_cancel: - partner.membership_state = 'free' if partner.free_member else 'canceled' - continue - if partner.membership_stop and today > partner.membership_stop: - if partner.free_member: - partner.membership_state = 'free' - continue if partner.associate_member: - partner.associate_member._compute_membership_state() partner.membership_state = partner.associate_member.membership_state continue - line_states = [mline.state for mline in partner.member_lines if \ - (mline.date_to or date.min) >= today and \ - (mline.date_from or date.min) <= today and \ - mline.account_invoice_line.move_id.partner_id == partner] - - if 'paid' in line_states: - state = 'paid' - elif 'invoiced' in line_states: - state = 'invoiced' - elif 'waiting' in line_states: - state = 'waiting' - elif 'canceled' in line_states: - state = 'canceled' - - if state == 'none': - for mline in partner.member_lines: - # if there is an old invoice paid, set the state to 'old' - if ((mline.date_from or date.min) < today and (mline.date_to or date.min) < today and \ - (mline.date_from or date.min) <= (mline.date_to or date.min) and \ - mline.account_invoice_id and mline.account_invoice_id.payment_state in ('in_payment', 'paid')): - state = 'old' - break + if partner.free_member and partner.membership_state != 'paid': + partner.membership_state = 'free' + continue - if partner.free_member and state != 'paid': - state = 'free' - partner.membership_state = state + for mline in partner.member_lines: + if (mline.date_to or date.min) >= today and (mline.date_from or date.min) <= today: + partner.membership_state = mline.state + break + elif ((mline.date_from or date.min) < today and (mline.date_to or date.min) <= today and \ + (mline.date_from or date.min) < (mline.date_to or date.min)): + if mline.account_invoice_id and mline.account_invoice_id.payment_state in ('in_payment', 'paid'): + partner.membership_state = 'old' + elif mline.account_invoice_id and mline.account_invoice_id.state == 'cancel': + partner.membership_state = 'canceled' + break + else: + partner.membership_state = 'none' @api.constrains('associate_member') def _check_recursion_associate_member(self):