Apex Class :
public class SumQuoteHandler {
Public static set<Id> ids = new set<Id>();
Public static void sumQuotefeld(List<QuoteLineItem>QLL){
Map<Id, Quote> mapQuote = new Map<Id, Quote>();
for(QuoteLineItem QLII : QLL){
ids.add(QLII.QuoteId);
mapQuote.put(QLII.QuoteId, new Quote(Id = QLII.QuoteId, Rabatt_der_einmaligen_Geb_hren__c = 0, einmalige_Geb_hren__c = 0, monatlicher_LP_Lizenzen__c = 0));
}
//system.debug(ids);
List<Quote> QI = [SELECT Id, Rabatt_der_einmaligen_Geb_hren__c, einmalige_Geb_hren__c, monatlicher_LP_Lizenzen__c FROM Quote where Id =:ids]; // where Id IN:ids
system.debug(QI);
List<QuoteLineItem> QL = [SELECT id, QuoteId,Produktkategorie__c, isdeleted, GesamtpreisNEU__c, Euro_Rabatt_del__c, ListPrice FROM QuoteLineItem WHERE QuoteId IN: ids ];
for(QuoteLineItem QQ : QL){
if(QQ.Produktkategorie__c != 'Software Subscription' && QQ.Id!=null){
if(QQ.Euro_Rabatt_del__c==null){
mapQuote.get(qq.QuoteId).Rabatt_der_einmaligen_Geb_hren__c +=0;
mapQuote.get(qq.QuoteId).einmalige_Geb_hren__c +=QQ.GesamtpreisNEU__c;
}
else if(QQ.GesamtpreisNEU__c!=null){
mapQuote.get(qq.QuoteId).Rabatt_der_einmaligen_Geb_hren__c +=QQ.Euro_Rabatt_del__c;
mapQuote.get(qq.QuoteId).einmalige_Geb_hren__c +=QQ.GesamtpreisNEU__c;
}
}
else if(QQ.Produktkategorie__c == 'Software Subscription' && QQ.Id!=null && QQ.ListPrice!=null){
mapQuote.get(qq.QuoteId).monatlicher_LP_Lizenzen__c +=QQ.ListPrice;
}
}
update mapQuote.values();
}
}
Test Class :
@isTest
private class TestSumQuoteHandlerTest {
@isTest static void TestsumQuotefeld() {
Account acc = new Account (name='Acme',CustomCountry__c = 'Deutschland');
insert acc;
Opportunity opp= new Opportunity ();
opp.name= 'Testopp';
Opp.Accountid= acc.id;
opp.CloseDate= date.today();
opp.StageName= 'Qualification';
insert opp;
Pricebook2 pb = new Pricebook2(Name = 'Standard Price Book 2009', Description = 'Price Book 2009 Products', IsActive = true );
insert pb;
Product2 prod = new Product2(Name = 'SLA: Bronze', Produktkategorie__c='software subscription', IsActive = true);
insert prod;
PricebookEntry pbe=new PricebookEntry(unitprice=0.01,Product2Id=prod.Id, Pricebook2Id=Test.getStandardPricebookId(), IsActive= true);
insert pbe;
Quote q= new Quote ();
q.Name= 'Testq';
Q.Rabatt_der_einmaligen_Geb_hren__c = 0;
Q.einmalige_Geb_hren__c = 0;
Q.monatlicher_LP_Lizenzen__c = 0;
q.OpportunityId= Opp.id;
q.BillingStreet= '123';
q.BillingCity= 'City';
q.BillingPostalCode= '12345';
q.Pricebook2Id= Test.getStandardPricebookId();
insert q;
QuoteLineItem qli= new QuoteLineItem();
qli.QuoteId=q.Id;
qli.PricebookEntryid= pbe.Id;
qli.quantity=2;
qli.UnitPrice = 1;
Qli.GesamtpreisNEU__c = 2;
Qli.Euro_Rabatt_del__c = 2;
Qli.Description = 'Test2';
Qli.Quantity = 2;
insert qli;
List<QuoteLineitem> QLL = New List<Quotelineitem>();
Qll.add(qli);
sumquoteHandler.sumQuotefeld(QLL);
}
}
I shall be grateful to you for your kind assitance
Hi Nishant,
You need to create 1 more method and test it without GesamtpreisNEU__C as below:@isTest
private class TestSumQuoteHandlerTest {
@isTest static void TestsumQuotefeld() {
Account acc = new Account (name='Acme',CustomCountry__c = 'Deutschland');
insert acc;
Opportunity opp= new Opportunity ();
opp.name= 'Testopp';
Opp.Accountid= acc.id;
opp.CloseDate= date.today();
opp.StageName= 'Qualification';
insert opp;
Pricebook2 pb = new Pricebook2(Name = 'Standard Price Book 2009', Description = 'Price Book 2009 Products', IsActive = true );
insert pb;
Product2 prod = new Product2(Name = 'SLA: Bronze', Produktkategorie__c='Software Subscription', IsActive = true);
insert prod;
PricebookEntry pbe=new PricebookEntry(unitprice=0.01,Product2Id=prod.Id, Pricebook2Id=Test.getStandardPricebookId(), IsActive= true);
insert pbe;
Quote q= new Quote ();
q.Name= 'Testq';
Q.Rabatt_der_einmaligen_Geb_hren__c = 0;
Q.einmalige_Geb_hren__c = 0;
Q.monatlicher_LP_Lizenzen__c = 0;
q.OpportunityId= Opp.id;
q.BillingStreet= '123';
q.BillingCity= 'City';
q.BillingPostalCode= '12345';
q.Pricebook2Id= Test.getStandardPricebookId();
insert q;
QuoteLineItem qli= new QuoteLineItem();
qli.QuoteId=q.Id;
qli.PricebookEntryid= pbe.Id;
qli.quantity=2;
qli.UnitPrice = 1;
Qli.GesamtpreisNEU__c = 2;
Qli.Euro_Rabatt_del__c = 2;
Qli.Description = 'Test2';
Qli.Quantity = 2;
insert qli;
List<QuoteLineitem> QLL = New List<Quotelineitem>();
Qll.add(qli);
sumquoteHandler.sumQuotefeld(QLL);
}
// New method to validate if condition
@isTest static void TestsumQuotefeld_New() {
Account acc = new Account (name='Acme',CustomCountry__c = 'Deutschland');
insert acc;
Opportunity opp= new Opportunity ();
opp.name= 'Testopp';
Opp.Accountid= acc.id;
opp.CloseDate= date.today();
opp.StageName= 'Qualification';
insert opp;
Pricebook2 pb = new Pricebook2(Name = 'Standard Price Book 2009', Description = 'Price Book 2009 Products', IsActive = true );
insert pb;
Product2 prod = new Product2(Name = 'SLA: Bronze', Produktkategorie__c='Software Subscription', IsActive = true);
insert prod;
PricebookEntry pbe=new PricebookEntry(unitprice=0.01,Product2Id=prod.Id, Pricebook2Id=Test.getStandardPricebookId(), IsActive= true);
insert pbe;
Quote q= new Quote ();
q.Name= 'Testq';
Q.Rabatt_der_einmaligen_Geb_hren__c = 0;
Q.einmalige_Geb_hren__c = 0;
Q.monatlicher_LP_Lizenzen__c = 0;
q.OpportunityId= Opp.id;
q.BillingStreet= '123';
q.BillingCity= 'City';
q.BillingPostalCode= '12345';
q.Pricebook2Id= Test.getStandardPricebookId();
insert q;
QuoteLineItem qli= new QuoteLineItem();
qli.QuoteId=q.Id;
qli.PricebookEntryid= pbe.Id;
qli.quantity=2;
qli.UnitPrice = 1;
Qli.GesamtpreisNEU__c = 2;
// Qli.Euro_Rabatt_del__c = 2;
Qli.Description = 'Test2';
Qli.Quantity = 2;
insert qli;
List<QuoteLineitem> QLL = New List<Quotelineitem>();
Qll.add(qli);
sumquoteHandler.sumQuotefeld(QLL);
}
}