adjustAvailableSlots static method
List<DateTimeRange<DateTime> >
adjustAvailableSlots(
- List<
DateTimeRange< availableSlots,DateTime> > - List<
DateTimeRange< blockedSlots,DateTime> > - Duration bufferTime,
- DateTime selectedDate,
Implementation
static List<DateTimeRange> adjustAvailableSlots(
List<DateTimeRange> availableSlots,
List<DateTimeRange> blockedSlots,
Duration bufferTime,
DateTime selectedDate,
) {
List<DateTimeRange> adjustedSlots = [];
for (var availableSlot in availableSlots) {
for (var blockedSlot in blockedSlots) {
DateTime availableStart = availableSlot.start;
DateTime availableEnd = availableSlot.end;
DateTime blockedStart = blockedSlot.start;
DateTime blockedEnd = blockedSlot.end;
if (blockedEnd.day > selectedDate.day) {
blockedEnd = DateTime(
selectedDate.year,
selectedDate.month,
selectedDate.day,
23,
59,
59,
);
// bufferTime = Duration.zero;
}
if (blockedStart.day < selectedDate.day) {
blockedStart = DateTime(
selectedDate.year,
selectedDate.month,
selectedDate.day,
0,
0,
0,
);
}
if (availableStart.isBefore(blockedEnd) &&
availableEnd.isAfter(blockedStart)) {
// Adjust the available slot
if (availableStart.isBefore(blockedStart)) {
if (blockedEnd.add(bufferTime).isBefore(availableEnd)) {
adjustedSlots.add(
DateTimeRange(start: availableStart, end: blockedStart),
);
availableStart = blockedEnd.add(bufferTime);
}
adjustedSlots.add(
DateTimeRange(start: availableStart, end: availableEnd),
);
} else {
if (blockedEnd.isBefore(availableEnd)) {
adjustedSlots.add(
DateTimeRange(
start: blockedEnd.add(bufferTime),
end: availableEnd,
),
);
}
}
} else if (blockedEnd.isAtSameMomentAs(availableStart)) {
adjustedSlots.add(
DateTimeRange(start: blockedEnd.add(bufferTime), end: availableEnd),
);
} else {
adjustedSlots.add(availableSlot);
}
}
}
return adjustedSlots;
}