X-Git-Url: https://git.heureux-cyclage.org/?p=burette%2Fremembership.git;a=blobdiff_plain;f=remembership.py;h=11f61ca7177e42e7bf0aa0f4c4911585b4f270de;hp=20047709aba5b5d8830ada53d0bf65f948e7b74b;hb=cd599cd4d0e3c8a7d8eb1b20a20737b3106cbc57;hpb=03e884c839ad12ec33540cffb07217b0d762e2a7 diff --git a/remembership.py b/remembership.py index 2004770..11f61ca 100644 --- a/remembership.py +++ b/remembership.py @@ -24,72 +24,54 @@ from osv import osv from osv import fields + class Partner(osv.osv): _inherit = 'res.partner' _columns = { - 'member_ident': fields.char('Member identifier', size=64, readonly=True), + 'member_ident': fields.char('Member identifier', size=64), } - def create_membership_invoice(self, cr, uid, ids, product_id=None, datas=None, context=None): - """ Create Customer Invoice of Membership for partners. - @param datas: datas has dictionary value which consist Id of Membership product and Cost Amount of Membership. - datas = {'membership_product_id': None, 'amount': None} - """ - invoice_obj = self.pool.get('account.invoice') - invoice_line_obj = self.pool.get('account.invoice.line') - invoice_tax_obj = self.pool.get('account.invoice.tax') - product_id = product_id or datas.get('membership_product_id', False) - amount = datas.get('amount', 0.0) - invoice_list = [] - if type(ids) in (int, long,): - ids = [ids] - for partner in self.browse(cr, uid, ids, context=context): - account_id = partner.property_account_receivable and partner.property_account_receivable.id or False - fpos_id = partner.property_account_position and partner.property_account_position.id or False - addr = self.address_get(cr, uid, [partner.id], ['invoice']) - if partner.free_member: - raise osv.except_osv(_('Error !'), - _("Partner is a free Member.")) - if not addr.get('invoice', False): - raise osv.except_osv(_('Error !'), - _("Partner doesn't have an address to make the invoice.")) - quantity = 1 - line_value = { - 'product_id': product_id, - } - - line_dict = invoice_line_obj.product_id_change(cr, uid, {}, - product_id, False, quantity, '', 'out_invoice', partner.id, fpos_id, price_unit=amount, context=context) - line_value.update(line_dict['value']) - line_value['price_unit'] = amount - if line_value.get('invoice_line_tax_id', False): - tax_tab = [(6, 0, line_value['invoice_line_tax_id'])] - line_value['invoice_line_tax_id'] = tax_tab - - invoice_id = invoice_obj.create(cr, uid, { - 'partner_id': partner.id, - 'address_invoice_id': addr.get('invoice', False), - 'account_id': account_id, - 'fiscal_position': fpos_id or False - }, context=context) - line_value['invoice_id'] = invoice_id - invoice_line_id = invoice_line_obj.create(cr, uid, line_value, context=context) - invoice_obj.write(cr, uid, invoice_id, {'invoice_line': [(6, 0, [invoice_line_id])]}, context=context) - invoice_list.append(invoice_id) - if line_value['invoice_line_tax_id']: - tax_value = invoice_tax_obj.compute(cr, uid, invoice_id).values() - for tax in tax_value: - invoice_tax_obj.create(cr, uid, tax, context=context) - if partner.member_ident: - mbr_id = partner.member_ident - else: - mbr_id = self.pool.get('ir.sequence').get(cr, uid, 'member_ident') - #recompute the membership_state of those partners - self.pool.get('res.partner').write(cr, uid, ids, {'member_ident': mbr_id}) - return invoice_list + _sql_constraints = [ + ('member_ident_uniq', 'unique(member_ident, company_id)', 'The member identifier must be unique !'), + ] Partner() +class account_invoice_line(osv.osv): + _inherit = 'account.invoice.line' + + def create(self, cr, uid, vals, context=None): + 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: + partners = [line.invoice_id.partner_id] + 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}) + return res + +account_invoice_line() + + +class pos_make_payment(osv.osv_memory): + _inherit = 'pos.make.payment' + + def check(self, cr, uid, ids, context=None): + """ + Auto invoice orders. Temporarly solution before make partner members just with orders, without invoice. + """ + res = super(pos_make_payment, self).check(cr, uid, ids, context=context) + + order_obj = self.pool.get('pos.order') + order_obj.action_invoice(cr, uid, ids, context=context) + + return res + +pos_make_payment() + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: