From 2a46f5a67b0eb98dbcfc375d88c576c81527a644 Mon Sep 17 00:00:00 2001 From: Antoine Gonzalez Date: Thu, 14 Jan 2016 14:24:05 +0100 Subject: [PATCH] [PYTHON]fix allowing for partners without invoice to be considered as valid, eg imported members --- remembership.py | 60 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/remembership.py b/remembership.py index ad6438f..68a0ad5 100644 --- a/remembership.py +++ b/remembership.py @@ -28,6 +28,16 @@ from datetime import datetime, date from dateutil.relativedelta import relativedelta from openerp.tools.translate import _ +STATE = [ + ('none', 'Non Member'), + ('canceled', 'Cancelled Member'), + ('old', 'Old Member'), + ('waiting', 'Waiting Member'), + ('invoiced', 'Invoiced Member'), + ('free', 'Free Member'), + ('paid', 'Paid Member'), +] + class Partner(osv.osv): _inherit = 'res.partner' @@ -105,10 +115,60 @@ class Partner(osv.osv): list_partner += ids2 return list_partner + + def __get_membership_state(self, cr, uid, ids, name, args, context=None): + res = super(Partner, self).__get_membership_state(cr, uid, ids, name, args, context) + today = time.strftime('%Y-%m-%d') + + # special case when the partner is imported from a file, + # in this case is has a valid membership line but + # no payment information associated to it, consider it valid + for id in ids: + if res[id] == 'none': + + partner_data = self.browse(cr, uid, id, context=context) + + no_payment_info_at_all = True + valid_line = False + + for mline in partner_data.member_lines: + if mline.date_to >= today: + valid_line = True + + if mline.account_invoice_line: + no_payment_info_at_all = False + + if no_payment_info_at_all and valid_line: + res[id] = 'paid' + + return res + + + def _get_partners(self, *args, **kwargs): + res = super(Partner, self.pool.get('res.partner'))._get_partners(*args, **kwargs) + return res + + _columns = { 'member_ident': fields.char('Member identifier', size=64), 'associate_members': fields.one2many('res.partner', 'associate_member', 'Associate members', help='Members who are associated to this partner.'), # XXX: copied from openerp/addons/membership/membership.py + 'membership_state': fields.function( + __get_membership_state, + string = 'Current Membership Status', type = 'selection', + selection = STATE, + store = { + 'account.invoice': (_get_invoice_partner, ['state'], 20), + 'membership.membership_line': (_get_partner_id, ['state'], 20), + 'res.partner': (_get_partners, ['free_member', 'membership_state', 'associate_member'], 20) + }, help="""It indicates the membership state. + -Non Member: A partner who has not applied for any membership. + -Cancelled Member: A member who has cancelled his membership. + -Old Member: A member whose membership date has expired. + -Waiting Member: A member who has applied for the membership and whose invoice is going to be created. + -Invoiced Member: A member whose invoice has been created. + -Paying member: A member who has paid the membership fee."""), + # XXX: copied from openerp/addons/membership/membership.py 'membership_start': fields.function( _membership_date, multi = 'membership_start', string = 'Membership Start Date', type = 'date', -- 2.20.1