Apex Code: Auto Convert Web-to-Lead Check Duplicates Create Opportunity

Use Case: Web-to-lead form needs to be auto converted to Account, Contact and Opportunity. Create a trigger for the Web-to-lead record type. Check if that contact email already exist. If it does just create an opportunity.

The trigger will look like this:

trigger autoConvertLead on Lead (before insert,after insert, after update) {
List<Lead> marketoLeadsToBeConverted = new List<Lead>();
 Set<String> emailSet = new Set<String>();
 boolean isChanged = false;
 Lead oldLeadInfo = null;
 Set<Id> rLDBLeadIdSet = new Set<Id>();
 Map<String, Lead> mobileFALMap = new Map<String, Lead>();

 for (Lead leadInfo : trigger.new)
 {
 isChanged = false;
 if (trigger.isAfter) 
 {
 if (!leadInfo.IsConverted) 
 {
 if (leadInfo.email != null ) 
 {
 if (Trigger.isInsert) 
 isChanged = true;

 else if (Trigger.isUpdate) 
 {
 oldLeadInfo = trigger.oldMap.get(leadInfo.Id);
 isChanged = Utils.hasChanges('Email', oldLeadInfo, leadinfo);
 }
 if (isChanged) 
 {
 if (leadInfo.RLDB__c) 
 rLDBLeadIdSet.add(leadInfo.Id);
 if (leadInfo.RecordTypeId == [Select Id from RecordType where Name='Mobile FAL Leads'].Id)
 mobileFALMap.put(leadInfo.email, leadInfo); 
 else 
 {
 marketoLeadsToBeConverted.add(leadInfo);
 emailSet.add(leadInfo.email);
 }
 }
 }
 }
 } else {
 leadInfo.Created_Date__c = System.today();
 }
 }

 if (marketoLeadsToBeConverted != null && marketoLeadsToBeConverted.size() > 0) {
 Utils.convertMarketoLeads(marketoLeadsToBeConverted,emailSet);
 }
 if (rLDBLeadIdSet != null && rLDBLeadIdSet.size() > 0) {
 Utils.mergeAndConvertLeads(rLDBLeadIdSet);
 }
 if (!mobileFALMap.isEmpty())
 Utils.convertMobileFALLeads(mobileFALMap);
}

The Apex class to check for duplicate emails, convert lead and create opportunities.

public static void convertMobileFALLeads(Map<String, Lead> mobileFALLeads)
 {
 Set<String> checkduplicateEmails = new Set<String>();
 checkduplicateEmails.addAll(mobileFALLeads.keySet());
 Map<String,Contact> contactMap = getContactsMatchingEmailsGiven(checkduplicateEmails);
 List<Opportunity> createPlanOpportunity = new List<Opportunity>();

 for (String duplicateEmailContact : mobileFALLeads.keySet())
 {
 if (contactMap.containsKey(duplicateEmailContact))
 {
 createPlanOpportunity.add(ACRoundRobinV5.CreatePlanOpportunityForIncorpOpp(contactMap.get(duplicateEmailContact).AccountId, contactMap.get(duplicateEmailContact).Account.OwnerId, 'Pro Legal Plan - Annual (A)', 'Mobile FAL')); 
 mobileFALLeads.remove(duplicateEmailContact);
 }
 }

 Database.LeadConvert lc = new Database.LeadConvert();
 List<Database.LeadConvert> listOflc = new List<Database.LeadConvert>();

 String convertedStatus = getLeadConvertionStatus();

 for (Lead leadsToBeConverted : mobileFALLeads.values())
 {
 lc.setLeadId(leadsToBeConverted.id);
 lc.setOwnerId(ACRoundRobinV5.getSalesRepsForRouting(ACRoundRobinV5.getListOfActiveLawyerConnectionReps()).Id);
 lc.setDoNotCreateOpportunity(true);
 lc.setConvertedStatus(convertedStatus);
 listOflc.add(lc);
 }

 for (Database.LeadConvert convertlead : listOflc)
 {
 Database.LeadConvertResult mobileFalLCR = Database.convertLead(convertlead);
 createPlanOpportunity.add(ACRoundRobinV5.CreatePlanOpportunityForIncorpOpp(mobileFalLCR.getAccountId(), convertlead.getOwnerId(), 'Pro Legal Plan - Annual (A)', 'Mobile FAL'));
 }
 insert createPlanOpportunity;
 }

Leave a Comment

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s