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
DIVAKAR BABU 15DIVAKAR BABU 15 

trigger on oppertunity

1) Make two number fields on Opportunity object
Amount_X
Amount_Y

2) Make one picklist field "Type" , values ('Positive', 'Negative')

3) Make two number fields on account
Rollup_Amount_X
Rollup_Amount_Y
Rollup_Amount

4) Make one trigger on Opportunity object, which will do following:
--> Sum all child of Opportunity's field "Amount_X" and store in parent account's "Rollup_Amount_X" Where Type is "Positive"
--> Sum all child of Opportunity's field "Amount_Y" and store in parent account's "Rollup_Amount_Y" Where Type is "Negative"
--> Sum all child of Opportunity's field "Amount_X" + "Amount_Y" and store in parent account's "Rollup_Amount"

5) Make trigger as bulk / Test class
DIVAKAR BABU 15DIVAKAR BABU 15
i wrote this code but not getting correct output .some of amount not added to account field


trigger sumofamount on Opportunity (after insert,after update) {
    
set<id>accid = new set<id>();
    List<opportunity> oppList = new List<opportunity>();
   
    for(Opportunity op:Trigger.new){
       
        accid.add(op.Accountid);
      
    }
    list<Account> acc =[select Id,name,Rollup_Amount_Y__c,Rollup_Amount_X__c,Rollup_Amount__c from Account where Id=:accid];
     Map<id,Account> accmap = new Map<id,Account>();
    for(Account ac: acc){
        accmap.put(ac.Id,ac);
    }
    for(Opportunity op :Trigger.new){
        if(accmap.containskey(op.Accountid)){
            Decimal sum=0;
            Account a = accmap.get(op.Accountid);
            system.debug('1234'+ a);
            if(op.type__c== 'positive'){
                if(op.Amount_X__c!= null){
                    If( a.Rollup_Amount_X__c==null ||op.Amount_X__c!=null){
                        a.Rollup_Amount_X__c=op.Amount_X__c;
                        system.debug('rollupamount '+a.Rollup_Amount_Y__c);
                        system.debug('opportunity '+op.Amount_Y__c);
                        accmap.put(op.Accountid,a );
                    }
                    else if(a.Rollup_Amount_X__c!=null||op.Amount_X__c!=null){
                        a.Rollup_Amount_X__c=a.Rollup_Amount_X__c + op.Amount_X__c;
                         system.debug('rollupamountadd '+a.Rollup_Amount_Y__c);
                        system.debug('opportunity add'+op.Amount_Y__c);
                        accmap.put(op.Accountid,a );
                    }
                }
            }
            
            if(op.type__c=='negative')
                if(op.Amount_Y__c!= null){
                    if(a.Rollup_Amount_Y__c==null ||op.Amount_Y__c!=null){
                     a.Rollup_Amount_Y__c=op.Amount_Y__c;   
                }
                    else if(a.Rollup_Amount_Y__c!=null||op.Amount_Y__c!=null){
                     a.Rollup_Amount_Y__c=a.Rollup_Amount_Y__c + op.Amount_Y__c; 
                        system.debug('123 '+a.Rollup_Amount_Y__c);
                        system.debug('123 '+op.Amount_Y__c);
                    }
        }
           
            if(a.Rollup_Amount__c!=null){
                     a.Rollup_Amount__c=op.Amount_X__c + op.Amount_Y__c;      
              
            }
            
            
        
        
        
        
                /* 
                 for(Opportunity opp:[select Amount_X__c,Amount_Y__c from Opportunity where accountid=:a.id]) {
                     
                  sum = sum + (opp.Amount_X__c!= null?opp.Amount_X__c:0);
                    
                 }
                 
             a.Rollup_Amount_X__c=sum;
            
            if(op.type__c=='negative')
                 for(Opportunity opp:[select Amount_Y__c from Opportunity where accountid=:a.id]) {
                  sum = sum + (opp.Amount_Y__c!= null?opp.Amount_Y__c:0);
                    
                 }
             a.Rollup_Amount_Y__c=sum;
            
        
            
            
        }*/
    }
    } 
    update accmap.values();
}