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'
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',