From: Ludovic CHEVALIER Date: Thu, 20 Dec 2012 15:27:10 +0000 (+0100) Subject: Merge branch 'master' into membership_grouped X-Git-Url: http://git.cyclocoop.org/?p=burette%2Fremembership.git;a=commitdiff_plain;h=74a0c8f8229ec8b362a3b87bb6339839a120fb53;hp=-c Merge branch 'master' into membership_grouped --- 74a0c8f8229ec8b362a3b87bb6339839a120fb53 diff --combined remembership.py index b799cc7,113d0a9..c2e6c85 --- a/remembership.py +++ b/remembership.py @@@ -23,7 -23,6 +23,7 @@@ from osv import osv from osv import fields +import time class Partner(osv.osv): @@@ -31,6 -30,7 +31,7 @@@ _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.'), } _sql_constraints = [ @@@ -40,91 -40,16 +41,91 @@@ Partner() +class Product(osv.osv): + _inherit = 'product.product' + + _columns = { + 'membership_grouped': fields.boolean('Grouped membership product', help='Check if it\'s a grouped membership product.'), + 'membership_date2date': fields.boolean('Date to date membership product', required=False, help='Check if it\'s a date to date membership product.'), + } + +Product() + + class account_invoice_line(osv.osv): _inherit = 'account.invoice.line' + + def write(self, cr, uid, ids, vals, context=None): + member_line_obj = self.pool.get('membership.membership_line') + res = super(account_invoice_line, self).write(cr, uid, ids, vals, context=context) + for line in self.browse(cr, uid, ids, context=context): + if line.invoice_id.type == 'out_invoice': + ml_ids = member_line_obj.search(cr, uid, [('account_invoice_line', '=', line.id)], context=context) + if line.product_id and line.product_id.membership: + date_from = line.product_id.membership_date_from + date_to = line.product_id.membership_date_to + if line.invoice_id.date_invoice > date_from and line.invoice_id.date_invoice < date_to: + date_from = line.invoice_id.date_invoice + if line.product_id.membership_grouped: + if line.invoice_id.partner_id.associate_members: + for associate_member in line.invoice_id.partner_id.associate_members: + member_line_obj.create(cr, uid, { + 'partner': associate_member.id, + 'membership_id': line.product_id.id, + 'member_price': line.price_unit, + 'date': time.strftime('%Y-%m-%d'), + 'date_from': date_from, + 'date_to': date_to, + 'account_invoice_line': line.id, + }, context=context) + else: + print("DEV: mettre une contrainte pour l'objet\ + membership.membership_line interdisant les\ + adhésions groupées reliées à des partenaires\ + sans membres associés") + else: + associate_ml_ids = member_line_obj.search(cr, uid, [('account_invoice_line', '=', line.id), ('partner', '!=', line.invoice_id.partner_id.id)], context=context) + member_line_obj.unlink(cr, uid, associate_ml_ids, context=context) + + #Define member ident if it's necessary + partners = [line.invoice_id.partner_id] + if line.invoice_id.partner_id.associate_members: + partners.extend(line.invoice_id.partner_id.associate_members) + for i in partners: + if not i.member_ident: + mbr_id = self.pool.get('ir.sequence').get(cr, uid, 'member_ident') + self.pool.get('res.partner').write(cr, uid, i.id, {'member_ident': mbr_id}) + if line.product_id and not line.product_id.membership and ml_ids: + # Product line has changed to a non membership product + member_line_obj.unlink(cr, uid, ml_ids, context=context) + return res + def create(self, cr, uid, vals, context=None): + member_line_obj = self.pool.get('membership.membership_line') res = super(account_invoice_line, self).create(cr, uid, vals, context=context) line = self.browse(cr, uid, res, context=context) if line.invoice_id.type == 'out_invoice' and line.product_id and line.product_id.membership: + date_from = line.product_id.membership_date_from + date_to = line.product_id.membership_date_to + if line.invoice_id.date_invoice > date_from and line.invoice_id.date_invoice < date_to: + date_from = line.invoice_id.date_invoice partners = [line.invoice_id.partner_id] - partners.extend(line.invoice_id.partner_id.associate_members) + if line.product_id.membership_grouped and line.invoice_id.partner_id.associate_members: + partners.extend(line.invoice_id.partner_id.associate_members) + #Adding membership lines just for associate partners + for associate_member in line.invoice_id.partner_id.associate_members: + member_line_obj.create(cr, uid, { + 'partner': associate_member.id, + 'membership_id': line.product_id.id, + 'member_price': line.price_unit, + 'date': time.strftime('%Y-%m-%d'), + 'date_from': date_from, + 'date_to': date_to, + 'account_invoice_line': line.id, + }, context=context) + #Define member ident if it's necessary for i in partners: if not i.member_ident: mbr_id = self.pool.get('ir.sequence').get(cr, uid, 'member_ident')