You need to sign in to do that
Don't have an account?
pavithra v 5
Challenge Not yet complete... here's what's wrong: Ensure that you implement all the pagination methods using the corresponding StandardSetController methods.
7.Challenge Not yet complete... here's what's wrong:
Ensure that you implement all the pagination methods using the corresponding StandardSetController methods.
/**
* @name OrderExtension
* @description This class is provided for you to facilitate the Super Badge
**/
public class OrderExtension {
public Order orderRecord {get;set;}
public List<OrderItem> orderItemList {get;set;}
public String selectedFamily {get;set;}
public List<chartHelper.chartData> pieData {get;set;}
public Decimal total {get;set;}
public Map<Id,OrderItem> orderItemMap;
ApexPages.StandardSetController standardSetController;
public OrderExtension(ApexPages.StandardController standardController){
orderRecord = (Order)standardController.getRecord();
orderItemMap = new Map<id,OrderItem>();
if ( orderRecord.Id != null ){
orderRecord = queryOrderRecord(orderRecord.Id);
}
orderItemList = new List<OrderItem>();
OrderItemList.addAll(orderRecord.OrderItems);
set<Id> p2ids = new set<Id>();
for(OrderItem oitem : OrderItemList){
p2ids.add(oitem.PriceBookEntryId);
}
List<PriceBookEntry> p2List = new List<PriceBookEntry>();
if(p2Ids.size()>0){
p2List = [select id from PriceBookEntry where id IN: p2Ids];
}
standardSetController= new ApexPages.StandardSetController(p2List);
standardSetController.setPageSize(Constants.DEFAULT_ROWS);
}
public void resetstandardSetController() {
String query = 'SELECT Name, Product2.Family, Product2.Name, Product2Id, UnitPrice, Product2.Quantity_Remaining__c'
+ ' FROM PricebookEntry WHERE IsActive = TRUE';
if (selectedFamily != null && selectedFamily != Constants.SELECT_ONE) {
query += ' AND Product2.Family = \'' + selectedFamily + '\'';
}
query += ' ORDER BY Name';
standardSetController= new ApexPages.StandardSetController(Database.getQueryLocator(query));
if(StandardSetController== null){
StandardSetController= new ApexPages.StandardSetController(Database.getQueryLocator([SELECT Product2Id, Product2.Family, Product2.Name,
Product2.Quantity_Remaining__c, UnitPrice FROM PricebookEntry ]));
StandardSetController.setPageSize(Constants.DEFAULT_ROWS);
}
}
//ToDo: Implement your own method to populate orderItemList
// that you will call after pagination and/or family selection
public void GetOrderItems() {
orderItemList = new List<OrderItem>();
for (SObject obj : standardSetController.getRecords()) {
PricebookEntry pbe = (PricebookEntry)obj;
if (orderItemMap.containsKey(pbe.Product2Id)) {
orderItemList.add(orderItemMap.get(pbe.Product2Id));
} else {
orderItemList.add(new OrderItem(
PricebookEntryId=pbe.Id,
Product2Id=pbe.Product2Id,
UnitPrice=pbe.UnitPrice,
Quantity=0,
Product2=pbe.Product2
));
}
}
}
/**
* @name OnFieldChange
* @description
**/
public void onFieldChange(){
//ToDo: Implement logic to store the values changed on the page
for (OrderItem oi : orderItemList) {
orderItemMap.put(oi.PricebookEntryId, oi);
}
// and populate pieData
pieData = null;
total = 0;
for (OrderItem oi : orderItemMap.values()) {
if (oi.Quantity > 0) {
if (null == pieData) {
pieData = new List<chartHelper.ChartData>();
}
pieData.add(new chartHelper.ChartData(oi.Product2.Name, oi.Quantity * oi.UnitPrice));
// and populate total
total += oi.UnitPrice * oi.Quantity;
}
}
}
/**
* @name SelectFamily
* @description
**/
public void selectFamily(){
//ToDo: Implement logic to filter based on the selected product family
resetstandardSetController();
GetOrderItems();
}
/**
* @name Save
* @description
**/
public void save(){
//ToDo: Implement logic to save the Order and populated OrderItems
System.Savepoint sp = Database.setSavepoint();
try {
if (null == orderRecord.Pricebook2Id) {
orderRecord.Pricebook2Id = Constants.STANDARD_PRICEBOOK_ID;
}
upsert orderRecord;
List<OrderItem> orderItemsToUpsert = new List<OrderItem>();
List<OrderItem> orderItemsToDelete = new List<OrderItem>();
system.debug('@@@@@@@@@@@@@@@#######'+orderItemMap.values());
for (OrderItem oi : orderItemMap.values()) {
if (oi.Quantity > 0) {
if (null == oi.OrderId) {
oi.OrderId = orderRecord.Id;
}
orderItemsToUpsert.add(oi);
} else if (oi.Id != null) {
orderItemsToDelete.add(oi);
}
}
if(orderItemsToUpsert.size()>0)
upsert orderItemsToUpsert;
if(orderItemsToDelete.size()>0)
delete orderItemsToDelete;
} catch (Exception e) {
Database.rollback(sp);
apexPages.addMessage(new ApexPages.message(ApexPages.Severity.INFO,Constants.ERROR_MESSAGE));
}
}
/**
* @name First
* @description
**/
public void First(){
standardSetController.first();
GetOrderItems();
}
/**
* @name Next
* @description
**/
public void Next(){
standardSetController.next();
GetOrderItems();
}
/**
* @name Previous
* @description
**/
public void Previous(){
standardSetController.previous();
GetOrderItems();
}
/**
* @name Last
* @description
**/
public void Last(){
standardSetController.last();
GetOrderItems();
}
/**
* @name GetHasPrevious
* @description
**/
public Boolean GetHasPrevious(){
return standardSetController.gethasprevious();
}
/**
* @name GetHasNext
* @description
**/
public Boolean GetHasNext(){
return standardSetController.gethasnext();
}
/**
* @name GetTotalPages
* @description
**/
public Integer GetTotalPages(){
Integer totalPages = (Integer)Math.ceil(standardSetController.getResultSize() / (Decimal)Constants.DEFAULT_ROWS);
System.debug('############ totalPages: ' + totalPages);
return totalPages;
}
/**
* @name GetPageNumber
* @description
**/
public Integer GetPageNumber(){
return standardSetController.getpagenumber();
}
/**
* @name GetFamilyOptions
* @description
**/
public List<SelectOption> GetFamilyOptions() {
List<SelectOption> options = new List<SelectOption>{
new SelectOption(Constants.SELECT_ONE, Constants.SELECT_ONE)
};
for (Schema.PicklistEntry ple : Constants.PRODUCT_FAMILY) {
options.add(new SelectOption(ple.getValue(), ple.getLabel()));
}
return options;
}
/**
* @name QueryOrderRecord
* @description
**/
public static Order QueryOrderRecord(Id orderId){
return [
SELECT Id, AccountId, EffectiveDate, Name, Status, Pricebook2Id,
(
SELECT Id, OrderId, Quantity, UnitPrice, PricebookEntryId, Product2Id,
Product2.Name, Product2.Family, Product2.Quantity_Remaining__c
FROM OrderItems where PricebookEntry.isActive = true
)
FROM Order WHERE Id = :orderId
];
}
}
Ensure that you implement all the pagination methods using the corresponding StandardSetController methods.
/**
* @name OrderExtension
* @description This class is provided for you to facilitate the Super Badge
**/
public class OrderExtension {
public Order orderRecord {get;set;}
public List<OrderItem> orderItemList {get;set;}
public String selectedFamily {get;set;}
public List<chartHelper.chartData> pieData {get;set;}
public Decimal total {get;set;}
public Map<Id,OrderItem> orderItemMap;
ApexPages.StandardSetController standardSetController;
public OrderExtension(ApexPages.StandardController standardController){
orderRecord = (Order)standardController.getRecord();
orderItemMap = new Map<id,OrderItem>();
if ( orderRecord.Id != null ){
orderRecord = queryOrderRecord(orderRecord.Id);
}
orderItemList = new List<OrderItem>();
OrderItemList.addAll(orderRecord.OrderItems);
set<Id> p2ids = new set<Id>();
for(OrderItem oitem : OrderItemList){
p2ids.add(oitem.PriceBookEntryId);
}
List<PriceBookEntry> p2List = new List<PriceBookEntry>();
if(p2Ids.size()>0){
p2List = [select id from PriceBookEntry where id IN: p2Ids];
}
standardSetController= new ApexPages.StandardSetController(p2List);
standardSetController.setPageSize(Constants.DEFAULT_ROWS);
}
public void resetstandardSetController() {
String query = 'SELECT Name, Product2.Family, Product2.Name, Product2Id, UnitPrice, Product2.Quantity_Remaining__c'
+ ' FROM PricebookEntry WHERE IsActive = TRUE';
if (selectedFamily != null && selectedFamily != Constants.SELECT_ONE) {
query += ' AND Product2.Family = \'' + selectedFamily + '\'';
}
query += ' ORDER BY Name';
standardSetController= new ApexPages.StandardSetController(Database.getQueryLocator(query));
if(StandardSetController== null){
StandardSetController= new ApexPages.StandardSetController(Database.getQueryLocator([SELECT Product2Id, Product2.Family, Product2.Name,
Product2.Quantity_Remaining__c, UnitPrice FROM PricebookEntry ]));
StandardSetController.setPageSize(Constants.DEFAULT_ROWS);
}
}
//ToDo: Implement your own method to populate orderItemList
// that you will call after pagination and/or family selection
public void GetOrderItems() {
orderItemList = new List<OrderItem>();
for (SObject obj : standardSetController.getRecords()) {
PricebookEntry pbe = (PricebookEntry)obj;
if (orderItemMap.containsKey(pbe.Product2Id)) {
orderItemList.add(orderItemMap.get(pbe.Product2Id));
} else {
orderItemList.add(new OrderItem(
PricebookEntryId=pbe.Id,
Product2Id=pbe.Product2Id,
UnitPrice=pbe.UnitPrice,
Quantity=0,
Product2=pbe.Product2
));
}
}
}
/**
* @name OnFieldChange
* @description
**/
public void onFieldChange(){
//ToDo: Implement logic to store the values changed on the page
for (OrderItem oi : orderItemList) {
orderItemMap.put(oi.PricebookEntryId, oi);
}
// and populate pieData
pieData = null;
total = 0;
for (OrderItem oi : orderItemMap.values()) {
if (oi.Quantity > 0) {
if (null == pieData) {
pieData = new List<chartHelper.ChartData>();
}
pieData.add(new chartHelper.ChartData(oi.Product2.Name, oi.Quantity * oi.UnitPrice));
// and populate total
total += oi.UnitPrice * oi.Quantity;
}
}
}
/**
* @name SelectFamily
* @description
**/
public void selectFamily(){
//ToDo: Implement logic to filter based on the selected product family
resetstandardSetController();
GetOrderItems();
}
/**
* @name Save
* @description
**/
public void save(){
//ToDo: Implement logic to save the Order and populated OrderItems
System.Savepoint sp = Database.setSavepoint();
try {
if (null == orderRecord.Pricebook2Id) {
orderRecord.Pricebook2Id = Constants.STANDARD_PRICEBOOK_ID;
}
upsert orderRecord;
List<OrderItem> orderItemsToUpsert = new List<OrderItem>();
List<OrderItem> orderItemsToDelete = new List<OrderItem>();
system.debug('@@@@@@@@@@@@@@@#######'+orderItemMap.values());
for (OrderItem oi : orderItemMap.values()) {
if (oi.Quantity > 0) {
if (null == oi.OrderId) {
oi.OrderId = orderRecord.Id;
}
orderItemsToUpsert.add(oi);
} else if (oi.Id != null) {
orderItemsToDelete.add(oi);
}
}
if(orderItemsToUpsert.size()>0)
upsert orderItemsToUpsert;
if(orderItemsToDelete.size()>0)
delete orderItemsToDelete;
} catch (Exception e) {
Database.rollback(sp);
apexPages.addMessage(new ApexPages.message(ApexPages.Severity.INFO,Constants.ERROR_MESSAGE));
}
}
/**
* @name First
* @description
**/
public void First(){
standardSetController.first();
GetOrderItems();
}
/**
* @name Next
* @description
**/
public void Next(){
standardSetController.next();
GetOrderItems();
}
/**
* @name Previous
* @description
**/
public void Previous(){
standardSetController.previous();
GetOrderItems();
}
/**
* @name Last
* @description
**/
public void Last(){
standardSetController.last();
GetOrderItems();
}
/**
* @name GetHasPrevious
* @description
**/
public Boolean GetHasPrevious(){
return standardSetController.gethasprevious();
}
/**
* @name GetHasNext
* @description
**/
public Boolean GetHasNext(){
return standardSetController.gethasnext();
}
/**
* @name GetTotalPages
* @description
**/
public Integer GetTotalPages(){
Integer totalPages = (Integer)Math.ceil(standardSetController.getResultSize() / (Decimal)Constants.DEFAULT_ROWS);
System.debug('############ totalPages: ' + totalPages);
return totalPages;
}
/**
* @name GetPageNumber
* @description
**/
public Integer GetPageNumber(){
return standardSetController.getpagenumber();
}
/**
* @name GetFamilyOptions
* @description
**/
public List<SelectOption> GetFamilyOptions() {
List<SelectOption> options = new List<SelectOption>{
new SelectOption(Constants.SELECT_ONE, Constants.SELECT_ONE)
};
for (Schema.PicklistEntry ple : Constants.PRODUCT_FAMILY) {
options.add(new SelectOption(ple.getValue(), ple.getLabel()));
}
return options;
}
/**
* @name QueryOrderRecord
* @description
**/
public static Order QueryOrderRecord(Id orderId){
return [
SELECT Id, AccountId, EffectiveDate, Name, Status, Pricebook2Id,
(
SELECT Id, OrderId, Quantity, UnitPrice, PricebookEntryId, Product2Id,
Product2.Name, Product2.Family, Product2.Quantity_Remaining__c
FROM OrderItems where PricebookEntry.isActive = true
)
FROM Order WHERE Id = :orderId
];
}
}
i have used your code but still i am facing same issue, please help me some one
This select have to return less then 14 raws. If it return more than 14 raws delete them. It must help.
¯\_(ツ)_/¯
[SELECT Name, Product2.Family, Product2.Name, Product2Id, UnitPrice, Product2.Quantity_Remaining__c FROM PricebookEntry WHERE IsActive = TRUE ORDER BY Name]
but still I am getting "Challenge Not yet complete... here's what's wrong:
Ensure that values are preserved during pagination." this error.
Can u share the code for the order extension class?
Hi Dipak ,
Have solution for the error Ensure that values are preserved during pagination.Please help