Comment 170 for bug 1160365

Revision history for this message
Daniel Reis (dreis-pt) wrote :

It seems to me that the central issue is the "change in granularity level".
There are a lot of qualified people discussing the what, where & how, but it seems that the WHY is yet to be explained.

Why "contact" is to be "the right level of granularity"?
========================================================

WHY the change?
What's OpenERP's reasoning behind this?

I've been trying to read their mind, and I decided to contribute to the discussion because I think I've figured it out.
For me the key was in Fabien's comment #120 (https://bugs.launchpad.net/openobject-addons/+bug/1160365/comments/120).

V7 is about Social:
From a legal POV, your company interacts with other Companies.
From a social POV, your users interact with other Company's people.

For OpenERP to be social, it needs to interact with a Contact@Partner instead of a "pure" Partner.
This way it can send emails to Contact@Partner, instead of Partner's generic e-mail,
or let Contact@Partner interact using a personal Portal user account, instead of a Partner generic one.

Thus the need for the "change in granularity".

Everyone is assuming that a Contact it's a Person working for a Company
But it's not - it's more like a Job/Position at a Company.
It's a "Contact@Partner": a Contact *at a* Partner; a Partner plus a point of contact info.
It's actually just a face, an alias, for the Partner.

But it breaks the commercial entity reference on documents?
Not in the simple, flat, partner structure you get out-of-the box on v7:
On the flat structure Partner 1->N Contacts, you just need to use `partner_id.parent_id`
where you used `partner_id` and there you are: you get exactly the same info as before.
This can also be easily achieved in SQL with just as additional join.

Explained like this, it looks like, despite being a big change, there seems to be no big deal,
and that you can do everything you could do before with pretty much the same effort.

And if the your ContactX@Customer1 person goes to work at Customer2, you don't edit Contact1:
You inactivate ContactX@Customer1 and create ContactX@Customer2!
Because "ContactX" does not make sense on itself on the new model.
It only makes sense to have "ContactX@Customer1" and "ContactX@Customer2".
And if the ContactX personally is also your Customer, then you need to also create "HomeAddress@PersonX".

Do I sound like Fabien and Olivier right now? I hope I do.

Problems came when you were able to mix "Contacts at Partners" and "Pure Partners"
on the same field, and that a lot of v7 localization ports to v7 was done assuming that
partner_id is still a company ... and when you need to add a hierarchy to the Partner table ...
But that's the already discussion going on .

I hope I contributed to a better discussion.
I'm not swimming in VC funding over here to offer a case, but I promise to bring a couple of Port wine bottles
to the OpenERP days if a solution good enough for everyone is achieved.

PS: Raphael's code was just a proof of concept for a solution.
Everyone, including Raphael, prefers a solution from OpenERP SA implemented directly in the core.
OpenERP SA should be thankful to have such an involved community, with people as skilled as Raphael.
Having said that, Raphael - I want a bottle from that case.