feat: Prioritize Contacts Over Leads If They Exist [CAL-4640] (#17380)

This commit is contained in:
Joe Au-Yeung authored and GitHub committed 2024-10-29 19:53:44 +00:00
1 parent 04a49e74d4
commit b8b270e4e5
4 files changed
+35 -2

No files matched your search

@@ -2720,6 +2720,7 @@
"attendee_timezone_info": "Attendee Timezone",
"event_start_time_in_attendee_timezone_info": "Event Start Time In Attendee Timezone",
"event_end_time_in_attendee_timezone_info": "Event End Time In Attendee Timezone",
"salesforce_create_event_on_contact": "Create event on contact, if it exists. Else fallback to lead",
"salesforce_owner_name_to_change": "Owner name to change",
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
}
@@ -27,6 +27,7 @@ const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({
const createEventOn = getAppData("createEventOn") ?? SalesforceRecordEnum.CONTACT;
const onBookingWriteToEventObject = getAppData("onBookingWriteToEventObject") ?? false;
const onBookingWriteToEventObjectMap = getAppData("onBookingWriteToEventObjectMap") ?? {};
const createEventOnLeadCheckForContact = getAppData("createEventOnLeadCheckForContact") ?? false;
const onBookingChangeRecordOwner = getAppData("onBookingChangeRecordOwner") ?? false;
const onBookingChangeRecordOwnerName = getAppData("onBookingChangeRecordOwnerName") ?? [];
const { t } = useLocale();
@@ -93,6 +94,18 @@ const EventTypeAppCard: EventTypeAppCardComponent = function EventTypeAppCard({
/>
</div>
) : null}
{createEventOnSelectedOption.value === SalesforceRecordEnum.LEAD ? (
<div>
<Switch
label={t("salesforce_create_event_on_contact")}
labelOnLeading
checked={createEventOnLeadCheckForContact}
onCheckedChange={(checked) => {
setAppData("createEventOnLeadCheckForContact", checked);
}}
/>
</div>
) : null}
{createEventOnSelectedOption.value === SalesforceRecordEnum.ACCOUNT ? (
<>
<div className="mb-4">
@@ -342,9 +342,27 @@ export default class SalesforceCRMService implements CRM {
}
const results = await conn.query(soql);
if (!results || !results.records.length) return [];
let records: ContactRecord[] = [];
const records = results.records as ContactRecord[];
// If falling back to contacts, check for the contact before returning the leads or empty array
if (
appOptions.createEventOn === SalesforceRecordEnum.LEAD &&
appOptions.createEventOnLeadCheckForContact
) {
// Get any matching contacts
const contactSearch = await conn.query(
`SELECT Id, Email, OwnerId FROM ${SalesforceRecordEnum.CONTACT} WHERE Email IN ('${emailArray.join(
"','"
)}')`
);
if (contactSearch && contactSearch.records.length > 0)
records = contactSearch.records as ContactRecord[];
} else if (!results || !results.records.length) {
return [];
}
if (!records.length) records = results.records as ContactRecord[];
if (includeOwner || forRoundRobinSkip) {
const ownerIds: Set<string> = new Set();
+1
View File
@@ -15,6 +15,7 @@ export const appDataSchema = eventTypeAppCardZod.extend({
createLeadIfAccountNull: z.boolean().optional(),
onBookingWriteToEventObject: z.boolean().optional(),
onBookingWriteToEventObjectMap: z.record(z.any()).optional(),
createEventOnLeadCheckForContact: z.boolean().optional(),
onBookingChangeRecordOwner: z.boolean().optional(),
onBookingChangeRecordOwnerName: z.string().optional(),
});