diff --git a/base_partner_sequence/__openerp__.py b/base_partner_sequence/__openerp__.py index 6fee88060..0b7d60a8f 100644 --- a/base_partner_sequence/__openerp__.py +++ b/base_partner_sequence/__openerp__.py @@ -23,7 +23,7 @@ { "name": "Add a sequence on customers' code", "version": "1.1", - "author": "initOS GmbH & Co. KG", + "author": "Tiny/initOS GmbH & Co. KG", "category": "Generic Modules/Base", "website": "http://www.initos.com", "depends": ["base"], @@ -31,13 +31,22 @@ "description": """ This module adds the possibility to define a sequence for the partner code. This code is then set as default when you - create a new customer or supplier, using the defined sequence. + create a new commercial partner, using the defined sequence. + + The reference field is treated as a commercial field, i.e. it + is managed from the commercial partner and then propagated to + the partner's contacts. The field is visible on the contacts, + but it can only be modified from the commercial partner. + No codes are assigned for contacts such as shipping and invoice addresses. This module is a migration of the original base_partner_sequence addon to OpenERP version 7.0. """, - "data": ['partner_sequence.xml'], + "data": [ + 'partner_sequence.xml', + 'partner_view.xml', + ], "demo": [], "active": False, "installable": True diff --git a/base_partner_sequence/partner.py b/base_partner_sequence/partner.py index 1b0d734e1..674ffa66e 100644 --- a/base_partner_sequence/partner.py +++ b/base_partner_sequence/partner.py @@ -32,13 +32,13 @@ class ResPartner(orm.Model): def create(self, cr, uid, vals, context=None): context = context or {} if not vals.get('ref') and self._needsRef(cr, uid, vals=vals, context=context): - vals['ref'] = self.pool.get('ir.sequence').get(cr, uid, 'res.partner') + vals['ref'] = self.pool.get('ir.sequence').next_by_code(cr, uid, 'res.partner') return super(ResPartner, self).create(cr, uid, vals, context) def copy(self, cr, uid, id, default=None, context=None): default = default or {} if not default.get('ref') and self._needsRef(cr, uid, id=id, context=context): - default['ref'] = self.pool.get('ir.sequence').get(cr, uid, 'res.partner', context=context) + default['ref'] = self.pool.get('ir.sequence').next_by_code(cr, uid, 'res.partner', context=context) return super(ResPartner, self).copy(cr, uid, id, default, context=context) def _needsRef(self, cr, uid, id=None, vals=None, context=None): @@ -53,14 +53,21 @@ class ResPartner(orm.Model): """ if not vals and not id: raise Exception('Either field values or an id must be provided.') - # only assign a 'ref' if it is a customer or supplier and - # if it not a child object (such as a shipping/invoice address) + # only assign a 'ref' to commercial partners if id: - vals = self.read(cr, uid, id, ['parent_id', 'customer', 'supplier'], context=context) - return not vals.get('parent_id') and (vals.get('customer') or vals.get('supplier')) + vals = self.read(cr, uid, id, ['parent_id', 'is_company'], context=context) + return vals.get('is_company') or not vals.get('parent_id') _columns = { 'ref': fields.char('Reference', size=64, readonly=True), } + def _commercial_fields(self, cr, uid, context=None): + """ + Make the partner reference a field that is propagated + to the partner's contacts + """ + return super(ResPartner, self)._commercial_fields( + cr, uid, context=context) + ['ref'] + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/base_partner_sequence/partner_view.xml b/base_partner_sequence/partner_view.xml new file mode 100644 index 000000000..00dcb16bb --- /dev/null +++ b/base_partner_sequence/partner_view.xml @@ -0,0 +1,20 @@ + + + + + + Make partner reference readonly when non-commercial + res.partner + + + + { + 'readonly': [('is_company', '=', False), + ('parent_id', '!=', False)]} + + + + + + +