Create on-demand reservation system for our website

Create on-demand reservation system for our website


Job Description

As the project title indicates, we need an online reservation system for our website. We need it to do some specific things (below) as well as your standard items, such as linking to paypal to accept payments.

Our business and what we need the system to do, specifically:
We run a horse rental company with a certain number of horses available for each ride. Rides can vary in duration from 1 hour to 3 hours (determined at time of purchase) and only 1 ride can be going at a time. We would like to have 30 minutes between rides to rest the horses. The customers can schedule any time on the hour or half hour (e.g. 11:00 or 11:30, but not 11:15) during our business hours.

So I will walk you through, using an example, what we want the reservation system to do:

Let's assume we have 5 horses available.

When nothing is booked on a day, all times on the hour and the half hour during business hours are open for any length of ride.
>>11:00am - open (5 spots available for any length of ride)
>>11:30am - open
>>12:00pm - open
>>12:30pm - open
>>1:00pm - open
>>1:30pm - open
>>2:00pm - open
>>2:30pm - open etc.

-Customer #1 is a party of two and would like to ride for 1 hour.
-They book a 1hr ride at 11:00am.
-The system schedules the ride from 11am-12pm (blocking out those time slots) and blocks out 12pm-12:30pm to rest the horses.
-The next available appointment time would be 12:30pm.
-Since only 2 horses will be used by Customer #1, 3 horses are still available for a 1hr ride from 11am-12pm on that day, and so another customer can book the same time if they have 3 or fewer people in their party and want to ride for 1 hour.

>>11:00am - 3 spots open for a 1 hr ride only (2 spots booked for 1hr ride)
>>12:00pm - closed to rest horses (not visible to customers, time slot just not available)
>>12:30pm - open (5 spots available for any length of ride)
>>1:00pm - open
>>1:30pm - open
>>2:00pm - open
>>2:30pm - open etc.

-Customer #2 has 3 people who want to ride for 2 hours
-They book the next available time on the same day as customer #1, 12:30pm
-The calendar schedules their ride from 12:30pm-2:30pm and blocks out 30 mins to rest the horses.
-The next available time is 3:00pm
-The 12:30pm time slot is still available with 2 spots open for a 2hr ride

>>11:00am - 3 spots open for a 1 hr ride only (2 spots booked for 1hr ride)
>>12:30pm - 2 spots open for 2hr ride (3 spots booked for 2hrs)
>>[2:30pm - Rest horses for 30 mins]
>>3:00pm - open (5 spots available for any length of ride)

I hope you can see where I'm going with this. To sum it all up, we want appointment start times and lengths to be determined by the customer, but within our parameters (on the hour or half hour, and 1, 2, or 3 hours). For each appointment, multiple people can sign up for the same time slot, but the start time and length are determined by whomever makes the initial appointment, not by the administrator. Each appointment can hold up to X number of people (varies bases on availability of horses). We want 30 minutes between appointments to rest the horses. We'd also like to block out 30 minutes sometime near midday to give our staff a lunch break. Not sure exactly how this would work, but I'm confident you can come up with something intelligent.

The following features are also required:
-Must look professional and present a seamless, easy to use front to the customer
-All reservations entered by customers are requests until an administrator approves them, but times are blocked out while the request is pending
-Administrator must be able to make new reservations easily and cancel or edit existing reservations
-Must collect certain data from customers, such as name, experience level, payment method, phone number, etc.
-Must link to paypal in order for customers to pre-pay, but pre-payment is NOT required. It is optional.
-Ability to create and apply discount/coupon codes
-Must sync with google calendar