From 801cb80ced79492bd3335258d6acb6f7d5e41d41 Mon Sep 17 00:00:00 2001 From: deepakmulamalla Date: Wed, 8 Jan 2025 05:39:44 -0500 Subject: [PATCH] Changes related to EDRD-1150 --- .../classes/EDRD_cls_HandleGroupsTest.cls | 43 ++++++++++ .../EDRD_cls_HandleGroupsTest.cls-meta.xml | 0 .../ESA_cls_accountTriggerHandlerTest.cls | 29 ++++++- ...cls_accountTriggerHandlerTest.cls-meta.xml | 0 .../classes/UserTriggerHandlerTest.cls | 31 +++++++ .../AccountContactRelationTriggerHandler.cls | 4 +- .../default/classes/EDRD_cls_HandleGroups.cls | 12 +-- .../classes/EDRD_cls_HandleGroupsTest.cls | 18 ---- .../classes/ESA_cls_accountTriggerHandler.cls | 85 +++++++++++++------ .../default/classes/ESA_cls_constants.cls | 1 + .../default/classes/UserTriggerHandler.cls | 78 +++++++++++++++++ ...mittee.EDRD_Advisory_Committee.md-meta.xml | 2 +- .../main/default/triggers/UserTrigger.trigger | 3 + 13 files changed, 250 insertions(+), 56 deletions(-) create mode 100644 dev-app-post/main/default/classes/EDRD_cls_HandleGroupsTest.cls rename {force-app => dev-app-post}/main/default/classes/EDRD_cls_HandleGroupsTest.cls-meta.xml (100%) rename {force-app => dev-app-post}/main/default/classes/ESA_cls_accountTriggerHandlerTest.cls (78%) rename {force-app => dev-app-post}/main/default/classes/ESA_cls_accountTriggerHandlerTest.cls-meta.xml (100%) delete mode 100644 force-app/main/default/classes/EDRD_cls_HandleGroupsTest.cls diff --git a/dev-app-post/main/default/classes/EDRD_cls_HandleGroupsTest.cls b/dev-app-post/main/default/classes/EDRD_cls_HandleGroupsTest.cls new file mode 100644 index 000000000..019e5acb7 --- /dev/null +++ b/dev-app-post/main/default/classes/EDRD_cls_HandleGroupsTest.cls @@ -0,0 +1,43 @@ +/********************************************************************************************** +* @Author: Accenture +* @Date: 20/12/2024 +* @Description: The purpose of this class is to cover Code coverage of EDRD_cls_HandleGroups +* @Revision(s): [Date] - [Change Reference] - [Changed By] - [Description] + 20 Dec - EDRD-1150 - Accenture - The purpose of this method is to Remove Committee based on ACR delete of EDRD_Committee & Provider OR Committee_Reviewer. +***********************************************************************************************/ +@isTest +public class EDRD_cls_HandleGroupsTest { + +/** +* @author: +* @date: 23 Dec 2024 +* @description: The purpose of this method is to cover Testcoverage of handleGroupMembership +* @Modification Log: [Date] - [Change Reference] - [Changed By] - [Description] +*/ + @isTest + public static void handleGroupMembershipTest(){ + Account providerAcc = TestFactory.newProvider('Provider Test'); + providerAcc.Committee__pc = ESA_cls_constants.EDRD_PERSONACCOUNT_SC; + providerAcc.Committee_Name__pc = ESA_cls_constants.EDRD_PERSONACCOUNT_SC_METABOLIC_SUBCOMMITTEE; + providerAcc.Provider_Identifier__pc = '1112223'; + providerAcc.Provider_Type__pc = ESA_cls_constants.EDRD_PHYSICIAN; + insert providerAcc; + + Id ContactId = [SELECT Id FROM Contact WHERE AccountID =: providerAcc.Id].get(0).Id; + Profile profileRec = [SELECT Id FROM Profile WHERE Name = 'EDRD Prescriber Community User']; + User communityUser = TestFactory.createCommunityUser(ContactId, profileRec.Id, 'Test1', 'Test'); + insert communityUser; + + providerAcc.Committee__pc = ESA_cls_constants.EDRD_PERSONACCOUNT_ACSC; + + Test.startTest(); + update providerAcc; + Test.stopTest(); + + List groupMembers = [SELECT Id, GroupId FROM GroupMember WHERE UserOrGroupId = :communityUser.Id]; + + Assert.areEqual(TRUE, groupMembers.size() > 0, 'At least one GroupMember should exist for the user'); + Assert.areEqual(2, groupMembers.size(), 'Exactly two GroupMember should exist for the user'); + Assert.areNotEqual(null, groupMembers[0].GroupId, 'GroupMember should have a valid GroupId'); + } +} \ No newline at end of file diff --git a/force-app/main/default/classes/EDRD_cls_HandleGroupsTest.cls-meta.xml b/dev-app-post/main/default/classes/EDRD_cls_HandleGroupsTest.cls-meta.xml similarity index 100% rename from force-app/main/default/classes/EDRD_cls_HandleGroupsTest.cls-meta.xml rename to dev-app-post/main/default/classes/EDRD_cls_HandleGroupsTest.cls-meta.xml diff --git a/force-app/main/default/classes/ESA_cls_accountTriggerHandlerTest.cls b/dev-app-post/main/default/classes/ESA_cls_accountTriggerHandlerTest.cls similarity index 78% rename from force-app/main/default/classes/ESA_cls_accountTriggerHandlerTest.cls rename to dev-app-post/main/default/classes/ESA_cls_accountTriggerHandlerTest.cls index c32842bfc..43081c9ca 100644 --- a/force-app/main/default/classes/ESA_cls_accountTriggerHandlerTest.cls +++ b/dev-app-post/main/default/classes/ESA_cls_accountTriggerHandlerTest.cls @@ -89,10 +89,35 @@ public class ESA_cls_accountTriggerHandlerTest { } /** -* @author: +* @author: Deepak * @date: 20 Dec 2024 * @description: The purpose of this method is to cover Testcoverage of handlePublicGroupMemberships * @Modification Log: [Date] - [Change Reference] - [Changed By] - [Description] */ - + @isTest + public static void handlePublicGroupMembershipsTest(){ + Account providerAccount = TestFactory.newProvider('Provider Test'); + providerAccount.Committee__pc = ESA_cls_constants.EDRD_PERSONACCOUNT_SC; + providerAccount.Committee_Name__pc = ESA_cls_constants.EDRD_PERSONACCOUNT_SC_METABOLIC_SUBCOMMITTEE; + providerAccount.Provider_Identifier__pc = '1112223'; + providerAccount.Provider_Type__pc = ESA_cls_constants.EDRD_PHYSICIAN; + insert providerAccount; + + Id ContactId = [SELECT Id FROM Contact WHERE AccountID =: providerAccount.Id].get(0).Id; + Profile profileRec = [SELECT Id FROM Profile WHERE Name = 'EDRD Prescriber Community User']; + User communityReviewer = TestFactory.createCommunityUser(ContactId, profileRec.Id, 'Test1', 'Test'); + insert communityReviewer; + + providerAccount.Committee__pc = ESA_cls_constants.EDRD_PERSONACCOUNT_ACSC; + + Test.startTest(); + update providerAccount; + Test.stopTest(); + + List groupMembersList = [SELECT Id, GroupId FROM GroupMember WHERE UserOrGroupId = :communityReviewer.Id]; + + Assert.areEqual(TRUE, groupMembersList.size() > 0, 'At least one GroupMember should exist for the user'); + Assert.areEqual(2, groupMembersList.size(), 'Exactly two GroupMember should exist for the user'); + Assert.areNotEqual(null, groupMembersList[0].GroupId, 'GroupMember should have a valid GroupId'); + } } \ No newline at end of file diff --git a/force-app/main/default/classes/ESA_cls_accountTriggerHandlerTest.cls-meta.xml b/dev-app-post/main/default/classes/ESA_cls_accountTriggerHandlerTest.cls-meta.xml similarity index 100% rename from force-app/main/default/classes/ESA_cls_accountTriggerHandlerTest.cls-meta.xml rename to dev-app-post/main/default/classes/ESA_cls_accountTriggerHandlerTest.cls-meta.xml diff --git a/dev-app-post/main/default/classes/UserTriggerHandlerTest.cls b/dev-app-post/main/default/classes/UserTriggerHandlerTest.cls index abdf32a10..de501b4af 100644 --- a/dev-app-post/main/default/classes/UserTriggerHandlerTest.cls +++ b/dev-app-post/main/default/classes/UserTriggerHandlerTest.cls @@ -4,6 +4,7 @@ * @Description: The purpose of this class is to cover Code coverage of UserTriggerHandler * @Revision(s): [Date] - [Change Reference] - [Changed By] - [Description] 24Sept - EDRD-911 - Deepak - Added activateACROnEDRDPortalEnable_Test method + 07Jan - EDRD-1150 - Accenture - Added handleEDRDPublicGroupMemberTest method ***********************************************************************************************/ @isTest public class UserTriggerHandlerTest { @@ -57,4 +58,34 @@ public class UserTriggerHandlerTest { Assert.areNotEqual(accShareList1.isEmpty(), true, 'AccountShare list should not be empty'); Assert.areNotEqual(accShareList1[0].UserOrGroupId, null, 'UserOrGroupId should not be null'); } + +/** +* @author: Deepak +* @date: 07 Jan 2025 +* @description: The purpose of this method is to cover Testcoverage of handleEDRDPublicGroupMember & handleGroupsForUsersAsync +* @Modification Log: [Date] - [Change Reference] - [Changed By] - [Description] +*/ + @isTest + public static void handleEDRDPublicGroupMemberTest(){ + Account providerAcc = TestFactory.newProvider('Provider Test'); + providerAcc.Committee__pc = ESA_cls_constants.EDRD_PERSONACCOUNT_SC; + providerAcc.Committee_Name__pc = ESA_cls_constants.EDRD_PERSONACCOUNT_SC_METABOLIC_SUBCOMMITTEE; + providerAcc.Provider_Identifier__pc = '1112223'; + providerAcc.Provider_Type__pc = ESA_cls_constants.EDRD_PHYSICIAN; + insert providerAcc; + + Id ContactId = [SELECT Id FROM Contact WHERE AccountID =: providerAcc.Id].get(0).Id; + Profile profileRec = [SELECT Id FROM Profile WHERE Name = 'EDRD Prescriber Community User']; + User communityUser = TestFactory.createCommunityUser(ContactId, profileRec.Id, 'Test1', 'Test'); + + Test.startTest(); + insert communityUser; + Test.stopTest(); + + List groupMembers = [SELECT Id, GroupId, UserOrGroupId FROM GroupMember WHERE UserOrGroupId = :communityUser.Id]; + + Assert.areEqual(TRUE, groupMembers.size() > 0, 'At least one GroupMember should be created for the community user.'); + Assert.areEqual(1, groupMembers.size(), 'Exactly one GroupMember should be created for the community user.'); + Assert.areNotEqual(null, groupMembers[0].GroupId, 'GroupMember should have a valid GroupId.'); + } } \ No newline at end of file diff --git a/force-app/main/default/classes/AccountContactRelationTriggerHandler.cls b/force-app/main/default/classes/AccountContactRelationTriggerHandler.cls index b8188b63d..eb45a1e75 100644 --- a/force-app/main/default/classes/AccountContactRelationTriggerHandler.cls +++ b/force-app/main/default/classes/AccountContactRelationTriggerHandler.cls @@ -144,7 +144,7 @@ public with sharing class AccountContactRelationTriggerHandler { if(accRecTypeSet.Contains(businessAccount.RecordType.DeveloperName) || (accRecTypeSet.Contains(providerAccount.RecordType.DeveloperName))){ String businessCommitteeTypes = businessAccount.EDRD_Committee_Type__c; String oldProviderCommittee = providerAccount.Committee__pc; - + if (ESA_cls_constants.EDRD_BUSINESS_SC_ACCOUNT.equalsIgnoreCase(businessCommitteeTypes) && oldProviderCommittee == NULL) { providerAccount.Committee__pc = ESA_cls_constants.EDRD_PERSONACCOUNT_SC; providerAccount.Committee_Name__pc = providerAccount.Committee_Name__pc != NULL ? providerAccount.Committee_Name__pc +';'+ businessAccount.Name : businessAccount.Name; @@ -238,7 +238,7 @@ public with sharing class AccountContactRelationTriggerHandler { providerIdVsRecToUpdate.put(providerAccount.Id, new Account(Id = providerAccount.Id, Committee__pc = providerAccount.Committee__pc, Committee_Name__pc = providerAccount.Committee_Name__pc)); } } - + if (!providerIdVsRecToUpdate.isEmpty()) { Database.update(providerIdVsRecToUpdate.values(), true); } diff --git a/force-app/main/default/classes/EDRD_cls_HandleGroups.cls b/force-app/main/default/classes/EDRD_cls_HandleGroups.cls index 864ff3cba..842c48faa 100644 --- a/force-app/main/default/classes/EDRD_cls_HandleGroups.cls +++ b/force-app/main/default/classes/EDRD_cls_HandleGroups.cls @@ -3,9 +3,9 @@ * @Date: 09 Mar 2023 * @Description: The purpose of this class is to Adding/Removing - Provider/Reviewer to public groups in without sharing context. * @Revision(s): [Date] - [Change Reference] - [Changed By] - [Description] - 20 Dec - EDRD-1150 - Accenture - Adding/Removing - Provider/Reviewer to public groups based on Committees. + 20 Dec - EDRD-1150 - Accenture - Adding/Removing - Provider/Reviewer to public groups based on Committees ***********************************************************************************************/ -public with Sharing class EDRD_cls_HandleGroups { +public without Sharing class EDRD_cls_HandleGroups { /** * @author: Deepak @@ -63,7 +63,7 @@ public with Sharing class EDRD_cls_HandleGroups { List userListToDelete = [SELECT Id, ContactId FROM User WHERE ContactId IN: perConIdVsOldGroupName.keySet()]; for(Group grpObj: groupList){ - groupNameVsGroupId.put(grpObj.Name, grpObj.Id); + groupNameVsGroupId.put(grpObj.DeveloperName, grpObj.Id); } Map groupIdVsUserGroupId = new Map(); for(User userObj: userListToDelete){ @@ -78,14 +78,14 @@ public with Sharing class EDRD_cls_HandleGroups { delete groupMemberToDelete; } } - + for(Id perContactId :perConIdVsnewCommitteeName.KeySet()){ for(String committeeName: perConIdVsnewCommitteeName.get(perContactId)){ if(!perConIdVsNewGroupName.containsKey(perContactId)){ perConIdVsNewGroupName.put(perContactId, new Set()); } - perConIdVsNewGroupName.get(perContactId).add(committeeToGroupMap.get(committeeName)); + perConIdVsNewGroupName.get(perContactId).add(committeeToGroupMap.get(committeeName)); } } @@ -97,7 +97,9 @@ public with Sharing class EDRD_cls_HandleGroups { for(User userObj: userList){ for(String groupName: perConIdVsNewGroupName.get(userObj.ContactId)){ + if(groupNameVsGroupId.get(groupName) != NULL){ groupMemberToInsert.add(new GroupMember(groupId = groupNameVsGroupId.get(groupName), UserOrGroupId = userObj.Id)); + } } } diff --git a/force-app/main/default/classes/EDRD_cls_HandleGroupsTest.cls b/force-app/main/default/classes/EDRD_cls_HandleGroupsTest.cls deleted file mode 100644 index 3f365279f..000000000 --- a/force-app/main/default/classes/EDRD_cls_HandleGroupsTest.cls +++ /dev/null @@ -1,18 +0,0 @@ -/********************************************************************************************** -* @Author: Accenture -* @Date: 20/12/2024 -* @Description: The purpose of this class is to cover Code coverage of EDRD_cls_HandleGroups -* @Revision(s): [Date] - [Change Reference] - [Changed By] - [Description] - 20 Dec - EDRD-1150 - Accenture - The purpose of this method is to Remove Committee based on ACR delete of EDRD_Committee & Provider OR Committee_Reviewer. -***********************************************************************************************/ -@isTest -public class EDRD_cls_HandleGroupsTest { - -/** -* @author: -* @date: 23 Dec 2024 -* @description: The purpose of this method is to cover Testcoverage of handleGroupMembership -* @Modification Log: [Date] - [Change Reference] - [Changed By] - [Description] -*/ - -} \ No newline at end of file diff --git a/force-app/main/default/classes/ESA_cls_accountTriggerHandler.cls b/force-app/main/default/classes/ESA_cls_accountTriggerHandler.cls index 913d3ede7..8a9882d83 100644 --- a/force-app/main/default/classes/ESA_cls_accountTriggerHandler.cls +++ b/force-app/main/default/classes/ESA_cls_accountTriggerHandler.cls @@ -97,46 +97,75 @@ public with sharing class ESA_cls_accountTriggerHandler { public static void handlePublicGroupMemberships(Map oldAccountMap, Map newAccountMap) { Map> perConIdVsOldCommittesName = new Map>(); Map> perConIdVsnewCommitteeName = new Map>(); + List perConIdVsOldCommittesNameSTRList = new List(); + List perConIdVsnewCommitteeNameSTRList = new List(); Map accNameVsPerConId = new Map(); for (Id accountId : newAccountMap.keySet()) { Account oldAccount = oldAccountMap.get(accountId); Account newAccount = newAccountMap.get(accountId); + if(oldAccount.Committee__pc == newAccount.Committee__pc && oldAccount.Committee_Name__pc == newAccount.Committee_Name__pc){ + continue; + } accNameVsPerConId.put(newAccount.Name, newAccount.PersonContactId); - if (oldAccount.Committee__pc != null && oldAccount.Committee_Name__pc != null) { - perConIdVsOldCommittesName.put(oldAccount.perSonContactId, new Set(oldAccount.Committee_Name__pc.split(';'))); + if(oldAccount.Committee_Name__pc != newAccount.Committee_Name__pc){ + if (oldAccount.Committee_Name__pc != null) { + perConIdVsOldCommittesName.put(oldAccount.perSonContactId, new Set(oldAccount.Committee_Name__pc.split(';'))); + } + if (newAccount.Committee_Name__pc != null) { + perConIdVsnewCommitteeName.put(newAccount.perSonContactId, new Set(newAccount.Committee_Name__pc.split(';'))); + } } - if (newAccount.Committee__pc != null && newAccount.Committee_Name__pc != null) { - perConIdVsnewCommitteeName.put(newAccount.perSonContactId, new Set(newAccount.Committee_Name__pc.split(';'))); + if(oldAccount.Committee__pc != newAccount.Committee__pc){ + if(!perConIdVsOldCommittesName.containsKey(oldAccount.perSonContactId)){ + perConIdVsOldCommittesName.put(oldAccount.perSonContactId, new Set()); + } + if(!perConIdVsnewCommitteeName.containsKey(newAccount.perSonContactId)){ + perConIdVsnewCommitteeName.put(newAccount.perSonContactId, new Set()); + } + if (oldAccount.Committee__pc != null) { + String committeeName = (oldAccount.Committee__pc == 'EDRD Advisory/ Sub Committee') ? 'EDRD Advisory Committee' : oldAccount.Committee__pc; + perConIdVsOldCommittesName.get(oldAccount.perSonContactId).add(committeeName); + } + if (newAccount.Committee__pc != null) { + perConIdVsnewCommitteeName.get(newAccount.perSonContactId).addAll(newAccount.Committee__pc.split(';')); + } } - } - List perConIdVsOldCommittesNameSTRList = new List(); - - for(Id perContactId: perConIdVsOldCommittesName.keySet()){ - groupMemberWrapper gMWObj = new groupMemberWrapper(); - gMWObj.personContactId = perContactId; - List committeList = new List(); - for(String committeeName : perConIdVsOldCommittesName.get(perContactId)){ - committeList.add(new cls_committiees(committeeName)); + if(oldAccount.Committee__pc != newAccount.Committee__pc){ + if(newAccount.Committee__pc == 'EDRD Advisory Committee' || newAccount.Committee__pc == 'EDRD Advisory/ Sub Committee'){ + if(!perConIdVsnewCommitteeName.containsKey(newAccount.perSonContactId)){ + perConIdVsnewCommitteeName.put(newAccount.perSonContactId, new Set{'EDRD Advisory Committee'}); + }else { + perConIdVsnewCommitteeName.get(newAccount.perSonContactId).add('EDRD Advisory Committee'); + } + } } - gMWObj.committiees = committeList; - perConIdVsOldCommittesNameSTRList.add(JSON.serialize(gMWObj)); - } - - List perConIdVsnewCommitteeNameSTRList = new List(); - - for(Id perContactId: perConIdVsnewCommitteeName.keySet()){ - groupMemberWrapper gMWObj = new groupMemberWrapper(); - gMWObj.personContactId = perContactId; - List committeList = new List(); - for(String committeeName : perConIdVsnewCommitteeName.get(perContactId)){ - committeList.add(new cls_committiees(committeeName)); + for(Id perContactId: perConIdVsOldCommittesName.keySet()){ + groupMemberWrapper gMWObj = new groupMemberWrapper(); + gMWObj.personContactId = perContactId; + List committeList = new List(); + for(String committeeName : perConIdVsOldCommittesName.get(perContactId)){ + committeList.add(new cls_committiees(committeeName)); + } + gMWObj.committiees = committeList; + perConIdVsOldCommittesNameSTRList.add(JSON.serialize(gMWObj)); + } + + for(Id perContactId: perConIdVsnewCommitteeName.keySet()){ + groupMemberWrapper gMWObj = new groupMemberWrapper(); + gMWObj.personContactId = perContactId; + List committeList = new List(); + for(String committeeName : perConIdVsnewCommitteeName.get(perContactId)){ + committeList.add(new cls_committiees(committeeName)); + } + gMWObj.committiees = committeList; + perConIdVsnewCommitteeNameSTRList.add(JSON.serialize(gMWObj)); + } + if(!perConIdVsOldCommittesNameSTRList.isEmpty() || !perConIdVsnewCommitteeNameSTRList.isEmpty()){ + EDRD_cls_HandleGroups.handleGroupMembership(perConIdVsOldCommittesNameSTRList, perConIdVsnewCommitteeNameSTRList); } - gMWObj.committiees = committeList; - perConIdVsnewCommitteeNameSTRList.add(JSON.serialize(gMWObj)); } - EDRD_cls_HandleGroups.handleGroupMembership(perConIdVsOldCommittesNameSTRList, perConIdVsnewCommitteeNameSTRList); } /** diff --git a/force-app/main/default/classes/ESA_cls_constants.cls b/force-app/main/default/classes/ESA_cls_constants.cls index 93e2262e6..9b397358e 100644 --- a/force-app/main/default/classes/ESA_cls_constants.cls +++ b/force-app/main/default/classes/ESA_cls_constants.cls @@ -19,6 +19,7 @@ public class ESA_cls_constants { public static final String EDRD_CASE_MOHFUNDING_DENIED = 'Denied'; public static final String EDRD_CASE_STATUS_CANCELLED = 'Cancelled'; public static final String EDRD_CASE_STATUS_FUNDING_APPROVED = 'Funding Approved'; + public static final String EDRD_COMMITTEE_REVIEWER = 'Committee_Reviewer'; public static final String EDRD_FORMULATION_BOTTLE = 'Bottle'; public static final String EDRD_FUNDING_DECISION_DENIED = 'Denied'; public static final String EDRD_NAME = 'EDRD'; diff --git a/force-app/main/default/classes/UserTriggerHandler.cls b/force-app/main/default/classes/UserTriggerHandler.cls index b828a4f2f..f58a43290 100644 --- a/force-app/main/default/classes/UserTriggerHandler.cls +++ b/force-app/main/default/classes/UserTriggerHandler.cls @@ -4,10 +4,13 @@ * @Description: The purpose of this class is to create methods which can be used by different trigger event * @Revision(s): [Date] - [Change Reference] - [Changed By] - [Description] 24Sept - EDRD-911 - Accenture - Added activateACROnEDRDPortalEnable method + 07Jan - EDRD-1150 - Accenture - Added handleEDRDPublicGroupMember method + 07Jan - EDRD-1150 - Accenture - Added handleGroupsForUsersAsync method ***********************************************************************************************/ public with sharing class UserTriggerHandler { public static Id eDRDPrescriberProfileId = [SELECT Id FROM Profile WHERE Name =: ESA_cls_constants.EDRD_PRESCRIBER_COMMUNITY_USER LIMIT 1].Id; public static Id recordTypeProvider = Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get(ESA_cls_constants.EDRD_PROVIDER).getRecordTypeId(); + public static Id recordTypeEDRDReviewer = Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get(ESA_cls_constants.EDRD_COMMITTEE_REVIEWER).getRecordTypeId(); /** * @author: Deepak @@ -59,4 +62,79 @@ public with sharing class UserTriggerHandler { System.debug('An unexpected error occurred: ' + ex.getMessage()); } } + +/** +* @author: Deepak +* @date: 07 Jan 2025 +* @description: The purpose of this method is to activate EDRD related ACR on provider releated to user. +* @Modification Log: [Date] - [Change Reference] - [Changed By] - [Description] +*/ + public static void handleEDRDPublicGroupMember(List newUserList) { + Set userIdSet = new Set(); + + for (User userObj : newUserList) { + if ((userObj.ProfileId == eDRDPrescriberProfileId && userObj.IsPortalEnabled)) { + userIdSet.add(userObj.Id); + } + } + + if (!userIdSet.isEmpty()) { + handleGroupsForUsersAsync(userIdSet); + } + } + +/** +* @author: Deepak +* @date: 07 Jan 2025 +* @description: The purpose of this method is to async and insert the public groupmember records. +* @Modification Log: [Date] - [Change Reference] - [Changed By] - [Description] +*/ + @future + public static void handleGroupsForUsersAsync(Set userIds){ + Map committeeToGroupMap = new Map(); + Map groupNameVsGroupId = new Map(); + Map> userIdVsGroupsToBeAdded = new Map>(); + List groupMemberToInsert = new List(); + List relevantUsers = new List(); + + relevantUsers = [SELECT Id, ContactId, Contact.AccountId, Contact.Account.Committee__pc, Contact.Account.Committee_Name__pc + FROM User WHERE Id IN :userIds + AND (Contact.Account.Committee__pc != NULL OR Contact.Account.Committee_Name__pc != NULL) + AND (Account.RecordTypeId = :recordTypeProvider OR Account.RecordTypeId = :recordTypeEDRDReviewer)]; + + for (User userObj : relevantUsers) { + if (userObj.Contact.Account.Committee_Name__pc != NULL) { + userIdVsGroupsToBeAdded.put(userObj.Id, userObj.Contact.Account.Committee_Name__pc.split(';')); + } + if (userObj.Contact.Account.Committee__pc != NULL && userObj.Contact.Account.Committee_Name__pc == NULL) { + userIdVsGroupsToBeAdded.put(userObj.Id, new List{userObj.Contact.Account.Committee__pc}); + } + } + + if (!userIdVsGroupsToBeAdded.isEmpty()) { + Set publicGroupName = new Set(); + + for (EDRD_Public_Grp_vs_Committee__mdt metadataRecord : [SELECT Committee_Name__c, EDRD_Public_Group_Name__c + FROM EDRD_Public_Grp_vs_Committee__mdt]) { + committeeToGroupMap.put(metadataRecord.Committee_Name__c, metadataRecord.EDRD_Public_Group_Name__c); + publicGroupName.add(metadataRecord.EDRD_Public_Group_Name__c); + } + List groupList = [SELECT Id, Name, DeveloperName FROM Group WHERE DeveloperName IN :publicGroupName]; + + for (Group grpObj : groupList) { + groupNameVsGroupId.put(grpObj.DeveloperName, grpObj.Id); + } + + for (Id userId : userIdVsGroupsToBeAdded.keySet()) { + for (String committeeName : userIdVsGroupsToBeAdded.get(userId)) { + groupMemberToInsert.add(new GroupMember(UserOrGroupId = userId, + GroupId = groupNameVsGroupId.get(committeeToGroupMap.get(committeeName)))); + } + } + } + + if (!groupMemberToInsert.isEmpty()) { + Database.insert(groupMemberToInsert, true); + } + } } \ No newline at end of file diff --git a/force-app/main/default/customMetadata/EDRD_Public_Grp_vs_Committee.EDRD_Advisory_Committee.md-meta.xml b/force-app/main/default/customMetadata/EDRD_Public_Grp_vs_Committee.EDRD_Advisory_Committee.md-meta.xml index 549ccaec5..c9e471c07 100644 --- a/force-app/main/default/customMetadata/EDRD_Public_Grp_vs_Committee.EDRD_Advisory_Committee.md-meta.xml +++ b/force-app/main/default/customMetadata/EDRD_Public_Grp_vs_Committee.EDRD_Advisory_Committee.md-meta.xml @@ -4,7 +4,7 @@ false Committee_Name__c - + EDRD Advisory Committee EDRD_Public_Group_Name__c diff --git a/force-app/main/default/triggers/UserTrigger.trigger b/force-app/main/default/triggers/UserTrigger.trigger index 89a16ce27..545af30b8 100644 --- a/force-app/main/default/triggers/UserTrigger.trigger +++ b/force-app/main/default/triggers/UserTrigger.trigger @@ -4,10 +4,13 @@ * @Description: The purpose of this Trigger is to trigger on particular events on user * @Revision(s): [Date] - [Change Reference] - [Changed By] - [Description] 24 Sep - EDRD-911 - Accenture - Added activateACROnEDRDportalEnable method + 07Jan - EDRD-1150 - Accenture - Added handleEDRDPublicGroupMember method + 07Jan - EDRD-1150 - Accenture - Added handleGroupsForUsersAsync method ***********************************************************************************************/ trigger UserTrigger on User (after insert) { if(trigger.isInsert && trigger.isAfter){ UserTriggerHandler.activateACROnEDRDPortalEnable(trigger.new); + UserTriggerHandler.handleEDRDPublicGroupMember(trigger.new); } } \ No newline at end of file