Advertisement
Guest User

round robin leads

a guest
Oct 16th, 2017
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 11.35 KB | None | 0 0
  1. public class roundRobinAssignment {
  2.  
  3.  
  4.     public static void roundRobinLeads(){
  5.         //list to hold leads we identify as needing round robin'd
  6.         List<Lead> lstLeadToRRReassign = new List<Lead>();
  7.         //Maps for holding old and new lead values
  8.         Map<Id,Lead> mapOldLead1 = (Map<Id,Lead>)Trigger.oldMap;
  9.         Map<Id,Lead> mapNewLead1 = (Map<Id,Lead>)Trigger.NewMap;
  10.         //create a set of IDs and populate with the IDs of queues we want to look at
  11.         //for round robin assignment. We'll look for leads with these ownerIDs
  12.         Set<Id> setQueueId = new Set<ID>();
  13.         setQueueId.add('00G340000031ieu'); // SDR
  14.         setQueueId.add('00G340000031m5A'); // SDR - East
  15.         setQueueId.add('00G340000031m5F'); // SDR - West
  16.         setQueueId.add('00G340000031vJu'); // RR - Internationl
  17.         setQueueId.add('00G34000003206s'); // PTC East Region
  18.         setQueueId.add('00G34000003206x'); // PTC MDW
  19.         setQueueId.add('00G340000032072'); // PTC SO
  20.         setQueueId.add('00G340000032077'); // PTC West Region
  21.         setQueueId.add('00G34000003zRIf'); //Pro West Region
  22.         setQueueId.add('00G34000003zRIV'); //Pro Central Region
  23.         setQueueId.add('00G34000003zRIG'); //Pro East Region
  24.         setQueueId.add('00G34000003c6tf'); //ALL MM AE(Pro) Reps
  25.         setQueueId.add('00G34000003c6ta'); //All SDR Reps
  26.        
  27.         //Create an integer for each queue.  We will use this to update the lead count for each queue
  28.         //after leads are assigned.
  29.         Integer sdr = 0;
  30.         Integer sdrEast=0;
  31.         Integer sdrWest = 0;
  32.         Integer rrInternationl = 0;
  33.         Integer PTC_East_Region = 0;
  34.         Integer PTC_MDW = 0;
  35.         Integer PTC_SO = 0;
  36.         Integer PTC_West_Region = 0;
  37.         Integer Pro_West_Region = 0;
  38.         Integer Pro_Central_Region = 0;
  39.         Integer Pro_East_Region = 0;
  40.         Integer All_MM = 0;
  41.         Integer All_SDR = 0;
  42.        
  43.         if(trigger.isUpdate)  {
  44.             for(ID leadID : mapNewLead1.keySet())  {
  45.                 Lead newLead = mapNewLead1.get(leadID);
  46.                 Lead oldLead = mapOldLead1.get(leadID);
  47.                 System.debug(setQueueId.contains(newLead.OwnerId));
  48.                 if(newLead.OwnerId != null && setQueueId.contains(newLead.OwnerId))  {
  49.                     if(oldLead.ownerId == null || oldLead.ownerId != newLead.OwnerId)  {
  50.                         lstLeadToRRReassign.add(newLead);
  51.                     }
  52.                 }
  53.                 if((oldLead.status == 'Closed' || oldLead.status == 'Unqualified' || oldLead.status == 'Nurturing') && newLead.numberOfEmployees != oldLead.numberOfEmployees && newLead.numberOfEMployees >1000){
  54.                     lstLeadToRRReassign.add(newLead);
  55.                 }
  56.             }
  57.         }
  58.        
  59.         if(Trigger.isInsert)  {
  60.             for(Lead newLead : (List<Lead>)Trigger.New)  {
  61.                 //if lead is owned by one of our selected queues, assign it to a list of leads
  62.                 //that will be round robin'd to the members of said queue
  63.                 if(newLead.OwnerId != null && setQueueId.contains(newLead.OwnerId))  {
  64.                     lstLeadToRRReassign.add(newLead);
  65.                 }
  66.             }
  67.         }
  68.        
  69.        
  70.         //Create a map that holds a groupID and then a list of the members in that group as its values
  71.         Map<ID,List<ID>> mapQueueToUser = new Map<Id,List<ID>>();
  72.         for(GroupMember GM : [SELECT GroupId,UserOrGroupId FROM GroupMember where GroupId in :setQueueId order by userOrGroupId desc])  {
  73.             //create the key using group Ids whenever a new group ID is discovered
  74.             if(!mapQueueToUser.containsKey(GM.GroupId))  {
  75.                 mapQueueToUser.put(GM.GroupId,new List<Id>());
  76.             }
  77.             //get each member from the group by adding member IDs to the list that serves as the value for
  78.             //each particular key
  79.             mapQueueToUser.get(GM.GroupId).add(GM.UserOrGroupId);
  80.         }
  81.        
  82.         //create a map to hold the queue name and the latest lead count for that queue
  83.         Map<String,Integer> mapLstLatestNum = new Map<String,Integer>();
  84.         //iterate over all lead number records to populate map
  85.         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'];
  86.         for(Lead_Latest_Number__c lc : lstLeadNumbers)  {
  87.             mapLstLatestNum.put(lc.Queue_Name__c , Integer.valueOf(lc.Latest_Number__c));
  88.         }
  89.        
  90.         //create a map of group IDs and their API name
  91.         Map<Id,String> mapGroups = new Map<Id,String>();
  92.         for(Group gp : [SELECT Id, Name , DeveloperName FROM Group where id in :setQueueId])  {
  93.             mapGroups.put(gp.Id,gp.DeveloperName);
  94.         }
  95.        
  96.         //we're going to iterate over the leads we have flagged as leads to round robin
  97.         //
  98.         for(Lead l : lstLeadToRRReassign)  {
  99.             Integer latestNumber = mapLstLatestNum.get(mapGroups.get(l.OwnerId));
  100.             List<Id> lstIdinQueue = mapQueueToUser.get(l.OwnerId);
  101.             if(latestNumber != null && lstIdinQueue != null && lstIdinQueue.size() > 0)  {
  102.                 Integer leadIndex = Math.mod(latestNumber,lstIdinQueue.size());
  103.                 mapLstLatestNum.put(mapGroups.get(l.OwnerId),latestNumber + 1);
  104.                 l.ownerId = lstIdinQueue.get(leadIndex);
  105.                 system.debug('Reassigning lead: '+l.id+' / '+ l.name+' to user: '+l.owner.Name);
  106.             }
  107.         }
  108.        
  109.         for(Lead_Latest_Number__c lc : lstLeadNumbers)  {
  110.             if(lc.Queue_Name__c == 'SDR')  {
  111.                 sdr = Integer.valueOf(mapLstLatestNum.get(lc.Queue_Name__c)  - lc.Latest_Number__c);
  112.             }else if(lc.Queue_Name__c == 'SDR_West')  {
  113.                 sdrWest = Integer.valueOf(mapLstLatestNum.get(lc.Queue_Name__c)  - lc.Latest_Number__c);
  114.             }else if(lc.Queue_Name__c == 'SDR_East')  {
  115.                 sdrEast = Integer.valueOf(mapLstLatestNum.get(lc.Queue_Name__c)  - lc.Latest_Number__c);
  116.             }else if(lc.Queue_Name__c == 'RR_International')  {
  117.                 rrInternationl = Integer.valueOf(mapLstLatestNum.get(lc.Queue_Name__c)  - lc.Latest_Number__c);
  118.             }else if(lc.Queue_Name__c == 'PTC_East_Region')  {
  119.                 PTC_East_Region = Integer.valueOf(mapLstLatestNum.get(lc.Queue_Name__c)  - lc.Latest_Number__c);
  120.             }else if(lc.Queue_Name__c == 'PTC_MDW')  {
  121.                 PTC_MDW = Integer.valueOf(mapLstLatestNum.get(lc.Queue_Name__c)  - lc.Latest_Number__c);
  122.             }else if(lc.Queue_Name__c == 'PTC_SO')  {
  123.                 PTC_SO = Integer.valueOf(mapLstLatestNum.get(lc.Queue_Name__c)  - lc.Latest_Number__c);
  124.             }else if(lc.Queue_Name__c == 'PTC_West_Region')  {
  125.                 PTC_West_Region = Integer.valueOf(mapLstLatestNum.get(lc.Queue_Name__c)  - lc.Latest_Number__c);
  126.             }else if(lc.Queue_Name__c == 'Pro_West_Region_RR'){
  127.                 Pro_West_Region = Integer.valueOf(mapLstLatestNum.get(lc.Queue_Name__c) - lc.Latest_Number__c);
  128.             }else if(lc.Queue_Name__c == 'Pro_Central_Region_RR'){
  129.                 Pro_Central_Region = Integer.valueOf(mapLstLatestNum.get(lc.Queue_Name__c) - lc.Latest_Number__c);
  130.             }else if(lc.Queue_Name__c == 'Pro_East_Region_RR'){
  131.                 system.debug('Pro East Region Queue Section');
  132.                 system.debug('Before adding new value: '+Pro_East_Region);
  133.                 Pro_East_Region = Integer.valueOf(mapLstLatestNum.get(lc.Queue_Name__c)-lc.Latest_Number__c);
  134.                 system.debug('After: '+Pro_East_Region);
  135.             }else if(lc.Queue_name__c == 'All_MMAE'){
  136.                 All_MM = Integer.valueOf(mapLstLatestNum.get(lc.queue_name__c)-lc.latest_number__c);
  137.             }else if(lc.Queue_name__c == 'All_SDR'){
  138.                 All_SDR = Integer.valueOf(mapLstLatestNum.get(lc.queue_name__c)-lc.latest_number__c);
  139.             }
  140.             //lc.Latest_Number__c = mapLstLatestNum.get(lc.Queue_Name__c);
  141.         }
  142.         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);
  143.     }
  144.    
  145.     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,
  146.                                  Integer Pro_West_Region, Integer Pro_Central_Region, Integer Pro_East_Region, Integer All_SDR, Integer All_MM)  {
  147.         if(System.isBatch() || System.isFuture() || System.isQueueable() || System.isScheduled())  {
  148.             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);
  149.         }else {
  150.             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);
  151.         }
  152.     }
  153.    
  154.     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)  {
  155.         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);
  156.     }
  157.    
  158.     @Future
  159.     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)  {
  160.         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);
  161.     }
  162.    
  163.     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)  {
  164.         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];
  165.         for(Lead_Latest_Number__c ln : lstLeadNumbers)  {
  166.             system.debug('Current Queue: '+ln.queue_Name__c);
  167.             system.debug('ALL MMAE Region Number: '+ALL_MM);
  168.             if(ln.Queue_Name__c == 'SDR')  {
  169.                 ln.Latest_Number__c += sdr;
  170.             }else if(ln.Queue_Name__c == 'SDR_West')  {
  171.                 ln.Latest_Number__c += sdrWest;
  172.             }else if(ln.Queue_Name__c == 'SDR_East')  {
  173.                 ln.Latest_Number__c += sdrEast;
  174.             }else if(ln.Queue_Name__c == 'RR_International')  {
  175.                 ln.Latest_Number__c += rrInternationl;
  176.             }else if(ln.Queue_Name__c == 'PTC_East_Region')  {
  177.                 ln.Latest_Number__c += PTC_East_Region;
  178.             }else if(ln.Queue_Name__c == 'PTC_MDW')  {
  179.                 ln.Latest_Number__c += PTC_MDW;
  180.             }else if(ln.Queue_Name__c == 'PTC_SO')  {
  181.                 ln.Latest_Number__c += PTC_SO;
  182.             }else if(ln.Queue_Name__c == 'PTC_West_Region')  {
  183.                 ln.Latest_Number__c += PTC_West_Region;
  184.             }else if(ln.Queue_name__c == 'Pro_West_Region_RR'){
  185.                 ln.latest_Number__c += Pro_West_Region;
  186.             }else if(ln.Queue_name__c == 'Pro_East_Region_RR'){
  187.                 ln.latest_Number__c += Pro_East_Region;
  188.             }else if(ln.Queue_name__c == 'Pro_Central_Region_RR'){
  189.                 ln.latest_Number__c += Pro_Central_Region;
  190.             }else if(ln.Queue_Name__c == 'All_SDR'){
  191.                 ln.Latest_Number__c += All_SDR;
  192.             }else if(ln.Queue_name__c == 'All_MMAE'){
  193.                 ln.Latest_Number__c += All_MM;
  194.             }
  195.         }
  196.         update lstLeadNumbers;
  197.     }
  198. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement