• Sai Kalyan Sanisetty
  • NEWBIE
  • 35 Points
  • Member since 2015

  • Chatter
    Feed
  • 1
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 0
    Questions
  • 8
    Replies
Hello,

What is primary key for Account object
trigger Practise2 on Student__c (after insert,After update) 
{
  Set<id> ids=new set<id>();
  for(Student__c stud1:trigger.new)  
  {
    ids.add(stud1.id);
  }
  
  list<Student__c> stud2=[select id,name,Status_from_Parent__c,College__r.id,College__r.Status__c from Student__c where id in:ids];
  list<College__c> lst=new list<College__c>();
  for (Student__c std3:stud2)
  {
   for(list<College__C> clg:std3.College__r)
   {
    clg.Status__c=std3.Status_from_Parent__c;
    lst.add(clg);
   }
  
  }
  update lst;
  
  }
Can any one help me on this error :
I'm running the test class in developer console for the trigger named as :CreateSubscriptionopptyclone ,but i get the error for the other trigger ...and i have not used the owd concept in trigger or test class.Any suggestion plz
System.LimitException: Too many SOQL queries: 101
Trigger.thankYouNoteMail: line 52, column 1

This is other trigger and line 52 is :


    OrgWideEmailAddress[] owea = [select Id from OrgWideEmailAddress where Address = 'customercare@enterprisedb.com'];
