Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class roundRobinAssignment {
- public static void roundRobinLeads(){
- //list to hold leads we identify as needing round robin'd
- List<Lead> lstLeadToRRReassign = new List<Lead>();
- //Maps for holding old and new lead values
- Map<Id,Lead> mapOldLead1 = (Map<Id,Lead>)Trigger.oldMap;
- Map<Id,Lead> mapNewLead1 = (Map<Id,Lead>)Trigger.NewMap;
- //create a set of IDs and populate with the IDs of queues we want to look at
- //for round robin assignment. We'll look for leads with these ownerIDs
- Set<Id> setQueueId = new Set<ID>();
- setQueueId.add('00G340000031ieu'); // SDR
- setQueueId.add('00G340000031m5A'); // SDR - East
- setQueueId.add('00G340000031m5F'); // SDR - West
- setQueueId.add('00G340000031vJu'); // RR - Internationl
- setQueueId.add('00G34000003206s'); // PTC East Region
- setQueueId.add('00G34000003206x'); // PTC MDW
- setQueueId.add('00G340000032072'); // PTC SO
- setQueueId.add('00G340000032077'); // PTC West Region
- setQueueId.add('00G34000003zRIf'); //Pro West Region
- setQueueId.add('00G34000003zRIV'); //Pro Central Region
- setQueueId.add('00G34000003zRIG'); //Pro East Region
- setQueueId.add('00G34000003c6tf'); //ALL MM AE(Pro) Reps
- setQueueId.add('00G34000003c6ta'); //All SDR Reps
- //Create an integer for each queue. We will use this to update the lead count for each queue
- //after leads are assigned.
- Integer sdr = 0;
- Integer sdrEast=0;
- Integer sdrWest = 0;
- Integer rrInternationl = 0;
- Integer PTC_East_Region = 0;
- Integer PTC_MDW = 0;
- Integer PTC_SO = 0;
- Integer PTC_West_Region = 0;
- Integer Pro_West_Region = 0;
- Integer Pro_Central_Region = 0;
- Integer Pro_East_Region = 0;
- Integer All_MM = 0;
- Integer All_SDR = 0;
- if(trigger.isUpdate) {
- for(ID leadID : mapNewLead1.keySet()) {
- Lead newLead = mapNewLead1.get(leadID);
- Lead oldLead = mapOldLead1.get(leadID);
- System.debug(setQueueId.contains(newLead.OwnerId));
- if(newLead.OwnerId != null && setQueueId.contains(newLead.OwnerId)) {
- if(oldLead.ownerId == null || oldLead.ownerId != newLead.OwnerId) {
- lstLeadToRRReassign.add(newLead);
- }
- }
- if((oldLead.status == 'Closed' || oldLead.status == 'Unqualified' || oldLead.status == 'Nurturing') && newLead.numberOfEmployees != oldLead.numberOfEmployees && newLead.numberOfEMployees >1000){
- lstLeadToRRReassign.add(newLead);
- }
- }
- }
- if(Trigger.isInsert) {
- for(Lead newLead : (List<Lead>)Trigger.New) {
- //if lead is owned by one of our selected queues, assign it to a list of leads
- //that will be round robin'd to the members of said queue
- if(newLead.OwnerId != null && setQueueId.contains(newLead.OwnerId)) {
- lstLeadToRRReassign.add(newLead);
- }
- }
- }
- //Create a map that holds a groupID and then a list of the members in that group as its values
- Map<ID,List<ID>> mapQueueToUser = new Map<Id,List<ID>>();
- for(GroupMember GM : [SELECT GroupId,UserOrGroupId FROM GroupMember where GroupId in :setQueueId order by userOrGroupId desc]) {
- //create the key using group Ids whenever a new group ID is discovered
- if(!mapQueueToUser.containsKey(GM.GroupId)) {
- mapQueueToUser.put(GM.GroupId,new List<Id>());
- }
- //get each member from the group by adding member IDs to the list that serves as the value for
- //each particular key
- mapQueueToUser.get(GM.GroupId).add(GM.UserOrGroupId);
- }
- //create a map to hold the queue name and the latest lead count for that queue
- Map<String,Integer> mapLstLatestNum = new Map<String,Integer>();
- //iterate over all lead number records to populate map
- List<Lead_Latest_Number__c> lstLeadNumbers = [select id,Latest_Number__c,Object_Name__c,Queue_Name__c from Lead_Latest_Number__c where Object_Name__c = 'Lead'];
- for(Lead_Latest_Number__c lc : lstLeadNumbers) {
- mapLstLatestNum.put(lc.Queue_Name__c , Integer.valueOf(lc.Latest_Number__c));
- }
- //create a map of group IDs and their API name
- Map<Id,String> mapGroups = new Map<Id,String>();
- for(Group gp : [SELECT Id, Name , DeveloperName FROM Group where id in :setQueueId]) {
- mapGroups.put(gp.Id,gp.DeveloperName);
- }
- //we're going to iterate over the leads we have flagged as leads to round robin
- //
- for(Lead l : lstLeadToRRReassign) {
- Integer latestNumber = mapLstLatestNum.get(mapGroups.get(l.OwnerId));
- List<Id> lstIdinQueue = mapQueueToUser.get(l.OwnerId);
- if(latestNumber != null && lstIdinQueue != null && lstIdinQueue.size() > 0) {
- Integer leadIndex = Math.mod(latestNumber,lstIdinQueue.size());
- mapLstLatestNum.put(mapGroups.get(l.OwnerId),latestNumber + 1);
- l.ownerId = lstIdinQueue.get(leadIndex);
- system.debug('Reassigning lead: '+l.id+' / '+ l.name+' to user: '+l.owner.Name);
- }
- }
- for(Lead_Latest_Number__c lc : lstLeadNumbers) {
- if(lc.Queue_Name__c == 'SDR') {
- sdr = Integer.valueOf(mapLstLatestNum.get(lc.Queue_Name__c) - lc.Latest_Number__c);
- }else if(lc.Queue_Name__c == 'SDR_West') {
- sdrWest = Integer.valueOf(mapLstLatestNum.get(lc.Queue_Name__c) - lc.Latest_Number__c);
- }else if(lc.Queue_Name__c == 'SDR_East') {
- sdrEast = Integer.valueOf(mapLstLatestNum.get(lc.Queue_Name__c) - lc.Latest_Number__c);
- }else if(lc.Queue_Name__c == 'RR_International') {
- rrInternationl = Integer.valueOf(mapLstLatestNum.get(lc.Queue_Name__c) - lc.Latest_Number__c);
- }else if(lc.Queue_Name__c == 'PTC_East_Region') {
- PTC_East_Region = Integer.valueOf(mapLstLatestNum.get(lc.Queue_Name__c) - lc.Latest_Number__c);
- }else if(lc.Queue_Name__c == 'PTC_MDW') {
- PTC_MDW = Integer.valueOf(mapLstLatestNum.get(lc.Queue_Name__c) - lc.Latest_Number__c);
- }else if(lc.Queue_Name__c == 'PTC_SO') {
- PTC_SO = Integer.valueOf(mapLstLatestNum.get(lc.Queue_Name__c) - lc.Latest_Number__c);
- }else if(lc.Queue_Name__c == 'PTC_West_Region') {
- PTC_West_Region = Integer.valueOf(mapLstLatestNum.get(lc.Queue_Name__c) - lc.Latest_Number__c);
- }else if(lc.Queue_Name__c == 'Pro_West_Region_RR'){
- Pro_West_Region = Integer.valueOf(mapLstLatestNum.get(lc.Queue_Name__c) - lc.Latest_Number__c);
- }else if(lc.Queue_Name__c == 'Pro_Central_Region_RR'){
- Pro_Central_Region = Integer.valueOf(mapLstLatestNum.get(lc.Queue_Name__c) - lc.Latest_Number__c);
- }else if(lc.Queue_Name__c == 'Pro_East_Region_RR'){
- system.debug('Pro East Region Queue Section');
- system.debug('Before adding new value: '+Pro_East_Region);
- Pro_East_Region = Integer.valueOf(mapLstLatestNum.get(lc.Queue_Name__c)-lc.Latest_Number__c);
- system.debug('After: '+Pro_East_Region);
- }else if(lc.Queue_name__c == 'All_MMAE'){
- All_MM = Integer.valueOf(mapLstLatestNum.get(lc.queue_name__c)-lc.latest_number__c);
- }else if(lc.Queue_name__c == 'All_SDR'){
- All_SDR = Integer.valueOf(mapLstLatestNum.get(lc.queue_name__c)-lc.latest_number__c);
- }
- //lc.Latest_Number__c = mapLstLatestNum.get(lc.Queue_Name__c);
- }
- AssignLead(sdr,sdrEast,sdrWest,rrInternationl,PTC_East_Region,PTC_MDW,PTC_SO,PTC_West_Region, pro_West_Region, Pro_Central_Region, Pro_East_Region, All_SDR, All_MM);
- }
- public static void AssignLead(Integer sdr , Integer sdrEast , Integer sdrWest,Integer rrInternationl,Integer PTC_East_Region,Integer PTC_MDW,Integer PTC_SO,Integer PTC_West_Region,
- Integer Pro_West_Region, Integer Pro_Central_Region, Integer Pro_East_Region, Integer All_SDR, Integer All_MM) {
- if(System.isBatch() || System.isFuture() || System.isQueueable() || System.isScheduled()) {
- AssignLeadSystem(sdr,sdrEast,sdrWest,rrInternationl,PTC_East_Region,PTC_MDW,PTC_SO,PTC_West_Region, Pro_West_Region, Pro_Central_Region, Pro_East_Region, All_SDR, All_MM);
- }else {
- AssignLeadFuture(sdr,sdrEast,sdrWest,rrInternationl,PTC_East_Region,PTC_MDW,PTC_SO,PTC_West_Region, Pro_West_Region, Pro_Central_Region, Pro_East_Region, All_SDR, All_MM);
- }
- }
- public static void AssignLeadSystem(Integer sdr , Integer sdrEast , Integer sdrWest,Integer rrInternationl,Integer PTC_East_Region,Integer PTC_MDW,Integer PTC_SO,Integer PTC_West_Region, Integer Pro_West_Region, Integer Pro_Central_Region, Integer Pro_East_Region, Integer All_SDR, Integer All_MM) {
- AssignLeadData(sdr,sdrEast,sdrWest,rrInternationl,PTC_East_Region,PTC_MDW,PTC_SO,PTC_West_Region, Pro_West_Region, Pro_Central_Region, Pro_East_Region, All_SDR, All_MM);
- }
- @Future
- public static void AssignLeadFuture(Integer sdr , Integer sdrEast , Integer sdrWest,Integer rrInternationl,Integer PTC_East_Region,Integer PTC_MDW,Integer PTC_SO,Integer PTC_West_Region,Integer Pro_West_Region, Integer Pro_Central_Region, Integer Pro_East_Region, Integer All_SDR, Integer All_MM) {
- AssignLeadData(sdr,sdrEast,sdrWest,rrInternationl,PTC_East_Region,PTC_MDW,PTC_SO,PTC_West_Region, Pro_West_Region, Pro_Central_Region, Pro_East_Region, All_SDR, All_MM);
- }
- public static void AssignLeadData(Integer sdr , Integer sdrEast , Integer sdrWest,Integer rrInternationl,Integer PTC_East_Region,Integer PTC_MDW,Integer PTC_SO,Integer PTC_West_Region, Integer Pro_West_Region, Integer Pro_Central_Region, Integer Pro_East_Region, Integer All_SDR, Integer All_MM) {
- List<Lead_Latest_Number__c> lstLeadNumbers = [select id,Latest_Number__c,Object_Name__c,Queue_Name__c from Lead_Latest_Number__c where Object_Name__c = 'Lead' for update];
- for(Lead_Latest_Number__c ln : lstLeadNumbers) {
- system.debug('Current Queue: '+ln.queue_Name__c);
- system.debug('ALL MMAE Region Number: '+ALL_MM);
- if(ln.Queue_Name__c == 'SDR') {
- ln.Latest_Number__c += sdr;
- }else if(ln.Queue_Name__c == 'SDR_West') {
- ln.Latest_Number__c += sdrWest;
- }else if(ln.Queue_Name__c == 'SDR_East') {
- ln.Latest_Number__c += sdrEast;
- }else if(ln.Queue_Name__c == 'RR_International') {
- ln.Latest_Number__c += rrInternationl;
- }else if(ln.Queue_Name__c == 'PTC_East_Region') {
- ln.Latest_Number__c += PTC_East_Region;
- }else if(ln.Queue_Name__c == 'PTC_MDW') {
- ln.Latest_Number__c += PTC_MDW;
- }else if(ln.Queue_Name__c == 'PTC_SO') {
- ln.Latest_Number__c += PTC_SO;
- }else if(ln.Queue_Name__c == 'PTC_West_Region') {
- ln.Latest_Number__c += PTC_West_Region;
- }else if(ln.Queue_name__c == 'Pro_West_Region_RR'){
- ln.latest_Number__c += Pro_West_Region;
- }else if(ln.Queue_name__c == 'Pro_East_Region_RR'){
- ln.latest_Number__c += Pro_East_Region;
- }else if(ln.Queue_name__c == 'Pro_Central_Region_RR'){
- ln.latest_Number__c += Pro_Central_Region;
- }else if(ln.Queue_Name__c == 'All_SDR'){
- ln.Latest_Number__c += All_SDR;
- }else if(ln.Queue_name__c == 'All_MMAE'){
- ln.Latest_Number__c += All_MM;
- }
- }
- update lstLeadNumbers;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement