X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=pos_membership.py;h=e0b63c9908a3d116e16e6be037bc98ccd2703b9a;hb=6084b156c6785aec16d1b729d72fc2675bbfabdd;hp=35131769e4d9e4e6c0df3b07125b589214cd8809;hpb=635bff1482fd4f1dff117e49a3f2707038e0810c;p=burette%2Fpos_membership.git diff --git a/pos_membership.py b/pos_membership.py index 3513176..e0b63c9 100644 --- a/pos_membership.py +++ b/pos_membership.py @@ -385,12 +385,13 @@ class Partner(osv.osv): today = time.strftime('%Y-%m-%d') for id in ids: partner_data = self.browse(cr, uid, id, context=context) - if partner_data.membership_cancel and today > partner_data.membership_cancel: - res[id] = 'canceled' - continue - if partner_data.membership_stop and today > partner_data.membership_stop: - res[id] = 'old' - continue + if not partner_data.free_member: + if partner_data.membership_cancel and today > partner_data.membership_cancel: + res[id] = 'canceled' + continue + if partner_data.membership_stop and today > partner_data.membership_stop: + res[id] = 'old' + continue s = 4 if partner_data.member_lines: for mline in partner_data.member_lines: @@ -444,6 +445,25 @@ class Partner(osv.osv): s = 5 else: s = 6 + + if s == 6: + # special case when the partner is imported from a file, + # in this case is has a valid membership lines but + # no payment information associated, consider it valid + + 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 or mline.pos_order_line: + no_payment_info_at_all = False + + if no_payment_info_at_all and valid_line: + s = 0 + if s == 0: res[id] = 'paid' elif s == 1: @@ -458,9 +478,6 @@ class Partner(osv.osv): res[id] = 'none' if partner_data.free_member and s != 0: res[id] = 'free' - if partner_data.associate_member: - res_state = self._membership_state(cr, uid, [partner_data.associate_member.id], name, args, context=context) - res[id] = res_state[partner_data.associate_member.id] return res def _membership_date(self, cr, uid, ids, name, args, context=None): @@ -469,10 +486,7 @@ class Partner(osv.osv): res = {} member_line_obj = self.pool.get('membership.membership_line') for partner in self.browse(cr, uid, ids, context=context): - if partner.associate_member: - partner_id = partner.associate_member.id - else: - partner_id = partner.id + partner_id = partner.id res[partner.id] = { 'membership_start': False, 'membership_stop': False, @@ -654,11 +668,24 @@ class pos_order(osv.osv): return res def onchange_partner_id(self, cr, uid, ids, part=False, context=None): + """ + - Change membership stop value if partner change + - Change partner in membership line if s·he is change + """ if not part: return {'value': {}} res = super(pos_order, self).onchange_partner_id(cr, uid, ids, part=part, context=context) membership_stop = self.pool.get('res.partner').browse(cr, uid, part, context=context).membership_stop res['value']['membership_stop'] = membership_stop + ml_line_obj = self.pool.get('membership.membership_line') + pol_obj = self.pool.get('pos.order.line') + for id in ids: + pol_ids = pol_obj.search(cr, uid, [('order_id', '=', id)], context=context) + pols = pol_obj.browse(cr, uid, pol_ids, context=context) + for pol in pols: + if pol.product_id.membership: + ml_line_ids = ml_line_obj.search(cr, uid, [('pos_order_line', '=', pol.id)], context=context) + ml_line_obj.write(cr, uid, ml_line_ids, {'partner': part}, context=context) return res def _get_membership_stop(self, cr, uid, ids, name, args, context=None): @@ -697,16 +724,18 @@ class pos_order_line(osv.osv): date_from = member_line.date_from date_to = member_line.date_to if line.product_id.membership_date2date: - date_from = ('date_from' in context - and context.get('date_from') - and datetime.strptime(context('date_from'), "%Y-%m-%d") - or date.today()) + date_from = datetime.strptime(line.order_id.date_order, "%Y-%m-%d %H:%M:%S") date_to = date_from + relativedelta(months=+12, days=-1) # TODO: parameterize this delta? date_from = date_from.strftime("%Y-%m-%d") date_to = date_to .strftime("%Y-%m-%d") - member_line_obj.write(cr, uid, member_line.id - , {'date_from': date_from - ,'date_to' : date_to + member_line_obj.write(cr, uid, member_line.id, { + 'partner': line.order_id.partner_id and line.order_id.partner_id.id or False, + 'membership_id': line.product_id.id, + 'member_price': line.price_unit, + 'date': date_from, + 'date_from': date_from, + 'date_to': date_to, + 'pos_order_line': line.id, } , context=context) if line.product_id.membership_grouped: @@ -768,10 +797,7 @@ class pos_order_line(osv.osv): if line.order_id.date_order > date_from and line.order_id.date_order < date_to: date_from = line.order_id.date_order if line.product_id.membership_date2date: - date_from = ('date_from' in context - and context.get('date_from') - and datetime.strptime(context.get('date_from'), "%Y-%m-%d") - or date.today()) + date_from = datetime.strptime(line.order_id.date_order, "%Y-%m-%d %H:%M:%S") date_to = date_from + relativedelta(months=+12, days=-1) # TODO: parameterize this delta? date_from = date_from.strftime("%Y-%m-%d") date_to = date_to.strftime("%Y-%m-%d") @@ -779,7 +805,7 @@ class pos_order_line(osv.osv): 'partner': line.order_id.partner_id and line.order_id.partner_id.id or False, 'membership_id': line.product_id.id, 'member_price': line.price_unit, - 'date': time.strftime('%Y-%m-%d'), + 'date': date_from, 'date_from': date_from, 'date_to': date_to, 'pos_order_line': line.id,