+ # XXX: copied from openerp/addons/membership/membership.py
+ def _membership_date(self, cr, uid, ids, name, args, context=None):
+ """Return date of membership"""
+ name = name[0]
+ res = {}
+ member_line_obj = self.pool.get('membership.membership_line')
+ print ("DEV: [remembership] [_membership_date]")
+ for partner in self.browse(cr, uid, ids, context=context):
+ # XXX: commented part from openerp/addons/membership/membership.py
+ #if partner.associate_member:
+ # partner_id = partner.associate_member.id
+ #else:
+ # NOTE: hmm, ça devrait être toujours partner.id
+ partner_id = partner.id
+ res[partner.id] = {
+ 'membership_start': False,
+ 'membership_stop': False,
+ 'membership_cancel': False
+ }
+ if name == 'membership_start':
+ line_id = member_line_obj.search(cr, uid, [('partner', '=', partner_id),('date_cancel','=',False)],
+ limit=1, order='date_from', context=context)
+ if line_id:
+ res[partner.id]['membership_start'] = member_line_obj.read(cr, uid, line_id[0],
+ ['date_from'], context=context)['date_from']
+ if partner.associate_member:
+ print ("DEV: [_membership_date] [associate] date_from: %s" % str(res[partner.id]['membership_start']))
+ else:
+ print ("DEV: [_membership_date] date_from: %s" % str(res[partner.id]['membership_start']))
+
+ if name == 'membership_stop':
+ line_id1 = member_line_obj.search(cr, uid, [('partner', '=', partner_id),('date_cancel','=',False)],
+ limit=1, order='date_to desc', context=context)
+ if line_id1:
+ res[partner.id]['membership_stop'] = member_line_obj.read(cr, uid, line_id1[0],
+ ['date_to'], context=context)['date_to']
+ if partner.associate_member:
+ print ("DEV: [_membership_date] [associate] date_to: %s" % str(res[partner.id]['membership_stop']))
+ else:
+ print ("DEV: [_membership_date] date_to: %s" % str(res[partner.id]['membership_stop']))
+
+ if name == 'membership_cancel':
+ if partner.membership_state == 'canceled':
+ line_id2 = member_line_obj.search(cr, uid, [('partner', '=', partner.id)], limit=1, order='date_cancel', context=context)
+ if line_id2:
+ res[partner.id]['membership_cancel'] = member_line_obj.read(cr, uid, line_id2[0], ['date_cancel'], context=context)['date_cancel']
+ return res
+ # XXX: copied from openerp/addons/membership/membership.py
+ def _get_partner_id(self, cr, uid, ids, context=None):
+ member_line_obj = self.pool.get('membership.membership_line')
+ res_obj = self.pool.get('res.partner')
+ data_inv = member_line_obj.browse(cr, uid, ids, context=context)
+ list_partner = []
+ for data in data_inv:
+ list_partner.append(data.partner.id)
+ ids2 = list_partner
+ while ids2:
+ ids2 = res_obj.search(cr, uid, [('associate_member', 'in', ids2)], context=context)
+ list_partner += ids2
+ return list_partner
+ # XXX: copied from openerp/addons/membership/membership.py
+ def _get_invoice_partner(self, cr, uid, ids, context=None):
+ inv_obj = self.pool.get('account.invoice')
+ res_obj = self.pool.get('res.partner')
+ data_inv = inv_obj.browse(cr, uid, ids, context=context)
+ list_partner = []
+ for data in data_inv:
+ list_partner.append(data.partner_id.id)
+ ids2 = list_partner
+ while ids2:
+ ids2 = res_obj.search(cr, uid, [('associate_member', 'in', ids2)], context=context)
+ list_partner += ids2
+ return list_partner
+
+
+ def _membership_state(self, cr, uid, ids, name, args, context=None):
+ res = super(Partner, self)._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
+
+