Search code examples
pythonpython-2.7odoo-8odooerp

Can odoo companies share the same partner ? In which scenarios?


I have seen the odoo code for the creation of a new company:

def create(self, cr, uid, vals, context=None):
    if not vals.get('name', False) or vals.get('partner_id', False):
        self.cache_restart(cr)
        return super(res_company, self).create(cr, uid, vals, context=context)
    obj_partner = self.pool.get('res.partner')
    partner_id = obj_partner.create(cr, uid, {'name': vals['name'], 'is_company':True, 'image': vals.get('logo', False)}, context=context)
    vals.update({'partner_id': partner_id})
    self.cache_restart(cr)
    company_id = super(res_company, self).create(cr, uid, vals, context=context)
    obj_partner.write(cr, uid, [partner_id], {'company_id': company_id}, context=context)
    return company_id

The first three lines seems to allow the new company to be created using the specified partner..

This seems to intentionally omit the association of the given partner to the newly created company (the line before the last return).

Is this a bug or they want to allow a company to share the partner with another company ? In which scenarios would this be useful ?.


Solution

  • As far as I know, in Odoo 8 or older, it's not possible to share a contact between companies. A lot of customers asked me for implementing that, because they wanted to introduce contacts who work in several companies (and even those contacts were the main contact of those companies).

    In fact, you can check the behaviour of the official module base_contact to share contacts between companies. If you read the code of this module, you will realize that actually they are creating several contacts for each company, and then they hide them in order to make the user see only one of them.

    Example: you create a contact named Yucer in the company Odoo (this contact will be created as standalone type). Then, you want to indicate that this partner also works for the company StackExchange. When you do this, another contact (with the same data of Yucer) is stored in the database, with the type attached. When you search for Yucer, you will only see the standalone one, but if you check Odoo and StackExchange, you will see Yucer in both of them. They also modified ORM methods of res.partner model like unlink, to remove all cloned contacts when you remove the main one.