Advertisement
Guest User

lead criteria change

a guest
Oct 16th, 2017
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 6.84 KB | None | 0 0
  1. public class leadDomainChange {
  2.  
  3.     public void relateNewAccount(){
  4.         //create sets to hold data we need for querying matching accounts
  5.         Set<String> domains = new Set<String>();
  6.         Set<String> ldNames = new Set<String>();
  7.         Set<String> ldWebs = new Set<String>();
  8.         List<Lead> updatelds = new List<Lead>();
  9.         //maps for holding accounts we can reference with different keys
  10.         Map<String, Account> accDomMap = new Map<String, Account>();
  11.         Map<String, Contact> conDomMap = new Map<String,Contact>();
  12.         Map<String, Account> accWebMap = new Map<String, Account>();
  13.         Map<String, Contact> conWebMap = new Map<String, Contact>();
  14.         Map<String,Account> accNameMap = new Map<String, Account>();
  15.         //set with user role names for sales users
  16.         Set<String> salesRoles = new Set<String>{'Large Accounts', 'Strategic Accounts', 'SDR', 'Services', 'CSM'};
  17.         //set to hold all personal domains to limit account query results
  18.         Set<String> personalDomains = new Set<String>();
  19.         //loop through all personal domains to populate set
  20.         for(Personal_domain__c pd :[SELECT domain_name__c FROM Personal_Domain__c]){
  21.             personalDomains.add(pd.domain_Name__c);
  22.         }
  23.         //loop through leads to populate data for querying relevant accounts
  24.         for(Lead ld : (List<Lead>)trigger.new){
  25.             Map<Id, Lead> oldMap = (Map<Id,Lead>)trigger.oldMap;
  26.             domains.add(ld.domainName__c);
  27.             ldNames.add(ld.company);
  28.             ldWebs.add(ld.website);
  29.             if(oldMap.get(ld.id).domainName__c != ld.domainName__c){
  30.                 updateLds.add(ld);
  31.             }
  32.         }
  33.         //Gather all accounts that have domain names we pulled from the leads.  This is how we will match records
  34.         //Will iterate over a list and store values in a map
  35.         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
  36.                            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'
  37.                            ORDER BY LastActivityDate DESC LIMIT 50000]){
  38.                                system.debug('Account Name: '+acc.name+'.  Account Domain: '+acc.domainName__c+'.  Account website: '+acc.website+'.  Master Record? '+acc.master_record__c);
  39.                                //if domainName isn't null, populate domain key map
  40.                                if(acc.domainName__c != null){
  41.                                    accDomMap.put(acc.domainName__c, acc);
  42.                                }
  43.                                //if website isn't null populate website key map
  44.                                if(acc.website != null){
  45.                                    system.debug('Website: '+acc.website);
  46.                                    accWebMap.put(acc.website, acc);
  47.                                }
  48.                                //Name is a system required field so we always populate the name key map
  49.                                accNameMap.put(acc.name, acc);
  50.                            }
  51.         for(Lead ld : updateLds){
  52.             system.debug('Lead Company: '+ld.company+'.  Lead Domain: '+ld.domainName__c+'.  Lead website: '+ld.website);
  53.            
  54.             //preset each check box to true and then flag false if match is found
  55.             ld.no_matches_found_sales_queue__c = true;
  56.             //Make sure we have accounts to look at
  57.             //if not break the loop
  58.             if(accDomMap.isEmpty() && accNameMap.isEmpty() && accWebMap.isEmpty()){
  59.                break;
  60.             }
  61.             //first things first we check if there is an exact domain match and exact company match, and see if we have a master record...
  62.             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){
  63.                 //relate account when criteria are met
  64.                 ld.related_account__c = accDomMap.get(ld.domainName__c).id;
  65.             }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){
  66.                 ld.related_account__c = accNameMap.get(ld.company).id;
  67.             }else if(accDomMap.containsKey(ld.domainName__c) && accDomMap.get(ld.domainName__c).master_record__c == true){
  68.                 ld.related_account__c = accDomMap.get(ld.domainName__c).id;
  69.             }else If(accNameMap.containsKey(ld.company) && accNameMap.get(ld.company).master_record__c == true){
  70.                 ld.related_account__c = accNameMap.get(ld.company).id;
  71.             }else if(accWebMap.containsKey(ld.website) && accWebMap.get(ld.website).master_record__c == true){
  72.                 ld.related_account__c = accWebMap.get(ld.website).id;
  73.             }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){
  74.                 ld.related_account__c = accWebMap.get(ld.website).id;
  75.             }else if(accDomMap.containsKey(ld.domainName__c) && accNameMap.containsKey(ld.company) && accDomMap.get(ld.domainName__c).id == accNameMap.get(ld.company).id){
  76.                 ld.related_account__c = accNameMap.get(ld.company).id;
  77.             }else if(accWebMap.containsKey(ld.website) && accNameMap.containsKey(ld.company) && accWebMap.get(ld.website).id == accNameMap.get(ld.company).id){
  78.                 ld.related_account__c = accNameMap.get(ld.company).id;
  79.             }else if(accDomMap.containsKey(ld.domainName__c) && accDomMap.get(ld.domainName__c).billingState != null && accDomMap.get(ld.domainName__c).numberOfEmployees != null){
  80.                 ld.related_account__c = accDomMap.get(ld.domainName__c).id;
  81.             }else if(accNameMap.containsKey(ld.company) && accNameMap.get(ld.company).billingState != null && accNameMap.get(ld.company).numberOfEmployees != null){
  82.                 ld.related_account__c = accNameMap.get(ld.company).id;
  83.             }else if(accWebMap.containsKey(ld.website) && accNameMap.containsKey(ld.company) && accWebMap.get(ld.website).id == accNameMap.get(ld.company).id){
  84.                 ld.related_account__c = accNameMap.get(ld.company).id;
  85.             }else if(accDomMap.containsKey(ld.domainName__c)){
  86.                 ld.related_account__c = accDomMap.get(ld.domainName__c).id;
  87.             }
  88.         }
  89.     }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement