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
yogesh_patilyogesh_patil 

Apex Specialist challenge error.

Hello ALL.
I am able to test the scenario as defined in the Apex specialist badge. However I am facing the below error:

Challenge Not yet complete... here's what's wrong: 
Inserting a new Maintenance Request of type 'Routine Maintenance' and then closing it did not create of a new Maintenance Request based upon the original record correctly. The challenge is expecting to find the closed Maintenance Request plus an 'New' Maintenance Request of type 'Routine Maintenance' with the same Vehicle as the closed one.


PFB the code for reference:

public with sharing class MaintenanceRequestHelper {
    
    public static Map<Id,List<Work_Part__c>> mapCaseIdToListWorkParts = new Map<Id,List<Work_Part__c>>();
    public static Map<Id,Case> mapParentCaseRecordToNewCaseRecord = new Map<Id,Case>();
    public static boolean flag = false;
    
    public static void createMaintenanceRequest(List<Case> newList,Map<Id,Case> oldMap,Map<Id,Case> newMap)
    {
        List<Case> listMaintenanceRequest = new List<Case>();
        Set<String> setCaseId = new Set<String>();
        Map<Id,Integer> mapCaseIdToDueDate = new Map<Id,Integer>();
        for(Case objCase : newList)
        {
            if(objCase.Status!=oldMap.get(objCase.Id).Status && 
               objCase.Status == 'Closed' &&
               (objCase.Type=='Repair' || objCase.Type=='Routine Maintenance' ))
            {
                /**/
                setCaseId.add(objCase.Id);
            }
        }
        if(!setCaseId.isEmpty())
        {
            //List<Work_Part__c> listWorkPart = listWorkPart(setCaseId);
            mapCaseIdToDueDate = createMapOfCaseIdToDueDate(setCaseId);
            System.debug('mapCaseIdToDueDate '+mapCaseIdToDueDate);
            for(Id caseId : newMap.keySet())
            {
                if(setCaseId.contains(caseId))
                {
                    Case objCase = newMap.get(caseId);
                    Case newMaintenanceRequest = new Case(Type='Routine Maintenance',
                                                          Subject='Routine Maintenance',
                                                          Origin= objCase.Origin,
                                                          Status = 'New',
                                                          AccountId = objCase.AccountId,
                                                          AssetId = objCase.AssetId,
                                                          ContactId = objCase.ContactId,
                                                          Vehicle__c = objCase.Vehicle__c,
                                                          Equipment__c = objCase.Equipment__c,
                                                          ParentId = objCase.Id,
                                                          Report_Date__c = System.today(),
                                                          Due_Date__c = Date.today().addDays(mapCaseIdToDueDate.get(caseId)));   
                    
                    listMaintenanceRequest.add(newMaintenanceRequest);
                    mapParentCaseRecordToNewCaseRecord.put(objCase.Id,newMaintenanceRequest);
                }
            }    
        }
        
        if(!listMaintenanceRequest.isEmpty())
        {
            insert listMaintenanceRequest;
            flag = true;
        }
        associateOldWPToNewCase(mapCaseIdToListWorkParts,mapParentCaseRecordToNewCaseRecord);
    }
    
    private static Map<Id,Integer> createMapOfCaseIdToDueDate(Set<String> setCaseId)
    {
        Map<Id,Integer> mapCaseIdToDueDate = new Map<Id,Integer>();
        
        for(Work_Part__c objWP:[SELECT Id,Maintenance_Cycle__c,Maintenance_Request__c 
                                FROM Work_Part__c 
                                WHERE Maintenance_Request__c IN: setCaseId])
        {
            if(!mapCaseIdToListWorkParts.containsKey(objWP.Maintenance_Request__c))
            {
                mapCaseIdToListWorkParts.put(objWP.Maintenance_Request__c, new List<Work_Part__c>{objWP});
            }
            if(mapCaseIdToListWorkParts.containsKey(objWP.Maintenance_Request__c))
            {
                List<Work_Part__c> listWP = mapCaseIdToListWorkParts.get(objWP.Maintenance_Request__c);
                listWP.add(objWP);
                mapCaseIdToListWorkParts.put(objWP.Maintenance_Request__c,listWP);
            }
            
            if(!mapCaseIdToDueDate.containsKey(objWP.Maintenance_Request__c))
            {
                mapCaseIdToDueDate.put(objWP.Maintenance_Request__c, (Integer)objWP.Maintenance_Cycle__c);
            }
             if(mapCaseIdToDueDate.containsKey(objWP.Maintenance_Request__c))
            {
                if(mapCaseIdToDueDate.get(objWP.Maintenance_Request__c)<objWP.Maintenance_Cycle__c)
                {
                    mapCaseIdToDueDate.put(objWP.Maintenance_Request__c, (Integer)objWP.Maintenance_Cycle__c);
                }
            }
        }
        System.debug('mapCaseIdToListWorkParts '+mapCaseIdToListWorkParts);
        System.debug('mapCaseIdToDueDate '+mapCaseIdToDueDate);
        
        return mapCaseIdToDueDate;
    }
    
    private static void associateOldWPToNewCase(Map<Id,List<Work_Part__c>> mapCaseIdToListWorkParts,Map<Id,Case> mapParentCaseIdToNewCaseRecord)
    {
        Set<Work_Part__c> setWP = new Set<Work_Part__c>();
        if(flag)
        {
            for(Id caseId : mapParentCaseIdToNewCaseRecord.keySet())
            {
                for(Work_Part__c objWP : mapCaseIdToListWorkParts.get(caseId))
                {
                    objWP.Maintenance_Request__c = mapParentCaseIdToNewCaseRecord.get(caseId).Id;
                    setWP.add(objWP);
                }
            }    
        }
        List<Work_Part__c> listWP = new List<Work_Part__c>(setWP);
            
        if(!listWP.isEmpty())
        {
            update listWP;
        }
        
    }    
}
yogesh_patilyogesh_patil
Hello @Jeff Douglas,

Can you please help me here?