function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
ManjusrinuManjusrinu 

Updating Lead Owner In Round Robin Fashion

Hi,
I need to update lead owner based on course Interest and Batch(Number). I have wrote a trigger and working in lead insertion in ui .But when i insert leads from data loader ,Owners are not getting update as off my criteria. Can anyone help me where i am going wrong.

trigger LeadTrigger on Lead (before insert, before update) {
     String triggerEvent = '';
    if (Trigger.isBefore && Trigger.isInsert)
        triggerEvent = 'Before-Insert';
     LeadTriggerHelper obj = NEW LeadTriggerHelper ();  
    obj.AssigneeUser(triggerEvent,trigger.new);
}

//https://medium.com/@Naga801/salesforce-trigger-for-lead-round-robin-assignment-bcda7cc4193b :Reference
public class LeadTriggerHelper {
    public  void AssigneeUser(string event,List<Lead> newLeads) {
        LeadRoundRobinAssignment__c lrr = LeadRoundRobinAssignment__c.getOrgDefaults();
        Integer userIndex;
        Id queueId;
        Integer groupMemberSize;
        Boolean LeadQueueVal = false ;
        Boolean IIMLPMQueueVal = false;
        if(event == 'Before-Insert')
        {
            List<Group> queues = [
                SELECT Id,
                (Select Id, UserOrGroupId FROM GroupMembers Order By ID ASC)
                FROM Group
                WHERE Type = 'Queue' 
                AND DeveloperName = 'Lead_Queue' 
            ];
            // Lead-Queue : Dinesh,Rajesh,Harsha
            List<Group> IIML_PMQueues = [
                SELECT Id,
                (Select Id, UserOrGroupId FROM GroupMembers Order By ID ASC)
                FROM Group
                WHERE Type = 'Queue' 
                AND DeveloperName = 'IIML_PM'
            ];
            system.debug('HIIIIIIIIIIIIIIIIIIII'+queues.get(0).Id);
            // IIML_PM : Rajesh,jashwanth
            system.debug('P1111'+queues);
            system.debug('P222222'+IIML_PMQueues);
            if (queues.size() > 0 && queues.get(0).GroupMembers.size() > 0) {
                for (Lead eachLead : newLeads) {
                    if(eachLead.Course_Interest__c == 'IIML-SF' && (eachLead.Bucket__c == '1' || eachLead.Bucket__c == '2') ){
                        queueId = queues.get(0).Id;
                        groupMemberSize = queues.get(0).GroupMembers.size();
                        userIndex = (lrr.get('User_Index__c') == null || Integer.valueOf(lrr.get('User_Index__c')) < -1) 
                            ? -1 : Integer.valueOf(lrr.get('User_Index__c'));
                        if (eachLead.OwnerId != queueId) {
                            Integer leadUserIndex =  (userIndex + 1) >= groupMemberSize ? 0 : userIndex + 1;
                            eachLead.OwnerId = queues.get(0).GroupMembers.get(leadUserIndex).UserOrGroupId;
                            userIndex = leadUserIndex;
                            LeadQueueVal = true;
                        }
                    }
                    if(eachLead.Course_Interest__c == 'IIML-FA' && (eachLead.Bucket__c == '1'||eachLead.Bucket__c == '2') ) {
                        eachLead.OwnerId = '0052w0000018kFz'; // Rondey User
                    }
                }
                // Update the custom settings user index with the last lead assigned user
                if(LeadQueueVal == true){
                    lrr.User_Index__c = userIndex;
                    update lrr;
                }
            }
            
            if (IIML_PMQueues.size() > 0 && IIML_PMQueues.get(0).GroupMembers.size() > 0) {
                for (Lead eachLead1 : newLeads) {
                    if(eachLead1.Course_Interest__c =='IIML-PM' && (eachLead1.Bucket__c =='1' || eachLead1.Bucket__c =='2')){
                       system.debug('Executing');
                        queueId = IIML_PMQueues.get(0).Id;
                        system.debug('TTT'+queueId);
                        groupMemberSize = IIML_PMQueues.get(0).GroupMembers.size();
                        userIndex = (lrr.get('User_Index__c') == null || Integer.valueOf(lrr.get('User_Index__c')) < -1) 
                            ? -1 : Integer.valueOf(lrr.get('User_Index__c'));
                        if (eachLead1.OwnerId != queueId) {
                            Integer leadUserIndex =  (userIndex + 1) >= groupMemberSize ? 0 : userIndex + 1;
                            eachLead1.OwnerId = IIML_PMQueues.get(0).GroupMembers.get(leadUserIndex).UserOrGroupId;
                            userIndex = leadUserIndex;
                            IIMLPMQueueVal = true;
                        }
                    } 
                }
                // Update the custom settings user index with the last lead assigned user
                if(IIMLPMQueueVal == true) {
                    lrr.User_Index__c = userIndex;
                    update lrr;
                }
            }        
        }
    }
}