Browse Source

merged lp:~therp-nl/partner-contact-management/7.0-base_partner_sequence_commercial_partner

pull/2/head
Thomas Rehn 11 years ago
parent
commit
fb9ebd894f
  1. 15
      base_partner_sequence/__openerp__.py
  2. 19
      base_partner_sequence/partner.py
  3. 20
      base_partner_sequence/partner_view.xml

15
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

19
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:

20
base_partner_sequence/partner_view.xml

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<record id="view_partner_form" model="ir.ui.view">
<field name="name">Make partner reference readonly when non-commercial</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<field name="ref" position="attributes">
<attribute name="attrs">{
'readonly': [('is_company', '=', False),
('parent_id', '!=', False)]}</attribute>
</field>
</field>
</record>
</data>
</openerp>
Loading…
Cancel
Save