BJB_RingCentralRestResource
unknown
apex
a year ago
6.5 kB
15
Indexable
@RestResource(UrlMapping='/getRecords')
global without sharing class BJB_RingCentralRestResource {
private static final String RECEPTION = 'Reception';
private static final String INTAKE = 'Intake';
private static final String MATTER_OBJECT = 'Matter';
private static final String ACCOUNT_OBJECT = 'Account';
private static final String INTAKE_OBJECT = 'Intake';
@HttpGet
global static List<BJB_RingCentralRestResource.RecordWrapper> getRecords() {
Map<String, String> params = RestContext.request.params;
List<BJB_RingCentralRestResource.RecordWrapper> result = new List<BJB_RingCentralRestResource.RecordWrapper>();
String inputNumber = params.get('number');
Set<String> formattedNumbers = formatNumber(inputNumber);
List<litify_pm__Matter__c> matters = getMatters(formattedNumbers);
for (litify_pm__Matter__c matter : matters) {
result.add(new BJB_RingCentralRestResource.RecordWrapper(MATTER_OBJECT, matter));
}
if(result.isEmpty()) {
List<litify_pm__Intake__c> intakes = getIntakes(formattedNumbers);
for (litify_pm__Intake__c intake : intakes) {
result.add(new BJB_RingCentralRestResource.RecordWrapper(INTAKE_OBJECT, intake));
}
}
if(result.isEmpty()) {
List<Account> accounts = getParties(formattedNumbers);
for (Account acc : accounts) {
result.add(new BJB_RingCentralRestResource.RecordWrapper(ACCOUNT_OBJECT, acc));
}
}
if(result.isEmpty() && isMarketing(inputNumber)) {
result.add(new BJB_RingCentralRestResource.RecordWrapper(ACCOUNT_OBJECT, new Account()));
}
createCallLog(result, inputNumber);
if(result.isEmpty()) {
return null;
}
return result;
}
private static Boolean isMarketing (String inputNumber) {
return inputNumber.startsWith('888') || inputNumber.startsWith('800') || inputNumber.startsWith('877');
}
private static Set<String> formatNumber(String inputNumber) {
String inputFormattedNumber = inputNumber.replaceAll('(\\d{3})(\\d{3})(\\d{4})', '($1) $2-$3');
String inputFormattedNumberWithHyphen = inputNumber.replaceAll('(\\d{3})(\\d{3})(\\d{4})', '$1-$2-$3');
String inputFormattedNumberWithDots = inputNumber.replaceAll('(\\d{3})(\\d{3})(\\d{4})', '$1.$2.$3');
Set<String> numbers = new Set<String>{
'%' + inputNumber + '%',
'%' + inputFormattedNumberWithDots + '%',
'%' + inputFormattedNumberWithHyphen + '%',
'%' + inputFormattedNumber + '%'};
return numbers;
}
private static List<Account> getParties(Set<String> numbers) {
return [
SELECT Id
FROM Account
WHERE litify_pm__Phone_Mobile__c LIKE :numbers
OR litify_pm__Phone_Home__c LIKE :numbers
OR AVSFQB__Phone__c LIKE :numbers
OR dm_Phone_Other_2__c LIKE :numbers
OR dm_Phone_Other_3__c LIKE :numbers
OR dm_Phone_Other_4__c LIKE :numbers
OR dm_Phone_Other_5__c LIKE :numbers
OR Emergency_Contact_Phone__c LIKE :numbers
OR Fax LIKE :numbers
OR litify_pm__Phone_Other__c LIKE :numbers
OR litify_pm__Phone_Work__c LIKE :numbers
OR Phone_Number_Comments__c LIKE :numbers
OR PIP_Arb_Contact_Phone__c LIKE :numbers
OR Preferred_Phone_Number__c LIKE :numbers
OR Phone LIKE :numbers
];
}
private static List<litify_pm__Matter__c> getMatters(Set<String> numbers) {
return [
SELECT Id, Owner_Name__c, Case_Type_Name__c, litify_pm__Incident_date__c, Salesforce_18_digit_ID__c
FROM litify_pm__Matter__c
WHERE Client_Phone__c LIKE :numbers
OR Client_Phone_Mobile__c LIKE :numbers
OR Mobile_Phone_Unformatted__c LIKE :numbers
];
}
private static List<litify_pm__Intake__c> getIntakes(Set<String> numbers) {
return [
SELECT Id
FROM litify_pm__Intake__c
WHERE litify_pm__Status__c != 'Converted'
AND (litify_pm__Phone__c LIKE :numbers
OR litify_pm__Client__r.Phone LIKE :numbers
OR Mobile_Phone_Unformatted__c LIKE :numbers)
];
}
private static void createCallLog(List<BJB_RingCentralRestResource.RecordWrapper> callInfo, String inputNumber) {
Call_Log__c log = new Call_Log__c();
BJB_RingCentralRestResource.RecordWrapper info = new BJB_RingCentralRestResource.RecordWrapper();
if(callInfo.isEmpty()) {
log.Was_the_number_identified__c = false;
log.Phone_Number__c = inputNumber;
log.Route__c = INTAKE;
} else {
info = callInfo[0];
log.Was_the_number_identified__c = true;
log.Phone_Number__c = inputNumber;
log.Route__c = info.objectType == MATTER_OBJECT || info.objectType == ACCOUNT_OBJECT? RECEPTION : INTAKE;
log.Related_Record_Id__c = info?.recordId;
}
insert log;
}
global class RecordWrapper {
public String objectType;
public Id recordId;
public String caseType;
public Date incidentDate;
public String salesforce18DigitId;
public String ownerName;
global RecordWrapper() {
}
global RecordWrapper(String objectType, SObject record) {
this.objectType = objectType;
this.recordId = (Id)record.get('Id');
if(objectType.equals(MATTER_OBJECT)) {
this.caseType = (String) record?.get('Case_Type_Name__c');
this.incidentDate = Date.valueOf(record?.get('litify_pm__Incident_date__c'));
this.salesforce18DigitId = (String) record?.get('Salesforce_18_digit_ID__c');
this.ownerName = (String) record?.get('Owner_Name__c');
}
}
}
}Editor is loading...
Leave a Comment