Test Classes :
@isTest
public class TestCreateSubscriptionOpptyClone 
{

static testMethod void TestCreateSubscription()
{
//Create Account 

Account acc1 = new Account();
acc1.Name='Testing SubscriptionClone';
acc1.BillingStreet='Banjara hills';
acc1.BillingCity='Hyd';
acc1.BillingState='TS';
acc1.BillingPostalCode = '500084';
acc1.BillingCountry = 'India';
acc1.Phone = '100';
acc1.Industry = 'Banking';         
acc1.Type = 'Paid';
acc1.Customer_Type__c = 'Customer';
acc1.Customer_List__c = true;
insert acc1 ;

//Create Contact

contact cc = new contact();
cc.FirstName ='Test Contact Subscription';
cc.LastName ='Opptyclone';
cc.Role__c='Subscription Administrator';
cc.AccountId=acc1.Id;
insert cc;

//Create Opportunity

Opportunity opty = new Opportunity();
opty.Name = 'Test SubscriptionOppty';
opty.StageName ='Proposal/Price Quote';
opty.Probability =60;
opty.LeadSource = 'Subscription Renewal';
opty.CloseDate = System.Today();                
opty.Type = 'Existing Customer';
opty.Assigned_Sales_Engineer__c = null;
opty.Payment_Type__c = 'Order Form';
opty.Update_Complete__c = true;
opty.Partner__c = 'None';
opty.Anchor__c='Non Anchor';
opty.AccountId = acc1.Id;
opty.StageName = 'Closed Won';
insert opty;

//Create Opportunity Contact Role 
 list<OpportunityContactRole> opptyConRolelist1 =  new list<OpportunityContactRole>();   
OpportunityContactRole opptyConRole =  new OpportunityContactRole();   
opptyConRole.ContactId = cc.Id;
opptyConRole.OpportunityId = opty.Id;   
opptyConRole.IsPrimary = false;
opptyConRole.Role = 'Subscription Administrator';
opptyConRolelist1.add(opptyConRole);
insert opptyConRolelist1;
 
 opty.UPDATE_COMPLETE__c = false;
 opty.Contracts_Processed__c =  false;
 opty.Contain_Renewable_Subscription__c=false;
 opty.StageName ='Stage4 :Proposal Delivery';
 opty.Closed_Won__c =false;
 opty.Activate_Notification_to_Finance__c=false;
 opty.Stage_won_lost_set__c=false;
 opty.ForecastCategoryName ='Pipeline';
 //opty.Parent_Opportunity__c=opty.Id;
 update opty;

//Add oppty line items
  string stdpdId = '01s500000001e6k';
//Create OpportunityLineitem 

 List<OpportunityLineItem> ooliList = new List<OpportunityLineItem>();

//Create Product

product2 p2 = new product2();
p2.Name ='Postgres Plus Enterprise Edition Unicores';
p2.Product_Name1__C='Product - Subscription';
p2.Product_Group__c='PPAS';
p2.IsActive = true;
p2.Description='Postgres Plus Enterprise Edition Unicores';

insert p2;

//Create PriceBookEntry 

PricebookEntry pbey = new PricebookEntry();
 pbey.Product2ID=p2.id;
 pbey.Pricebook2ID=stdpdId;
 pbey.UnitPrice=50; 
 pbey.isActive=true;
insert pbey;

Opportunitylineitem ooli = new Opportunitylineitem();
ooli.OpportunityId = opty.Id;    
ooli.PricebookEntryId = pbey.Id;
ooli.Quantity =4;
//ooli.Product_Code__c='PREE-UCC-001';
//ooli.Unit_of_Measure__c='Unicore';
ooli.Start_Date__c = System.today();
ooli.End_Date__c =  System.today() + 100;
ooli.Type_of_Contract__c='None';
ooli.Term__c =12;
ooli.Type_Of_Product__c='Single Year Subscription';
ooli.Type_of_ARR__c= 'New Addition ARR';
ooli.TotalPrice=1750;
ooliList.add(ooli);
insert ooliList;

opty.UPDATE_COMPLETE__c = true;
update opty;

 opty.UPDATE_COMPLETE__c = false;
 opty.Contracts_Processed__c =  false;
 update opty;
 
 //Create Product

product2 pr2 = new product2();
pr2.Name ='Postgres Plus Standard Edition Unicores';
pr2.Product_Name1__C='Product - Subscription';
pr2.Product_Group__c='PPAS';
pr2.IsActive = true;
pr2.Description='Postgres Plus Standard Edition Unicores';

insert pr2;

//Create PriceBookEntry 

PricebookEntry pbety = new PricebookEntry();
 pbety.Product2ID=pr2.id;
 pbety.Pricebook2ID=stdpdId;
 pbety.UnitPrice=50; 
 pbety.isActive=true;
insert pbety;

/*Opportunitylineitem ooli1 = new Opportunitylineitem();
ooli1.OpportunityId = opty.Id;    
ooli1.PricebookEntryId = pbety.Id;
ooli1.Quantity =4;
//ooli.Product_Code__c='PREE-UCC-001';
//ooli.Unit_of_Measure__c='Unicore';
ooli1.Start_Date__c = System.today();
ooli1.End_Date__c =  System.today() + 100;
ooli1.Type_of_Contract__c='None';
ooli1.Term__c =12;
ooli1.Type_Of_Product__c='Single Year Subscription';
ooli1.Type_of_ARR__c= 'New Addition ARR';
ooli1.TotalPrice=1750;
ooliList.add(ooli1);
insert ooliList;*/

opty.UPDATE_COMPLETE__c = true;
update opty;

 opty.UPDATE_COMPLETE__c = false;
 opty.Contracts_Processed__c =  false;
 update opty;
 
 
 //update contact roles - to test the subscription product type
        for(OpportunityContactRole r1: opptyConRolelist1)
        {
            r1.Role = 'Subscription Administrator';                                              
        }
        update opptyConRolelist1;                
        opty.UPDATE_COMPLETE__c = true;                
        update opty;               
        
        opty.UPDATE_COMPLETE__c = false;
        opty.Contracts_Processed__c =  true;
        update opty;
        
        opty.UPDATE_COMPLETE__c =  true;           
        update opty;  

}

}
Trigger :
 
