diff --git a/apps/web/components/booking/pages/BookingPage.tsx b/apps/web/components/booking/pages/BookingPage.tsx index 537e12f58f..723a9a4173 100644 --- a/apps/web/components/booking/pages/BookingPage.tsx +++ b/apps/web/components/booking/pages/BookingPage.tsx @@ -205,6 +205,7 @@ const routerQuerySchema = z const BookingPage = ({ eventType, booking, + currentSlotBooking, profile, isDynamicGroupBooking, recurringEventCount, @@ -584,23 +585,27 @@ const BookingPage = ({
= 0.5 + currentSlotBooking && + currentSlotBooking.attendees.length / eventType.seatsPerTimeSlot >= 0.5 ? "text-rose-600" - : booking && booking.attendees.length / eventType.seatsPerTimeSlot >= 0.33 + : currentSlotBooking && + currentSlotBooking.attendees.length / eventType.seatsPerTimeSlot >= 0.33 ? "text-yellow-500" : "text-bookinghighlight" } mb-2 font-medium`}> - {booking - ? eventType.seatsPerTimeSlot - booking.attendees.length + {currentSlotBooking + ? eventType.seatsPerTimeSlot - currentSlotBooking.attendees.length : eventType.seatsPerTimeSlot}{" "} / {eventType.seatsPerTimeSlot} {t("seats_available")}
diff --git a/apps/web/pages/[user]/book.tsx b/apps/web/pages/[user]/book.tsx index b44d6d6dec..86cf4d81d5 100644 --- a/apps/web/pages/[user]/book.tsx +++ b/apps/web/pages/[user]/book.tsx @@ -217,7 +217,9 @@ export async function getServerSideProps(context: GetServerSidePropsContext) { rescheduleUid = bookingSeat.booking.uid; attendeeEmail = bookingSeat.attendee.email; } - } else if (eventTypeRaw.seatsPerTimeSlot && query.duration && query.date) { + } + + if (query.duration) { // If it's not reschedule but event Type has seats we should obtain // the bookingUid regardless and use it to get the booking const currentSeats = await prisma.booking.findFirst({ @@ -281,12 +283,19 @@ export async function getServerSideProps(context: GetServerSidePropsContext) { : eventType.recurringEvent.count)) || null; + const currentSlotBooking = await getBooking( + prisma, + bookingUidWithSeats || "", + eventTypeObject.bookingFields + ); + return { props: { away: user.away, profile, eventType: eventTypeObject, booking, + currentSlotBooking: currentSlotBooking, recurringEventCount, trpcState: ssr.dehydrate(), isDynamicGroupBooking, diff --git a/apps/web/pages/d/[link]/book.tsx b/apps/web/pages/d/[link]/book.tsx index 4985b2ccc3..d71e7457e1 100644 --- a/apps/web/pages/d/[link]/book.tsx +++ b/apps/web/pages/d/[link]/book.tsx @@ -120,6 +120,7 @@ export async function getServerSideProps(context: GetServerSidePropsContext) { profile, eventType: eventTypeObject, booking: null, + currentSlotBooking: null, trpcState: ssr.dehydrate(), recurringEventCount, isDynamicGroupBooking: false, diff --git a/apps/web/pages/team/[slug]/book.tsx b/apps/web/pages/team/[slug]/book.tsx index 7730003919..6ed37f89a1 100644 --- a/apps/web/pages/team/[slug]/book.tsx +++ b/apps/web/pages/team/[slug]/book.tsx @@ -152,6 +152,7 @@ export async function getServerSideProps(context: GetServerSidePropsContext) { eventType: eventTypeObject, recurringEventCount, booking, + currentSlotBooking: null, isDynamicGroupBooking: false, hasHashedBookingLink: false, hashedLink: null, diff --git a/apps/web/playwright/event-types.e2e.ts b/apps/web/playwright/event-types.e2e.ts index 0dc35f1b9e..bdfe43ae69 100644 --- a/apps/web/playwright/event-types.e2e.ts +++ b/apps/web/playwright/event-types.e2e.ts @@ -119,7 +119,7 @@ test.describe("Event Types tests", () => { await page.locator("#location-select").click(); await page.locator("text=In Person (Organizer Address)").click(); // eslint-disable-next-line playwright/no-wait-for-timeout - await page.waitForTimeout(250); + await page.waitForTimeout(1000); await page.locator('input[name="locationAddress"]').fill(inputText); await page.locator("[data-testid=display-location]").check(); await page.locator("[data-testid=update-location]").click(); diff --git a/apps/web/playwright/onboarding.e2e.ts b/apps/web/playwright/onboarding.e2e.ts index 664ee7178c..060a0609d9 100644 --- a/apps/web/playwright/onboarding.e2e.ts +++ b/apps/web/playwright/onboarding.e2e.ts @@ -26,7 +26,11 @@ test.describe("Onboarding", () => { await page.locator("input[name=username]").fill("new user onboarding"); await page.locator("input[name=name]").fill("new user 2"); await page.locator("input[role=combobox]").click(); - await page.locator("text=Europe/London GMT +0:00").click(); + await page + .locator("*") + .filter({ hasText: /^Europe\/London/ }) + .first() + .click(); await page.locator("button[type=submit]").click(); diff --git a/apps/web/playwright/reschedule.e2e.ts b/apps/web/playwright/reschedule.e2e.ts index 2f713a61dc..aa9056c2b1 100644 --- a/apps/web/playwright/reschedule.e2e.ts +++ b/apps/web/playwright/reschedule.e2e.ts @@ -97,11 +97,12 @@ test.describe("Reschedule Tests", async () => { await expect(page.locator("[data-testid=success-page]")).toBeVisible(); - // NOTE: remove if old booking should not be deleted - expect(await (await booking.self()).status).toBe(BookingStatus.CANCELLED); - const newBooking = await prisma.booking.findFirst({ where: { fromReschedule: booking.uid } }); + const rescheduledBooking = await prisma.booking.findFirst({ where: { uid: booking.uid } }); + expect(newBooking).not.toBeNull(); + expect(rescheduledBooking).toBeNull(); + await prisma.booking.delete({ where: { id: newBooking?.id } }); }); @@ -148,7 +149,6 @@ test.describe("Reschedule Tests", async () => { }); await expect(page).toHaveURL(/.*payment/); - await payment.delete(); }); test("Paid rescheduling should go to success page", async ({ page, users, bookings, payments }) => { @@ -172,8 +172,6 @@ test.describe("Reschedule Tests", async () => { await page.locator('[data-testid="confirm-reschedule-button"]').click(); await expect(page).toHaveURL(/.*booking/); - - await payment.delete(); }); test("Opt in event should be PENDING when rescheduled by USER", async ({ page, users, bookings }) => { diff --git a/packages/features/bookings/lib/handleNewBooking.ts b/packages/features/bookings/lib/handleNewBooking.ts index a8647a0ee6..31bf6584a2 100644 --- a/packages/features/bookings/lib/handleNewBooking.ts +++ b/packages/features/bookings/lib/handleNewBooking.ts @@ -1663,6 +1663,16 @@ async function handler( // Use EventManager to conditionally use all needed integrations. addVideoCallDataToEvt(originalRescheduledBooking.references); const updateManager = await eventManager.reschedule(evt, originalRescheduledBooking.uid); + + //delete orignal rescheduled booking (no seats event) + if (!eventType.seatsPerTimeSlot) { + await prisma.booking.delete({ + where: { + id: originalRescheduledBooking.id, + }, + }); + } + // This gets overridden when updating the event - to check if notes have been hidden or not. We just reset this back // to the default description when we are sending the emails. evt.description = eventType.description;