* Refactor createBooking
* Type fix
* Abstract handleSeats
* Create Invitee type
* Create OrganizerUser type
* Abstract addVideoCallDataToEvt
* Abstract createLoggerWithEventDetails
* Abstract `handleAppStatus` from handler
* Create ReqAppsStatus type
* Move `deleteMeeting` and `getCalendar`
* Set parameters for `handleSeats`
* Typescript refactor
* Change function params from req
* Type fix
* Move handleSeats
* Abstract lastAttendeeDeleteBooking
* Create function for rescheduling seated events
* Fix imports on reschedule seats function
* Fix imports
* Import handleSeats function
* Fix rescheduleUid type
* Refactor owner reschedule to new time slot
* Refactor combine two booking times together
* Reschedule as an attendee
* Refactor createNewSeat
* Remove old handleSeats
* Remove lastAttendeeDeleteBooking from handleNewBooking
* Test for new attendee right params are passed
* Unit test params for reschedule
* Typo fix
* Clean up
* Create new seat test
* Test when attendee already signs up for booking
* Type fix
* Test reschedule move attendee to existing booking
* On reschedule create new booking
* Test on last attendee cancel booking
* Owner reschedule to new time slot
* Owner rescheduling, merge two bookings together
* Test: when merging more than available seats, then fail
* Test: fail when event is full
* Remove duplicate E2E tests
* Clean up
* Rename `addVideoCallDataToEvt` to `addVideoCallDataToEvent`
* Refactor `calcAppsStatus`
* Assign `evt` to resutl of `addVideoCallDataToEvent`
* Use prisma.transaction when moving attendees
* Clean create seat call
* Use ErrorCode enum
* Use attendeeRescheduledSeatedBooking function
* Await function
* Prevent double triggering of workflows
* Use inviteeToAdd in createNewSeat
* Remove unused error code
* Remove old handleSeats file
* Type fix
* Type fix
* Type fix
* Type fix
* Type fix
* Type fix
* Type fix
* Type fix
---------
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Erik <erik@erosemberg.com>
* add workflows to bookingScenario
* activate sandbox mode for unit/integreation tests
* add sendgrid specific code to SendgridProvider
* Refactor WIP
* remove duplicate sendgridProvider file
* first implementation for testing workflows
* revert unintended changes
* comment out Workflow trigger tests
* move sendgrid check after test mode
* Update signup.tsx
* fix esLint
* test webhooks on all tests in fresh-booking.test.ts
* fix subjectPattern as title can be different
* add workflow tests to reschedule.test.ts
* code clean up
* code clean up
* fix sendgrid credentials missing message
* code clean up
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* test: booking and frequency limits e2e
* test: refactor limit e2e and check multiple
* test: move limits e2e to separate file
* fix: blocked day assertions
* chore: rename to booking-limits
* fix: use todo test util
* chore: un-DRY tests
* feat: create user with limits helper
* chore: move user limit helper to utils
* fix: multiple limits test
* feat: fail faster
* chore: event url helper
* fix: prismock count date comparisons
* chore: improve booking limit types in test utils
* test: add typed weekStart to getOrganizer helper
* test: add custom fromDate to getDate helper
* fix: correctly handle negative date increments
* test: add helper for partial weeks
* test: booking limits edge cases
* chore: remove booking limit e2e todos
* chore: normalize getDate return type and skip test
* Fix imports paths that are changes after main merge
* Fix failing types
* Skip failing test
---------
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Hariom <hariombalhara@gmail.com>
* feat: Base implementation of v2 of avatars
* Make avatarUrl and logoUrl entirely optional
* Made necessary backwards compat changes
* fix: type errors
* Fix: OG image
* fix types
* Consistency with other behaviour, ux tweak
---------
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* fix: allow dots in username
* test: added unit tests for slugify
* test: add test for username change
* tests: add test for username and dynamic booking
* fix: type error
---------
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* perf: pre-load booking data for all users
* Fixing property issues
* Fixes
* Removed unwanted console.log
* Made comment for intention of refactor more clear
* fix: types
* _count is optional
* Assign to const bookings
* Added mock for prisma booking
* Fixed unit tests
* Added lint ignore for prisma field
* Update bookingScenario.ts
* Fix linting
---------
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* fix timezone zone issue for first slot
* fix failed test in getSchedule
* Update apps/web/test/lib/getSchedule.test.ts
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: alannnc <alannnc@gmail.com>
* removed old booker and make new booker as a default
* fixes merge conflict
* fixed tests
* fixed tests for old-booker
* fixed typo in @calcom/lib/defaultEvents.ts
---------
Co-authored-by: René Müller <rene.mueller@clicksports.de>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
## What does this PR do?
Currently, we start the first slot always at the nearest 15 minutes. This is not ideal as for some duration other slot starting time make more sense. So with this PR the starting times are defined as follow:
- Frequency is exact hours (60, 120, 180, ...), slot start time is a full hour
- Frequency is half hours (30, 90, ...), slot start time is half or full hours (8:00, 8:30, ...)
- Same with 20-minute events (20, 40, ...) and 10-minute events
- Everything else will start at the nearest 15 min slot
It also fixes that slot times are shifted when there is a busy slot with a different duration. Here is a before and after of a 30-min event with a 5-minute busy slot at 1:00 pm
Before:

After

#### 30 Minute events, availability starting at 7:15
Before:

After:

## Type of change
- Bug fix (non-breaking change which fixes an issue)
## How should this be tested?
- Check if slot times are shown as described
- Test with different intervals/durations
- Test with busy times
- Test with different availabilities
## Mandatory Tasks
- [x] Make sure you have self-reviewed the code. A decent size PR without self-review might be rejected.