ofbiz-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Leon (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (OFBIZ-5261) Party contact expiration and its hidden problems
Date Fri, 07 Nov 2014 03:02:34 GMT

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

Leon commented on OFBIZ-5261:
-----------------------------

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)

Mime
View raw message