Files
calendar/packages/app-store/salesforce/lib/assignmentReasonHandler.ts
T

73 lines
2.3 KiB
TypeScript

import { zodRoutes } from "@calcom/app-store/routing-forms/zod";
import prisma from "@calcom/prisma";
import { AssignmentReasonEnum } from "@calcom/prisma/enums";
import { RoutingReasons, SalesforceRecordEnum } from "./enums";
export async function assignmentReasonHandler({
recordType,
teamMemberEmail,
routingFormResponseId,
}: {
recordType: string;
teamMemberEmail: string;
routingFormResponseId: number;
}) {
const returnObject = { reasonEnum: AssignmentReasonEnum.SALESFORCE_ASSIGNMENT };
switch (recordType) {
case SalesforceRecordEnum.CONTACT:
return { ...returnObject, assignmentReason: `Salesforce contact owner: ${teamMemberEmail}` };
case SalesforceRecordEnum.LEAD:
return { ...returnObject, assignmentReason: `Salesforce lead owner: ${teamMemberEmail}` };
case SalesforceRecordEnum.ACCOUNT:
return { ...returnObject, assignmentReason: `Salesforce account owner: ${teamMemberEmail}` };
case RoutingReasons.ACCOUNT_LOOKUP_FIELD:
const assignmentReason = await handleAccountLookupFieldReason(routingFormResponseId, teamMemberEmail);
return { ...returnObject, assignmentReason };
}
}
async function handleAccountLookupFieldReason(routingFormResponseId: number, teamMemberEmail: string) {
const routingFormResponse = await prisma.app_RoutingForms_FormResponse.findFirst({
where: {
id: routingFormResponseId,
},
select: {
chosenRouteId: true,
form: {
select: {
routes: true,
},
},
},
});
if (!routingFormResponse) return;
const { form } = routingFormResponse;
if (!form.routes) return;
const parsedRoutes = zodRoutes.safeParse(form.routes);
if (!parsedRoutes.success || !parsedRoutes.data) return;
const chosenRouteId = routingFormResponse.chosenRouteId;
const takenRoute = parsedRoutes.data.find((route) => route.id === chosenRouteId);
if (!takenRoute || !("attributeRoutingConfig" in takenRoute)) return;
const attributeRoutingConfig = takenRoute?.attributeRoutingConfig;
if (!attributeRoutingConfig) return;
const salesforceConfig = attributeRoutingConfig["salesforce"];
const accountLookupFieldName = salesforceConfig?.rrSKipToAccountLookupFieldName;
return accountLookupFieldName
? `Salesforce account lookup field: ${accountLookupFieldName} - ${teamMemberEmail}`
: undefined;
}