• Nicholas Mcbride
  • NEWBIE
  • 0 Points
  • Member since 2014

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 1
    Questions
  • 1
    Replies
Ok, newbie here, and I am Stuck. I am stepping into an already existing salesforce instance that has a trigger for lead conversion (I am sharing the trigger below). The lead will not convert for a standard user (or another admin for that matter) unless the "Lead Owner" is an admin, however, as soon as the owner is made an admin, it will convert, so I know it is not an issue with the profile being allowed to convert leads, it has something to do with record ownership, I just don't know what :)  Thank you in advance for your help!!!

trigger ConvertLead on Lead (after update) {
    
    Database.LeadConvert[] leadList = new Database.LeadConvert[]{} ;
    String convertStatus = [SELECT MasterLabel FROM LeadStatus WHERE isConverted = true limit 1].MasterLabel;
    Id[] acctIds = new Id[]{};
    Program_Enrollment__c[] enrollList = new Program_Enrollment__c[]{};
    Semester__c[] semesterList = [SELECT Id, Name FROM Semester__c];
    Map<String, Id> semesterMap = new Map<String, Id>();
    Map<String, Id> studentMap = new Map<String, Id>();
    
    if (semesterList.size() > 0)
    {
        for (Semester__c semester : semesterList)
        {
            semesterMap.put(semester.Name, semester.Id);
        }
    }
    
    if (trigger.new.size() == 1)
    {
        String UFID = trigger.new[0].UFID__c;
        Account[] student = [SELECT Id FROM Account WHERE UFID__c = :UFID limit 1];
        
        if (student.size() == 1)
        {
            studentMap.put(UFID, student[0].Id);
        }
    }
    else
    {
        Account[] students = [SELECT Id, UFID__c FROM Account];
        
        if (students.size() > 0)
        {
            for (Account student : students)
            {
                studentMap.put(student.UFID__c, student.Id);
            }
        }
    }
    
    for (Lead applicant : trigger.new)
    {
        String UFID = applicant.UFID__c;
        
        if (applicant.Status == convertStatus && applicant.isConverted == false && string.isBlank(applicant.Program__c) == false)
        {           
            if (studentMap.containsKey(UFID))
            {
                applicant.addError('A student with this UFID already exists. Search for: ' + UFID);
            }
            else
            {       
                Database.LeadConvert convLead = new Database.LeadConvert();
                convLead.setLeadId(applicant.Id);
                convLead.setConvertedStatus(convertStatus);
                convLead.setDoNotCreateOpportunity(true);
                leadList.add(convLead);
            }
        }
    }
    
    if (leadList.size() > 0)
    {
        Database.LeadConvertResult[] results = Database.convertLead(leadList, false);
        
        for (Database.LeadConvertResult result : results)
        {
            if (result.isSuccess())
            {
                acctIds.add(result.getAccountId());
            }
        }
    }
    
    if (acctIds.size() > 0)
    {   
        Account[] acctList = [SELECT Id, Application_Term__c, Program__c FROM Account WHERE Id IN :acctIds];
        
        for (Account acct : acctList)
        {
            Program_Enrollment__c newEnroll = new Program_Enrollment__c(Program__c = acct.Program__c, Student__c = acct.Id);
            
            if ( ! string.isBlank(acct.Application_Term__c))
            {
                Id semester;
                
                if (semesterMap.containsKey(acct.Application_Term__c))
                {
                    semester = semesterMap.get(acct.Application_Term__c);
                }
                else
                {
                    Semester__c newSemester = new Semester__c(Name = acct.Application_Term__c);
                    
                    insert newSemester;
                    
                    semester = newSemester.Id;
                    semesterMap.put(acct.Application_Term__c, semester);
                }
                
                newEnroll.Semester_Start__c = semester;                 
            }
            
            enrollList.add(newEnroll);
        }
        
        Database.SaveResult[] results = Database.insert(enrollList, false);
    }
}