Skip to content

Instantly share code, notes, and snippets.

@dsilvadeepal
Created December 22, 2017 16:25
Show Gist options
  • Save dsilvadeepal/f3c6406ef67687be4f50195bd3a3e476 to your computer and use it in GitHub Desktop.
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
/*
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