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
shakila Gshakila G 

I wrote Trigger To Update Incentive slab But my Test class not giving percentage?

Hi All,

My Apex Class still giving the 72 % percentage. Kindly let the optimized way to get more than 75% 


My Test class :

@isTest(seealldata=true)
private class OI_Incentivetest{
    static testMethod void IO_IncentiveIfillINCalculus(){
    
        GetInitialData Getdata = new GetInitialData();
        list<Account> acc = Getdata.getAccount();
        list<Product2> lstprod = Getdata.getProd();
        list<Opportunity> Opp = Getdata.getOpp();
        list<Pricebook2> lstPB = Getdata.getpricebook();
        list<Pricebookentry> lststdPbe = Getdata.getstdpbe();
        list<Pricebookentry> lstPbentry = new list<Pricebookentry>();
        list<attachment> lstattachment =  new list<attachment>();
        insert lstprod; 
        
        Incentive__c incindoor= new Incentive__c(Name='Indoor test', Active__c = true, Product_Type__c = 'Indoor', 
                Start_Date__c = date.newinstance(2014,12,25), Area__c = 'All India');
        insert incindoor;
        
        IncentiveLineItem__c inclitem = new IncentiveLineItem__c(Incentive__c = incindoor.id,Other_Mode__c=0.80 ,Neft_Cash__c=0.75 , Discount_From__c=0,Discount_To__c=10,Field_Staff__c=1,Telesales__c=1,Combined__c=2);
        IncentiveLineItem__c inclitem1 = new IncentiveLineItem__c(Incentive__c = incindoor.id,Other_Mode__c=0.80 ,Neft_Cash__c=0.75 , Discount_From__c=10,Discount_To__c=20,Field_Staff__c=0.5,Telesales__c=.05,Combined__c=1);
        insert inclitem;
        insert inclitem1;
        
        Incentive__c incPE= new Incentive__c(Name='PE test', Active__c = true, Product_Type__c = 'Play Equipment', Start_Date__c = date.newinstance(2014,12,25), Area__c = 'South');
        insert incPE;
        
        IncentiveLineItem__c incpeitem = new IncentiveLineItem__c(Incentive__c = incPE.id,Other_Mode__c=0.80 ,Neft_Cash__c=0.75 ,Discount_From__c=0,Discount_To__c=10,Field_Staff__c=1,Telesales__c=1,Combined__c=2);
        IncentiveLineItem__c incpeitem1 = new IncentiveLineItem__c(Incentive__c = incPE.id,Other_Mode__c=0.80 ,Neft_Cash__c=0.75 , Discount_From__c=10,Discount_To__c=20,Field_Staff__c=0.5,Telesales__c=.05,Combined__c=1);
        insert incpeitem;
        insert incpeitem1; 
        
        Integer indexvalue = 0;
        if(lstprod.size()>0){
            for(pricebookentry irow :lststdPbe){
                irow.product2id = lstprod[indexvalue].id;
                indexvalue++;
            }
        }
        
        insert lststdPbe;
        insert lstPB; 

        if(lstprod.size()>0)  {
            for(pricebook2 irow :lstPB) {
                for(Product2 ipro : lstprod ){
                    Pricebookentry pbe = new Pricebookentry();
                    pbe.product2id = ipro.id;
                    pbe.pricebook2id = irow.id;
                    pbe.unitprice = 3000;
                    pbe.isActive = true;
                    lstPbentry.add(pbe);    
                }
            }
        }
        
        insert lstPbentry;
        insert acc[0];
       
        Opp[0].accountId = acc[0].id;
        insert Opp[0]; 
        
        //Test.startTest();
        lstPB[0].Incentive_Slab__c=incPE.ID;
         update lstPB[0];
        
        Opp[0].Pricebook2Id = lstPB[0].id;
        update Opp[0];
        
        
        
        OpportunityLineItem OL = new OpportunityLineItem(opportunityid=Opp[0].id, Quantity=1, unitprice=8000,  
        pricebookentryid=lstPbentry[0].id);
        insert OL;  
        
        Quote Q = new Quote();
        Q.Name = 'QuoteOrbit';
        Q.OpportunityId = Opp[0].id; 
        Q.Quote_Count__c = 77;
        Q.Approved__c = true;
        Q.Quote_Number__c ='00000710';
        Q.Quotation_Date__c = date.newinstance(2013,3,5);
        Q.Pricebook2Id = lstPB[0].id;
        insert Q;
        
        Quotelineitem QL = new Quotelineitem(quoteId=Q.id, Quantity =1, Unitprice=8000,pricebookentryid=lstPbentry[0].id);
        insert QL; 
        
        Opp[0].SyncedQuoteId = Q.id;
        update Opp[0];
       
        Opp[0].Stagename = 'Closed Won';
        update Opp[0];
        
        Project__c Proj = new Project__c(name='OrbitProj', Opportunity__c = Opp[0].id, Quote__c = Q.id, Project_Type__c = 'New PE', Date_of_Installation__c = date.newinstance(2013,4,5),
        Nature_of_Case__c ='No Adv, Dspch & Erection Pending',Customer_Name__c=acc[0].id,Special_Instructions__c ='Test for Work order Pdf to be generated');    
        
        insert Proj;
        
        Payment__c pay = new Payment__c( Amount__c = 8400, Date__c = date.newinstance(2013,4,25),Project__C=Proj.ID ,Mode_of_Payment__c = 'Cheque',Opportunity__c = Opp[0].id, Payment_Type__c ='Full Pay');
        insert pay;    
       
        
      
       
       
        Opp[1].accountId = acc[0].id;
        insert Opp[1]; 
        
         lstPB[1].Incentive_Slab__c=incPE.ID;
         update lstPB[1];
       
        
        Opp[1].Pricebook2Id = lstPB[1].id;
        update Opp[1];
        
         Opp[1].Incentive_Calculated__c = true;
         Opp[1].NewIncentivePercentage__c=incpeitem1.Field_Staff__c;
        Update Opp[1];
        
        OpportunityLineItem OL1 = new OpportunityLineItem(opportunityid=Opp[1].id, Quantity=1, unitprice=25000,  
        pricebookentryid=lstPbentry[8].id);
        insert OL1;  
       
        Quote Q1 = new Quote();
        Q1.Name = 'QuoteOrbit';
        Q1.OpportunityId = Opp[1].id; 
        Q1.Quote_Count__c = 7;
        Q1.Approved__c = true;
        Q1.Quote_Number__c ='00000010';
        Q1.Quotation_Date__c = date.newinstance(2013,3,5);
        Q1.Pricebook2Id = lstPB[1].id;
        
        insert Q1;
        
        Quotelineitem QL1 = new Quotelineitem(quoteId=Q1.id, Quantity =1, Unitprice=25000,pricebookentryid=lstPbentry[8].id);
        insert QL1; 
         
        Opp[1].SyncedQuoteId = Q1.id;
        update Opp[1];
        
        Opp[1].Stagename = 'Closed Won';
        update Opp[1];
        
        Test.startTest();
        
        Project__c Proj1 = new Project__c(name='OrbitProj', Opportunity__c = Opp[1].id, Quote__c = Q1.id, Project_Type__c = 'New PE', Date_of_Installation__c = date.newinstance(2013,4,10),
        Nature_of_Case__c ='No Adv, Dspch & Erection Pending',Customer_Name__c=acc[0].id,Special_Instructions__c ='Test for Work order Pdf to be generated');    
        insert Proj1;
        
        Payment__c pay1 = new Payment__c( Amount__c = 5000, Date__c = date.newinstance(2013,4,15),Project__C=Proj1.ID, Mode_of_Payment__c = 'Cheque',Opportunity__c = Opp[1].id, Payment_Type__c ='Advance');
        insert pay1; 
        
        Payment__c pay2 = new Payment__c( Amount__c = 21790, Date__c = date.newinstance(2013,4,20),Project__C=Proj1.ID, Mode_of_Payment__c = 'Cheque',Opportunity__c = Opp[1].id, Payment_Type__c ='Final Pay');
        insert pay2; 
        
       iF(pay2.Payment_Type__c =='Final Pay')
       
       opp[1].IncentiveSlab__c=incPE.ID;
       Update opp[1];
        
        
        // Third Opportunity lstOpp[1]//
        Opp[2].accountId = acc[0].id;
        insert Opp[2];         
       
      

        Opp[2].Pricebook2Id = lstPB[2].id;
        update Opp[2];
        
        OpportunityLineItem OL2 = new OpportunityLineItem(opportunityid=Opp[2].id, Quantity=1, unitprice=25000,  
        pricebookentryid=lstPbentry[16].id);
        insert OL2;  
       
        Quote Q2 = new Quote();
        Q2.Name = 'QuoteOrbit';
        Q2.OpportunityId = Opp[2].id; 
        Q2.Quote_Count__c = 14;
        Q2.Approved__c = true;
        Q2.Quote_Number__c ='0000110';
        Q2.Quotation_Date__c = date.newinstance(2013,3,5);
        Q2.Pricebook2Id = lstPB[2].id;
        insert Q2;
        
        Quotelineitem QL2 = new Quotelineitem(quoteId=Q2.id, Quantity =1, Unitprice=30000,pricebookentryid=lstPbentry[16].id);
        insert QL2; 
         
        Opp[2].SyncedQuoteId = Q2.id;
        update Opp[2];
        
        Opp[2].Stagename = 'Closed Won';
        update Opp[2];
        
        Project__c Proj2 = new Project__c(name='OrbitProj', Opportunity__c = Opp[2].id, Quote__c = Q2.id, Project_Type__c = 'New PE', Date_of_Installation__c = date.newinstance(2013,4,10),
        Nature_of_Case__c ='No Adv, Dspch & Erection Pending',Customer_Name__c=acc[0].id,Special_Instructions__c ='Test for Work order Pdf to be generated');    
        insert Proj2;
          
        Payment__c payproj1 = new Payment__c ( Amount__c = 32149, Date__c = date.newinstance(2013,4,15),Project__C=Proj2.ID, Mode_of_Payment__c = 'Cheque',Opportunity__c = Opp[2].id, Payment_Type__c ='Full Pay');
        insert payproj1; 
        
        
     
        // Test For Trigger Incentive Claculus
        Opp[0].Incentive_Calculated__c = true;
        Update Opp[0];
        
        Opp[0].IncentiveSlab__c = incindoor.id;
        update Opp[0];

       
        
         lstPB[2].Incentive_Slab__c=incPE.ID;
         update lstPB[2];
        
        
        Opp[2].IncentiveSlab__c = incindoor.id;
        Update Opp[2];
        
        
        
        
       
        Test.stopTest();
    }
}


