BJB_RingCentralRestResource
unknown
apex
a year ago
6.5 kB
12
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