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
sfdclivesfdclive 

pls help me in writing batch class for below class.

global class AWACS_CreateMonthlyPromoterTarget implements Database.Batchable<sObject>{
  
    Integer flag;  
    Integer flagPrevQty;    
    Double PrevActSlQty;
    Double PrevSlTgtQty;
    
   
    date d;
    date dPrev;
    String currMonth;
    String prevMonth;   

   
    Promoter_Product_Target__c targetObj;                    
    List  <Promoter_Product_Target__c>  lstTarget = new List<Promoter_Product_Target__c>();     
    List  <Promoter_Product_Target__c>  lstTargetofPSP = new List<Promoter_Product_Target__c>();
    List  <Promoter_Product_Target__c>  lstNewTarget= new List  <Promoter_Product_Target__c>() ;         
    Map<ID,List<Promoter_Product_Target__c>> mapPSPTarget = new Map<Id,List<Promoter_Product_Target__c>>();   
    
     
    Global String query='Select Id, Name,(select Id,Name,Month__c,Month_Actual_Sales_Quantity__c,Sales_Target_Quantity__c from Promoter_Product_Target__r) from Delar_Promoter_Shop_Products__c where RecordType.DeveloperName=\'Promoter_Shop_Products\''; 

    Global   AWACS_CreateMonthlyPromoterTarget () {     
        d=get_Sales_Target_Month(AWACS_Cutoff_day());
        system.debug('sales Target month##'+d);
        dPrev=d.addMonths(-1);
        system.debug('sales Target prcmonth##'+dPrev);
        currMonth= DateTime.newInstance(d, Time.newInstance(0, 0, 0, 0)).format('MMMM-yyyy'); 
        prevMonth= DateTime.newInstance(dPrev, Time.newInstance(0, 0, 0, 0)).format('MMMM-yyyy'); 
        
    }
       
    Global Database.QueryLocator start(Database.BatchableContext bc){
        return Database.getQueryLocator(query);    
    }   
    
    Global void execute(Database.BatchableContext BC, List<sObject> scope){
    
        List <Delar_Promoter_Shop_Products__c> lstPSP = (List <Delar_Promoter_Shop_Products__c>) scope;    
            
        system.debug('size of lstPSP##'+lstPSP.size()+'###PSP List value##'+lstPSP);     
           
        for(Delar_Promoter_Shop_Products__c onePSP : lstPSP) {
            if(onePSP.Promoter_Product_Target__r != null){
                lstTarget=onePSP.Promoter_Product_Target__r;   
                system.debug('PSP Obj##'+onePSP.Name+'##lstTarget##'+lstTarget);         
                mapPSPTarget.put(onePSP.ID,lstTarget);             
                //lstTarget.clear();
            }
            else{
                
                targetObj= new Promoter_Product_Target__c();    
                targetObj.Promoter_Shop_Products__c= onePSP.ID ;
                targetObj.Month_Actual_Sales_Quantity__c = 0;             
                targetObj.Sales_Target_Quantity__c = 0; 
                targetObj.Previous_Actual_Sales_Quantity__c = 0; 
                targetObj.Previous_Sales_Target_Quantity__c = 0;          
                targetObj.Month__c = currMonth;                            
                lstNewTarget.add(targetObj);      
            }
         }   
              
        for(ID PSPId : mapPSPTarget.keyset()) { 
        
           flag=0;  
         
                               
           if(mapPSPTarget.get(PSPId) != null){
             
                 system.debug('Lst of Target##'+mapPSPTarget.get(PSPId));
           
                  lstTargetofPSP=mapPSPTarget.get(PSPId);                                
                  system.debug('List of Target###'+lstTargetofPSP)  ;
                   
                  for(Promoter_Product_Target__c oneTarget : lstTargetofPSP){ 
                    
                    system.debug('Target Object Name##'+oneTarget.Name+'#Target object month summary#'+oneTarget.Month__c+'###Prev month##'+prevMonth+'##Curr month##'+currMonth);
                    if(oneTarget.Month__c == prevMonth){
                        flagPrevQty=0;
                        PrevActSlQty=0;
                        PrevSlTgtQty=0;
                        
                        if(oneTarget.Month_Actual_Sales_Quantity__c != null)  {              
                            PrevActSlQty = oneTarget.Month_Actual_Sales_Quantity__c;
                            system.debug('Target Object Name##'+oneTarget.Name+'##Month Sale Qty###'+oneTarget.Month_Actual_Sales_Quantity__c+'##Prev Actual Sale Qty###'+PrevActSlQty);}
                        
                            
                        if(oneTarget.Sales_Target_Quantity__c != null)    {
                            PrevSlTgtQty=oneTarget.Sales_Target_Quantity__c;
                             system.debug('Target Object Name##'+oneTarget.Name+'##Month Sale Qty###'+oneTarget.Sales_Target_Quantity__c+'##Prev Sale Target Qty###'+PrevSlTgtQty);}
                     
                        
                            
                        flagPrevQty=1;
                 }
                 
                if (oneTarget.Month__c == currMonth){                                
                        flag=1; 
                        system.debug('Target Object Name##'+oneTarget.Name+'#Target object month summary#'+oneTarget.Month__c);
                  
                    }                                                                   
                }     
                system.debug('Value of flag##'+flag);
                                       
                if(flag == 0){
                    targetObj= new Promoter_Product_Target__c();    
                    targetObj.Promoter_Shop_Products__c= PSPId ;                      
                    targetObj.Month__c = currMonth; 
                    
                    if (flagPrevQty==1){
                    
                         system.debug('#Target objectPrevious_Actual_Sales_Quantity__c#'+PrevActSlQty);                  
                        targetObj.Previous_Actual_Sales_Quantity__c=PrevActSlQty; 
                        system.debug('#Target objectPrevious_Actual_Sales_Quantity__c#'+targetObj.Previous_Actual_Sales_Quantity__c);
                  
                        system.debug('#Target objectPrevious_Actual_Sales_Quantity__c#'+PrevSlTgtQty);                 
                        targetObj.Previous_Sales_Target_Quantity__c=PrevSlTgtQty;
                        system.debug('#Target objectPrevious_Actual_Sales_Quantity__c#'+targetObj.Previous_Sales_Target_Quantity__c);
                  
                    } 
                    else{
                     
                        targetObj.Previous_Sales_Target_Quantity__c = 0;
                        targetObj.Previous_Actual_Sales_Quantity__c= 0; 
                    }
                        
                    targetObj.Month_Actual_Sales_Quantity__c=0; 
                    targetObj.Sales_Target_Quantity__c=0;           
                   
                    lstNewTarget.add(targetObj);                              
                } 
          }           
        }
        
        system.debug('#Size of Target list to be updated in DB#'+lstNewTarget.size());
        
        if(lstNewTarget.size()>0){
            insert  lstNewTarget;  }

    }
          
    Global void finish(Database.BatchableContext BC){
    }
    
    public integer AWACS_Cutoff_day()
    {
        Upload_Settings__c settings=Upload_Settings__c.getInstance('Cutoff_day');
        if(settings.Cutoff_day__c!=null)
        {
            return integer.valueOf(settings.Cutoff_day__c);
        }
        else
        {
            //in cutoff day is 0 then we need to take cutoff date as month last day
              date startofmonth=date.today().toStartOfMonth();
                date endofmonth=startofmonth.addMonths(1).adddays(-1);
                
            return endofmonth.day();
                
        }
        
        return 0;
    }
    
    public date get_Sales_Target_Month(integer cutoffday)
    {
        
        Date dt=date.today();
        integer today=dt.day();
        if(today>=cutoffday)
        {
            return dt.addMonths(1);
        }
        return dt;
    }
    
    
}