Skip to main content
Hi,

   I got this question in some interview, where I tried to solve but unsuccessful. Please help me out.

trigger to rollup opportunity amount on Account field where opportunity

record type is "Revenue Type"

Opportunity field: Opty_Amount_C

Account field: Total_Opty_Amount_C
7 answers
  1. May 29, 2018, 7:13 AM
    Hi,

    Please refer below code

    trigger rollupopp on Opportunity (after delete,after update,after insert,after undelete) {

    set<ID>AccIds = new set<ID>();

    if(trigger.isinsert || trigger.isundelete){

    for(opportunity opp : trigger.new){

    AccIds.add(opp.AccountId);

    }

    }

    if(trigger.isdelete){

    for(opportunity opp : trigger.old){

    AccIds.add(opp.AccountId);

    }

    }

    if(trigger.isupdate){

    for(opportunity opp:trigger.new){

    AccIds.add(opp.AccountId);

    if(trigger.oldmap.get(opp.id).AccountId != opp.AccountId && trigger.oldmap.get(opp.id).AccountId != null ){

    AccIds.add(trigger.oldmap.get(opp.id).AccountId);

    }

    }

    }

    map<id,double> amtmap = new map<id,double>();

    for(aggregateresult ag : [select AccountId ,SUM(Opty_Amount_C) SOA,count(id) cc from opportunity where AccountId in:AccIds AND RecordType.Name = 'Revenue Type' group by AccountId]){

    amtmap.put((ID)ag.get('AccountId'), double.valueof(ag.get('SOA')));

    // amtmap.put((ID)ag.get('AccountId'), double.valueof(ag.get('cc')));

    }

    list<account>acclist = new list<account>();

    for(id iid : AccIds){

    account acnt = new account(id=iid);

    if(amtmap.containskey(iid)){

    acnt.Total_Opty_Amount_C = amtmap.get(iid);

    }else{

    acnt.Total_Opty_Amount_C = 0;

    }

    acclist.add(acnt);

    }

    if(acclist.size()>0){

    update acclist;

    }

    }

    If this helps, please mark it as best answer.
0/9000