Adapting to time blocks for bookings
Some checks failed
Build BAB Application Deployment Artifact / build (push) Failing after 2m11s
Some checks failed
Build BAB Application Deployment Artifact / build (push) Failing after 2m11s
This commit is contained in:
@@ -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,
|
||||
};
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user