Created
December 22, 2017 16:25
-
-
Save dsilvadeepal/f3c6406ef67687be4f50195bd3a3e476 to your computer and use it in GitHub Desktop.
Upon opportunity creation add the opportunity owner's manager as an opportunity team member with role 'Sales Manager' If the opportunity owner is a manager, add one of their direct employees as a 'Sales Rep' opportunity team member
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Upon opportunity creation add the opportunity owner's manager as an opportunity team member with role 'Sales Manager' | |
If the opportunity owner is a manager, add one of their direct employees as a 'Sales Rep' opportunity team member | |
*/ | |
trigger OwnerManager on Opportunity (after insert) { | |
for(Opportunity opp : Trigger.new){ | |
//Get opp owner manager info | |
Opportunity oppWithManagerInfo = [SELECT Id, | |
Owner.ManagerId | |
FROM Opportunity | |
WHERE Id = :opp.Id]; | |
//Prep a list of team members for later insert | |
List<OpportunityTeamMember> otms = new List<OpportunityTeamMember>(); | |
//Create the opportunity team member role | |
if(oppWithManagerInfo.Owner.ManagerId != null) { | |
OpportunityTeamMember otm = new OpportunityTeamMember(); | |
otm.UserId = oppWithManagerInfo.Owner.ManagerId; | |
otm.OpportunityId = opp.Id; | |
otm.TeamMemberRole = 'Sales Manager'; | |
otms.add(otm); | |
//insert otm; | |
} | |
//Check is owner is a manager | |
List<User> reportees = [SELECT Id | |
FROM User | |
WHERE ManagerId = :opp.OwnerId | |
]; | |
//Create the member for the reportee | |
if(!reportees.isEmpty()){ | |
OpportunityTeamMember reporteeMember = new OpportunityTeamMember(); | |
reporteeMember.UserId = reportees.get(0).Id; | |
reporteeMember.OpportunityId = opp.Id; | |
reporteeMember.TeamMemberRole = 'Sales Rep'; | |
otms.add(reporteeMember); | |
//insert reporteeMember; | |
} | |
//Insert all members at once | |
if(!otms.isEmpty()){ | |
insert otms; | |
} | |
} | |
} | |
//Test Class | |
@isTest | |
private class OwnerManagerTest { | |
@isTest static void ownerHasNoManager(){ | |
//Populate fields for a user | |
User myUser = new User(); | |
myUser.FirstName = 'Matt'; | |
myUser.LastName = 'Lacey'; | |
myUser.Email = 'mlacey@trello.com'; | |
myUser.UserName = 'mlacey@trello.com'; | |
myUser.Alias = 'mlacey'; | |
myUser.ProfileId = [SELECT Id | |
FROM Profile | |
WHERE Name = 'System Administrator'].Id; | |
myUser.TimeZoneSidKey = 'America/Denver'; | |
myUser.LocaleSidKey = 'en_US'; | |
myUser.EmailEncodingKey = 'UTF-8'; | |
myUser.LanguageLocaleKey = 'en_US'; | |
myUser.ManagerId = null; | |
insert myUser; | |
Opportunity opp = new Opportunity(); | |
opp.Name = 'Trello'; | |
opp.Amount = 100; | |
opp.StageName = 'Prospecting'; | |
opp.CloseDate = Date.today(); | |
opp.OwnerId = myUser.Id; | |
insert opp; | |
List<OpportunityTeamMember> otms = [SELECT Id | |
FROM OpportunityTeamMember | |
WHERE OpportunityId = :opp.Id]; | |
System.assertEquals(0, otms.size()); | |
} | |
@isTest static void ownerHasManager(){ | |
//Create a manager | |
User manager = new User(); | |
manager.FirstName = 'Matt'; | |
manager.LastName = 'Lacey'; | |
manager.Email = 'mlacey@trello.com'; | |
manager.UserName = 'mlacey@trello.com'; | |
manager.Alias = 'mlacey'; | |
manager.ProfileId = [SELECT Id | |
FROM Profile | |
WHERE Name = 'System Administrator'].Id; | |
manager.TimeZoneSidKey = 'America/Denver'; | |
manager.LocaleSidKey = 'en_US'; | |
manager.EmailEncodingKey = 'UTF-8'; | |
manager.LanguageLocaleKey = 'en_US'; | |
manager.ManagerId = null; | |
insert manager; | |
User me = [SELECT Id | |
FROM User | |
WHERE Id = :UserInfo.getUserId()]; | |
me.ManagerId = manager.Id; | |
update me; | |
Opportunity opp = new Opportunity(); | |
opp.Name = 'New Trello Deal'; | |
opp.Amount = 100; | |
opp.StageName = 'Prospecting'; | |
opp.CloseDate = Date.today(); | |
opp.OwnerId = me.Id; | |
insert opp; | |
List<OpportunityTeamMember> otms = [SELECT Id | |
FROM OpportunityTeamMember | |
WHERE OpportunityId = :opp.Id | |
AND UserId = :manager.Id | |
AND TeamMemberRole = 'Sales Manager']; | |
System.assertEquals(1, otms.size()); | |
} | |
@isTest static void ownerIsManager(){ | |
//Create a reportee with me as manager | |
User reportee = new User(); | |
reportee.FirstName = 'Mike'; | |
reportee.LastName = 'Angelo'; | |
reportee.Email = 'mangelo@trello.com'; | |
reportee.UserName = 'mangelo@trello.com'; | |
reportee.Alias = 'mangelo'; | |
reportee.ProfileId = [SELECT Id | |
FROM Profile | |
WHERE Name = 'System Administrator'].Id; | |
reportee.TimeZoneSidKey = 'America/Denver'; | |
reportee.LocaleSidKey = 'en_US'; | |
reportee.EmailEncodingKey = 'UTF-8'; | |
reportee.LanguageLocaleKey = 'en_US'; | |
reportee.ManagerId = UserInfo.getUserId(); | |
insert reportee; | |
//Create an opp under me | |
Opportunity opp = new Opportunity(); | |
opp.Name = 'Trello Deal 2'; | |
opp.Amount = 200; | |
opp.StageName = 'Prospecting'; | |
opp.CloseDate = Date.today(); | |
opp.OwnerId = UserInfo.getUserId(); | |
insert opp; | |
List<OpportunityTeamMember> otms = [SELECT Id, UserId | |
FROM OpportunityTeamMember | |
WHERE OpportunityId = :opp.Id | |
//AND UserId = :reportee.Id | |
AND TeamMemberRole = 'Sales Rep']; | |
System.debug('Opp OwnerId ' + opp.OwnerId ); | |
System.debug('Reportee manager Id ' + reportee.ManagerId ); | |
System.debug('otms ' + otms.get(0).UserId); | |
System.assertEquals(1, otms.size()); | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment