booking_calendar icon indicating copy to clipboard operation
booking_calendar copied to clipboard

Dont Display Booked Slots

Open hprager07 opened this issue 2 years ago • 3 comments

If all the open slots for a day are booked, I dont want the day to be disabled. Is this possible?

hprager07 avatar Jan 18 '23 12:01 hprager07

I actually would prefer to disable a day if there were not appointments available for it. How do I do this?

hprager07 avatar Jan 19 '23 01:01 hprager07

Same, not sure if it is related to the location of the folder, or is it just a missed code snippet somewhere?

njonbayou avatar Jan 20 '23 04:01 njonbayou

`final now = DateTime.now();

class Book extends StatefulWidget { const Book({Key? key}) : super(key: key);

@override State<Booking> createState() => _BookState(); }

class _BookState extends State<Book> {

CollectionReference bookings = FirebaseFirestore.instance.collection('book');

CollectionReference<DataBook> getBookingStream({required String placeId}) { return bookings.doc(placeId).collection('booking').withConverter<DataBook>( fromFirestore: (snapshots, _) => DataBook.fromJson(snapshots.data()!), toFirestore: (snapshots, _) => snapshots.toJson(), ); }

Stream? getBookingStreamFirebase( {required DateTime end, required DateTime start}) { return getBookingStream(placeId: 'appointments') .where('bookingStart', isGreaterThanOrEqualTo: start) .where('bookingStart', isLessThanOrEqualTo: end) .snapshots(); }

List<DateTimeRange> convertStreamResultFirebase( {required dynamic streamResult}) { List<DateTimeRange> converted = []; for (var i = 0; i < streamResult.size; i++) { final item = streamResult.docs[i].data(); converted.add(DateTimeRange(start: (item.bookingStart!), end: (item.bookingEnd!))); } return converted; }

Future uploadBookingFirebase( {required BookingService newBooking}) async { await bookings .doc('appointments') .collection('booking') .add(newBooking.toJson()) .then((value) => print("Booking Added")) .catchError((error) => print("Failed to add booking: $error")); }

@override Widget build(BuildContext context) { return Scaffold( body: BookingCalendar( bookedSlotColor: Colors.red, convertStreamResultToDateTimeRanges: convertStreamResultFirebase, uploadBooking: uploadBookingFirebase, getBookingStream: getBookingStreamFirebase, bookingService: BookingService( bookingStart: DateTime.now(), bookingEnd: DateTime.utc(2023, 7, 20, 20, 18, 04), serviceDuration: 30, serviceName: "Meeting" ), ), ); } }`

njonbayou avatar Jan 20 '23 05:01 njonbayou