You need to sign in to do that
Don't have an account?
DIVAKAR 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
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
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();
}