You need to sign in to do that
Don't have an account?

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);
}