Adapting to time blocks for bookings
Some checks failed
Build BAB Application Deployment Artifact / build (push) Failing after 2m11s

This commit is contained in:
2023-12-23 11:39:54 -05:00
parent 489cc2646b
commit 66e2169f45
4 changed files with 246 additions and 32 deletions

View File

@@ -8,6 +8,7 @@ import {
parseTimestamp,
TimestampArray,
} from '@quasar/quasar-ui-qcalendar';
import { timeStamp } from 'console';
export type StatusTypes = 'tentative' | 'confirmed' | 'pending' | undefined;
export type Reservation = {
@@ -26,10 +27,22 @@ export type Timeblock = {
};
const sampleBlocks = [
{ start: { hour: 9, minute: 0 }, end: { hour: 12, minute: 0 } },
{ start: { hour: 12, minute: 0 }, end: { hour: 15, minute: 0 } },
{ start: { hour: 15, minute: 0 }, end: { hour: 18, minute: 0 } },
{ start: { hour: 18, minute: 0 }, end: { hour: 21, minute: 0 } },
{
start: { time: '09:00', hour: 9, minute: 0, hasDay: false, hasTime: true },
end: { time: '12:00', hour: 12, minute: 0, hasDay: false, hasTime: true },
},
{
start: { time: '12:00', hour: 12, minute: 0, hasDay: false, hasTime: true },
end: { time: '15:00', hour: 15, minute: 0, hasDay: false, hasTime: true },
},
{
start: { time: '15:00', hour: 15, minute: 0, hasDay: false, hasTime: true },
end: { time: '18:00', hour: 18, minute: 0, hasDay: false, hasTime: true },
},
{
start: { time: '18:00', hour: 18, minute: 0, hasDay: false, hasTime: true },
end: { time: '21:00', hour: 21, minute: 0, hasDay: false, hasTime: true },
},
] as Timeblock[];
function getSampleReservations(): Reservation[] {
@@ -38,7 +51,7 @@ function getSampleReservations(): Reservation[] {
id: 1,
user: 'John Smith',
start: '12:00',
end: '14:00',
end: '15:00',
boat: 1,
status: 'confirmed',
},
@@ -46,31 +59,31 @@ function getSampleReservations(): Reservation[] {
id: 2,
user: 'Bob Barker',
start: '18:00',
end: '20:00',
end: '21:00',
boat: 1,
status: 'confirmed',
},
{
id: 3,
user: 'Peter Parker',
start: '8:00',
end: '10:00',
start: '9:00',
end: '12:00',
boat: 2,
status: 'tentative',
},
{
id: 4,
user: 'Vince McMahon',
start: '13:00',
end: '17:00',
start: '15:00',
end: '18:00',
boat: 2,
status: 'pending',
},
{
id: 5,
user: 'Heather Graham',
start: '06:00',
end: '09:00',
start: '09:00',
end: '12:00',
boat: 3,
status: 'confirmed',
},
@@ -78,7 +91,7 @@ function getSampleReservations(): Reservation[] {
id: 6,
user: 'Lawrence Fishburne',
start: '18:00',
end: '20:00',
end: '21:00',
boat: 3,
},
];
@@ -88,7 +101,12 @@ function getSampleReservations(): Reservation[] {
return x.split(':');
};
const makeOpts = (x: string[]): DateOptions => {
return { hour: parseInt(x[0]), minute: parseInt(x[1]) };
return {
hour: parseInt(x[0]),
minute: parseInt(x[1]),
seconds: 0,
milliseconds: 0,
};
};
return sampleData.map((entry): Reservation => {
@@ -128,15 +146,30 @@ export const useScheduleStore = defineStore('schedule', () => {
});
};
const isOverlapped = (res: Reservation) => {
const lapped = reservations.value.filter(
const getConflictingReservations = (
resource: Boat,
start: Date,
end: Date
): Reservation[] => {
const overlapped = reservations.value.filter(
(entry: Reservation) =>
entry.id != res.id &&
entry.resource == res.resource &&
((entry.start <= res.start && entry.end > res.start) ||
(entry.end >= res.end && entry.start <= res.end))
entry.resource.id == resource.id &&
entry.start < end &&
entry.end > start
);
return lapped.length > 0;
return overlapped;
};
const isResourceTimeOverlapped = (
resource: Boat,
start: Date,
end: Date
): boolean => {
return getConflictingReservations(resource, start, end).length > 0;
};
const isReservationOverlapped = (res: Reservation): boolean => {
return isResourceTimeOverlapped(res.resource, res.start, res.end);
};
const getNewId = () => {
@@ -156,8 +189,11 @@ export const useScheduleStore = defineStore('schedule', () => {
return {
reservations,
getBoatReservations,
getConflictingReservations,
getTimeblocksForDate,
getNewId,
addOrCreateReservation,
isOverlapped,
isReservationOverlapped,
isResourceTimeOverlapped,
};
});