public class DimensionSelector {
@InvocableMethod(label='Get Dimensions' description='Returns available Dimension IDs' category='Scheduling')
public static List<DimensionResult> getDimensions(List<DimensionSelector.DimensionRequest> requests) {
Set<Id> scopeIds = (new Map<Id,SObject>([select id from B25__Resource__c where B25__Resource_Type__r.Name = 'Personal Stylist'])).keySet();
List<DimensionResult> allResults = new List<DimensionResult>();
for (DimensionRequest request : requests) {
allResults.add(DimensionSelector.getResultForRequest(request, scopeIds));
}
return allResults;
}
private static DimensionResult getResultForRequest(DimensionRequest request, Set<Id> scopeIds) {
DimensionResult result = new DimensionResult();
B25.AvailableDimensionIds.Context context = createContext(request.getReservation(), request.dimensionFieldName, scopeIds);
result.dimensionIds = new List<Id>(B25.AvailableDimensionIds.findAvailableDimensionIds(context));
return result;
}
public class DimensionResult {
@InvocableVariable(Label='Available Dimension IDs')
public List<Id> dimensionIds;
}
public class DimensionRequest {
@InvocableVariable(Label='Start' Required=true)
public Datetime startDateTime;
@InvocableVariable(Label='End' Required=true)
public Datetime endDateTime;
@InvocableVariable(Label='Dimension Field Name' Required=true)
public String dimensionFieldName;
public B25__Reservation__c getReservation() {
return new B25__Reservation__c(B25__StartLocal__c = startDateTime, B25__EndLocal__c = endDateTime);
}
}
public static B25.AvailableDimensionIds.Context createContext(B25__Reservation__c reservationIn, String dimensionFieldNameIn, Set<ID> dimensionIdsIn) {
B25.AvailableDimensionIds.Context context = new B25.AvailableDimensionIds.Context();
context.reservation = reservationIn;
context.dimensionFieldName = dimensionFieldNameIn;
context.dimensionIds = dimensionIdsIn;
return context;
}
} |