trigger CreateSubscriptionOpptyClone on Opportunity (after update) 
{
    if(!AvoidRecursiveCloning.hasAlreadyCreatedClone())
    {
        List<Opportunity> closedWonOpportunities = new List<Opportunity>();
        Map<Id, Opportunity> oppMap = new Map<Id, Opportunity>();
        
        List<Id> closedLostOpportunities = new List<Id>();
        List<Id> allOpportunities = new List<Id>();
        
        for(Opportunity opp: Trigger.new)
        {
            ////Get Opportunity which have been Closed Won///
            if(opp.StageName == 'Closed Won' && Trigger.oldMap.get(opp.Id).StageName != 'Closed Won')
            {
                closedWonOpportunities.add(opp);
                oppMap.put(opp.Id, opp);
            }
            ///////Get Opportunity which have been Closed Lost///////////
            if(opp.StageName == 'Closed Lost' && Trigger.oldMap.get(opp.Id).StageName != 'Closed Lost')
            {
                closedLostOpportunities.add(opp.Id);               
            }
            /////If any of the 4 fields changes
            if(opp.StageName != Trigger.oldMap.get(opp.Id).StageName || opp.Probability != Trigger.oldMap.get(opp.Id).Probability || opp.OwnerId != Trigger.oldMap.get(opp.Id).OwnerId || opp.Comments__c != Trigger.oldMap.get(opp.Id).Comments__c)
            {
                allOpportunities.add(opp.Id);
            }
        }
        ///Creating subscription clone
        if(closedWonOpportunities.size() > 0)
        {
            //Get all Opportunity Line Items
        List<OpportunityLineItem>  oppProdList = [Select Id,Orig_Total_Price__c,Parent_Opportunity_Product_Id__c, Original_Amount__c, Original_ARR__c, Original_In_Year_Billing__c, Actual_Renewal_Date__c, OpportunityId, SortOrder, PricebookEntryId, Quantity, Discount, UnitPrice, ListPrice, ServiceDate, HasRevenueSchedule, HasQuantitySchedule, Description, HasSchedule, Attendee_Email__c, Start_Date__c, End_Date__c, Term__c, Overall_Value__c, Description__c, Attendee_Name__c, Attendee_Phone__c, Number_of_Contacts__c, Term_Days__c, Venue__c, Product_Name__c, Service_Type__c, ARR_Impacts__c, Annual_Recurring_Revenue__c, Product_Segmentation__c, Product_Categories__c, Product_Bucket__c, ARR2__c, Test_Number__c, Transfer_Price__c, Total_Transfer_price__c, No_ARR__c, Price_Per_Socket_Per_Annum__c, In_Year_Billing__c, Type_Of_Product__c,            Annual_Contract_Value__c, T_E__c, Type_of_Contract__c, Total_Days_Sold__c, No_of_Seats_Delivered__c, No_of_Days_Delivered__c, No_of_Seats_Pending__c, No_of_Days_Pending__c, Special_Deals__c, Notes__c, of_Discount__c, Delivered_By__c, Delivery_Dates__c, Trainer_Name__c, Average_Revenue_per_day__c, Requires_Services_Head_Approval__c, Multi_year_Sub_extension_contract__c FROM OpportunityLineItem  where OpportunityId in: closedWonOpportunities AND No_ARR__c = false AND Service_Type__c = 'Product - Subscription' AND ARR_Impacts__c =: 'Yes'];
            
            //Get all Opportunity Contact Roles
            List<OpportunityContactRole>  oppContactRoleList = [Select Id,ContactId ,Contact.ContactType__c,IsPrimary ,OpportunityId,Role from OpportunityContactRole where OpportunityId in : closedWonOpportunities];
            ////////////Creating Opp - Opp Contact Role Map////////////
            Map<Id,List<OpportunityContactRole>> oppContactRoleMap = new Map<Id,List<OpportunityContactRole>>();
            List<OpportunityContactRole> tmpOCR;
            for(OpportunityContactRole ocr : oppContactRoleList)
            {
                if(oppContactRoleMap.containsKey(ocr.OpportunityId))
                {
                    tmpOCR = oppContactRoleMap.get(ocr.OpportunityId);
                    tmpOCR.add(ocr);
                }
                else
                {
                    tmpOCR = new List<OpportunityContactRole>();
                    tmpOCR.add(ocr);
                    oppContactRoleMap.put(ocr.OpportunityId, tmpOCR);
                }
            }
            ///////////////////////////////////////////////////////////
            
            Map<string,List<OpportunityLineItem>> oppProductMapEndDate = new Map<string,List<OpportunityLineItem>>();       
            List<OpportunityWrapper> owList = new List<OpportunityWrapper>();
            
            /////////Creating Opportunity Wrapper List////////
            List<OpportunityLineItem> tmpList;
            for(OpportunityLineItem oli: oppProdList)
            {
                string key = oli.OpportunityId + '~' + String.valueOf(oli.End_Date__c);         
                if(oppProductMapEndDate.containsKey(key))
                {
                    tmpList = oppProductMapEndDate.get(key);
                    tmpList.add(oli);
                }
                else
                {
                    //Create Opportunity Wrapper 
                    OpportunityWrapper ow = new OpportunityWrapper();
                    ow.opp = oppMap.get(oli.OpportunityId);
                    ow.endDate = oli.End_Date__c;
                    owList.add(ow);
                    
                    tmpList = new List<OpportunityLineItem>();
                    tmpList.add(oli);
                    oppProductMapEndDate.put(key, tmpList);
                }
            }
            
            ///////////////////////////////////////////////////////////
            List<Opportunity> newOpportunities = new List<Opportunity>();
            
            List<OpportunityLineItem> newOpportunityLineItems = new List<OpportunityLineItem>();
            Map<string, List<OpportunityLineItem>> newOLIMap = new Map<string, List<OpportunityLineItem>>();
            
            List<OpportunityContactRole> newOpportunityContactRoles = new List<OpportunityContactRole>();
            Map<string, List<OpportunityContactRole>> newContactRolesMap = new Map<string, List<OpportunityContactRole>>();
                    
            ////Create Opportunity/Opporunity Line Items/Opportunity Contact Role Clone///
            System.debug('oppProductMapEndDate::' + oppProductMapEndDate);
            System.debug('owList::' + owList);
            for(OpportunityWrapper ow: owList)
            {
                Opportunity opp = ow.opp;
                Opportunity newOpp = opp.clone(false, true, false, false);
                newOpp.StageName = 'Stage 4: Proposal Delivery';          
                newOpp.Probability = 60;                      
                newOpp.LeadSource = 'Subscription Renewal';
                newOpp.CloseDate = ow.endDate.addDays(1);
                newOpp.Type = 'Existing Customer';
                ///Added by MK - 29 July 2015///
                newOpp.Assigned_Sales_Engineer__c = null;
                string nameStr = opp.Name;
                /*if(nameStr.indexOf('-Renewal') > -1)    
                {               
                    string substr = nameStr.substring(nameStr.indexOf('-Renewal'), nameStr.length());
                    nameStr = nameStr.remove(substr);
                }
                newOpp.Name = nameStr + '-Renewal ' + String.valueOf(ow.endDate.Year());*/
                if(nameStr.startsWith('Renewal ('))    
                {               
                    string substr = nameStr.substring(0, nameStr.indexOf(' - ') + 3); //plus 3 for ' - '
                    nameStr = nameStr.remove(substr);
                }
                newOpp.Name = 'Renewal (' + String.valueOf(ow.endDate.Year()) + ') - ' + nameStr;
                integer nameLength = newOpp.Name.length();
                if(nameLength > 120)
                    Trigger.new[0].addError('The Renewal Opportunity Name exceeds the maximum length of 120. Please trim the Opportunity Name to create the Renewal Opportunity.');
                newOpp.Parent_Opportunity__c = opp.Id;
                newOpp.Contain_Renewable_Subscription__c = true;
                newOpp.Update_Complete__c = false;
                newOpp.Contracts_Processed__c = false;  
                newOpp.Closed_Won__c = false;
                newOpp.Activate_Notification_to_Finance__c = false;
                newOpp.Stage_won_lost_set__c = false;      
                newOpp.ForecastCategoryName = 'Pipeline';               
                
                string key = opp.Id + '~' + String.valueOf(ow.endDate);
                string key1 = opp.Id + '~' + String.valueOf(newOpp.CloseDate);
                double inYearBillingAmount = 0;
                if(oppProductMapEndDate.containsKey(key))
                {
                    List<OpportunityLineItem> tmp1;
                    //Create Opportunity Line Item Clone////
                    for(OpportunityLineItem oli: oppProductMapEndDate.get(key))
                    {           
                        OpportunityLineItem newOli = oli.clone(false, true, false, false);
                        newOli.Start_Date__c = oli.End_Date__c.addDays(1);
                        newOli.End_Date__c = oli.End_Date__c.addMonths(12);
                        /*newOli.Term__c =  12;
                        newOli.UnitPrice = oli.UnitPrice/(oli.Term__c/12);
                        newOli.In_Year_Billing__c = oli.In_Year_Billing__c/(oli.Term__c/12); */
                        newOli.Term__c =  oli.Term__c;                  
                        newOli.UnitPrice = oli.UnitPrice;
                        newOli.In_Year_Billing__c = oli.In_Year_Billing__c;
                        newOli.Parent_Opportunity_Product_Id__c =   oli.Id; 
                        newOli.Original_Amount__c = oli.Orig_Total_Price__c; 
            newOli.Original_ARR__c = oli.Annual_Recurring_Revenue__c; 
            newOli.Original_In_Year_Billing__c = oli.In_Year_Billing__c; 
                        newOli.Actual_Renewal_Date__c = oli.End_Date__c.addDays(1);
                        inYearBillingAmount = inYearBillingAmount + newOli.In_Year_Billing__c;
                        if(newOLIMap.containsKey(key1))
                        {
                            tmp1 = newOLIMap.get(key1);
                            tmp1.add(newOli);                   
                        }
                        else
                        {
                            tmp1 = new List<OpportunityLineItem>();
                            tmp1.add(newOli);
                            newOLIMap.put(key1,tmp1);
                        }
                    }                   
                }
                
                newOpp.X1st_3_months_Invoice__c = inYearBillingAmount;               
                newOpportunities.add(newOpp);
                
                ///Creating Contact Roles////
                if(oppContactRoleMap.containsKey(opp.Id))
                {
                    List<OpportunityContactRole> oppContactRoles = oppContactRoleMap.get(opp.Id);
                    List<OpportunityContactRole> tmp2;
                    //Create Opportunity Contact Role Clone////
                    for(OpportunityContactRole ocr: oppContactRoles)
                    {           
                        OpportunityContactRole newOCR = ocr.clone(false, true, false, false);                   
                        if(newContactRolesMap.containsKey(key1))
                        {
                            tmp2 = newContactRolesMap.get(key1);
                            tmp2.add(newOCR);                   
                        }
                        else
                        {
                            tmp2 = new List<OpportunityContactRole>();
                            tmp2.add(newOCR);
                            newContactRolesMap.put(key1,tmp2);
                        }
                    }
                } 
            }
           ///////////////////////////////////////////////////////////
           System.debug('newOpportunities::' + newOpportunities);
            try
            {
                if(newOpportunities.size() > 0)         
                    insert newOpportunities;
                    
                //Updating Oppotunity Id in Opportunity Product            
                for(Opportunity o:newOpportunities)
                {
                    string key = o.Parent_Opportunity__c + '~' + String.valueOf(o.CloseDate);
                    if(newOLIMap.containsKey(key))
                    {
                        List<OpportunityLineItem> nOliList = newOLIMap.get(key); 
                        for(OpportunityLineItem nOli: nOliList)
                        {
                            nOli.OpportunityId = o.Id;
                            newOpportunityLineItems.add(nOli);
                        }
                    }
                    if(newContactRolesMap.containsKey(key))
                    {
                        List<OpportunityContactRole> nOCRList = newContactRolesMap.get(key); 
                        for(OpportunityContactRole nOCR: nOCRList)
                        {
                            nOCR.OpportunityId = o.Id;
                            newOpportunityContactRoles.add(nOCR);
                        }
                    }
                }
                
                if(newOpportunityLineItems.size() > 0)
                    insert newOpportunityLineItems;
                if(newOpportunityContactRoles.size() > 0)
                    insert newOpportunityContactRoles;
                //////////////////////////////////////////////////////////////////////////////////////////////////////
                
                //////////////////Update Parent Contract with Renewal Opporunity Info/////////////////////////////////////////////////
                if(newOpportunityLineItems.size() > 0)
                {
                    List<OpportunityLineItem> oliAll = [Select Id,Parent_Opportunity_Product_Id__c,Opportunity.StageName,Opportunity.Probability, Opportunity.OwnerId,Opportunity.Comments__c,In_Year_Billing__c,Type_Of_Product__c,
                    Annual_Contract_Value__c from OpportunityLineItem where Id in: newOpportunityLineItems];
                    updateParentContract(oliAll);
                }
                //////////////////////////////////////////////////////////////////////////////////////////////////////
                
                //////////////////Update Parent Account by tagging the Product Groups of the Opportunity Line Items//////////////////
                
            //Update Accounts   
            updateParentAccount(closedWonOpportunities);
                //////////////////////////////////////////////////////////////////////////////////////////////////////
            }        
            catch(Exception e)
            {
                System.debug('ERROR::' + e.getMessage());
            }       
        }
        ///////////////////Updating Parent Contract with Lost Info///////////////////////
        if(closedLostOpportunities.size() > 0)
        {
            ////Get Opportunity Products for lost Opportunities////
            List<OpportunityLineItem>  oppProdListLost = [Select Id,Parent_Opportunity_Product_Id__c, OpportunityId, Opportunity.Reason_Lost__c FROM OpportunityLineItem  where OpportunityId in: closedLostOpportunities]; 
            
            Set<Id>  parentOLIIds = new Set<Id>();
            Map<Id,string> parentOliMap = new Map<Id,string>(); 
            
            ////Get Parent Opportunity Product Ids////
            for(OpportunityLineItem oli: oppProdListLost)
            {
                if(oli.Parent_Opportunity_Product_Id__c != null && oli.Parent_Opportunity_Product_Id__c != '')
                {
                    parentOLIIds.add(oli.Parent_Opportunity_Product_Id__c);
                    parentOliMap.put(oli.Parent_Opportunity_Product_Id__c,oli.Opportunity.Reason_Lost__c);
                }
            }
            
            ////Get Contracts where Opportunity Product Id matches the Parent Opportunity Product Ids////           
            List<Contract> parentContracts = [Select Id, Opportunity_Product_Id__c, Renewal_Status__c, Adjusted_Comments__c from Contract where Opportunity_Product_Id__c in: parentOLIIds];
            ////Update Renewal Status and Reason lost for these Contracts////   
            for(Contract c : parentContracts)
            {
                c.Renewal_Status__c = 'Renewal Lost';
                if(c.Opportunity_Product_Id__c != null && c.Opportunity_Product_Id__c != '' && parentOliMap.containsKey(c.Opportunity_Product_Id__c))
                {
                    c.Adjusted_Comments__c = parentOliMap.get(c.Opportunity_Product_Id__c);                 
                }
            }
            try
            {
                update parentContracts;
            }
            catch(Exception e)
            {
                Trigger.new[0].addError(e.getMessage());
            }
        }
            
        //////////////////If Opportunity is modified then the parent contract should get updated////////////
        if(allOpportunities.size() > 0)
        {       
            List<OpportunityLineItem> oliAll = [Select Id,Parent_Opportunity_Product_Id__c,Opportunity.StageName,Opportunity.Probability, Opportunity.OwnerId,Opportunity.Comments__c,In_Year_Billing__c,Type_Of_Product__c,
            Annual_Contract_Value__c from OpportunityLineItem where OpportunityId in: allOpportunities];
            updateParentContract(oliAll);
        }
        ///////////////////////////////////////////////////////////////////////////////////////////////////////
        
        AvoidRecursiveCloning.setAlreadyCreatedClone();
    }
    void updateParentContract(List<OpportunityLineItem> oliList)
    {
        List<ID> oliParentId = new List<ID>();
        Map<Id,OpportunityLineItem> parentOliMap = new Map<Id,OpportunityLineItem>(); 

        for(OpportunityLineItem oli: oliList)
        {
            if(oli.Parent_Opportunity_Product_Id__c != null && oli.Parent_Opportunity_Product_Id__c != '')
            {
                oliParentId.add(oli.Parent_Opportunity_Product_Id__c);
                parentOliMap.put(oli.Parent_Opportunity_Product_Id__c,oli);
            }
        }
        List<Contract> parentContracts = [Select Id, Opportunity_Product_Id__c, Renewal_Status__c, Adjusted_Comments__c, Stage__c, Probability__c, Notes__c, Owner__c,Contracts_In_Year_Billing__c,Type_Of_Product__c,
        Annual_Contract_Value__c from Contract where Opportunity_Product_Id__c in: oliParentId];
        for(Contract c : parentContracts)
        {
            if(c.Opportunity_Product_Id__c != null && c.Opportunity_Product_Id__c != '' && parentOliMap.containsKey(c.Opportunity_Product_Id__c))
            {
                OpportunityLineItem oli = parentOliMap.get(c.Opportunity_Product_Id__c);
                c.Stage__c = oli.Opportunity.StageName;
                c.Probability__c = oli.Opportunity.Probability;
                c.Owner__c = oli.Opportunity.OwnerId;
                c.Notes__c = oli.Opportunity.Comments__c;
                c.Type_Of_Product__c = oli.Type_Of_Product__c;
                c.Annual_Contract_Value__c = oli.Annual_Contract_Value__c;
                c.Contracts_In_Year_Billing__c = oli.In_Year_Billing__c;
            }
        }
        try
        {
            update parentContracts;
        }
        catch(Exception e)
        {
            Trigger.new[0].addError(e.getMessage());
        }   
    }
    //Method - Update Parent Account
    void updateParentAccount(List<Opportunity> optyList)
    {
    List<Account> accsToUpdate = new List<Account>(); 
    Account[] accList = new Account[]{};
    Map<ID,Set<String>> aIdToUniqueProductSetMap = new Map<ID,Set<String>> ();
    List<String> impactedOpps = new List<String>();  
    for(Opportunity io : optyList){
        impactedOpps.add(io.Id);
    }
    
    System.debug('#####closed won opps inside updateParent:'+impactedOpps.size() );
    //Go through each impacted Oppo and collect a unique set of Product names from all OLI
    for (Opportunity o : [select id, accountId, (select id, PricebookEntry.Product2.Name, PricebookEntry.Product2.Product_Group__c from OpportunityLineItems) from Opportunity where id IN :impactedOpps] ) {
        Set<String> productsInOppoSet = new Set<String> (); // reset the set for this Oppo
        for (OpportunityLineItem olip : o.opportunityLineItems) 
        {
        if(olip.PricebookEntry.Product2.Product_Group__c != null && olip.PricebookEntry.Product2.Product_Group__c != '')
        productsInOppoSet.add(olip.PricebookEntry.Product2.Product_Group__c);
        }
        // With the unique set, add it into our Map associating each account to its unique product set
        if(aIdToUniqueProductSetMap.containsKey(o.accountId)) {
        Set<String> uniqueProdSet = aIdToUniqueProductSetMap.get(o.accountId); // add this Oppo's unique set to whatever we have so far
        uniqueProdSet.addAll(productsInOppoSet);
        aIdToUniqueProductSetMap.put(o.accountId,uniqueProdSet); // put it back in the Map
        }    
        else
        aIdToUniqueProductSetMap.put(o.accountId,productsInOppoSet); // first Oppo for this Account; simply do a put      
    }

    // displays all keys
    System.debug('####all keys in the map: ' + aIdToUniqueProductSetMap.keySet()); 
    // displays all values
    System.debug('####a all values in the map (as a List): ' + aIdToUniqueProductSetMap.values());

    accList =  [Select id,SteelEye__c, Jump_Start_Subscription__c,PEM__c, xDB__c, PPAS__c, PPCD__c,PPSP__c,PGSQL__c, PPAS_Developer_Sub__c, PPSP_Developer_Sub__c, PGSQL_Developer_Sub__c, RDBA__c, Services__c, Training__c from Account WHERE Id in :aIdToUniqueProductSetMap.keySet()];

    System.debug('accList::' +accList);
    //For each account in the list
    for(Account acc : accList){     

    Set<String> prodGroupSet = aIdToUniqueProductSetMap.get(acc.Id);
    
    system.debug('prodGroupSet:' +prodGroupSet);
    
    for(String groupName : prodGroupSet){
        if(groupName.contains('PEM'))
        acc.PEM__c = true;

        if(groupName.contains('xDB'))
        acc.xDB__c = true;

        if(groupName.contains('PPAS'))
        acc.PPAS__c = true;

        if(groupName.contains('PPCD'))
        acc.PPCD__c = true;

        if(groupName.contains('PPSP'))
        acc.PPSP__c = true;

        if(groupName.contains('PGSQL'))
        acc.PGSQL__c = true;

        if(groupName.contains('PPAS_Developer_Sub'))
        acc.PPAS_Developer_Sub__c = true;

        if(groupName.contains('PPSP_Developer_Sub'))
        acc.PPSP_Developer_Sub__c = true;

        if(groupName.contains('PGSQL_Developer_Sub'))
        acc.PGSQL_Developer_Sub__c = true;

        if(groupName.contains('RDBA'))
        acc.RDBA__c = true;

        if(groupName.contains('Services'))
        acc.Services__c = true;

        if(groupName.contains('Training'))
        acc.Training__c = true;             

        if(groupName.contains('SteelEye'))
        acc.SteelEye__c = true;             

        if(groupName.contains('Jump_Start_Subscription'))
        acc.Jump_Start_Subscription__c = true;             
        }
    //add accounts to be updated to the list    
    accsToUpdate.add(acc); 
    }   
    try
    {
    //update accounts 
    if (accsToUpdate != null && !accsToUpdate.isEmpty())
    Database.update(accsToUpdate); 
    }
    catch(Exception e)
    {
    Trigger.new[0].addError(e.getMessage());
    }   
    }
    
    public class OpportunityWrapper
    {
        public Date endDate{get;set;}
        public Opportunity opp {get;set;}
    }
}
Any help very much appreciated.


 
I want to write Test class for belowclass
public class Contactpage{
 public Contactpage(ApexPages.StandardController controller) {
    }
public List<contactDemoMailSentwrap> ConsoleWrapperList4{get;set;}
public List<contactDemoMailSentwrap> getperformcallout4(){
ConsoleWrapperList4 = new List<contactDemoMailSentwrap>();

HttpRequest req = new HttpRequest();

HttpResponse res = new HttpResponse();

Http http = new Http();
req.setEndpoint('https://www.demomail.net/sf/api/ContactDemoMailSent?Email=twilms@verisign.con&NameSpace=Demos%20On%20Demand%20Report'); 

req.setMethod('GET');
req.setTimeout(10000);
res = http.send(req);
//System.assert(false,res.getBody()+'-----');
if(res.getstatusCode() == 200 && res.getbody() != null){
String replaceIllegal= res.getbody().replaceAll('\n','').replaceAll('\r','');
ConsoleWrapperList4=(List<contactDemoMailSentwrap>)System.JSON.deserialize(replaceIllegal,List<contactDemoMailSentwrap>.class);

}

return consolewrapperlist4;
}
}

 
Hi,

I have two object.
1.Employee Master
2.Sp Master.

SP master is a related list with Employee master.So i want if SP Master one field Active__c =true then on check box should get checked in Employee master.How to do that.Please help.
i am doing trailhead triggers challenge ,i have completed first challange successfully but in second challenge everything is fine still giving error unknown variable ShippingPostalCode.
With recent spring release I am unable to code using chrome or IE browser, whenever I try to open either the visualforce page or apex code window over the browser, the browser gets hang and unable to do so.  To perform the development activity i have to user the eclipse, which is ok, however what has happened with the browser coding ability?  is there a way to avoid this?  check the screenshot. BrowserErrro
Hello,

What is primary key for Account object