My Trigger:

trigger Incentive_Slot on Payment__c (after insert, after update) {

    Set<Id> OppId = new Set<Id>();
    List<Opportunity> opplist = new List<Opportunity>();
    set<Id> PBname = new set<Id>();
    List<Incentive__c> inc = new List<Incentive__c>(); 
    list<IncentiveLineItem__c> lstIli = new list<IncentiveLineItem__c>();
    Date pDate;
    ID ProjectiD;
    List<Pricebook2> PB= new List<Pricebook2>(); 
    Map<Id,Id>     incMap = new Map<id,id>();
    List<Opportunity> OppListtoUpdate = new List<Opportunity>();
    Integer NofoDays = 0;
    Boolean IFlag;
   
    set<String> PType =new set<String>();
     set<ID> PAYID=new set<ID>();
    for(Payment__c pRow: Trigger.new) {
        if( (prow.Payment_Type__c == 'Full Pay') || (prow.Payment_Type__c == 'Final Pay')) {
            OppId.add(prow.Opportunity__c);
              pDate = prow.Date__c;
              ProjectiD=Prow.Project__C;
              Ptype.add(Prow.Payment_Mode_Type__c);
              PAYID.add(Prow.ID);
        } 
    }
    
    
    
    
    if(OppId.size() > 0)
    {
        opplist = [select id, Customer_Slab_Type__c,Discount__c,StageName, Work_Order_Date__c, Date__c, Pricebook2Id, Pricebook_Name__c, 
            IncentiveSlab__c, Last_Payment_Received_Date__c, Incentive_For__c, Incentive__c,
            NewIncentivePercentage__c, IncentiveLast_Payment_Date__c, Final_Full_Payment_Date__c, 
            Outstanding_Amount__c, Special_Incentive_Account__c from Opportunity where id IN : OppId]; 
    }
    
    If(opplist.size() > 0)
    {
        for(Opportunity o : opplist)
        {
            if (o.StageName=='Closed Won' && o.Pricebook2Id!= null) {
                PBname.add(o.Pricebook2Id);
            }

        }
    }
    
    
    
    if(PBname.size() > 0)
    {
    
        PB=[select ID,Incentive_Slab__c from Pricebook2 where ID in :PBname and IsActive=True];
        {
        
        for(Pricebook2 i: PB)
        {
            if(i.Incentive_Slab__c != null)
            incMap.put(i.ID,i.Incentive_Slab__c);
        
        }
        
          }
    
    }
    
    
    
    for(Opportunity op : opplist)
    {   
        if (op.StageName=='Closed Won' && op.Pricebook_Name__c != null && incMap.containskey(op.Pricebook2Id)) {
        Opportunity oppn = new Opportunity(id = op.Id, Pricebook2Id= op.Pricebook2Id);
        oppn.IncentiveSlab__c = incMap.get(oppn.Pricebook2Id);
        OppListtoUpdate.add(oppn);
        
        }
    }
    
    if(OppListtoUpdate.size() > 0)
    {
    Update OppListtoUpdate;    
    IFlag=True;
    }
    
    
    IF(IFlag==True)
    {
        
         for(Opportunity opp : opplist)
        {            
                Project__C Pro =New project__C();
                Pro=[select ID, Date_of_Installation__c from Project__C where ID=:ProjectiD];
                if (Pro.Date_of_Installation__c != null) {
                
                      NofoDays= Pro.Date_of_Installation__c .daysBetween(pDate);
                    }
           
        
        
    inc =[select ID from Incentive__c where ID =:Opp.IncentiveSlab__c
     and Opp_Discount_To__c>=:opp.Discount__c ];
    
    
    If(inc.size()>0 && Opp.Customer_Slab_Type__c!='Type 4')
    {   
    
   lstIli = [select id,Other_Mode__c,Neft_Cash__c, Payment_Term_From_Days__c, Payment_Term_To_Days__c 
            from IncentiveLineItem__c where Incentive__c = : opp.IncentiveSlab__c and 
            Payment_Term_To_Days__c >=: NofoDays and 
            Customer_Mode__c=:opp.Customer_Slab_Type__c];
            
     } 
     Else IF(inc.size()>0 && Opp.Customer_Slab_Type__c=='Type 4')
        {
        
             Payment__c  PMT =new Payment__c  ();
            
             PMt=[select ID,Date__c,Advance_Payment__c,Payment_Type__c from Payment__c  where Project__c=:ProjectiD
             and Payment_Type__c='Advance' and ID!=:PAYID];
         
             IF(PMT.Advance_Payment__c!=Null)
             {
               
                lstIli = [select id,Other_Mode__c,Neft_Cash__c, Payment_Term_From_Days__c, Payment_Term_To_Days__c 
                from IncentiveLineItem__c where Incentive__c = : opp.IncentiveSlab__c and 
                Payment_Term_To_Days__c >=: NofoDays and 
                Discount_To__c>=:PMT.Advance_Payment__c and Discount_From__c>=:PMT.Advance_Payment__c and
                Customer_Mode__c=:opp.Customer_Slab_Type__c];
               
             }
         
         }
     

    if (lstIli.size() > 0) { 
   
        
      if (PType.contains('Cash') || PType.contains('NEFT'))
            opp.NewIncentivePercentage__c = lstIli[0].Neft_Cash__c;
        else if (PType.contains('Others'))
             opp.NewIncentivePercentage__c = lstIli[0].Other_Mode__c;
       else
            opp.NewIncentivePercentage__c =0;
        list<Opportunity> lstOpp = new list<Opportunity>();
        lstOpp.add(opp);
        update lstOpp;
    }
    
    
    
    
             
     }
             
      }
 }
shakila Gshakila G
Hi All,
Can anyone help on this?