-
ChatterFeed
-
0Best Answers
-
1Likes Received
-
0Likes Given
-
2Questions
-
0Replies
Logic problem, it is possible? Add more quotelineitems if it has more than 1 on quantity
- Hello Guys.
- My method does not work correctly.
- What it does is call another method inside a loop, the functionality is to take each quotelineitem from the quote until it finishes collecting all the quotelineitems there are. (The method takes one quotelineitem at a time, that's why the loop).
- My problem arises when I want to add an extra quotelineitem if its quantity is greater than one, also concatenating a number 1-2-3-...-etc , depending on the quantity in the quoteline item.
- My first code works fine, skipping the quantity part inside the quotelineitem The second code is when I try to add an extra quotelineitem depending on the amount, which is where I need your help guys.
- The problem specific is the first code
- Thank you, good day :)
public static String SendEpics(String oppId, String idproject){ Quote quotes = [SELECT Id, Name FROM Quote WHERE OpportunityId =: oppId AND IsSyncing=true LIMIT 1]; List<QuoteLineItem> qlitems = [SELECT Id, Product2.Name, Product2.Description, Quantity FROM QuoteLineItem WHERE QuoteId =: quotes.Id]; //Example in the quoteline items list //ProductA, ProductB, ProductC //On product C, on quantity field I have 3, so I need to extend the quotelineitems like: //ProductA, ProductB, ProductC1, ProductC2, ProductC3 for(Quotelineitem qli :qlitems){ //What is doing? //Executing the method by passing it one quotelineitem per loop until all quotelineitems are finished postEpicIssuesIndividual(oppId, idproject, qli); //Here is calling one method that need one quotelineitem per call, I cant do it with a list //What should do now? //More quotelineitems should be added if the number in them is greater than 1. //Example: If the quantity of one of the quotelineitems is 2, //I have to add 2 quotelineitems instead of 1, concatenating a number. example; quotelineItemExample1, quotelineItemExample2 } return null; }
This is what im trying
public static String SendEpics(String oppId, String idproject){ Quote quotes = [SELECT Id, Name FROM Quote WHERE OpportunityId =: oppId AND IsSyncing=true LIMIT 1]; List<QuoteLineItem> qlitems = [SELECT Id, Product2.Name, Product2.Description, Quantity FROM QuoteLineItem WHERE QuoteId =: quotes.Id]; for(Quotelineitem qli :qlitems){ if(qli.Quantity > 1){ for(Integer i = 0; i > qli.Quantity; i++){ qli.Product2.Name = qli.Product2.Name + i; qli.Product2.Description = qli.Product2.Description; qlitems.add(qli); } } postEpicIssuesIndividual(oppId, idproject, qli); } return null; }
-
- alxhdez
- April 28, 2022
- Like
- 0
- Continue reading or reply
how can I complete my test class? (68% covered)I'm trying the part of wrapper class
Class Controller:
Test Class (68%, wrapper class is missing)
public with sharing class controllerquoteVisual { public String title {get;set;} public Quote quote {get;set;} public List<quoteLineItem> qliList {get;set;} //public List<Product2> products {get; set;} //Capturar Nombre de familia y lista de productos public Map<String,List<ObjectWrapper>> mapFamily {get;set;} //public Map<String,List<QuoteLineItem>> mapFamilyqli {get;set;} //Captutar Nombre de familia y recuento de Productos que se mostrarán public Map<String, Integer> FamilyCountMap{get;set;} //Capturar Lista de nombres de familia de productos public List<String> FamilyList {get;set;} //ProductList o products ya con los productos que se requieren mostrar public controllerquoteVisual(){ Id id = ApexPages.currentPage().getParameters().get('id'); //Obtener quote mediante el Id que arroja la visualforce desde quote quote = [SELECT Id, Name, TotalPrice, GrandTotal, ExpirationDate, AccountId, Total_Hours__c, OpportunityId, QuoteNumber FROM quote WHERE Id=:id LIMIT 1]; Opportunity opportunity = [SELECT Name FROM Opportunity WHERE Id=:quote.OpportunityId LIMIT 1]; title = opportunity.Name.split('\\|')[0] + opportunity.Name.split('\\|')[1]; Apexpages.currentPage().getHeaders().put('content-disposition', 'inline; filename='+title+ ' - ' +quote.QuoteNumber ); //Obtener lista de quoteLineItems de la actual quote qliList = [SELECT Id, Product2Id, Quantity FROM quoteLineItem WHERE quoteId=:Id]; /////////////////////////////////////////////// //Separar productos por tipo de familia mapFamily = new Map<String, List<ObjectWrapper>>(); FamilyCountMap = new Map<String, Integer>(); FamilyList = new List<String>(); List<quoteLineItem> finalqliList = new List<QuoteLineItem>(); finalqliList = qliList; //Agrupar por nombre de familia y preparar los map for(QuoteLineItem qq: finalqliList){ Product2 famObj = [SELECT Id, Name, Family, Description FROM Product2 WHERE Id=:qq.Product2Id]; if(famObj.Family == null){ famObj.Family= 'Sin clasificación'; } //List<QuoteLineItem> qq = qliList; List<ObjectWrapper> proList = new List<ObjectWrapper>(); //Verificar si el map ya contiene el mismo nombre por familia if(mapFamily.containsKey(famObj.Family)){ //Recuperar lista de productos existentes proList = mapFamily.get(famObj.Family); //Meter el nuevo producto a la lista proList.add(new ObjectWrapper(qq, famObj)); mapFamily.put(famObj.Family, proList); //Almacenar filas por nombre de familia FamilyCountMap.put(famObj.Family, proList.size()); } else{ //crear nuevo map del nombre de familia //.fammily,name,etc //proList.add(famObj); proList.add(new ObjectWrapper(qq, famObj)); mapFamily.put(famObj.Family, proList); //Almacenar filas por nombre de familia FamilyCountMap.put(famObj.Family, proList.size()); } FamilyList = new List<String>(mapFamily.keySet()); } } public class ObjectWrapper{ //Campos QuoteLineItems //Public Id QliId{get;set;} Public Decimal Quantity{get;set;} //Campos Producto Public String Name{get;set;} Public String Family{get;set;} Public String Description{get;set;} public ObjectWrapper(QuoteLineItem ql, Product2 pr){ //this.QliId = ql.Id; this.Quantity = ql.Quantity; this.Name = pr.Name; this.Family = pr.Family; this.Description = pr.Description; } } }
Test Class (68%, wrapper class is missing)
@isTest public class TestControllerquoteVisual{ @isTest static void testControllerVFP(){ Pricebook2 pb = new Pricebook2(Name = 'Standard Price Book', Description = 'Price Book Products', IsActive = true ); insert pb; Product2 prod = new Product2(Name = 'Test Product', Description = 'Descripción Test', Family = 'Salesforce Service Cloud', IsActive = true); insert prod; List<Pricebook2> standardPbList = [select id, name, isActive from Pricebook2 where IsStandard = true ]; List<PricebookEntry> listPriceBook = new List<PricebookEntry>(); for(Pricebook2 p : standardPbList ){ PricebookEntry pbe = New PricebookEntry (); pbe = new PricebookEntry(Pricebook2Id = p.Id, Product2Id = prod.Id, UnitPrice = 10000, IsActive = true, UseStandardPrice = false); listPriceBook.add(pbe); } insert listPriceBook; Opportunity opp = new Opportunity(Name = 'Test Opportunity', StageName = 'Discovery', Product_Families__c='Salesforce Service Cloud' ,CloseDate = system.today()); insert opp; Quote quttest = new Quote (Name = 'Quote Test' , OpportunityId = opp.id , Pricebook2Id = pb.id ); insert quttest; List<QuoteLineItem> listval = new List<QuoteLineItem>(); for(PricebookEntry pricebook : listPriceBook){ QuoteLineItem qutlineitemtest = new QuoteLineItem (); qutlineitemtest = new QuoteLineItem(QuoteId = quttest.id, Quantity = 3.00,UnitPrice = 12, PricebookEntryId = pricebook.id); listval.add(qutlineitemtest); } insert listval; QuoteLineItem qlitem = new QuoteLineItem(Quantity = 3.00, UnitPrice = 12 ); Test.startTest(); ApexPages.currentPage().getParameters().put('id', String.valueOf(quttest.Id)); controllerquoteVisual controllerVfp= new controllerquoteVisual(); //controllerVfp = new controllerquoteVisual(); controllerquoteVisual.ObjectWrapper wrapper = new controllerquoteVisual.ObjectWrapper(qlitem, prod); wrapper.Quantity = 3.00; wrapper.Name = prod.Name; wrapper.Description = prod.Description; wrapper.Family = prod.Family; Test.stopTest(); } }
-
- alxhdez
- December 28, 2022
- Like
- 1
- Continue reading or reply
how can I complete my test class? (68% covered)I'm trying the part of wrapper class
Class Controller:
Test Class (68%, wrapper class is missing)
public with sharing class controllerquoteVisual { public String title {get;set;} public Quote quote {get;set;} public List<quoteLineItem> qliList {get;set;} //public List<Product2> products {get; set;} //Capturar Nombre de familia y lista de productos public Map<String,List<ObjectWrapper>> mapFamily {get;set;} //public Map<String,List<QuoteLineItem>> mapFamilyqli {get;set;} //Captutar Nombre de familia y recuento de Productos que se mostrarán public Map<String, Integer> FamilyCountMap{get;set;} //Capturar Lista de nombres de familia de productos public List<String> FamilyList {get;set;} //ProductList o products ya con los productos que se requieren mostrar public controllerquoteVisual(){ Id id = ApexPages.currentPage().getParameters().get('id'); //Obtener quote mediante el Id que arroja la visualforce desde quote quote = [SELECT Id, Name, TotalPrice, GrandTotal, ExpirationDate, AccountId, Total_Hours__c, OpportunityId, QuoteNumber FROM quote WHERE Id=:id LIMIT 1]; Opportunity opportunity = [SELECT Name FROM Opportunity WHERE Id=:quote.OpportunityId LIMIT 1]; title = opportunity.Name.split('\\|')[0] + opportunity.Name.split('\\|')[1]; Apexpages.currentPage().getHeaders().put('content-disposition', 'inline; filename='+title+ ' - ' +quote.QuoteNumber ); //Obtener lista de quoteLineItems de la actual quote qliList = [SELECT Id, Product2Id, Quantity FROM quoteLineItem WHERE quoteId=:Id]; /////////////////////////////////////////////// //Separar productos por tipo de familia mapFamily = new Map<String, List<ObjectWrapper>>(); FamilyCountMap = new Map<String, Integer>(); FamilyList = new List<String>(); List<quoteLineItem> finalqliList = new List<QuoteLineItem>(); finalqliList = qliList; //Agrupar por nombre de familia y preparar los map for(QuoteLineItem qq: finalqliList){ Product2 famObj = [SELECT Id, Name, Family, Description FROM Product2 WHERE Id=:qq.Product2Id]; if(famObj.Family == null){ famObj.Family= 'Sin clasificación'; } //List<QuoteLineItem> qq = qliList; List<ObjectWrapper> proList = new List<ObjectWrapper>(); //Verificar si el map ya contiene el mismo nombre por familia if(mapFamily.containsKey(famObj.Family)){ //Recuperar lista de productos existentes proList = mapFamily.get(famObj.Family); //Meter el nuevo producto a la lista proList.add(new ObjectWrapper(qq, famObj)); mapFamily.put(famObj.Family, proList); //Almacenar filas por nombre de familia FamilyCountMap.put(famObj.Family, proList.size()); } else{ //crear nuevo map del nombre de familia //.fammily,name,etc //proList.add(famObj); proList.add(new ObjectWrapper(qq, famObj)); mapFamily.put(famObj.Family, proList); //Almacenar filas por nombre de familia FamilyCountMap.put(famObj.Family, proList.size()); } FamilyList = new List<String>(mapFamily.keySet()); } } public class ObjectWrapper{ //Campos QuoteLineItems //Public Id QliId{get;set;} Public Decimal Quantity{get;set;} //Campos Producto Public String Name{get;set;} Public String Family{get;set;} Public String Description{get;set;} public ObjectWrapper(QuoteLineItem ql, Product2 pr){ //this.QliId = ql.Id; this.Quantity = ql.Quantity; this.Name = pr.Name; this.Family = pr.Family; this.Description = pr.Description; } } }
Test Class (68%, wrapper class is missing)
@isTest public class TestControllerquoteVisual{ @isTest static void testControllerVFP(){ Pricebook2 pb = new Pricebook2(Name = 'Standard Price Book', Description = 'Price Book Products', IsActive = true ); insert pb; Product2 prod = new Product2(Name = 'Test Product', Description = 'Descripción Test', Family = 'Salesforce Service Cloud', IsActive = true); insert prod; List<Pricebook2> standardPbList = [select id, name, isActive from Pricebook2 where IsStandard = true ]; List<PricebookEntry> listPriceBook = new List<PricebookEntry>(); for(Pricebook2 p : standardPbList ){ PricebookEntry pbe = New PricebookEntry (); pbe = new PricebookEntry(Pricebook2Id = p.Id, Product2Id = prod.Id, UnitPrice = 10000, IsActive = true, UseStandardPrice = false); listPriceBook.add(pbe); } insert listPriceBook; Opportunity opp = new Opportunity(Name = 'Test Opportunity', StageName = 'Discovery', Product_Families__c='Salesforce Service Cloud' ,CloseDate = system.today()); insert opp; Quote quttest = new Quote (Name = 'Quote Test' , OpportunityId = opp.id , Pricebook2Id = pb.id ); insert quttest; List<QuoteLineItem> listval = new List<QuoteLineItem>(); for(PricebookEntry pricebook : listPriceBook){ QuoteLineItem qutlineitemtest = new QuoteLineItem (); qutlineitemtest = new QuoteLineItem(QuoteId = quttest.id, Quantity = 3.00,UnitPrice = 12, PricebookEntryId = pricebook.id); listval.add(qutlineitemtest); } insert listval; QuoteLineItem qlitem = new QuoteLineItem(Quantity = 3.00, UnitPrice = 12 ); Test.startTest(); ApexPages.currentPage().getParameters().put('id', String.valueOf(quttest.Id)); controllerquoteVisual controllerVfp= new controllerquoteVisual(); //controllerVfp = new controllerquoteVisual(); controllerquoteVisual.ObjectWrapper wrapper = new controllerquoteVisual.ObjectWrapper(qlitem, prod); wrapper.Quantity = 3.00; wrapper.Name = prod.Name; wrapper.Description = prod.Description; wrapper.Family = prod.Family; Test.stopTest(); } }
-
- alxhdez
- December 28, 2022
- Like
- 1
- Continue reading or reply