From 1cae2b6f3d147436dc898141cda5b133e4ae6c01 Mon Sep 17 00:00:00 2001 From: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com> Date: Mon, 13 Feb 2023 07:39:06 -0500 Subject: [PATCH] Fixing issues around workflows (#6991) Co-authored-by: CarinaWolli --- .../lib/reminders/emailReminderManager.ts | 5 +++ .../features/ee/workflows/pages/workflow.tsx | 6 ++-- .../trpc/server/routers/viewer/bookings.tsx | 31 +++++++++++++++++++ .../trpc/server/routers/viewer/workflows.tsx | 6 +++- 4 files changed, 44 insertions(+), 4 deletions(-) diff --git a/packages/features/ee/workflows/lib/reminders/emailReminderManager.ts b/packages/features/ee/workflows/lib/reminders/emailReminderManager.ts index dad511401f..14ffc89358 100644 --- a/packages/features/ee/workflows/lib/reminders/emailReminderManager.ts +++ b/packages/features/ee/workflows/lib/reminders/emailReminderManager.ts @@ -204,6 +204,11 @@ export const deleteScheduledEmailReminder = async (referenceId: string) => { status: "cancel", }, }); + + await client.request({ + url: `/v3/user/scheduled_sends/${referenceId}`, + method: "DELETE", + }); } catch (error) { console.log(`Error canceling reminder with error ${error}`); } diff --git a/packages/features/ee/workflows/pages/workflow.tsx b/packages/features/ee/workflows/pages/workflow.tsx index e36bd61a42..59737a7f83 100644 --- a/packages/features/ee/workflows/pages/workflow.tsx +++ b/packages/features/ee/workflows/pages/workflow.tsx @@ -100,7 +100,7 @@ function WorkflowPage() { data: workflow, isError, error, - dataUpdatedAt, + isLoading, } = trpc.viewer.workflows.get.useQuery( { id: +workflowId }, { @@ -111,7 +111,7 @@ function WorkflowPage() { const { data: verifiedNumbers } = trpc.viewer.workflows.getVerifiedNumbers.useQuery(); useEffect(() => { - if (workflow && (workflow.steps.length === 0 || workflow.steps[0].stepNumber === 1)) { + if (workflow && !isLoading) { setSelectedEventTypes( workflow.activeOn.map((active) => ({ value: String(active.eventType.id), @@ -155,7 +155,7 @@ function WorkflowPage() { form.setValue("activeOn", activeOn || []); setIsAllDataLoaded(true); } - }, [dataUpdatedAt]); + }, [isLoading]); const updateMutation = trpc.viewer.workflows.update.useMutation({ onSuccess: async ({ workflow }) => { diff --git a/packages/trpc/server/routers/viewer/bookings.tsx b/packages/trpc/server/routers/viewer/bookings.tsx index c65fca6d8b..cd1013ddc0 100644 --- a/packages/trpc/server/routers/viewer/bookings.tsx +++ b/packages/trpc/server/routers/viewer/bookings.tsx @@ -10,6 +10,8 @@ import { Workflow, WorkflowsOnEventTypes, WorkflowStep, + PrismaPromise, + WorkflowMethods, } from "@prisma/client"; import type { TFunction } from "next-i18next"; import { z } from "zod"; @@ -18,11 +20,14 @@ import appStore from "@calcom/app-store"; import { getCalendar } from "@calcom/app-store/_utils/getCalendar"; import { DailyLocationType } from "@calcom/app-store/locations"; import { scheduleTrigger } from "@calcom/app-store/zapier/lib/nodeScheduler"; +import { cancelScheduledJobs } from "@calcom/app-store/zapier/lib/nodeScheduler"; import EventManager from "@calcom/core/EventManager"; import { CalendarEventBuilder } from "@calcom/core/builders/CalendarEvent/builder"; import { CalendarEventDirector } from "@calcom/core/builders/CalendarEvent/director"; import { deleteMeeting } from "@calcom/core/videoClient"; import dayjs from "@calcom/dayjs"; +import { deleteScheduledEmailReminder } from "@calcom/ee/workflows/lib/reminders/emailReminderManager"; +import { deleteScheduledSMSReminder } from "@calcom/ee/workflows/lib/reminders/smsReminderManager"; import { sendDeclinedEmails, sendLocationChangeEmails, @@ -405,6 +410,8 @@ export const bookingsRouter = router({ dynamicGroupSlugRef: true, destinationCalendar: true, smsReminderNumber: true, + scheduledJobs: true, + workflowReminders: true, }, where: { uid: bookingId, @@ -472,6 +479,30 @@ export const bookingsRouter = router({ }, }); + // delete scheduled jobs of cancelled bookings + cancelScheduledJobs(bookingToReschedule); + + //cancel workflow reminders + const remindersToDelete: PrismaPromise[] = []; + + bookingToReschedule.workflowReminders.forEach((reminder) => { + if (reminder.scheduled && reminder.referenceId) { + if (reminder.method === WorkflowMethods.EMAIL) { + deleteScheduledEmailReminder(reminder.referenceId); + } else if (reminder.method === WorkflowMethods.SMS) { + deleteScheduledSMSReminder(reminder.referenceId); + } + } + const reminderToDelete = prisma.workflowReminder.deleteMany({ + where: { + id: reminder.id, + }, + }); + remindersToDelete.push(reminderToDelete); + }); + + await Promise.all(remindersToDelete); + const [mainAttendee] = bookingToReschedule.attendees; // @NOTE: Should we assume attendees language? const tAttendees = await getTranslation(mainAttendee.locale ?? "en", "common"); diff --git a/packages/trpc/server/routers/viewer/workflows.tsx b/packages/trpc/server/routers/viewer/workflows.tsx index 98dc3a2351..5d279763e5 100644 --- a/packages/trpc/server/routers/viewer/workflows.tsx +++ b/packages/trpc/server/routers/viewer/workflows.tsx @@ -856,7 +856,11 @@ export const workflowsRouter = router({ eventType: true, }, }, - steps: true, + steps: { + orderBy: { + stepNumber: "asc", + }, + }, }, });