You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ofbiz.apache.org by "Leon (JIRA)" <ji...@apache.org> on 2014/11/07 11:45:34 UTC

[jira] [Comment Edited] (OFBIZ-5261) Party contact expiration and its hidden problems

    [ https://issues.apache.org/jira/browse/OFBIZ-5261?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14201499#comment-14201499 ] 

Leon edited comment on OFBIZ-5261 at 11/7/14 10:45 AM:
-------------------------------------------------------

There's error in this commit. e.g.

-- List<GenericValue> allPCMPs = EntityUtil.filterByDate(delegator.findByAnd("PartyContactMechPurpose", pcmpFindMap, null, false), true);
++ allPCWPs = EntityUtil.filterByDate(allPCWPs, null, "contactFromDate", "contactThruDate", true);

According to EntityUtil.filterByDate(List, EntityCondition, String, String ,Boolean), it filter nothing if condition parameter (the second) is null.

ps: I have created an issue about this. OFBIZ-5869


was (Author: utcb):
There's error in this commit. e.g.

-- List<GenericValue> allPCMPs = EntityUtil.filterByDate(delegator.findByAnd("PartyContactMechPurpose", pcmpFindMap, null, false), true);
++ allPCWPs = EntityUtil.filterByDate(allPCWPs, null, "contactFromDate", "contactThruDate", true);

According to EntityUtil.filterByDate(List, EntityCondition, String, String ,Boolean), it filter nothing if condition parameter (the second) is null.

> Party contact expiration and its hidden problems
> ------------------------------------------------
>
>                 Key: OFBIZ-5261
>                 URL: https://issues.apache.org/jira/browse/OFBIZ-5261
>             Project: OFBiz
>          Issue Type: Bug
>          Components: accounting, order, party
>    Affects Versions: Release 09.04, Release 09.04.01, Release 10.04, Release Branch 11.04, Trunk
>            Reporter: Sergei Biletnikov
>            Assignee: Ashish Vijaywargiya
>             Fix For: Release Branch 11.04, Upcoming Branch
>
>         Attachments: OFBIZ-5261.patch
>
>
> I found a problem which can appear when you add new contact like postal address and expiry old one, the old contact is still used by some code.
> The cause of the problem is easy and clear. 
> To make it more clear, let me remind you that OFBiz has a smart contacts data model, where each contact represents the contact data like address, phone number and etc and contact purposes, which is responsible for the how to apply the contact.
> Regarding parties, the main entities here:
> PartyContactMech   (contact)
> and
> PartyContactMechPurpose   (purpose)
> All looks good.
> However, both PartyContactMech and PartyContactMechPurpose have from and thru date creterias,i.e. can be expired!
> If you add a purpose to the contanct and after that you remove it, the purpose will be expired (not deleted), that is ok for auditing.
> RE: PartyContactMech, if you expire the contact,it means this contact mechanism must be out from the game and not be visisble on the profile page. The state of its purposes do not matter anymore, it must be not used.
> But there is a problem here, some code takes into account  PartyContactMechPurpose and use date filter but ignores PartyContactMech expiration state. This follows to the error: the contact is expired, the purposes not, but the contact is still used!!!
> Example:
> \applications\order\webapp\ordermgr\WEB-INF\actions\order\CompanyHeader.groovy
> addresses = delegator.findByAnd("PartyContactMechPurpose", [partyId : partyId, contactMechPurposeTypeId : "GENERAL_LOCATION"]);
> selAddresses = EntityUtil.filterByDate(addresses, nowTimestamp, "fromDate", "thruDate", true);
> ........
> phones = delegator.findByAnd("PartyContactMechPurpose", [partyId : partyId, contactMechPurposeTypeId : "PRIMARY_PHONE"]);
> ...........
> only PartyContactMechPurpose  ??? and it ignores that PartyContactMech is already expired! The result : I see the expired contact on the order page.
> \applications\accounting\src\org\ofbiz\accounting\payment\PaymentMethodServices.java
> try {
>                 List<GenericValue> allPCMPs = EntityUtil.filterByDate(delegator.findByAnd("PartyContactMechPurpose",
>                         UtilMisc.toMap("partyId", partyId, "contactMechId", contactMechId, "contactMechPurposeTypeId", contactMechPurposeTypeId), null), true);
>                 tempVal = EntityUtil.getFirst(allPCMPs);
>             } catch (GenericEntityException e) {
>                 Debug.logWarning(e.getMessage(), module);
>                 tempVal = null;
>             }
> .....
> and again, we are interested only in PartyContactMechPurpose. The potential problem is here.
> I did not check the all code of OFBiz, it is just my fast search attempts.
> How to solve the problem???
> In my opinion, the data model looks ok, and it is ok when PartyContactMech is expired, but its purposes are not. It does not break a sense and good for auditing.
> The good solution is to correct code and rely on both parties to find the necessary contact/purpose, for example the PartyContactWithPurpose can be used with contactFromDate, contactThruDate, purposeFromDate, purposeThruDate accordingly. However, I do not know how is big the effort to do that in the existing code.
> The fast and easy solution is expiring all purposes for the expired contact mechanisms, in this case we can rely only on PartyContactMechPurpose.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)