You need to sign in to do that
Don't have an account?
shakila 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;
}
}
}
}
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;
}
}
}
}
Can anyone help on this?