* add booking booking to team settings * add update mutation * add missing export * fix dirty state * first version of global team limits in getUserAvailability * add test setup * create seperate test file for global limits * add tests for all units * move limitManager and booking limit functions outside of getUserAvailability * add migration * clean up code * move yearly booking count to booking repository * code clean up * don't count rescheduling booking * add test for getSchedule * fix type error * fix type error * fix type error * fix from and end date for fetching bookings * reuse functions * allow null for bookingLimits * remove bookings from managed event type * fix type error * code clean up * small fixes form clean up * fix type issue * same fixes in teams/_post * fix existing tz issue * tests for fix * adds missingn await * imrove description * remove spreading * fix reschedule issue with booking limits * fix reschedule error with booking durations * remove useeffect * undo commit * add bookingLimits to UpdateOrgTeamDto * fix unit tests * Prepare view for app router migration * throw error if not in ascending order * fix disabled update button --------- Co-authored-by: CarinaWolli <wollencarina@gmail.com> Co-authored-by: Joe Au-Yeung <j.auyeung419@gmail.com> Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
import prisma from "@calcom/prisma";
|
|
|
|
export const getTotalBookingDuration = async ({
|
|
eventId,
|
|
startDate,
|
|
endDate,
|
|
rescheduleUid,
|
|
}: {
|
|
eventId: number;
|
|
startDate: Date;
|
|
endDate: Date;
|
|
rescheduleUid?: string;
|
|
}) => {
|
|
// Aggregates the total booking time for a given event in a given time period
|
|
// FIXME: bookings that overlap on one side will never be counted
|
|
let totalBookingTime;
|
|
|
|
if (rescheduleUid) {
|
|
[totalBookingTime] = await prisma.$queryRaw<[{ totalMinutes: number | null }]>`
|
|
SELECT SUM(EXTRACT(EPOCH FROM ("endTime" - "startTime")) / 60) as "totalMinutes"
|
|
FROM "Booking"
|
|
WHERE "status" = 'accepted'
|
|
AND "eventTypeId" = ${eventId}
|
|
AND "startTime" >= ${startDate}
|
|
AND "endTime" <= ${endDate}
|
|
AND "uid" != ${rescheduleUid};
|
|
`;
|
|
} else {
|
|
[totalBookingTime] = await prisma.$queryRaw<[{ totalMinutes: number | null }]>`
|
|
SELECT SUM(EXTRACT(EPOCH FROM ("endTime" - "startTime")) / 60) as "totalMinutes"
|
|
FROM "Booking"
|
|
WHERE "status" = 'accepted'
|
|
AND "eventTypeId" = ${eventId}
|
|
AND "startTime" >= ${startDate}
|
|
AND "endTime" <= ${endDate};
|
|
`;
|
|
}
|
|
return totalBookingTime.totalMinutes ?? 0;
|
|
};
|