1 16 17 18 41 package com.opensourcestrategies.crmsfa.party; 42 43 import java.util.Map ; 44 import java.util.List ; 45 import java.util.Iterator ; 46 import java.sql.Timestamp ; 47 48 import javolution.util.FastMap; 49 50 import org.ofbiz.base.util.Debug; 51 import org.ofbiz.base.util.UtilMisc; 52 import org.ofbiz.base.util.UtilDateTime; 53 import org.ofbiz.entity.GenericDelegator; 54 import org.ofbiz.entity.GenericEntityException; 55 import org.ofbiz.entity.GenericValue; 56 import org.ofbiz.entity.util.EntityUtil; 57 import org.ofbiz.service.DispatchContext; 58 import org.ofbiz.service.GenericServiceException; 59 import org.ofbiz.service.LocalDispatcher; 60 import org.ofbiz.service.ServiceUtil; 61 import org.ofbiz.security.Security; 62 63 70 71 public class PartyHelper { 72 73 public static final String module = PartyHelper.class.getName(); 74 75 public static List TEAM_MEMBER_ROLES = UtilMisc.toList("ACCOUNT_MANAGER", "ACCOUNT_REP", "CUST_SERVICE_REP"); 76 public static List CLIENT_PARTY_ROLES = UtilMisc.toList("ACCOUNT", "CONTACT", "PROSPECT"); 77 78 87 public static String getFirstValidRoleTypeId(String partyId, List possibleRoleTypeIds, GenericDelegator delegator) throws GenericEntityException { 88 89 List partyRoles = delegator.findByAndCache("PartyRole", UtilMisc.toMap("partyId", partyId)); 90 91 Iterator iterValid = possibleRoleTypeIds.iterator(); 93 while (iterValid.hasNext()) { 94 String possibleRoleTypeId = (String ) iterValid.next(); 95 96 Iterator partyRolesIter = partyRoles.iterator(); 98 while (partyRolesIter.hasNext()) { 99 GenericValue partyRole = (GenericValue) partyRolesIter.next(); 100 if (possibleRoleTypeId.equals(partyRole.getString("roleTypeId"))) { 101 return possibleRoleTypeId; 102 } 103 } 104 } 105 return null; 106 } 107 108 111 public static String getFirstValidInternalPartyRoleTypeId(String partyId, GenericDelegator delegator) throws GenericEntityException { 112 return getFirstValidRoleTypeId(partyId, CLIENT_PARTY_ROLES, delegator); 113 } 114 115 118 public static String getFirstValidTeamMemberRoleTypeId(String partyId, GenericDelegator delegator) throws GenericEntityException { 119 return getFirstValidRoleTypeId(partyId, TEAM_MEMBER_ROLES, delegator); 120 } 121 122 140 public static boolean createNewPartyToRelationship(String partyIdTo, String partyIdFrom, String roleTypeIdFrom, 141 String partyRelationshipTypeId, String securityGroupId, List validToPartyRoles, Timestamp fromDate, 142 boolean expireExistingRelationships, GenericValue userLogin, GenericDelegator delegator, LocalDispatcher dispatcher) 143 throws GenericEntityException, GenericServiceException { 144 145 String roleTypeIdTo = getFirstValidRoleTypeId(partyIdTo, validToPartyRoles, delegator); 148 149 if (roleTypeIdTo == null) return false; 151 152 156 if (expireExistingRelationships == true) { 157 List partyRelationships = delegator.findByAnd("PartyRelationship", UtilMisc.toMap("partyIdFrom", partyIdFrom, "partyRelationshipTypeId", partyRelationshipTypeId)); 158 expirePartyRelationships(partyRelationships, fromDate, dispatcher, userLogin); 159 } 160 161 Map input = UtilMisc.toMap("partyIdTo", partyIdTo, "roleTypeIdTo", roleTypeIdTo, "partyIdFrom", partyIdFrom, "roleTypeIdFrom", roleTypeIdFrom); 163 input.put("partyRelationshipTypeId", partyRelationshipTypeId); 164 input.put("securityGroupId", securityGroupId); 165 input.put("fromDate", fromDate); 166 input.put("userLogin", userLogin); 167 Map serviceResult = dispatcher.runSync("createPartyRelationship", input); 168 169 return true; 171 } 172 173 176 public static boolean createNewPartyToRelationship(String partyIdTo, String partyIdFrom, String roleTypeIdFrom, 177 String partyRelationshipTypeId, String securityGroupId, List validToPartyRoles, 178 boolean expireExistingRelationships, GenericValue userLogin, GenericDelegator delegator, LocalDispatcher dispatcher) 179 throws GenericEntityException, GenericServiceException { 180 return createNewPartyToRelationship(partyIdTo, partyIdFrom, roleTypeIdFrom, 181 partyRelationshipTypeId, securityGroupId, validToPartyRoles, UtilDateTime.nowTimestamp(), 182 expireExistingRelationships, userLogin, delegator, dispatcher); 183 } 184 185 188 public static void expirePartyRelationships(List partyRelationships, Timestamp expireDate, LocalDispatcher dispatcher, GenericValue userLogin) 189 throws GenericServiceException { 190 List relationsActiveOnFromDate = EntityUtil.filterByDate(partyRelationships, expireDate); 191 192 Iterator iter = relationsActiveOnFromDate.iterator(); 194 while (iter.hasNext()) { 195 GenericValue partyRelationship = (GenericValue) iter.next(); 196 Map input = UtilMisc.toMap("partyIdTo", partyRelationship.getString("partyIdTo"), "roleTypeIdTo", partyRelationship.getString("roleTypeIdTo"), 197 "partyIdFrom", partyRelationship.getString("partyIdFrom"), "roleTypeIdFrom", partyRelationship.getString("roleTypeIdFrom")); 198 input.put("fromDate", partyRelationship.getTimestamp("fromDate")); 199 input.put("userLogin", userLogin); 200 input.put("thruDate", expireDate); 201 Map serviceResult = dispatcher.runSync("updatePartyRelationship", input); 202 if (ServiceUtil.isError(serviceResult)) { 203 throw new GenericServiceException("Failed to expire PartyRelationship with values: " + input.toString()); 204 } 205 } 206 } 207 208 215 public static GenericValue getCurrentResponsibleParty(String partyIdFrom, String roleTypeIdFrom, GenericDelegator delegator) throws GenericEntityException { 216 return getActivePartyByRole("RESPONSIBLE_FOR", partyIdFrom, roleTypeIdFrom, UtilDateTime.nowTimestamp(), delegator); 217 } 218 219 220 public static GenericValue getCurrentLeadOwner(String leadPartyId, GenericDelegator delegator) throws GenericEntityException { 221 return getActivePartyByRole("RESPONSIBLE_FOR", leadPartyId, "PROSPECT", "LEAD_OWNER", UtilDateTime.nowTimestamp(), delegator); 222 } 223 224 235 public static GenericValue getActivePartyByRole(String partyRelationshipTypeId, String partyIdFrom, String roleTypeIdFrom, String securityGroupId, 236 Timestamp activeDate, GenericDelegator delegator) 237 throws GenericEntityException { 238 239 Map input = UtilMisc.toMap("partyRelationshipTypeId", partyRelationshipTypeId, "partyIdFrom", partyIdFrom, "roleTypeIdFrom", roleTypeIdFrom); 240 if (securityGroupId != null) input.put("securityGroupId", securityGroupId); 241 List relationships = delegator.findByAnd("PartyRelationship", input); 242 List activeRelationships = EntityUtil.filterByDate(relationships, activeDate); 243 244 if (activeRelationships.size() == 0) { 246 Debug.logInfo("No active PartyRelationships found with relationship [" + partyRelationshipTypeId + "] for party [" 247 + partyIdFrom +"] in role [" + roleTypeIdFrom +"]", module); 248 return null; 249 } 250 251 GenericValue partyRelationship = (GenericValue) activeRelationships.get(0); 253 return delegator.findByPrimaryKey("PartySummaryCRMView", UtilMisc.toMap("partyId", partyRelationship.getString("partyIdTo"))); 254 } 255 256 257 public static GenericValue getActivePartyByRole(String partyRelationshipTypeId, String partyIdFrom, String roleTypeIdFrom, 258 Timestamp activeDate, GenericDelegator delegator) 259 throws GenericEntityException { 260 return getActivePartyByRole(partyRelationshipTypeId, partyIdFrom, roleTypeIdFrom, null, activeDate, delegator); 261 } 262 263 275 public static void copyToPartyRelationships(String partyIdFrom, String roleTypeIdFrom, String partyRelationshipTypeId, 276 String newPartyIdFrom, String newRoleTypeIdFrom, GenericValue userLogin, GenericDelegator delegator, LocalDispatcher dispatcher) 277 throws GenericEntityException, GenericServiceException { 278 279 Timestamp activeDate = UtilDateTime.nowTimestamp(); 281 282 Map input = UtilMisc.toMap("partyIdFrom", partyIdFrom, "roleTypeIdFrom", roleTypeIdFrom); 284 if (partyRelationshipTypeId != null) input.put("partyRelationshipTypeId", partyRelationshipTypeId); 285 List relationships = delegator.findByAnd("PartyRelationship", input); 286 List activeRelationships = EntityUtil.filterByDate(relationships, activeDate); 287 288 for (Iterator iter = activeRelationships.iterator(); iter.hasNext();) { 289 GenericValue relationship = (GenericValue) iter.next(); 290 291 input = UtilMisc.toMap("partyIdTo", relationship.getString("partyIdTo"), "roleTypeIdTo", relationship.getString("roleTypeIdTo")); 293 input.put("partyIdFrom", newPartyIdFrom); 294 input.put("roleTypeIdFrom", newRoleTypeIdFrom); 295 input.put("partyRelationshipTypeId", relationship.getString("partyRelationshipTypeId")); 296 input.put("securityGroupId", relationship.getString("securityGroupId")); 297 input.put("fromDate", relationship.getTimestamp("fromDate")); 298 input.put("thruDate", relationship.getTimestamp("thruDate")); 299 input.put("statusId", relationship.getString("statusId")); 300 input.put("priorityTypeId", relationship.getString("priorityTypeId")); 301 input.put("comments", relationship.getString("comments")); 302 input.put("userLogin", userLogin); 303 Map serviceResult = dispatcher.runSync("createPartyRelationship", input); 304 if (ServiceUtil.isError(serviceResult)) { 305 throw new GenericServiceException(ServiceUtil.getErrorMessage(serviceResult)); 306 } 307 } 308 } 309 310 313 public static void copyToPartyRelationships(String partyIdFrom, String roleTypeIdFrom, String newPartyIdFrom, String newRoleTypeIdFrom, 314 GenericValue userLogin, GenericDelegator delegator, LocalDispatcher dispatcher) 315 throws GenericEntityException, GenericServiceException { 316 317 copyToPartyRelationships(partyIdFrom, roleTypeIdFrom, null, newPartyIdFrom, newRoleTypeIdFrom, userLogin, delegator, dispatcher); 318 } 319 320 326 private static String [][] CRM_PARTY_DELETE_CASCADE = { 327 {"CustRequestRole", "partyId"}, 328 {"PartyNote", "partyId"}, 329 {"PartyDataSource", "partyId"}, 330 {"WorkEffortPartyAssignment", "partyId"}, 331 {"PartyContactMechPurpose", "partyId"}, 332 {"PartyContactMech", "partyId"}, 333 {"PartySupplementalData", "partyId"}, 334 {"PartyNameHistory", "partyId"}, 335 {"PartyGroup", "partyId"}, 336 {"PartyRelationship", "partyIdFrom"}, 337 {"PartyRelationship", "partyIdTo"}, 338 {"Person", "partyId"}, 339 {"PartyRole", "partyId"}, 340 {"PartyStatus", "partyId"}, 341 {"Party", "partyId"} 342 }; 343 344 355 public static void deleteCrmParty(String partyId, GenericDelegator delegator) throws GenericEntityException { 356 for (int i = 0; i < CRM_PARTY_DELETE_CASCADE.length; i++) { 357 String entityName = CRM_PARTY_DELETE_CASCADE[i][0]; 358 String fieldName = CRM_PARTY_DELETE_CASCADE[i][1]; 359 360 Map input = UtilMisc.toMap(fieldName, partyId); 361 delegator.removeByAnd(entityName, input); 362 } 363 } 364 } 365 | Popular Tags |