function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
kiran2000kiran2000 

Too many query rows: 50001

 global void execute(Database.BatchableContext BC, List<sObject> scope){

        List<Account_Statistic__c> accStatisticList = (List<Account_Statistic__c>)scope;

       Account_Statistic__c accStaticRec = accStatisticList[0];

       System.debug('::::::accStaticRec ::::::::'+accStaticRec );

        

        list<Id> terrIdList = new list<Id>();

        Map<Id,Id> groupIdAndTerrIdMap = new Map<Id,Id>();

        

        Map<Id,Set<Id>> terrIdAndSetOfNonTargetPractionerAccIdMap  = new Map<Id,Set<Id>>();

        Map<Id,Set<Id>> terrIdAndSetOfTargetPractionerAccIdMap  = new Map<Id,Set<Id>>();

        Map<Id,Set<Id>> terrIdAndSetOfPharmacyAccIdMap = new Map<Id,Set<Id>>();

         

        

        

        list<Territory> tlist = new list<Territory>();

        tlist = [Select t.ParentTerritoryId, t.Id From Territory t where t.ParentTerritoryId =:accStaticRec.Territory_Id__c];

        

        map<Id,list<Territory>> tmap = new map<Id,list<Territory>>{};

        

     

         Set<Id> finalaccIdSet = new Set<Id>();

         Set<Id> totalaccIdSet = new Set<id>();        

      

         for(Territory terr:tlist){

            

            for(Group groupRec : [SELECT Id,RelatedId FROM Group WHERE RelatedId =:terr.Id] ){

                groupIdAndTerrIdMap.put(groupRec.Id,groupRec.RelatedId );         

            }

       

         if(groupIdAndTerrIdMap != NULL && groupIdAndTerrIdMap.size() > 0){

        

            for(AccountShare accShare : [SELECT Id,AccountId,Account.RecordTypeId,Account.RecordType.Name,Account.Target__c, UserOrGroupId FROM AccountShare WHERE (RowCause = 'Territory' OR RowCause = 'TerritoryManual') AND UserOrGroupId IN :groupIdAndTerrIdMap.keySet() AND (Account.RecordType.Name = 'Practitioner' OR Account.RecordType.Name = 'Pharmacy')] ){

                 

                 if(accShare.Account.RecordType.Name == 'Practitioner'){

                     if(accShare.Account.Target__c){

                        Id RelatedId = groupIdAndTerrIdMap.get(accShare.UserOrGroupId );

                        

                        if(!terrIdAndSetOfTargetPractionerAccIdMap.containsKey(RelatedId) )

                        terrIdAndSetOfTargetPractionerAccIdMap.put(RelatedId,new Set<Id>());

                        

                        terrIdAndSetOfTargetPractionerAccIdMap.get(RelatedId).add(accShare.AccountId);

                    }else{

                        Id RelatedId = groupIdAndTerrIdMap.get(accShare.UserOrGroupId );

                        

                        if(!terrIdAndSetOfNonTargetPractionerAccIdMap.containsKey(RelatedId) )

                        terrIdAndSetOfNonTargetPractionerAccIdMap.put(RelatedId,new Set<Id>());

                        

                        terrIdAndSetOfNonTargetPractionerAccIdMap.get(RelatedId).add(accShare.AccountId);    

                    }

                }else if(accShare.Account.RecordType.Name == 'Pharmacy'){

                    Id RelatedId = groupIdAndTerrIdMap.get(accShare.UserOrGroupId );

                    

                    if(!terrIdAndSetOfPharmacyAccIdMap.containsKey(RelatedId) )

                    terrIdAndSetOfPharmacyAccIdMap.put(RelatedId,new Set<Id>());

                    

                    terrIdAndSetOfPharmacyAccIdMap.get(RelatedId).add(accShare.AccountId);    

                }

                       

            }

        } 

       

        Set<Id> accIdSet = new Set<Id>();

        Set<Id> accSet = new Set<Id>();

        if(accStaticRec.Account_Type__c == 'Target'){

            accIdSet = terrIdAndSetOfTargetPractionerAccIdMap.get(accStaticRec.Territory_Id__c);

        }else if(accStaticRec.Account_Type__c == 'Non-Target'){

            accIdSet = terrIdAndSetOfNonTargetPractionerAccIdMap.get(accStaticRec.Territory_Id__c);

        }else if(accStaticRec.Account_Type__c == 'Pharmacy'){

            accIdSet = terrIdAndSetOfPharmacyAccIdMap.get(accStaticRec.Territory_Id__c);

        }

        

        if(accIdSet != NULL && accIdSet.size() > 0){

            

            AggregateResult[] groupedResultCall = [SELECT Account_vod__c,count(Id) FROM Call2_vod__c WHERE Call_Date_vod__c >= :MonthStartDate  AND Call_Date_vod__c <= :MonthEndDate  AND Account_Type__c =:accStaticRec.Account_Type__c 

                                                        AND Territory_vod__c =:terr.Id AND Status_vod__c = 'Submitted_vod' AND (Call_Type_vod__c != 'Call Only' OR Call_Type_vod__c != 'Event Only' OR Call_Type_vod__c != 'Event Detail')

                                                        AND Account_vod__c IN :accIdSet  

                                                        //PS added 7.11.2013

                                                        AND Activity_Type__c <> 'Staff'

                                                        GROUP BY Account_vod__c ];

            

            System.debug('::::groupedResultCall:::::'+groupedResultCall);

            Map<Id,Integer> AccIdAndCountOfCallMap = new Map<Id,Integer>();

            Integer totalCallsCount = 0;

            

            for (AggregateResult ar : groupedResultCall)  {

                String accId  = String.ValueOf(ar.get('Account_vod__c'));

                accSet.add(Id.valueOf(accId));

                finalaccIdSet.addAll(accSet);

              }

             totalaccIdSet.addAll(accIdSet); 

           }

           System.debug('::::finalaccIdSet:::::'+finalaccIdSet.size());

           System.debug('::::totalaccIdSet:::::'+totalaccIdSet.size());

         }

          System.debug('::::finalaccIdSet:::::'+finalaccIdSet.size());

          System.debug('::::totalaccIdSet:::::'+totalaccIdSet.size());

          

        if(accStaticRec.Reach_Status__c == 'Reached'){

            accStaticRec.Accounts__c = finalaccIdSet.size(); 

         }else if(accStaticRec.Reach_Status__c == 'Not Reached'){

                if(finalaccIdSet.size() == totalaccIdSet.size()){

                    accStaticRec.Accounts__c = 0;

                }else{

                    accStaticRec.Accounts__c = totalaccIdSet.size() - finalaccIdSet.size();

                }

             }

       

          if(accStaticRec != NULL) {

          update accStaticRec;

           

           System.debug(':::::accStaticRec::::::::::'+accStaticRec); 

       

            

            //----------------------Processing Map Formation---------------------------------------------

           

 

            if(!FinalMap.containsKey(accStaticRec.Grand_Parent_Territory_Id__c+accStaticRec.Account_Type__c+accStaticRec.Reach_Status__c)){

            

                Map<String,Map<String,Decimal>> DistrictMap = new Map<String,Map<String,Decimal>>();

                String mapKey = accStaticRec.Territory_Id__c+accStaticRec.Account_Type__c+accStaticRec.Reach_Status__c;

                DistrictMap.put(mapKey,new Map<String,Decimal>());

                DistrictMap.get(mapKey).put('#Accounts',accStaticRec.Accounts__c);

                

                

                Map<String,Map<String,Map<String,Decimal>>> RegionMap = new Map<String,Map<String,Map<String,Decimal>>>();

                RegionMap.put(accStaticRec.Parent_Territory_Id__c+accStaticRec.Account_Type__c+accStaticRec.Reach_Status__c,DistrictMap);

                

                

                FinalMap.put(accStaticRec.Grand_Parent_Territory_Id__c+accStaticRec.Account_Type__c+accStaticRec.Reach_Status__c,RegionMap);

              

                

            }else {

                Map<String,Map<String,Map<String,Decimal>>> RegionFinalMap = new Map<String,Map<String,Map<String,Decimal>>>();

                RegionFinalMap = FinalMap.get(accStaticRec.Grand_Parent_Territory_Id__c+accStaticRec.Account_Type__c+accStaticRec.Reach_Status__c);

                if(!RegionFinalMap.containsKey(accStaticRec.Parent_Territory_Id__c+accStaticRec.Account_Type__c+accStaticRec.Reach_Status__c)){

                    

                    Map<String,Map<String,Decimal>> DistrictMap = new Map<String,Map<String,Decimal>>();

                

                    String mapKey3 = accStaticRec.Territory_Id__c+accStaticRec.Account_Type__c+accStaticRec.Reach_Status__c;

                    DistrictMap.put(mapKey3,new Map<String,Decimal>());

                

                    DistrictMap.get(mapKey3).put('#Accounts',accStaticRec.Accounts__c);

                    

                    

                   // Map<String,Map<String,Map<String,Decimal>>> RegionFinalMap = new Map<String,Map<String,Map<String,Decimal>>>();

                    RegionFinalMap.put(accStaticRec.Parent_Territory_Id__c+accStaticRec.Account_Type__c+accStaticRec.Reach_Status__c,DistrictMap);

                    

                   FinalMap.put(accStaticRec.Grand_Parent_Territory_Id__c+accStaticRec.Account_Type__c+accStaticRec.Reach_Status__c,RegionFinalMap);

                  

                    

                }else{

                  

                        Map<String,Map<String,Decimal>> DistrictFinalMap = RegionFinalMap.get(accStaticRec.Parent_Territory_Id__c+accStaticRec.Account_Type__c+accStaticRec.Reach_Status__c);

                        

                        String mapKey1 = accStaticRec.Territory_Id__c+accStaticRec.Account_Type__c+accStaticRec.Reach_Status__c;

                        DistrictFinalMap.put(mapKey1,new Map<String,Decimal>());

                        DistrictFinalMap.get(mapKey1).put('#Accounts',accStaticRec.Accounts__c);

                        

                        RegionFinalMap.put(accStaticRec.Parent_Territory_Id__c+accStaticRec.Account_Type__c+accStaticRec.Reach_Status__c,DistrictFinalMap);

                        FinalMap.put(accStaticRec.Grand_Parent_Territory_Id__c+accStaticRec.Account_Type__c+accStaticRec.Reach_Status__c,RegionFinalMap);

               

                    }

                    

                }

            }

            System.debug(':::::FinalMap:::::::'+FinalMap);         

       }