From cd88b688f4308fdb26c9dcf3d43e798d5d57ed62 Mon Sep 17 00:00:00 2001 From: alannnc Date: Thu, 20 Jul 2023 12:19:13 -0700 Subject: [PATCH] fix: including parentId when filter by eventTypeId happens (#10262) Co-authored-by: Peer Richelsen --- packages/features/insights/server/events.ts | 11 ++++++ .../features/insights/server/trpc-router.ts | 31 +++++++++++++--- .../migration.sql | 35 +++++++++++++++++++ packages/prisma/schema.prisma | 33 ++++++++--------- 4 files changed, 90 insertions(+), 20 deletions(-) create mode 100644 packages/prisma/migrations/20230719214513_update_booking_time_status_fields_event_parent_id/migration.sql diff --git a/packages/features/insights/server/events.ts b/packages/features/insights/server/events.ts index e6ef45e069..f7314f4603 100644 --- a/packages/features/insights/server/events.ts +++ b/packages/features/insights/server/events.ts @@ -86,6 +86,17 @@ class EventsInsights { return baseBookings; }; + static getTotalCompletedEvents = async (bookingIds: number[]) => { + return await prisma.bookingTimeStatus.count({ + where: { + id: { + in: bookingIds, + }, + timeStatus: "completed", + }, + }); + }; + static getTotalRescheduledEvents = async (bookingIds: number[]) => { return await prisma.bookingTimeStatus.count({ where: { diff --git a/packages/features/insights/server/trpc-router.ts b/packages/features/insights/server/trpc-router.ts index c9dfcdf4e7..b8a4d2b665 100644 --- a/packages/features/insights/server/trpc-router.ts +++ b/packages/features/insights/server/trpc-router.ts @@ -133,7 +133,14 @@ export const insightsRouter = router({ let teamConditional: Prisma.TeamWhereInput = {}; if (eventTypeId) { - whereConditional["eventTypeId"] = eventTypeId; + whereConditional["OR"] = [ + { + eventTypeId, + }, + { + eventParentId: eventTypeId, + }, + ]; } if (memberUserId) { whereConditional["userId"] = memberUserId; @@ -226,6 +233,7 @@ export const insightsRouter = router({ const startTimeEndTimeDiff = dayjs(endDate).diff(dayjs(startDate), "day"); const baseBookingIds = baseBookings.map((b) => b.id); + const totalCompleted = await EventsInsights.getTotalCompletedEvents(baseBookingIds); const totalRescheduled = await EventsInsights.getTotalRescheduledEvents(baseBookingIds); @@ -257,7 +265,7 @@ export const insightsRouter = router({ deltaPrevious: EventsInsights.getPercentage(baseBookings.length, lastPeriodBaseBookings.length), }, completed: { - count: baseBookings.length - totalCancelled - totalRescheduled, + count: totalCompleted, deltaPrevious: EventsInsights.getPercentage( baseBookings.length - totalCancelled - totalRescheduled, lastPeriodBaseBookings.length - lastPeriodTotalCancelled - lastPeriodTotalRescheduled @@ -284,6 +292,7 @@ export const insightsRouter = router({ ) { return emptyResponseEventsByStatus; } + return result; }), eventsTimeline: userBelongsToTeamProcedure @@ -410,7 +419,14 @@ export const insightsRouter = router({ if (eventTypeId && !!whereConditional) { whereConditional = { - eventTypeId: eventTypeId, + OR: [ + { + eventTypeId, + }, + { + eventParentId: eventTypeId, + }, + ], }; } @@ -864,7 +880,14 @@ export const insightsRouter = router({ }; if (eventTypeId) { - bookingWhere.eventTypeId = eventTypeId; + bookingWhere["OR"] = [ + { + eventTypeId, + }, + { + eventParentId: eventTypeId, + }, + ]; } if (isAll && user.isOwnerAdminOfParentTeam && user.organizationId) { diff --git a/packages/prisma/migrations/20230719214513_update_booking_time_status_fields_event_parent_id/migration.sql b/packages/prisma/migrations/20230719214513_update_booking_time_status_fields_event_parent_id/migration.sql new file mode 100644 index 0000000000..0d52391654 --- /dev/null +++ b/packages/prisma/migrations/20230719214513_update_booking_time_status_fields_event_parent_id/migration.sql @@ -0,0 +1,35 @@ +-- View: public.BookingsTimeStatus + +-- DROP VIEW public."BookingsTimeStatus"; + +CREATE OR REPLACE VIEW public."BookingTimeStatus" + AS + SELECT "Booking".id, + "Booking".uid, + "Booking"."eventTypeId", + "Booking".title, + "Booking".description, + "Booking"."startTime", + "Booking"."endTime", + "Booking"."createdAt", + "Booking".location, + "Booking".paid, + "Booking".status, + "Booking".rescheduled, + "Booking"."userId", + "et"."teamId", + "et"."length" as "eventLength", + CASE + WHEN "Booking".rescheduled IS TRUE THEN 'rescheduled'::text + WHEN "Booking".status = 'cancelled'::"BookingStatus" AND "Booking".rescheduled IS FALSE THEN 'cancelled'::text + WHEN "Booking"."endTime" < now() THEN 'completed'::text + WHEN "Booking"."endTime" > now() THEN 'uncompleted'::text + ELSE NULL::text + END AS "timeStatus", + "et"."parentId" as "eventParentId" + FROM "Booking" + LEFT JOIN "EventType" et ON "Booking"."eventTypeId" = et.id + LEFT JOIN "Membership" mb ON "mb"."userId" = "Booking"."userId"; + + + diff --git a/packages/prisma/schema.prisma b/packages/prisma/schema.prisma index 54de956da5..e687645573 100644 --- a/packages/prisma/schema.prisma +++ b/packages/prisma/schema.prisma @@ -877,20 +877,21 @@ model SelectedSlots { } view BookingTimeStatus { - id Int @unique - uid String? - eventTypeId Int? - title String? - description String? - startTime DateTime? - endTime DateTime? - createdAt DateTime? - location String? - paid Boolean? - status BookingStatus? - rescheduled Boolean? - userId Int? - teamId Int? - eventLength Int? - timeStatus String? + id Int @unique + uid String? + eventTypeId Int? + title String? + description String? + startTime DateTime? + endTime DateTime? + createdAt DateTime? + location String? + paid Boolean? + status BookingStatus? + rescheduled Boolean? + userId Int? + teamId Int? + eventLength Int? + timeStatus String? + eventParentId Int? }