• SUNDARAVEL J
  • NEWBIE
  • 5 Points
  • Member since 2019

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 0
    Questions
  • 3
    Replies
global class UserDeactivateAlert_V1 implements Database.Batchable<SObject>
{         
    public String query = 'SELECT Name, Id, email, IsActive, lastlogindate, IsPortalEnabled from user where lastlogindate < LAST_N_DAYS:8 AND IsActive = true';      
    
    //public String query = 'select id, name, lastlogindate,IsPortalEnabled,email from user where id =\'0059E0000074xx4\'';
    global Database.querylocator start(Database.BatchableContext bc)
    {
        return Database.getQueryLocator(query);
    }
    
    global void execute(Database.BatchableContext bc,List<User> scope)
    {
        system.debug('The list of Users :'+scope);
        Date todayDate = date.today();
 
        Date deactivateInternalDt = date.today().addDays(-180);
        Date deactivatePartnerDt = date.today().addDays(-90);
        Date finalInternalDt = date.today().addDays(-178);
        Date finalPartnerDt = date.today().addDays(-88);
        Date initialDt = date.today().addDays(60);
        
        Map<String, Job_Schedulers__c> DoNotDeactivate = Job_Schedulers__c.getAll();
        system.debug('DoNotDeactivate '+DoNotDeactivate );
                
        system.Debug(deactivateInternalDt +'deactivateInternalDt ');
        system.Debug(deactivatePartnerDt +'deactivatePartnerDt ');
        system.Debug(finalInternalDt +'finalInternalDt ');
        system.Debug(finalPartnerDt +'finalPartnerDt ');
        system.Debug(initialDt +'initialDt');
        
        map<String,List<User>> MapofUsers = new map<String,List<User>>();
        Set<Id> deactivateUsers = new Set<Id>();
                
        for(User usr :scope){
         Date userDate = usr.lastlogindate.date();
         system.debug(userDate + 'userDate');
        
            if(userDate <= initialDt && !DoNotDeactivate.containskey(usr.Id)){
            system.debug(userDate+'userDate');
                if(userDate == initialDt){
                    system.debug(userDate+'userDate');
            system.debug(initialDt+'initialDt');
                    //initialAlertPartnerUsers
                    if(usr.IsPortalEnabled==true){
                        if(!MapofUsers.containsKey('Alert_Mail_for_Partner_User')){
                            MapofUsers.put('Alert_Mail_for_Partner_User', new List<User>{usr});
                        }else{
                            MapofUsers.get('Alert_Mail_for_Partner_User').add(usr);
                        }
                        system.debug(usr +'initialAlertPartnerUsers');
                    }else{
                        //initialAlertInternalUsers
                        if(!MapofUsers.containsKey('Alert_Mail_for_Internal_Users')){
                            MapofUsers.put('Alert_Mail_for_Internal_Users', new List<User>{usr});
                        }else{
                            MapofUsers.get('Alert_Mail_for_Internal_Users').add(usr);
                        }system.debug(usr +'initialAlertInternalUsers');
                    }
                }
                //finalAlertPartnerUsers
                else if(userDate == finalPartnerDt && usr.IsPortalEnabled==true){
                    if(!MapofUsers.containsKey('Deactivation_email_for_External_Users')){
                            MapofUsers.put('Deactivation_email_for_External_Users', new List<User>{usr});
                        }else{
                            MapofUsers.get('Deactivation_email_for_External_Users').add(usr);
                        }
                     system.debug(usr +'finalAlertPartnerUsers');   
                }
                //finalAlertInternalUsers
                else if(userDate == finalInternalDt && usr.IsPortalEnabled==false){
                    if(!MapofUsers.containsKey('Deactivation_email_for_Internal_Users')){
                            MapofUsers.put('Deactivation_email_for_Internal_Users', new List<User>{usr});
                        }else{
                            MapofUsers.get('Deactivation_email_for_Internal_Users').add(usr);
                        }
                       system.debug(usr +'finalAlertInternalUsers'); 
                }
                else if(userDate <= deactivatePartnerDt && usr.IsPortalEnabled==true){
                    deactivateUsers.add(usr.Id);
                }  
                else if(userDate <= deactivateInternalDt && usr.IsPortalEnabled==false){
                    deactivateUsers.add(usr.Id);
                } 
            }    
        } 
        system.debug(deactivateUsers.size()+'deactivateUsers');    
        if(deactivateUsers.size()>0){
        UserAlertAndDeactivation_Handler.UserDeactivation(deactivateUsers);
        }
        system.debug(MapofUsers +'MapofUsers');
        if(MapofUsers.size()>0){
            UserAlertAndDeactivation_Handler.sendEmailToUsers(MapofUsers);
        }        
    }    
    global void finish(Database.BatchableContext bc)
    {  
    }  
}



public class UserAlertAndDeactivation_Handler { 
    
    public static void sendEmailToUsers(map<String, List<User>> MapofUsers){
        
        List<EmailTemplate> listEmailTemplate = [select Id,DeveloperName from EmailTemplate where DeveloperName IN : MapofUsers.keySet()];
        Map<string, Id> mapEmailTemplate = new Map<string, Id>();
       
        for(EmailTemplate et : listEmailTemplate){
            mapEmailTemplate.put(et.DeveloperName,et.Id);
        }
        
        List<Messaging.SingleEmailMessage> allMessages = New List<Messaging.SingleEmailMessage>();
        
        for(String tempName: MapofUsers.keyset()){
            List<User> userList= MapofUsers.get(tempName);
            for(User u: userList){
                Messaging.SingleEmailMessage m = new Messaging.SingleEmailMessage();
                m.setTemplateId(mapEmailTemplate.get(tempName));
                m.setTargetObjectId(u.Id);
                m.saveAsActivity = false;
                allMessages.add(m);
            }
        }     
        system.debug(allMessages);
        //Messaging.sendEmail(allMessages); 
    }
    
    public static void UserDeactivation(Set<Id> deactivateUsers)
    {
        List<user> deactivatingUserList= new List<user>();
        for(User us : [select Id, IsActive from User where Id IN : deactivateUsers]){
            us.isActive=false;
            deactivatingUserList.add(us);
        }
        system.debug(deactivatingUserList+'deactivatingUserList');
        //database.update(deactivatingUserList);
    }
}
Hi all 
i have to deploy  15 test classes into production.  
among these some are new and few are goint to overwirte the existing test classes. 
what are the steps to follow to deploy?? 

if i go throught he changesets
do i need to validate the test classes before deploy or directly can deploy? 

shall we expect any deployment errors