salesforce-appraiser-review.../force-app/main/default/classes/AppraiserCaseDocGenService.cls

104 lines
4.7 KiB
OpenEdge ABL

public with sharing class AppraiserCaseDocGenService {
public class DeficiencyDTO {
@AuraEnabled public String deficiencyNumber;
@AuraEnabled public String description;
@AuraEnabled public String resolution;
@AuraEnabled public Decimal sortOrder;
}
public class AppraiserCasePayload {
@AuraEnabled public Id caseId;
@AuraEnabled public String appraiserCaseNumber;
@AuraEnabled public Date appraiserFieldReviewDate;
@AuraEnabled public String propertyStreet;
@AuraEnabled public String propertyCity;
@AuraEnabled public String propertyStateProvince;
@AuraEnabled public String propertyPostalCode;
@AuraEnabled public String propertyCountry;
@AuraEnabled public String propertyAddressSingleLine;
@AuraEnabled public List<DeficiencyDTO> deficiencies;
}
@AuraEnabled(cacheable=false)
public static String buildPayloadJson(Id appraiserCaseId) {
return JSON.serialize(buildPayload(appraiserCaseId));
}
public static AppraiserCasePayload buildPayload(Id appraiserCaseId) {
Appraiser_Case__c appraiserCase = [
SELECT Id,
Name,
Appraiser_Field_Review_Date__c,
Property_Street__c,
Property_City__c,
Property_State_Province__c,
Property_Postal_Code__c,
Property_Country__c,
(SELECT Id,
Name,
Deficiency_Number__c,
Description__c,
Resolution__c,
Sort_Order__c
FROM Appraiser_Deficiencies__r
ORDER BY Sort_Order__c ASC, CreatedDate ASC)
FROM Appraiser_Case__c
WHERE Id = :appraiserCaseId
LIMIT 1
];
AppraiserCasePayload payload = new AppraiserCasePayload();
payload.caseId = appraiserCase.Id;
payload.appraiserCaseNumber = appraiserCase.Name;
payload.appraiserFieldReviewDate = appraiserCase.Appraiser_Field_Review_Date__c;
payload.propertyStreet = appraiserCase.Property_Street__c;
payload.propertyCity = appraiserCase.Property_City__c;
payload.propertyStateProvince = appraiserCase.Property_State_Province__c;
payload.propertyPostalCode = appraiserCase.Property_Postal_Code__c;
payload.propertyCountry = appraiserCase.Property_Country__c;
payload.propertyAddressSingleLine = buildAddress(appraiserCase);
payload.deficiencies = new List<DeficiencyDTO>();
for (Appraiser_Deficiency__c deficiency : appraiserCase.Appraiser_Deficiencies__r) {
DeficiencyDTO dto = new DeficiencyDTO();
dto.deficiencyNumber = deficiency.Deficiency_Number__c;
dto.description = deficiency.Description__c;
dto.resolution = deficiency.Resolution__c;
dto.sortOrder = deficiency.Sort_Order__c;
payload.deficiencies.add(dto);
}
return payload;
}
private static String buildAddress(Appraiser_Case__c appraiserCase) {
List<String> parts = new List<String>();
if (String.isNotBlank(appraiserCase.Property_Street__c)) parts.add(appraiserCase.Property_Street__c);
List<String> cityLine = new List<String>();
if (String.isNotBlank(appraiserCase.Property_City__c)) cityLine.add(appraiserCase.Property_City__c);
if (String.isNotBlank(appraiserCase.Property_State_Province__c)) cityLine.add(appraiserCase.Property_State_Province__c);
if (String.isNotBlank(appraiserCase.Property_Postal_Code__c)) cityLine.add(appraiserCase.Property_Postal_Code__c);
if (!cityLine.isEmpty()) parts.add(String.join(cityLine, ', '));
if (String.isNotBlank(appraiserCase.Property_Country__c)) parts.add(appraiserCase.Property_Country__c);
return String.join(parts, ' | ');
}
@AuraEnabled(cacheable=false)
public static Map<String, Object> buildDocGenRequest(Id appraiserCaseId, String templateKey) {
AppraiserCasePayload payload = buildPayload(appraiserCaseId);
Map<String, Object> requestBody = new Map<String, Object>();
requestBody.put('templateKey', templateKey);
requestBody.put('recordId', appraiserCaseId);
requestBody.put('sourceObject', 'Appraiser_Case__c');
requestBody.put('mergeData', payload);
return requestBody;
}
@AuraEnabled(cacheable=false)
public static String buildDocGenRequestJson(Id appraiserCaseId, String templateKey) {
return JSON.serialize(buildDocGenRequest(appraiserCaseId, templateKey));
}
}