Room Booking that prevents conflicts

I’m starting to work on a room booking app and was wondering if anyone has figured out a good way to create a way to prevent conflicting days/times (so that if I book a meeting on Monday from 9-10AM, this time slot can’t be booked by someone else).

I know I could create a choice component that lists the possible days/times and then can probably figure out a way to remove choices as they are taken, but this doesn’t take into account all possible time choices (sometimes people will book on the 15 or 30, so my choice component would need to be huge to capture all possibilities).

I’m thinking the way to do it is to have form with a date select and then two time selects (start time and end time). In my spreadsheet, there may be a way to figure out what times are being taken by the starttime+endtime on a particular date and prevent it as a possibility. The issue I’m seeing is that there is no “Time” component available (just Date/Time). Again, I could use choice components to get the time separate from the date, but I wonder if a Time only component may be in the works…?

Has anyone else tried to tackle this sort of time slot booking scenario?

I’ve attempted this in the past and ran into the same time issue. A filtered list of choices probably makes the most sense, though the list would be long. I’m inspired to work on this again after your post. Stay tuned—I’ll post an update here if I make any progress.

Glad I’m not the only one with issues. Happy to try collaborating on this to see if we can get something functional.

@shchc Made some progress! LOTS of logic to work out, but the framework is kinda there. Take a look at the video I made here: https://drive.google.com/file/d/1EMakWCtFjkRKlODQ12NgPfahNGG_QLAP/view

The app can be found here: bookingapp.glideapp.io

Try adding a new event to the calendar!

1 Like

Looks good! The logistics that would block off a meeting + duration would be the kicker, in my opinion.

How are you handling the visibility of the Book a Time button versus the “Unavailable” message? Is it all done inside Glide, or is it dependent on a formula in your sheet? I’m asking because the lag that is present seems to suggest it needs to pull something from the sheet as opposed to Glide handling it all. It would be great to be able to prevent the lag by removing the dependency on the sheet’s formulas, but I don’t know if that’s possible.

I think it would help if there was a way to only allow time selections every 15 minutes. Then you could build a formula that would check for the Time + Duration and prevent booking on the 15 if it falls in the Time + Duration.

@shchc the visibility is pulling from data in the sheet. When a user selects a datetime, it adds it to a cell in the sheet. A formula in the sheet is looking to see if that datetime already exists and displays true or false. The visibility is dependent on that boolean value. Do you see another way this could be accomplished?

Could an IF-THEN be used in the Glide Editor to help speed the process up? Instead of having the sheet perform the True/False check, do it in Glide and then build the visibility based on that column. I don’t know if it will help much, but it might!

Tried using Glide’s built in data columns…doesn’t improve the lag. However, PROGRESS:
1.) Now select date and time separately in :15 increments
2.) Checks if start time falls within an existing booking and will (within 5 seconds) prevent user from accessing the booking button. Try it out!

bookingapp.glideapp.io

Too bad about the lag not improving. It definitely makes it ‘not dummy proof’ which, unfortunately, I would need on my end haha.

I wonder if this process could be adapted so that you would “request a time” no matter if it’s available or not. Once you’ve submitted your time, if it’s available, it gets added to the calendar… if it’s not available, then there’s some other sort of notification. The thought being that the “unavailable” message would only come after the submission (so that it has time to process in the background).

Is it possible to share your app so I can try to adapt it for my scenario?

Using @Robert_Petitto’s idea, I took a crack at this with a dropdown for a barber (or other service provider), 2 weeks of dates, and half hour time slots. I’m gotten past the lag. It’s a quick example, so check it out and let me know what you think.

This will obviously work better when the ‘User Specific Data’ column type is made available. I also still have issues when I change dropdowns rapidly as there’s a bit of lag with the choices making their way back to the sheet an reverting some of my choices back to a previous choice. I don’t seem to always have the same problem on other people’s apps, so I’m not sure they are doing something different that I haven’t figured out yet.

Edit: I had my dates in dd/mm/yyyy format, which was giving some weird results, so I switched it to mm/dd/yyyy

Interesting. Using pre-defined options seems to be a good way to reduce the lag, but also makes it tougher to make all dates/times available into the future. The process also doesn’t take into account appointment duration, but there may be a way to combine the two approaches into something fully functional. It also seems like since the “Time” value is pre-defined, it doesn’t populate the calendar properly (everything is set at 12PM).

I think one feature request that could make this process simpler is for a true “Time” component with configurable minute increments. With a separate Time component, the data could be captured more effectively and it would be simpler to create formulas in the editor and/or the sheet.

1 Like

Did you get around the lag by simply only using dates that you’ve predetermined in a choice list rather than a date picker?

@shchc The dates dynamicly update each day, so there is always 2 weeks out of availability. I’ll fix the time issue in the calendar. I just need to join date and time together. I’ll take care of that tonight.

@Robert_Petitto No, I create a template column of name-date-time on the BookingMain sheet and the BookingResponse sheet. Then perform a relation between the 2. I only check if the relation has a match or not to control the button visibility. It happens instantly since its all happening in glide and not in the sheet.

The app is able to be copied, but I’ll make some tweaks to it tonight.

1 Like

That’s a cool idea to always show the next two weeks. I may be able to use that approach for the booking process/app and then have a separate tab or process that shows a more historical record of past events (and if someone wants to book further into the future, a separate request would be needed outside the app).

The approach of matching between the form and responses works without lag, but unfortunately doesn’t take into account the duration of meetings like @Robert_Petitto 's approach does (so someone could still book something at 11:30AM if I have a one hour booking from 11-12). I think this issue is the part that makes it tough to accomplish everything inside Glide without the help of formulas in the sheet.

1 Like

Agreed @shchc. Using @Jeff_Hager’s idea, I plan to modify my current app to see if I can leverage a choice dropdown. I’ve been successful in another app by leveraging a pivot table to use as a sort of matrix-like reference. Perhaps I can do the same with dates/times/counts to prevent the sheet from being super massive.

2 Likes

Hey @Robert_Petitto! What’s up!?

Thanks for sharing your app! I know it’s not available to copy, but I tried to do for my barber shop / sallon beauty app and guess what??

It Worked!! :raised_hands:t3: Thanks so much, man!

The roadmap is just include this schedule in my app. When it’s done, I share the update!

1 Like

My pleasure! Need access to copy?

1 Like

Nah! The logic I got it !

And tried with date, time, and service and it worked perfectly!

With this logic, we can make with any amount of items and see their availability! The better, every inside the Glide!!

Thanks

Glad to have helped! Can’t wait to see the final product.

1 Like

@Robert_Petitto, I would be interested to have a lokk at how you did it.