Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class leadDomainChange {
- public void relateNewAccount(){
- //create sets to hold data we need for querying matching accounts
- Set<String> domains = new Set<String>();
- Set<String> ldNames = new Set<String>();
- Set<String> ldWebs = new Set<String>();
- List<Lead> updatelds = new List<Lead>();
- //maps for holding accounts we can reference with different keys
- Map<String, Account> accDomMap = new Map<String, Account>();
- Map<String, Contact> conDomMap = new Map<String,Contact>();
- Map<String, Account> accWebMap = new Map<String, Account>();
- Map<String, Contact> conWebMap = new Map<String, Contact>();
- Map<String,Account> accNameMap = new Map<String, Account>();
- //set with user role names for sales users
- Set<String> salesRoles = new Set<String>{'Large Accounts', 'Strategic Accounts', 'SDR', 'Services', 'CSM'};
- //set to hold all personal domains to limit account query results
- Set<String> personalDomains = new Set<String>();
- //loop through all personal domains to populate set
- for(Personal_domain__c pd :[SELECT domain_name__c FROM Personal_Domain__c]){
- personalDomains.add(pd.domain_Name__c);
- }
- //loop through leads to populate data for querying relevant accounts
- for(Lead ld : (List<Lead>)trigger.new){
- Map<Id, Lead> oldMap = (Map<Id,Lead>)trigger.oldMap;
- domains.add(ld.domainName__c);
- ldNames.add(ld.company);
- ldWebs.add(ld.website);
- if(oldMap.get(ld.id).domainName__c != ld.domainName__c){
- updateLds.add(ld);
- }
- }
- //Gather all accounts that have domain names we pulled from the leads. This is how we will match records
- //Will iterate over a list and store values in a map
- for(Account acc : [SELECT id, name, owner.name, numberOfEmployees, billingState, strategic_account__c, target_account__c, domainName__c, website, master_record__c, owner.UserRole.Name
- FROM Account WHERE ((domainName__c IN :domains AND domainName__c !=null) OR (website IN :ldWebs AND website != null) OR name IN :ldNames) AND domainName__c NOT IN :personalDomains AND domainName__c != 'gmail.com' AND domainName__c != 'yahoo.com'
- ORDER BY LastActivityDate DESC LIMIT 50000]){
- system.debug('Account Name: '+acc.name+'. Account Domain: '+acc.domainName__c+'. Account website: '+acc.website+'. Master Record? '+acc.master_record__c);
- //if domainName isn't null, populate domain key map
- if(acc.domainName__c != null){
- accDomMap.put(acc.domainName__c, acc);
- }
- //if website isn't null populate website key map
- if(acc.website != null){
- system.debug('Website: '+acc.website);
- accWebMap.put(acc.website, acc);
- }
- //Name is a system required field so we always populate the name key map
- accNameMap.put(acc.name, acc);
- }
- for(Lead ld : updateLds){
- system.debug('Lead Company: '+ld.company+'. Lead Domain: '+ld.domainName__c+'. Lead website: '+ld.website);
- //preset each check box to true and then flag false if match is found
- ld.no_matches_found_sales_queue__c = true;
- //Make sure we have accounts to look at
- //if not break the loop
- if(accDomMap.isEmpty() && accNameMap.isEmpty() && accWebMap.isEmpty()){
- break;
- }
- //first things first we check if there is an exact domain match and exact company match, and see if we have a master record...
- if(accDomMap.containsKey(ld.domainName__c) && accNameMap.containsKey(ld.company) && accDomMap.get(ld.domainName__c).master_record__c == true && accDomMap.get(ld.domainName__c).id == accNameMap.get(ld.company).id){
- //relate account when criteria are met
- ld.related_account__c = accDomMap.get(ld.domainName__c).id;
- }else if(accWebMap.containsKey(ld.website) && accNameMap.containsKey(ld.company) && accWebMap.get(ld.website).id == accNameMap.get(ld.company).id && accNameMap.get(ld.company).master_record__c == true){
- ld.related_account__c = accNameMap.get(ld.company).id;
- }else if(accDomMap.containsKey(ld.domainName__c) && accDomMap.get(ld.domainName__c).master_record__c == true){
- ld.related_account__c = accDomMap.get(ld.domainName__c).id;
- }else If(accNameMap.containsKey(ld.company) && accNameMap.get(ld.company).master_record__c == true){
- ld.related_account__c = accNameMap.get(ld.company).id;
- }else if(accWebMap.containsKey(ld.website) && accWebMap.get(ld.website).master_record__c == true){
- ld.related_account__c = accWebMap.get(ld.website).id;
- }else if(accDomMap.containsKey(ld.domainName__c) && accWebMap.containsKey(ld.website) && accNameMap.containsKey(ld.company) && accDomMap.get(ld.domainName__c).id == accNameMap.get(ld.company).id && accDomMap.get(ld.domainName__c).id == accWebMap.get(ld.website).id){
- ld.related_account__c = accWebMap.get(ld.website).id;
- }else if(accDomMap.containsKey(ld.domainName__c) && accNameMap.containsKey(ld.company) && accDomMap.get(ld.domainName__c).id == accNameMap.get(ld.company).id){
- ld.related_account__c = accNameMap.get(ld.company).id;
- }else if(accWebMap.containsKey(ld.website) && accNameMap.containsKey(ld.company) && accWebMap.get(ld.website).id == accNameMap.get(ld.company).id){
- ld.related_account__c = accNameMap.get(ld.company).id;
- }else if(accDomMap.containsKey(ld.domainName__c) && accDomMap.get(ld.domainName__c).billingState != null && accDomMap.get(ld.domainName__c).numberOfEmployees != null){
- ld.related_account__c = accDomMap.get(ld.domainName__c).id;
- }else if(accNameMap.containsKey(ld.company) && accNameMap.get(ld.company).billingState != null && accNameMap.get(ld.company).numberOfEmployees != null){
- ld.related_account__c = accNameMap.get(ld.company).id;
- }else if(accWebMap.containsKey(ld.website) && accNameMap.containsKey(ld.company) && accWebMap.get(ld.website).id == accNameMap.get(ld.company).id){
- ld.related_account__c = accNameMap.get(ld.company).id;
- }else if(accDomMap.containsKey(ld.domainName__c)){
- ld.related_account__c = accDomMap.get(ld.domainName__c).id;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement