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;
}