1 16 package com.opensourcestrategies.crmsfa.party; 17 18 import java.util.Map ; 19 import java.util.List ; 20 import java.util.Locale ; 21 import java.util.Iterator ; 22 23 import org.ofbiz.base.util.Debug; 24 import org.ofbiz.base.util.UtilMisc; 25 import org.ofbiz.base.util.UtilDateTime; 26 import org.ofbiz.entity.GenericDelegator; 27 import org.ofbiz.entity.GenericEntityException; 28 import org.ofbiz.entity.GenericValue; 29 import org.ofbiz.entity.util.EntityUtil; 30 import org.ofbiz.service.DispatchContext; 31 import org.ofbiz.service.GenericServiceException; 32 import org.ofbiz.service.LocalDispatcher; 33 import org.ofbiz.service.ServiceUtil; 34 import org.ofbiz.service.ModelService; 35 import org.ofbiz.security.Security; 36 37 import com.opensourcestrategies.crmsfa.party.PartyHelper; 38 import com.opensourcestrategies.crmsfa.security.CrmsfaSecurity; 39 import com.opensourcestrategies.crmsfa.util.UtilCommon; 40 41 46 47 public class PartyServices { 48 49 public static final String module = PartyServices.class.getName(); 50 51 52 private static void mergeTwoValues(String entityName, Map fromKeys, Map toKeys, GenericDelegator delegator) throws GenericEntityException { 53 GenericValue from = delegator.findByPrimaryKey(entityName, fromKeys); 54 GenericValue to = delegator.findByPrimaryKey(entityName, toKeys); 55 if (from == null || to == null) return; 56 from.setNonPKFields(to.getAllFields()); 57 to.setNonPKFields(from.getAllFields()); 58 to.store(); 59 } 60 61 public static Map validateMergeCrmParties(DispatchContext dctx, Map context) { 62 GenericDelegator delegator = dctx.getDelegator(); 63 LocalDispatcher dispatcher = dctx.getDispatcher(); 64 Security security = dctx.getSecurity(); 65 GenericValue userLogin = (GenericValue) context.get("userLogin"); 66 Locale locale = (Locale ) context.get("locale"); 67 68 String partyIdFrom = (String ) context.get("partyIdFrom"); 69 String partyIdTo = (String ) context.get("partyIdTo"); 70 try { 71 String fromPartyType = PartyHelper.getFirstValidInternalPartyRoleTypeId(partyIdFrom, delegator); 73 String toPartyType = PartyHelper.getFirstValidInternalPartyRoleTypeId(partyIdTo, delegator); 74 if ((fromPartyType == null) || !fromPartyType.equals(toPartyType)) { 75 return UtilCommon.createAndLogServiceError("Cannot merge party ["+partyIdFrom+"] of type ["+fromPartyType+"] with party ["+partyIdTo+"] of type ["+toPartyType+"] because they are not the same type.", "CrmErrorMergePartiesFail", locale, module); 76 } 77 if (partyIdFrom.equals(partyIdTo)) { 78 return UtilCommon.createAndLogServiceError("Cannot merge party ["+partyIdFrom+"] to itself!", "CrmErrorMergeParties", locale, module); 79 } 80 81 String partyTypeCrm = (fromPartyType.equals("PROSPECT") ? "LEAD" : fromPartyType); 83 84 if (!CrmsfaSecurity.hasPartyRelationSecurity(security, "CRMSFA_" + partyTypeCrm, "_UPDATE", userLogin, partyIdFrom) 86 || !CrmsfaSecurity.hasPartyRelationSecurity(security, "CRMSFA_" + partyTypeCrm, "_UPDATE", userLogin, partyIdTo)) { 87 return UtilCommon.createAndLogServiceError("CrmErrorPermissionDenied", locale, module); 88 } 89 } catch (GenericEntityException e) { 90 return UtilCommon.createAndLogServiceError(e, "CrmErrorMergePartiesFail", locale, module); 91 } 92 return ServiceUtil.returnSuccess(); 93 } 94 95 public static Map mergeCrmParties(DispatchContext dctx, Map context) { 97 GenericDelegator delegator = dctx.getDelegator(); 98 LocalDispatcher dispatcher = dctx.getDispatcher(); 99 Security security = dctx.getSecurity(); 100 GenericValue userLogin = (GenericValue) context.get("userLogin"); 101 Locale locale = (Locale ) context.get("locale"); 102 103 String partyIdFrom = (String ) context.get("partyIdFrom"); 104 String partyIdTo = (String ) context.get("partyIdTo"); 105 try { 106 Map serviceResults = dispatcher.runSync("crmsfa.validateMergeCrmParties", 108 UtilMisc.toMap("userLogin", userLogin, "partyIdFrom", partyIdFrom, "partyIdTo", partyIdTo)); 109 if (ServiceUtil.isError(serviceResults)) { 110 return serviceResults; 111 } 112 113 mergeTwoValues("PartySupplementalData", UtilMisc.toMap("partyId", partyIdFrom), UtilMisc.toMap("partyId", partyIdTo), delegator); 115 mergeTwoValues("Person", UtilMisc.toMap("partyId", partyIdFrom), UtilMisc.toMap("partyId", partyIdTo), delegator); 116 mergeTwoValues("PartyGroup", UtilMisc.toMap("partyId", partyIdFrom), UtilMisc.toMap("partyId", partyIdTo), delegator); 117 mergeTwoValues("Party", UtilMisc.toMap("partyId", partyIdFrom), UtilMisc.toMap("partyId", partyIdTo), delegator); 118 119 List relationships = EntityUtil.filterByDate(delegator.findByAnd("PartyRelationship", UtilMisc.toMap("partyIdFrom", partyIdFrom))); 121 for (Iterator iter = relationships.iterator(); iter.hasNext(); ) { 122 GenericValue relationship = (GenericValue) iter.next(); 123 List toRelationships = EntityUtil.filterByDate(delegator.findByAnd("PartyRelationship", UtilMisc.toMap("partyIdFrom", partyIdTo, 124 "partyIdTo", relationship.get("partyIdTo"), "roleTypeIdFrom", relationship.get("roleTypeIdFrom"), 125 "roleTypeIdTo", relationship.get("roleTypeIdTo")))); 126 if (toRelationships.size() > 0) continue; 127 GenericValue newRelationship = delegator.makeValue("PartyRelationship", relationship.getAllFields()); 128 newRelationship.set("partyIdFrom", partyIdTo); 129 newRelationship.create(); 130 relationship.remove(); 131 } 132 relationships = EntityUtil.filterByDate(delegator.findByAnd("PartyRelationship", UtilMisc.toMap("partyIdTo", partyIdFrom))); 133 for (Iterator iter = relationships.iterator(); iter.hasNext(); ) { 134 GenericValue relationship = (GenericValue) iter.next(); 135 List toRelationships = EntityUtil.filterByDate(delegator.findByAnd("PartyRelationship", UtilMisc.toMap("partyIdTo", partyIdTo, 136 "partyIdFrom", relationship.get("partyIdFrom"), "roleTypeIdFrom", relationship.get("roleTypeIdFrom"), 137 "roleTypeIdTo", relationship.get("roleTypeIdTo")))); 138 if (toRelationships.size() > 0) continue; 139 GenericValue newRelationship = delegator.makeValue("PartyRelationship", relationship.getAllFields()); 140 newRelationship.set("partyIdTo", partyIdTo); 141 newRelationship.create(); 142 relationship.remove(); 143 } 144 145 List dataSources = delegator.findByAnd("PartyDataSource", UtilMisc.toMap("partyId", partyIdFrom)); 147 for (Iterator iter = dataSources.iterator(); iter.hasNext(); ) { 148 GenericValue dataSource = (GenericValue) iter.next(); 149 serviceResults = dispatcher.runSync("createPartyDataSource", UtilMisc.toMap("partyId", partyIdTo, 150 "dataSourceId", dataSource.getString("dataSourceId"), "userLogin", userLogin)); 151 if (ServiceUtil.isError(serviceResults)) { 152 return UtilCommon.createAndLogServiceError(serviceResults, "CrmErrorMergePartiesFail", locale, module); 153 } 154 } 155 156 serviceResults = dispatcher.runSync("copyPartyContactMechs", UtilMisc.toMap("partyIdFrom", partyIdFrom, "partyIdTo", partyIdTo, "userLogin", userLogin)); 158 if (ServiceUtil.isError(serviceResults)) { 159 return UtilCommon.createAndLogServiceError(serviceResults, "CrmErrorMergePartiesFail", locale, module); 160 } 161 162 List associations = EntityUtil.filterByDate(delegator.findByAnd("WorkEffortPartyAssignment", UtilMisc.toMap("partyId", partyIdFrom))); 164 for (Iterator iter = associations.iterator(); iter.hasNext(); ) { 165 GenericValue wepa = (GenericValue) iter.next(); 166 List toWepas = EntityUtil.filterByDate(delegator.findByAnd("WorkEffortPartyAssignment", UtilMisc.toMap("partyId", partyIdTo, 167 "workEffortId", wepa.get("workEffortId"), "roleTypeId", wepa.get("roleTypeId")))); 168 if (toWepas.size() > 0) continue; 169 GenericValue newWepa = delegator.makeValue("WorkEffortPartyAssignment", wepa.getAllFields()); 170 newWepa.set("partyId", partyIdTo); 171 newWepa.create(); 172 wepa.remove(); 173 } 174 175 List comms = delegator.findByAnd("CommunicationEvent", UtilMisc.toMap("partyIdFrom", partyIdFrom)); 177 for (Iterator iter = comms.iterator(); iter.hasNext(); ) { 178 GenericValue comm = (GenericValue) iter.next(); 179 comm.set("partyIdFrom", partyIdTo); 180 comm.store(); 181 } 182 comms = delegator.findByAnd("CommunicationEvent", UtilMisc.toMap("partyIdTo", partyIdFrom)); 183 for (Iterator iter = comms.iterator(); iter.hasNext(); ) { 184 GenericValue comm = (GenericValue) iter.next(); 185 comm.set("partyIdTo", partyIdTo); 186 comm.store(); 187 } 188 189 List oppRoles = delegator.findByAnd("SalesOpportunityRole", UtilMisc.toMap("partyId", partyIdFrom)); 191 for (Iterator iter = oppRoles.iterator(); iter.hasNext(); ) { 192 GenericValue oppRole = (GenericValue) iter.next(); 193 Map input = UtilMisc.toMap("salesOpportunityId", oppRole.get("salesOpportunityId"), "partyId", partyIdTo, "roleTypeId", oppRole.get("roleTypeId")); 194 GenericValue toOppRole = delegator.findByPrimaryKey("SalesOpportunityRole", input); 195 if (toOppRole != null) continue; 196 GenericValue newOppRole = delegator.makeValue("SalesOpportunityRole", input); 197 newOppRole.create(); 198 oppRole.remove(); 199 } 200 201 List caseRoles = delegator.findByAnd("CustRequestRole", UtilMisc.toMap("partyId", partyIdFrom)); 203 for (Iterator iter = caseRoles.iterator(); iter.hasNext(); ) { 204 GenericValue custRequestRole = (GenericValue) iter.next(); 205 Map input = UtilMisc.toMap("custRequestId", custRequestRole.get("custRequestId"), "partyId", partyIdTo, "roleTypeId", custRequestRole.get("roleTypeId")); 206 GenericValue toCustRequestRole = delegator.findByPrimaryKey("CustRequestRole", input); 207 if (toCustRequestRole != null) continue; 208 GenericValue newCustRequestRole = delegator.makeValue("CustRequestRole", input); 209 newCustRequestRole.create(); 210 custRequestRole.remove(); 211 } 212 213 List cases = delegator.findByAnd("CustRequest", UtilMisc.toMap("fromPartyId", partyIdFrom)); 215 for (Iterator iter = cases.iterator(); iter.hasNext(); ) { 216 GenericValue custRequest = (GenericValue) iter.next(); 217 custRequest.set("fromPartyId", partyIdTo); 218 custRequest.store(); 219 } 220 221 List notes = delegator.findByAnd("PartyNote", UtilMisc.toMap("partyId", partyIdFrom)); 223 for (Iterator iter = notes.iterator(); iter.hasNext(); ) { 224 GenericValue note = (GenericValue) iter.next(); 225 GenericValue newNote = delegator.makeValue("PartyNote", note.getAllFields()); 226 newNote.set("partyId", partyIdTo); 227 newNote.create(); 228 note.remove(); 229 } 230 231 PartyHelper.deleteCrmParty(partyIdFrom, delegator); 233 234 } catch (GenericServiceException e) { 235 return UtilCommon.createAndLogServiceError(e, "CrmErrorMergePartiesFail", locale, module); 236 } catch (GenericEntityException e) { 237 return UtilCommon.createAndLogServiceError(e, "CrmErrorMergePartiesFail", locale, module); 238 } 239 return ServiceUtil.returnSuccess(); 240 } 241 242 public static Map setViewPreference(DispatchContext dctx, Map context) { 243 GenericDelegator delegator = dctx.getDelegator(); 244 LocalDispatcher dispatcher = dctx.getDispatcher(); 245 GenericValue userLogin = (GenericValue) context.get("userLogin"); 246 Locale locale = (Locale ) context.get("locale"); 247 248 String viewPrefTypeId = (String ) context.get("viewPrefTypeId"); 249 String value = (String ) context.get("viewPrefValue"); 250 if (value != null && value.trim().length() == 0) value = null; 251 try { 252 GenericValue pref = ViewPrefWorker.getViewPreferenceValue(userLogin, viewPrefTypeId); 254 255 Map input = UtilMisc.toMap("userLogin", userLogin, "userLoginId", userLogin.get("userLoginId"), "viewPrefTypeId", viewPrefTypeId); 257 258 input.put("viewPrefValueTypeId", "VPREF_VALTYPE_STRING"); 260 input.put("viewPrefString", value); 261 262 if (value != null) { 264 GenericValue enumeration = delegator.findByPrimaryKeyCache("Enumeration", UtilMisc.toMap("enumId", value)); 265 if (enumeration != null) { 266 input.put("viewPrefValueTypeId", "VPREF_VALTYPE_ENUM"); 267 input.put("viewPrefString", null); 268 input.put("viewPrefEnumId", value); 269 } 270 } 271 return dispatcher.runSync(pref != null ? "crmsfa.updateViewPreference" : "crmsfa.createViewPreference", input); 272 273 } catch (GenericServiceException e) { 274 return UtilCommon.createAndLogServiceError(e, "CrmErrorSetPreferenceFail", locale, module); 275 } catch (GenericEntityException e) { 276 return UtilCommon.createAndLogServiceError(e, "CrmErrorSetPreferenceFail", locale, module); 277 } 278 } 279 } 280 | Popular Tags |