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
Sambit SoravSambit Sorav 

Help with Trigger and SOQL query

Hey, Please help me out with the following trigger scenario..

Write an Apex Trigger on Account which adds all the Closed won Opportunity amounts of that Account and shows it on the Account record.
Best Answer chosen by Sambit Sorav
CharuDuttCharuDutt
Hii Akshay Garg
Try Below Code
trigger SumAmountOpp on Opportunity (After Insert,After Update,After Delete) {
   List<Account> accList=new List<Account>();

    Set<Id> setAccIds = new Set<Id>();
    if(Trigger.isInsert){
         if(trigger.isAfter){
        for(Opportunity con : Trigger.new){
            if(con.AccountId != null && Con.StageName == 'Closed Won'){
            setAccIds.add(con.AccountId);
            	}
			}
		}
    } 
    system.debug('setAccIds ==> '+setAccIds);
    if(Trigger.isUpdate){
         if(trigger.isAfter){
        for(Opportunity con : Trigger.new){ 
            if(con.AccountId!=Trigger.oldMap.get(con.Id).AccountId && Con.StageName == 'Closed Won'){
               	setAccIds.add(con.AccountId);
                setAccIds.add(Trigger.oldMap.get(con.Id).AccountId);
            	}
          
			}        
        }
    }
    if(Trigger.isDelete){
        if(trigger.isAfter){
        for(Opportunity con : Trigger.old) { 
            if(con.AccountId != null && Con.StageName == 'Closed Won'){
            setAccIds.add(con.AccountId);
            	}
        	}
        }
    }    
    for(Account acc :[Select id,Total_Sum_Amount__c ,(Select id,Name,Amount from Opportunities where StageName == 'Closed Won') from Account where Id in : setAccIds]){
			integer val = 0;
        for(Opportunity con : acc.Opportunities){
            
            val += integer.valueOf(con.Amount);
            system.debug('====> ' +val);
        }
        system.debug(val);
        acc.Total_Sum_Amount__c = val;
        acclist.add(acc);
        
    }
    if(acclist.size()>0){
        update accList;     
    }
    
}
Please Mark It As Best Asnwer If It Hleps
Thank You!


 

All Answers

ShivankurShivankur (Salesforce Developers) 
Hi Akshay,

Please check out below thread where similar implementation have been discussed:
https://salesforce.stackexchange.com/questions/57600/trigger-on-account-to-calculate-sum-of-amount

Hope above information helps. Please mark as Best Answer so that it can help others in future.

Thanks.
CharuDuttCharuDutt
Hii Akshay Garg
Try Below Code
trigger SumAmountOpp on Opportunity (After Insert,After Update,After Delete) {
   List<Account> accList=new List<Account>();

    Set<Id> setAccIds = new Set<Id>();
    if(Trigger.isInsert){
         if(trigger.isAfter){
        for(Opportunity con : Trigger.new){
            if(con.AccountId != null && Con.StageName == 'Closed Won'){
            setAccIds.add(con.AccountId);
            	}
			}
		}
    } 
    system.debug('setAccIds ==> '+setAccIds);
    if(Trigger.isUpdate){
         if(trigger.isAfter){
        for(Opportunity con : Trigger.new){ 
            if(con.AccountId!=Trigger.oldMap.get(con.Id).AccountId && Con.StageName == 'Closed Won'){
               	setAccIds.add(con.AccountId);
                setAccIds.add(Trigger.oldMap.get(con.Id).AccountId);
            	}
          
			}        
        }
    }
    if(Trigger.isDelete){
        if(trigger.isAfter){
        for(Opportunity con : Trigger.old) { 
            if(con.AccountId != null && Con.StageName == 'Closed Won'){
            setAccIds.add(con.AccountId);
            	}
        	}
        }
    }    
    for(Account acc :[Select id,Total_Sum_Amount__c ,(Select id,Name,Amount from Opportunities where StageName == 'Closed Won') from Account where Id in : setAccIds]){
			integer val = 0;
        for(Opportunity con : acc.Opportunities){
            
            val += integer.valueOf(con.Amount);
            system.debug('====> ' +val);
        }
        system.debug(val);
        acc.Total_Sum_Amount__c = val;
        acclist.add(acc);
        
    }
    if(acclist.size()>0){
        update accList;     
    }
    
}
Please Mark It As Best Asnwer If It Hleps
Thank You!


 
This was selected as the best answer