Skip to content
Permalink
Browse files

[FIX] base: synchronize (non-false) company_id to child contacts

Let the database be in multi-company with unshared contact catalog.
Let F be a filter "('partner_id', 'not ilike', 'string')" on invoices.
If there is a contact which parent belongs to another company,
then this parent cannot be read.
Thus the name_get on partner can create an access error.
As a result applying the filter F would fail and return no results.

It generally doesn't make much sense to have a contact company X, which belongs
to the Odoo Company OC1, while its child contacts are in another Odoo company,
since many fields are directly computed from the parent.
However it is useful to have X belongs to no company, while it has child
contacts X>Yi belonging to company OCi.
In the first case it can create access errors interrupting the normal flow of
operations, while the latter should not.

To forbid the first case while allowing the second, we synchronize company_id,
but add a special case to ignore it if it set to False.

Note that PR#30997 should be used in case the name_get causes an error for
another reason that is deemed a legitimate use-case.

opw 1933862
  • Loading branch information...
len-odoo committed Feb 18, 2019
1 parent 5028507 commit fd3c4cf53b083d3d594c803da23b9339f5b8baa3
Showing with 3 additions and 1 deletion.
  1. +3 −1 odoo/addons/base/models/res_partner.py
@@ -404,6 +404,8 @@ def _update_fields_values(self, fields):
field = self._fields[fname]
if field.type == 'many2one':
values[fname] = self[fname].id
if fname == 'company_id' and not self[fname].id:
values.pop('company_id')
elif field.type == 'one2many':
raise AssertionError(_('One2Many fields cannot be synchronized as part of `commercial_fields` or `address fields`'))
elif field.type == 'many2many':
@@ -430,7 +432,7 @@ def _commercial_fields(self):
partners that aren't `commercial entities` themselves, and will be
delegated to the parent `commercial entity`. The list is meant to be
extended by inheriting classes. """
return ['vat', 'credit_limit']
return ['vat', 'credit_limit', 'company_id']

@api.multi
def _commercial_sync_from_company(self):

0 comments on commit fd3c4cf

Please sign in to comment.
You can’t perform that action at this time.