import openerp
from openerp import SUPERUSER_ID
-from openerp import pooler, tools
+from openerp import tools
from openerp.osv import osv, fields
from openerp.tools.translate import _
+ from openerp.tools.yaml_import import is_comment
class format_address(object):
def fields_view_get_address(self, cr, uid, arch, context={}):
res = lang_pool.read(cr, uid, ids, ['code', 'name'], context)
return [(r['code'], r['name']) for r in res]
- POSTAL_ADDRESS_FIELDS = ('street', 'street2', 'zip', 'city', 'state_id', 'country_id')
- ADDRESS_FIELDS = POSTAL_ADDRESS_FIELDS + ('email', 'phone', 'fax', 'mobile', 'website', 'ref', 'lang')
+ # fields copy if 'use_parent_address' is checked
+ ADDRESS_FIELDS = ('street', 'street2', 'zip', 'city', 'state_id', 'country_id')
-POSTAL_ADDRESS_FIELDS = ADDRESS_FIELDS # deprecated, to remove after 7.0
class res_partner(osv.osv, format_address):
_description = 'Partner'
result[obj.id] = obj.image != False
return result
- _order = "name"
+ def _commercial_partner_compute(self, cr, uid, ids, name, args, context=None):
+ """ Returns the partner that is considered the commercial
+ entity of this partner. The commercial entity holds the master data
+ for all commercial fields (see :py:meth:`~_commercial_fields`) """
+ result = dict.fromkeys(ids, False)
+ for partner in self.browse(cr, uid, ids, context=context):
+ current_partner = partner
+ while not current_partner.is_company and current_partner.parent_id:
+ current_partner = current_partner.parent_id
+ result[partner.id] = current_partner.id
+ return result
+
- # indirection to avoid passing a copy of the overridable method when declaring the function field
++ def _display_name_compute(self, cr, uid, ids, name, args, context=None):
++ return dict(self.name_get(cr, uid, ids, context=context))
++
++ # indirections to avoid passing a copy of the overridable method when declaring the function field
+ _commercial_partner_id = lambda self, *args, **kwargs: self._commercial_partner_compute(*args, **kwargs)
++ _display_name = lambda self, *args, **kwargs: self._display_name_compute(*args, **kwargs)
++
++ _commercial_partner_store_triggers = {
++ 'res.partner': (lambda self,cr,uid,ids,context=None: self.search(cr, uid, [('id','child_of',ids)]),
++ ['parent_id', 'is_company'], 10)
++ }
++ _display_name_store_triggers = {
++ 'res.partner': (lambda self,cr,uid,ids,context=None: self.search(cr, uid, [('id','child_of',ids)]),
++ ['parent_id', 'is_company', 'name'], 10)
++ }
+
- _order = "name"
++ _order = "display_name"
_columns = {
'name': fields.char('Name', size=128, required=True, select=True),
++ 'display_name': fields.function(_display_name, type='char', string='Name', store=_display_name_store_triggers),
'date': fields.date('Date', select=1),
'title': fields.many2one('res.partner.title', 'Title'),
'parent_id': fields.many2one('res.partner', 'Related Company'),
'color': fields.integer('Color Index'),
'user_ids': fields.one2many('res.users', 'partner_id', 'Users'),
'contact_address': fields.function(_address_display, type='char', string='Complete Address'),
+
+ # technical field used for managing commercial fields
- 'commercial_partner_id': fields.function(_commercial_partner_id, type='many2one', relation='res.partner', string='Commercial Entity')
++ 'commercial_partner_id': fields.function(_commercial_partner_id, type='many2one', relation='res.partner', string='Commercial Entity', store=_commercial_partner_store_triggers)
}
def _default_category(self, cr, uid, context=None):
'tz': lambda self, cr, uid, ctx: ctx.get('tz', False),
'customer': True,
'category_id': _default_category,
- 'company_id': lambda self, cr, uid, ctx: self.pool.get('res.company')._company_default_get(cr, uid, 'res.partner', context=ctx),
+ 'company_id': lambda self, cr, uid, ctx: self.pool['res.company']._company_default_get(cr, uid, 'res.partner', context=ctx),
'color': 0,
'is_company': False,
- 'type': 'default',
- 'use_parent_address': True,
+ 'type': 'contact', # type 'default' is wildcard and thus inappropriate
+ 'use_parent_address': False,
'image': False,
}