Tuesday, 5 February 2019

Latest befor batch

/*
    Class Name:InvocaCallLogMatchWithLeadBatch
    Developer Name:Krishna Nagendra Rao.Yerru         
    Created Date:   04-Feb-2019
    Test Class Name: InvocaCallLogMatchWithLeadBatch_Test
    Project Name: SP-3530:Create Batch Process to match Invoca Call Logs with Leads
------------------------------------------------------------------------------------------------------------------
    CH#             Description                             Developer                       Modified Date
------------------------------------------------------------------------------------------------------------------
*/
global class InvocaCallLogMatchWithLeadBatch implements Database.Batchable<sobject>{ 
    Public List<String> StatusVal = new List<String> {'New'};
    Public String query='SELECT Id,Status__c,INVOCA_FOR_SF__calling_phone_number__c,INVOCA_FOR_SF__advertiser_campaign_name__c,INVOCA_FOR_SF__Lead__c, INVOCA_FOR_SF__Lead__r.Phone FROM INVOCA_FOR_SF__Invoca_Call_Log__c where INVOCA_FOR_SF__calling_phone_number__c!=null and Status__c in:StatusVal';

    global Database.Querylocator start(Database.BatchableContext BC){
        return Database.getQueryLocator(query);
    } 

    global void execute(Database.BatchableContext BC,  List<INVOCA_FOR_SF__Invoca_Call_Log__c> invocaLeadMatch){
        List<INVOCA_FOR_SF__Invoca_Call_Log__c> leadinCalllogs = new List<INVOCA_FOR_SF__Invoca_Call_Log__c>();
        Map<INVOCA_FOR_SF__Invoca_Call_Log__c,String> leadCalllogsMap = new Map<INVOCA_FOR_SF__Invoca_Call_Log__c,String>();
        List<ID> leadCalllogs = new List<ID>();
        list<ID> LeadupdStatusIDS= new list<ID>();
        boolean LeadFound=false;
        List<INVOCA_FOR_SF__Invoca_Call_Log__c> UpdCalllogLeads=New List<INVOCA_FOR_SF__Invoca_Call_Log__c>();
        list<ID> updcalllogids= new list<ID>();   
            if(invocaLeadMatch!= null){
                for(INVOCA_FOR_SF__Invoca_Call_Log__c invoca: invocaLeadMatch){
                    leadinCalllogs.add(invoca);
                    leadCalllogsMap.put(invoca,invoca.INVOCA_FOR_SF__calling_phone_number__c); 
                }             
                if(leadCalllogsMap.size()>0){
                    List<Lead> LeadMatches=[Select id,Phone,(SELECT Id,CampaignID,Campaign.name,LeadId FROM CampaignMembers) from Lead where Phone in:leadCalllogsMap.Values()];
                    System.debug('LeadMatches is'+LeadMatches);
                     for(INVOCA_FOR_SF__Invoca_Call_Log__c calllog:leadCalllogsMap.Keyset()){
boolean flagval=false;
                       for(Lead le:LeadMatches){
                            if(le.CampaignMembers.size()>0){
                                CampaignMember Campname=le.CampaignMembers[0];
                                String CampnameIs=Campname.Campaign.name;
                                System.debug('Lead is'+le);
                                System.debug('Call log is'+calllog);
                                System.debug('CampnameIs on Lead'+CampnameIs +'CampnameIs on calllog'+calllog.INVOCA_FOR_SF__advertiser_campaign_name__c);
                                System.debug('Phone on Lead'+le.Phone +'CallerID on calllog'+calllog.INVOCA_FOR_SF__calling_phone_number__c);
                                if(calllog.INVOCA_FOR_SF__advertiser_campaign_name__c==CampnameIs && calllog.INVOCA_FOR_SF__calling_phone_number__c==le.Phone){
                                    System.debug('matched Calllog is'+calllog);
                                        if(!LeadupdStatusIDS.contains(le.Id) ){
                                            if(calllog.INVOCA_FOR_SF__Lead__c==null){
                                                calllog.INVOCA_FOR_SF__Lead__c=le.id;
                                                calllog.Status__c='Matched';
                                                LeadupdStatusIDS.add(le.id);
                                                LeadFound= true;
flagval=true;
//UpdCalllogLeads.add(calllog);
//updcalllogids.add(calllog.id);
                                            }
                                            else if(flagval==false && calllog.INVOCA_FOR_SF__Lead__c!=null){
                                                calllog.Status__c='Matched';
                                                LeadupdStatusIDS.add(le.id);
                                                LeadFound= true;
//UpdCalllogLeads.add(calllog);
//updcalllogids.add(calllog.id);
                                            }
                                        }
                                        else if(LeadupdStatusIDS.contains(le.Id)){
                                            calllog.Status__c='Multiple Record Matches';
//UpdCalllogLeads.add(calllog);
//updcalllogids.add(calllog.id);
                                            //LeadupdStatusIDS.add(le.id); 
                                        }
                                }
                                else if(!LeadupdStatusIDS.contains(le.Id) ){
                                    System.debug('calllog with No match Lead are'+calllog);
                                    calllog.Status__c='No Match Found';
                                    System.debug('calllog with No match Lead are updated'+calllog);
                                    LeadupdStatusIDS.add(le.id);
                                    LeadFound= true;
//UpdCalllogLeads.add(calllog);
//updcalllogids.add(calllog.id);
                                }
                               
                          }
                        }
UpdCalllogLeads.add(calllog);
updcalllogids.add(calllog.id);

                    }         
                }
                System.debug('leadinCalllogs are'+leadinCalllogs);
                System.debug('UpdCalllogLeads are'+UpdCalllogLeads);
                System.debug('LeadupdStatusIDS are'+LeadupdStatusIDS);
                System.debug('updcalllogids are'+updcalllogids);
                for(INVOCA_FOR_SF__Invoca_Call_Log__c noleadlogs:leadinCalllogs){
                    System.debug('noleadlogs are'+noleadlogs);
                    System.debug('noleadlogsid are'+noleadlogs.id);
                    System.debug('updcalllogids are'+updcalllogids);
                    System.debug('Conatin is'+updcalllogids.contains(noleadlogs.id));
                    if(!updcalllogids.contains(noleadlogs.id)){
                        noleadlogs.Status__c='No Match Found';                       
                    }
UpdCalllogLeads.add(noleadlogs);
                    updcalllogids.add(noleadlogs.id);
                }
            }
                             
            try{
                if(UpdCalllogLeads!=null && UpdCalllogLeads.size()>0){
                        Database.SaveResult [] UpdCalllogLeadsreslts = Database.update(UpdCalllogLeads, false);
                    }
                }       
            catch(exception e){
                System.debug('There is problem in updating matching Call log record associated lead records.'+e);
            }               
    }

   
    global void finish(Database.BatchableContext BC){

    }


}

No comments:

Post a Comment