On Oct 12, 2014, at 8:01 AM, Mansour Al Akeel <[email protected]> wrote:
> Jacopo, > Thank you a lot for your help. I will ask my questions in-line. > > On Sun, Oct 12, 2014 at 1:09 AM, Jacopo Cappellato > <[email protected]> wrote: >> Hi Mansour, >> >> I will start with one example. >> Let's say that in OFBiz we have two companies (i.e. two PartyGroup), "ABC >> inc" and "CDE inc", that run two different stores selling goods to their >> customers; the only way to represent that a given person "John Black" is >> customer of "ABC inc", but not of "CDE inc", is using a party relationship: >> "John Black is a customer of the seller ABC inc". Now suppose that John >> Black is also an employee of "CDE inc"; we can represent it with another >> party relationship: "John Black is an employee of the employer CDE inc". >> The "party role" entity should be used to specify what are the roles that a >> party can play. In our example, for John Black we would have two roles: >> "customer" and "employee". >> > I will build on the example you gave, and model this scenario using > PartyRole refrenced from PartyRelation. > So we have four Roles involved. > CUSTOMER > SELLER > EMPLOYEE > EMPLOYER > > John Black is a "CUSTOMER" when BUYING from the "SELLER" ABC inc. > John Black is an EMPLOYEE when WORKING_FOR the "EMPLOYER" CDE inc. > > In this case, we don't need to define the party ids in the > PartyRelationship, because the PartyRole entity has them. All we do is > we reference PartyRole(s). If I understand, you are suggesting to extend/use PartyRole in place of PartyRelationship; why not using PartyRelationship instead? > > >> Summary: >> * "party role": the roles that a given party *can* play >> * "party relationship": the actual roles played by a given party (with >> respect to other parties). >> > > This clarifies it. But don't we find this confusing ? Why does someone > get involved into a DEVELOPER relationship if she does not have the > DEVELOPER PartyRole ? It can't. The process should look like: 1) add developer information to a party and add the DEVELOPER role to it; this means that now the party can play the role of a developer in some party relationship 2) create one or more party relationship where the party is a developer for some other party Jacopo > I mean the whole point is data integrity, by > allowing only certain parties to be engaged in a specific > relationship. This way we are allowing everyone to have any > relationship. I hope I made my point clear. > > >> Unfortunately in OFBiz, most of the screens and services are not implemented >> considering "party relationships" but only "party roles". This >> simplification is a weakness of the current implementation. >> For example, a screen that lists all the "customers" doesn't make much sense >> if you don't specify the company that is selling goods. Currently, if in >> OFBiz a party has the role of "customer" then the system considers the party >> is a customer in all the relationships. >> >> In my opinion we should refactor this by: >> a) deprecating the party role entity >> b) modify the existing code that is using party roles to use party >> relationships >> c) use an _NA_ party id to specify party relationship that apply to all >> parties >> d) in order to do #b we will need to specify, in most of the applications, >> the company in which the logged in user is connected: in this way if a user >> is associated to "ABC inc", in the "find customer" screen she will only see >> parties that are customers of "ABC inc" >> e) (optional) normalize the from/to positions in PartyRelationship by >> sorting them by role type id (this would simplify lookups etc) >> >> I hope it is useful information and I didn't add more confusion. >> >> Jacopo >> >> On Oct 11, 2014, at 11:57 PM, Mansour Al Akeel <[email protected]> >> wrote: >> >>> I consulted the Data Model Resource Book to refresh my memory about >>> the modelling for the roles and relationship for Party. >>> >>> In ofbiz, we have PartyRelationship between two parties. So each party >>> ID is used as a key, combined with the relationship type. The book >>> mentions on page 42, that when customizing the model, it's recommended >>> to draw the relationship between party roles. >>> >>> The part that I find confusing is, if we have the two party IDs in the >>> party_role entity, why don't we create the relationship between two >>> party roles, instead of duplicating the information in the >>> party_relationship entity ? For example, currently we have, >>> >>> party_relationship: >>> - from party id >>> - to party id >>> - from role type id >>> - to role type id >>> - start date >>> - end date ..... >>> >>> Can't we just use, >>> party_relationship: >>> -from role >>> - to role >>> - party relationship type >>> >>> assuming John has the role of developer. IBM has the role of employer. >>> We can use the directly in the party relationship. Using the current >>> model, we need to add the role_type to the party_relationship. If John >>> is no longer a developer, then we need to update in two entities, the >>> party_relationship, and the roles. >>> >>> I am not sure I understand the description in the book, and the design in >>> ofbiz. >>> >>> Can someone kindly clarify the picture for me ?? >>> >>> Thank you. >>
