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
santhosh konathala 26santhosh konathala 26 

Any one can help

Geeting an error like "system.asset failed"
Below is my class:
/**
* @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);
        }
        loadInitialOrderItemData();
        loadPriceBookentry();
        
    }
    
    public void loadPriceBookentry() {
        String query = 'SELECT Name, Id, Pricebook2Id, Product2Id, UnitPrice, Product2.Name,Product2.Quantity_Remaining__c, Product2.Family FROM PricebookEntry  WHERE isActive= true';
        if (String.isNotBlank(selectedFamily) && selectedFamily != Constants.SELECT_ONE ) {
            query += ' AND Product2.Family = \''+ selectedFamily + '\'';
        }
        /*if (orderRecord.Id != null) {
query += ' AND Product2Id in (select Product2Id from OrderItem where orderId= \''+ orderRecord.Id + '\')';
}*/
        
        
        standardSetController = new ApexPages.StandardSetController(Database.getQueryLocator(query));
        standardSetController.setPageSize(Constants.DEFAULT_ROWS);
        
        loadOrderItem();
    }
    
    public void loadOrderItem() {
        orderItemList = new List<OrderItem>();
        if(standardSetController.getRecords()!=null && standardSetController.getRecords().size() > 0) {
            for (SObject  obj : standardSetController.getRecords()) {
                PricebookEntry entry = (PricebookEntry)obj;
                
                if(orderItemMap.containsKey(entry.product2Id)) {
                    orderItemList.add(orderItemMap.get(entry.product2Id));
                } else{
                    OrderItem item = new OrderItem(
                        Quantity = 0,
                        PricebookEntryId = entry.Id,
                        Product2Id = entry.Product2Id,
                        UnitPrice = entry.UnitPrice,
                        Product2 = entry.Product2
                    );
                    orderItemList.add(item);
                    orderItemMap.put(entry.Product2Id, item);
                }
            }
        }
        
    }
    
    public void loadInitialOrderItemData() {
        for(OrderItem item : orderRecord.OrderItems) {
            orderItemMap.put(item.Product2Id, item);
        }
        loadChartData();
    }
    
    public void loadChartData() {
        this.total = 0;
        pieData = new List<ChartHelper.ChartData>();
        for(OrderItem item : orderItemMap.values()) {
            pieData.add(new ChartHelper.ChartData(item.Product2.Name, (item.UnitPrice * item.Quantity)));
            total = total + (item.UnitPrice*item.Quantity);
        }
    }
    
    //ToDo: Implement your own method to populate orderItemList
    //  that you will call after pagination and/or family selection
    
    
    /**
* @name OnFieldChange
* @description
**/
    public void OnFieldChange(){
        //ToDo: Implement logic to store the values changed on the page
        //      and populate pieData
        //      and populate total
        
        for(OrderItem item : orderItemList){
            orderItemMap.put(item.Product2Id, item);
        }
        
        loadChartData();
        
    }
    
    /**
* @name SelectFamily
* @description
**/
    public void SelectFamily(){
        //ToDo: Implement logic to filter based on the selected product family
        loadPriceBookentry();
    }
    
    /**
* @name Save
* @description
**/
    public void Save(){
        //ToDo: Implement logic to save the Order and populated OrderItems
        /*System.Savepoint sp = Database.setSavepoint();
        
        try {
            if(orderRecord.Pricebook2Id == null) {
                orderRecord.Pricebook2Id = Constants.STANDARD_PRICEBOOK_ID;
            }
            upsert orderRecord;
            
            List<OrderItem> insertItems = new List<OrderItem>();
            List<OrderItem> deleteItems = new List<OrderItem>();
            
            for (OrderItem item : orderItemMap.values()) {
                if(item.Quantity > 0) {
                    if(item.OrderId == null) {
                        item.OrderId = orderRecord.Id;
                    }
                    insertItems.add(item);
                } else if(item.Id != null) {
                    OrderItem newItem = new OrderItem();
                    newItem.id=item.Id;
                    deleteItems.add(newItem);
                    item.Id = null;
                }
            }
            
            upsert insertItems;
            delete deleteItems;
            
        } catch (Exception e){
            Database.rollback(sp);
            apexPages.addMessage(new ApexPages.message(ApexPages.Severity.INFO,Constants.ERROR_MESSAGE));
        }*/
        
        System.Savepoint sp = Database.setSavepoint();

    try {
      if(orderRecord.Pricebook2Id == null) {
        orderRecord.Pricebook2Id = Constants.STANDARD_PRICEBOOK_ID;
      }
      upsert orderRecord;

      List<OrderItem> orderItemsToUpsert = new List<OrderItem>();
      List<OrderItem> orderItemsToDelete = new List<OrderItem>();

      for (OrderItem oi : orderItemMap.values()) {
        if(oi.Quantity > 0) {
          if(oi.OrderId == null) {
            oi.OrderId = orderRecord.Id;
          }
          orderItemsToUpsert.add(oi);
        } else if(oi.Id != null) {
          orderItemsToDelete.add(new OrderItem(id=oi.Id));
          oi.Id = null;
        }
      }

      upsert orderItemsToUpsert;
      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();
        loadOrderItem();
    }
    
    
    /**
* @name Next
* @description
**/
    public void Next(){
        standardSetController.next();
        loadOrderItem();
    }
    
    
    /**
* @name Previous
* @description
**/
    public void Previous(){
        standardSetController.previous();
        loadOrderItem();
    }
    
    /**
* @name Last
* @description
**/
    public void Last(){
        standardSetController.last();
        loadOrderItem();
    }
    
    /**
* @name GetHasPrevious
* @description
**/
    public Boolean GetHasPrevious(){
        return standardSetController.getHasPrevious();
    }
    
    /**
* @name GetHasNext
* @description
**/
    public Boolean GetHasNext(){
        return standardSetController.getHasNext();
    }
    
    /**
* @name GetTotalPages
* @description
**/
    public Integer GetTotalPages(){
        return (Integer)math.ceil(standardSetController.getResultSize()/(Decimal)Constants.DEFAULT_ROWS);
    }
    
    /**
* @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
            )
            FROM Order
            WHERE Id = :orderId
        ];
    }
    
}

Below is my Test class:
@isTest (seeAllData=false)
private class OrderTests {
    @testSetup
    static void SetupTestData() {
        TestDataFactory.InsertTestData(20);
    }
    
    static testmethod void OrderUpdate_UnitTest() {
        Order selectedOrder = [Select name,Status, Id from Order limit 1];
        Product2 oldProd = [Select Quantity_Ordered__c, Name, Id from Product2 limit 1];
        
        selectedOrder.Status = Constants.ACTIVATED_ORDER_STATUS;
        update selectedOrder;
        
        Product2 updatedProd = [Select Quantity_Ordered__c, Name, Id from Product2 limit 1];
        
        TestDataFactory.VerifyQuantityOrdered(oldProd,updatedProd,Constants.DEFAULT_ROWS);
    }
    
    static testmethod void OrderExtension_UnitTest() {
        PageReference reference = Page.OrderEdit;
        Test.setCurrentPage(reference);
        Order CurOrder = [Select Id,Status from Order limit 1];
        ApexPages.StandardController controller = new Apexpages.StandardController(CurOrder);
        OrderExtension extension = new OrderExtension(controller);
        //System.assertEquals(5, extension.orderItemList.size());
        extension.selectedFamily = 'Dessert';
        extension.SelectFamily();
        extension.OnFieldChange();
        extension.First();
        extension.Next();
        extension.Previous();
        extension.Last();
        extension.GetHasNext();
        extension.GetPageNumber();
        extension.GetHasPrevious();
        extension.GetTotalPages();
        extension.GetFamilyOptions();
        extension.Save();
        ChartHelper.GetInventory();
    } 
    

}
HarshHarsh (Salesforce Developers) 
Hi Santhosh,
  • Please note that Questions about how to pass Trailhead challenges are not on topic, because these challenges are intended to be independent demonstrations of your abilities.
  • Trailhead Help (https://trailhead.salesforce.com/en/help?support=home) can provide assistance for situations where Trailhead does not appear to be functioning correctly. 
  • You can reach out to them if this is the case.
Please close the thread by selecting Best Answer so that we can keep our community clean