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
Nandhakumar MuraliNandhakumar Murali 

Duplicate id in list:

I'm not sure how to debug this, I'm getting duplicate list error, I used map to remove duplicated from the list, but still getting this error. I am using only one update and that is it to map.

public with sharing class CampaignRollupUtils {


    public CampaignRollupStats recalcRollups(Set<Id> campaignIds) {

        Map<Id,List<Opportunity>>     mCampId_Opps         = new Map<Id,List<Opportunity>>();
        Map<Id, Campaign>             mCampId_Campaign     = new Map<Id, Campaign>();
        List<CampaignWrapper>         campWraps             = new List<CampaignWrapper>();
        List<Opportunity>             opps                 = new List<Opportunity>();
        CampaignRollupStats            stats                = new CampaignRollupStats();
        

        //Map<Id, Campaign>             mCampId_Campaign     = new Map<Id, Campaign>();

        List<Campaign> camps = [select     id, name, number_of_new_business_units__c,
                                        Add_On_Units__c,New_Business_Setup__c,Add_On_Setup__c,
                                        New_Business_Recurring__c,Add_On_Recurring__c,
                                        NumberOfOpportunities
                                from    campaign
                                where    id in :campaignIds ];

        if(!camps.isEmpty()) {
            for(Campaign c : camps) {
                mCampId_Campaign.put(c.id,c);
            }
        }
        //List<Opportunity>             opps                 = new List<Opportunity>();
        opps = [select id, campaignId,type,
                        (select id,status,opportunity.type,
                                Total_Cost_of_One_Time_Purchases__c,
                                Average_Monthly_Recurring__c
                         from     Quotes)
                from      Opportunity
                where    campaignId in :campaignIds];

        //Map<Id,List<Opportunity>>     mCampId_Opps         = new Map<Id,List<Opportunity>>();
        if(!opps.isEmpty()) {
            for(Opportunity opp : opps) {
                 if(!mCampId_Opps.containsKey(opp.campaignId)){
                    mCampId_Opps.put(opp.campaignId, new List<Opportunity>());
                }
                mCampId_Opps.get(opp.campaignId).add(opp);
            }
            
            for(Id campId : mCampId_Opps.keySet()) {
                campWraps.add(new CampaignWrapper(mCampId_Campaign.get(campId), mCampId_Opps.get(campId)));
            }
        }
        //-- hund down camps with no opps and still add them to the wrapper
        if(!camps.isEmpty()) {
            for(Campaign c : camps) {
                if(c.NumberOfOpportunities == 0) {
                    campWraps.add(new CampaignWrapper(c,null));
                }
            }
        }

        System.debug(logginglevel.warn,'\n\n\n Campaign Wrapper='+campWraps +'\n\n\n');
        
        Map<Id,Campaign> mapCampsToUpd = new Map<Id,Campaign>();
        
        if(!campWraps.isEmpty()) {
            List<Campaign> campsToUpd = new List<Campaign>();

            for(CampaignWrapper cWrap : campWraps) {
                Campaign camp = cWrap.campaign;
                camp.number_of_new_business_units__c = 0;
                camp.New_Business_Setup__c = 0;
                camp.New_Business_Recurring__c = 0;
                camp.Add_On_Units__c = 0;
                camp.Add_On_Setup__c = 0;
                camp.Add_On_Recurring__c = 0;

                if(cWrap.opps != null && !cWrap.opps.isEmpty()) {
                    for(Opportunity opp : cWrap.opps) {
                            stats.numOppsProcessed ++;
                        if(opp.quotes != null) {

                            for(Quote q : opp.quotes) {
                                Boolean processed = false;
                                if('New Business'.equalsIgnoreCase(q.opportunity.type)
                                    && q.status == 'Approved') {
                                     processed = true;
                                     camp.number_of_new_business_units__c ++;
                                     camp.New_Business_Setup__c +=q.Total_Cost_of_One_Time_Purchases__c;
                                     camp.New_Business_Recurring__c += q.Average_Monthly_Recurring__c;
                                }
                                if('Add-on Opportunity'.equalsIgnoreCase(q.opportunity.type)
                                    && q.status == 'Approved') {
                                     processed = true;
                                     camp.Add_On_Units__c ++;
                                     camp.Add_On_Setup__c += q.Total_Cost_of_One_Time_Purchases__c;
                                     camp.Add_On_Recurring__c += q.Average_Monthly_Recurring__c;
                                }
                                if(processed) {
                                    stats.numQuotesProcessed ++;
                                }
                            }
                        }
                    }
                }
                camp.Last_Update_For_Revenue__c = Date.today();
                campsToUpd.add(camp);
            }
            
            for(Campaign ca : campsToUpd) {
                mapCampsToUpd.put(ca.Id, ca);
            }
            
            if(!mapCampsToUpd.values().isEmpty()){
                update mapCampsToUpd.values();
            }
            
        //    if(!campsToUpd.isEmpty()) {
        //        stats.numCampsUpdated = campsToUpd.size();
        //        update campsToUpd;
        //    }
        }
        return stats;
    }

    public class CampaignWrapper {
        public Campaign                 campaign     {get;set;}

        public List<Opportunity>        opps         {get;set;}

        public CampaignWrapper(Campaign camp, List<Opportunity> pOpps) {
            this.campaign = camp;
            camp.number_of_new_business_units__c = 0;
            camp.Add_On_Units__c = 0;
            camp.Add_On_Setup__c = 0;
            camp.Add_On_Recurring__c = 0;
            camp.New_Business_Setup__c = 0;
            camp.New_Business_Recurring__c = 0;
            this.opps = pOpps;
        }
    }


}
GhanshyamChoudhariGhanshyamChoudhari
You can use SET instead of LIST