trigger opportunityTrigger on Opportunity (){
opportunityTriggerHandler.validateOpportunity(Trigger.New, Trigger.old);
}
public class opportunityTriggerHandler{
public static void validateOpportunity(List<Opportunity> oppList){
Set<String> accountIdset = new Set<String>();
for(Opportunity opp : oppList){
if(opp.AccountId != null){
accountIdset.add(opp.AccountId);
}
}
Map<String,String> opportunityMap = new Map<String,String>();
for(Opportunity opp : [SELECT Id,StageName FROM Opportunity where stageName != null && accountId !=null And accountId IN :accountIdset LIMIT 49999]){
opportunityMap.add(opp.AccountId,opp.stageName);
}
for(Opportunity opp: oppList)){
if(opp.containsKey(opp.AccountId) && opp.get(opp.AccountId)== opp.stageName){
opp.stageName.addError('StageName already exists for this account');
}
}
}
}