+ Start a Discussion
SFDC Lightning 18SFDC Lightning 18 

Getting Trigger error : CountCheckbox : CountCheckbox: execution of AfterInsert caused by: System.NullPointerException: Attempt to de-reference a null object ()

CountCheckbox : CountCheckbox: execution of AfterInsert caused by: System.NullPointerException: Attempt to de-reference a null object ()

 
trigger CountCheckbox on Contact (after delete, after insert, after undelete,
after update) {

    Contact[] cons;
    if (Trigger.isDelete)
        cons = Trigger.old;
    else
        cons = Trigger.new;

    // get list of accounts
    Set<ID> acctIds = new Set<ID>();
    for (Contact con : cons) {
            acctIds.add(con.AccountId);
    }
    
    List<account> accountsToUpdate=new list<Account>();
   
   
    Map<ID, Contact> contactsForAccounts = new Map<ID, Contact>([select Id
                                                            ,AccountId,Is_Promoter__c,Is_Detractor__c,Is_Passive__c,Is_Promoter_ETS__c,Is_Detractor_ETS__c,Is_Passive_ETS__c,CES_Value__c,CES_Count__c
                                                            from Contact
                                                            where AccountId in :acctIds]);

    Map<ID, Account> acctsToUpdate = new Map<ID, Account>([select Id
                                                                 ,RMT_Promoters_Count__c
                                                                  from Account
                                                                  where Id in :acctIds]);
    Map<ID, Account> acctsToUpdate2 = new Map<ID, Account>([select Id
                                                                 ,RMT_Detractors_Count__c
                                                                  from Account
                                                                  where Id in :acctIds]);    
    Map<ID, Account> acctsToUpdate3 = new Map<ID, Account>([select Id
                                                                 ,RMT_Passive_Count__c
                                                                  from Account
                                                                  where Id in :acctIds]);   
    Map<ID, Account> acctsToUpdate4 = new Map<ID, Account>([select Id
                                                                 ,ETS_Promoters_Count__c
                                                                  from Account
                                                                  where Id in :acctIds]);
    Map<ID, Account> acctsToUpdate5 = new Map<ID, Account>([select Id
                                                                 ,ETS_Detractors_Count__c
                                                                  from Account
                                                                  where Id in :acctIds]);    
    Map<ID, Account> acctsToUpdate6 = new Map<ID, Account>([select Id
                                                                 ,ETS_Passive_Count__c
                                                                  from Account
                                                                  where Id in :acctIds]); 
    Map<ID, Account> acctsToUpdate7 = new Map<ID, Account>([select Id
                                                                 ,No_of_CES_response__c
                                                                  from Account
                                                                  where Id in :acctIds]);     
    Map<ID, Account> acctsToUpdate8 = new Map<ID, Account>([select Id
                                                                 ,Total_sum_of_CES_response__c
                                                                  from Account
                                                                  where Id in :acctIds]); 

    if(!acctsToUpdate.isEmpty())
    {
    for (Account acct : acctsToUpdate.values()) 
    {
        Set<ID> conIds = new Set<ID>();
        for (Contact con : contactsForAccounts.values()) 
        {
            if (con.AccountId == acct.Id && con.Is_Promoter__c == TRUE)
                conIds.add(con.Id);
        }
        if (acct.RMT_Promoters_Count__c != conIds.size())
            acct.RMT_Promoters_Count__c = conIds.size();
    }

    update acctsToUpdate.values();
    }  
    if(!acctsToUpdate2.isEmpty())
    {
    for (Account acct2 : acctsToUpdate2.values()) {
        Set<ID> conIds2 = new Set<ID>();
        for (Contact con2 : contactsForAccounts.values()) {
            if (con2.AccountId == acct2.Id && con2.Is_Detractor__c == TRUE)
                conIds2.add(con2.Id);
        }
        if (acct2.RMT_Detractors_Count__c != conIds2.size())
            acct2.RMT_Detractors_Count__c = conIds2.size();
    }
    
    update acctsToUpdate2.values();
    }
    if(!acctsToUpdate3.isEmpty())
    {
    for (Account acct3 : acctsToUpdate3.values()) {
        Set<ID> conIds3 = new Set<ID>();
        for (Contact con3 : contactsForAccounts.values()) {
            if (con3.AccountId == acct3.Id && con3.Is_Passive__c == TRUE)
                conIds3.add(con3.Id);
        }
        if (acct3.RMT_Passive_Count__c != conIds3.size())
            acct3.RMT_Passive_Count__c = conIds3.size();
    }

    update acctsToUpdate3.values();
    }
    if(!acctsToUpdate4.isEmpty())
    {
    for (Account acct4 : acctsToUpdate4.values()) {
        Set<ID> conIds4 = new Set<ID>();
        for (Contact con4 : contactsForAccounts.values()) {
            if (con4.AccountId == acct4.Id && con4.Is_Promoter_ETS__c == TRUE)
                conIds4.add(con4.Id);
        }
        if (acct4.ETS_Promoters_Count__c != conIds4.size())
            acct4.ETS_Promoters_Count__c = conIds4.size();
    }

    update acctsToUpdate4.values();
    }
    if(!acctsToUpdate5.isEmpty())
    {
    for (Account acct5 : acctsToUpdate5.values()) {
        Set<ID> conIds5 = new Set<ID>();
        for (Contact con5 : contactsForAccounts.values()) {
            if (con5.AccountId == acct5.Id && con5.Is_Detractor_ETS__c == TRUE)
                conIds5.add(con5.Id);
        }
        if (acct5.ETS_Detractors_Count__c != conIds5.size())
            acct5.ETS_Detractors_Count__c = conIds5.size();
    }

    update acctsToUpdate5.values();
    }
    if(!acctsToUpdate6.isEmpty())
    {
    for (Account acct6 : acctsToUpdate6.values()) {
        Set<ID> conIds6 = new Set<ID>();
        for (Contact con6 : contactsForAccounts.values()) {
            if (con6.AccountId == acct6.Id && con6.Is_Passive_ETS__c == TRUE)
                conIds6.add(con6.Id);
        }
        if (acct6.ETS_Passive_Count__c != conIds6.size())
            acct6.ETS_Passive_Count__c = conIds6.size();
    }

    update acctsToUpdate6.values();
    }
    if(!acctsToUpdate7.isEmpty())
    {
    for (Account acct7 : acctsToUpdate7.values()) {
        Set<ID> conIds7 = new Set<ID>();
        for (Contact con7 : contactsForAccounts.values()) {
            if (con7.AccountId == acct7.Id && con7.CES_Count__c != 0 )
                conIds7.add(con7.Id);
        }
        if (acct7.No_of_CES_response__c != conIds7.size())
            acct7.No_of_CES_response__c = conIds7.size();
    }
    
    update acctsToUpdate7.values();
    }
    
     Map<Id, Account> acc= new Map<Id, Account>([Select Id, Total_sum_of_CES_response__c From Account Where Id In :acctIds]);
    AggregateResult[] groupedResults = [SELECT AccountId,SUM(CES_Value__c)amt FROM contact where AccountId in:acctIds group by AccountId];
    if(!groupedResults.isEmpty())
    {
      for (AggregateResult ar : groupedResults ) {
        acc.get(String.valueOf(ar.get('Accountid'))).Total_sum_of_CES_response__c = Integer.valueOf(ar.get('amt'));
        accountsToUpdate.add(acc.get(String.valueOf(ar.get('Accountid'))));
    }
    if(!accountsToUpdate.isEmpty())    
{
     update accountsToUpdate;    
}
    }
}