Skip to content

Instantly share code, notes, and snippets.

@dylanmensaert
Created March 17, 2019 19:15
Show Gist options
  • Save dylanmensaert/176a21b78e47fd6d57b13c1023672795 to your computer and use it in GitHub Desktop.
Save dylanmensaert/176a21b78e47fd6d57b13c1023672795 to your computer and use it in GitHub Desktop.
public class MaintenanceRequestHelper {
public static void updateWorkOrders(List<Case> caseList){
Map<Id, Case> caseToNewCaseMap = new Map<Id, Case>();
for(Case caseInstance : caseList)
{
Case oldCase = (case)Trigger.oldMap.get(caseInstance.Id);
if(caseInstance.Status == 'Closed' && oldCase.Status != 'Closed' && (caseInstance.Type == 'Repair' || caseInstance.Type == 'Routine Maintenance'))
{
Case newCase = caseInstance.clone(false);
newCase.Date_Reported__c = Date.today();
newCase.Status = 'New';
newCase.Type = 'Routine Maintenance';
caseToNewCaseMap.put(caseInstance.Id, newCase);
}
}
insert caseToNewCaseMap.values();
List<Work_Part__c> workPartList = [SELECT Id, Equipment__c FROM Work_Part__c WHERE Maintenance_Request__c IN :caseToNewCaseMap.keySet() ORDER BY Equipment__r.Maintenance_Cycle__c];
List<Work_Part__c> newWorkPartList = new List<Work_Part__c>();
Set<Id> caseIds = new Set<Id>();
for(Work_Part__c workPart : workPartList)
{
Work_Part__c newWorkPart = workPart.clone(false);
Case newCase = caseToNewCaseMap.get(workPart.Maintenance_Request__c);
newWorkPart.Maintenance_Request__c = newCase.Id;
newWorkPartList.add(newWorkPart);
if(!caseIds.contains(workPart.Maintenance_Request__c))
{
newCase.Date_DUe__c = Date.today().addDays((Integer)workPart.Equipment__r.Maintenance_Cycle__c);
caseIds.add(workPart.Maintenance_Request__c);
}
}
update caseToNewCaseMap.values();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment