Calendar module comparison

This is an overview of some Drupal booking, calender and event modules that may be used to create a booking site or event site. It lists fully integrated booking modules, helper modules to display event calendars (no booking), and helper modules for booking (no calendar).

Table of contents

Introduction

Below is a survey some calendar modules for Drupal. There are also links to other solutions, including SaaS.

Some useful links to ongoing (and parked) proejcts:

Discussion of calendar modules Social media:

Commercial modules:

SaaS:

Requirements

Desireable features in order of importance:

  1. Calendar to show grid of multiple units/events.
  2. Calendar to show year, week, day, multiple days (select by admin).
  3. Clickable calendar (click on day to book).
  4. Colour codes
  5. Half day display shown in month view (see below)

Implementing half day display

This is simple to do with CSS3, see: Responsive Diagonal Two-Tone Backgrounds with CSS. This does not work in IE9 – which is why you should give a regular solid background color before the gradient, so there is a fallback.

Pure PHP to change css.

Examples:

Availability Calendars (uses outdated CSS)

av_calendar.png

Rooms (uses JavaScript)

diw07_calendar.png

Booking calendar candidates

Before creating RBG for Drupal 7, I looked at these as candiates for creating a room booking system.

Appointment Calendar

Project page:

Appointment Calendar is a simple form to set and create slots for booking in particular date. It provides a simple availability calendar to check availability of selected slot, i.e all available/booked slots can show in availability calendar.

Not evaluated.

BAT, etc.

The three projects below are all created by Roomify. This is Colorado-based company that specializes in Drupal-native booking solutions.

BAT

Project page:

BAT stands for Booking and Availability Management Tools. It is a set of tools created by the Roomify.us team who specialize in online booking systems. BAT provides a foundation through which a wide range of availability management, reservation and booking use cases can be addressed. BAT will work with both Drupal 7 and Drupal 8.

DG comparisons:

BAT is a framework for building booking tools. It integrates nicely with FullCalendar JS to allow you to manipulate and display events on a calendar and it makes and has availability search built in. It is built by the same team that manage the Rooms module and the new version of Rooms will use BAT. If you are looking for a generic tool and flexible tool to customize to your needs this might be a good starting point.

BAT on its own is a booking and availability management framework, much in the same way Drupal is a content management framework and Drupal Commerce is an e-commerce framework. It wraps around a stand-alone PHP Library also developed by Roomify. Our aim is to build specific solutions on top of BAT to tackle specific application domains.

Booking and room management solution for hotels, vacation rentals and B&Bs. Fully integrated e-commerce application.

It uses its own version of FullCalendar.

This is not a site building tool, it is PHP library intented to be used by developers. If you wish to build a new booking/rental application based on BAT, be prepared to invest significant time writing code, particularly if you need commerce/payment functionality or widgets for end users to book resources on their own. You may make use of the Rules project for workflows.

Evaluation: Looks powerful, but insanely complex. FullCalendar display do not provide a nice overview of multiple rooms. Tested 7.x.-1.19.

What's reused in RBG:

BEE

Project page:

BEE is a module based on BAT that allows you to add booking & availability functionality to any node type. Any node type may be made bookable with BEE, with a selection of daily or hourly event granularity. It’s also possible to configure open hours. Each node of the given type may have single or multiple units, to handle multiple identical resources. BEE provides an availability calendar and a basic booking creation form for each enabled node. Additionally, it's possible to take payment using Drupal Commerce - when payments are enabled for a content type, you may set a price per day/hour, and the reservation form will add a booking to the user's cart.

Like BAT, BEE (Bookable Entities Everywhere) is created by Roomify.

Not evaluated.

Bookable Calendar

Project page:

Calendar

Project page:

This module will display any Views date field in calendar formats, including CCK date fields, node created or updated dates, etc. Switch between year, month, and day views. Back and next navigation is provided for all views.

This is the canonical Drupal calendar module. It supports booking of time slots and calendar display, but not pricing, reservations and other things that is found in an advanced module such as BAT.

Evaluation: Buggy, very much alpha software. Tested 8.x-1.0-alpha4.

Intercept

Project page:

Intercept is a bridge module to the Intercept event management system. It is designed to help libraries and other organizations evolve and track their event programming, including room booking.

Not evaluated.

MERCI

Project page:

MERCI [Manage Equipment Reservations, Checkout and Inventory] can extend any content type into a list of unique reservable items (like studios) or buckets of interchangeable items (like DV cameras).

Not evaluated.

Reserve

Project page:

The Room Reservations module was developed for use by academic libraries to manage access to and use of their study rooms.

The Drupal 7 version of the project was named Room Reservations.

It displays a grid of bookable units (however - bookable by the hour, not by the day). It also provides a nice pop-up date picker based upon date.

Programatically creates three node types:

These are just a Features export (but it the method used for importing the features looks wrong and breaks easily). Since everything is standard nodes all data can be accessed and edited as standard nodes. All data are in standard fields in nodes (no schema of its own).

The business logic it is very much targeted towards library use, and provides for such things as opening hours (and requiring that all reservations end 15 minutes before the building closes, buffers for setting up and taking down equipment is specific rooms, etc. It also has a lot of unused code carried over from the D6 version. It works by precompting availabity for all rooms into an array for the allowed booking time, which works time for short time allowed advance bookings, but scale badly.

Detailed (but outdated) instructions for configuring the module can be found at Drupal.org. The D6 version used to have an extensive messaging framework (SMS and email reminders), but all those features are missing from D7.

I believe the content types the grid and the date picker kan be reused for RGB – which will produce a 2D booking grid, but the features import need to be rewritten and the rest must just be removed.

I used a hacked version for 2015 exam slots. Curently (August 2018) are very much refactored ver. 7.x.2.x of Sep. 2015 is use as the basis for RGB. However, I did a new features export.

Evaluation: Tested. User friendly and fairly easy to understand architecture, but bloated, buggy and also suffers from a race condition. Lots of legacy code from D6 that does not work any more such as SMS messaging. Basically rewritten from the ground up, but still better than struggling with BAT.

What's reused in RBG:

Event calendar projects

These are Drupal projects that may be candidates for event and appointment calendars, but not suitable for booking calendars.

Fullcalendar View

Project page:

Provides a Views display, style and row plugin for displaying nodes using Adam Shaw's FullCalendar jQuery plugin.

Evaluation: Promising.

Discarded calendar projects

These are Drupal projects that I found to be uninteresting for my purposes. This may because they are not available for Drupal 9, lack too much functionality, or are bridge modules for SaaS booking systems. I include them just to not waste time looking at them again.

Agreservations

Project page:

The agreservations-module is a module to handle reservations of resources.

Home page:

Agreservations is a group of Drupal Modules developed for the purpose of managing the availability of resources like rooms, houses, cars, boats. It makes use of Drupal, and the Drupal Modules: Ubercart, Calendar and others a fully functional booking system with online booking and Reservation and Resource Management capabilities.

Project provides resource management (including a booking calendar) and allows you to offer some resources on a daily basis and others on an hourly basis. Users can be signed in or not, can book resources and pay online via the Ubercart online Shopping module.

Evaluation: Old. Declining use. Few installs. Not tested.

Availability Calendars

Project page:

The Availability Calendar module allows you to add an availability calendar to entities. Example use cases are tourist accommodation - e.g. bed and breakfast, holiday homes or self catered apartments - and car or motor bike rental. An availability calendar shows your customers at what dates your accommodation is still available and at what dates it is already booked.

The availability calendar allows booking fields to be attached to entities.

The availability calendar is shown per unit. There is no provision for showing a month grid of multiple units.

There is a submodule that provides a field that may used for an interactive booking request, but booking will not change the state of the calendar.

An availability calendar shows your customers at what dates your accommodation is still available and at what dates it is already booked. Provides visual half-day slots.

Distribution Easy Booking recently moved from this to Rooms. Project page suggests BAT for Drupal 8.

Provides some nice dialoges to customize calendar display.

Evaluation: Feels clunky and outdated. No Drupal 8/9 upgrade.

What's reused in RBG:

Evaluation: No Drupal 9 upgrade.

Booking Time Slots

Project page:

[A]llows you to set-up schedule for Venue Facility, so users can book slots (e.g. classes) within specified opening hours.

Evaluation: Provides only hourly bookings. No Drupal 9 upgrade.

CalDAV

Project page (no info).

This project provides a display of external CalDAV feeds, using Calendar to display the information.

It is sandbox project for Drupal 6, but may be salvaged. CalDAV is an Internet standard allowing a client to access scheduling information on a remote server (WikiPedia).

Evaluation: No Drupal 9 upgrade.

FullCalendar

Project page:

Provides a Views display, style and row plugin for displaying nodes using Adam Shaw's FullCalendar jQuery plugin.

This is the calendar component used by BAT and Rooms.

Evaluation: Compatible with Fullcakendar 3.9.0. Buggy and not well mintained.

Hotel Booking System for Ubercart

Project page:

The uc_hotel module is a hotel booking system for Drupal and Ubercart.

It does not manage individual rooms, but rather lets you create room types, and set how many of each type are available for specific dates on the calendar.

Evaluation: No Drupal 9 upgrade.

Planyo Reservation System

Project page:

This module is a bridge to Planyo online reservation system.

Resource Booking

Project page:

Resource booking module provides a widget that can be included in any content type and enable resource booking.

Evaluation: Not evaluated. Poorly maintained. No Drupal 9 upgrade.

Rooms

Project page:

Drupal Rooms is a basic booking and room management solution for hotels, vacation rentals and B&Bs.

Docs:

Like BAT, Rooms is created by Roomify. It is a fully integrated e-commerce application.

It uses BAT as its secret sauce, but is targeted towards site builders. It comes with a lot of unneeded stuff for my purposes.

The current version of Rooms is 7.x-1.15. A lot of things changed in version 7.x-1.8, so do not rely on outdated tutorials.

Used by the Easy Booking distribution and my students (call of 2016) remaking Margarita.

Evaluation: Rather heavy. No Drupal 9 upgrade. Tested 7.x-1.15.

Reservations

Project page:

Reservations consists of an API that enables nodes of any content type to be reserved based by users by role as either a resource of a bucket. Using the bucket configuration works more like a hotel or rental car system where customers reserve a type or item and the specific item they get depends on what is available at the time the reservation starts. This project includes multiple sub-modules.

This module is part of the CMDrupal project. It is designed to be used with other modules included in the Community Media Start Kit.

Evaluation: Not evaluated. No Drupal 9 upgrade.

Simple reservation

Project page:

This module provides a simple and easy way to reserve items which can be created by the administrator. Examples for it's usage can be hotel rooms, boats, cars, airplanes, basically anything you can think of which can be reserved by one individual.

Evaluation: Just reservations, no calendar. No Drupal 9 upgrade.

Spider Event Calendar

Project page:

Spider Event Calendar is a highly configurable product which allows you to have multiple organized events.

Bridge module.

Evaluation: No Drupal 9 upgrade.

Pickers

I am currently using BDTPicker. It lets the user pick the start and end date, but does not feature a date range picker. It also uses the option minDate to prevent setting the end date of the two linked files before the initial start date. This is a misfeature but I can't figure out how to turn it off.

I've linked to some range pickers below. I have yet to evaluate most of these:

To install the latter, In /sites/all/libraries/ do:

$ bower install jquery-ui-month-picker --save

Key figures

Most stable version indicated. "Year" is year that vesion was released. Parentheis around D8 version means not ported to D9.

Last updated: 2021-12-07.
Project Ver. 7 Ver. 9 Year Sites Issues Bugs Size (Kb)
Appointment Calendar 7.x-1.4 (8.x-1.5) 2020 332 22 11 19
BAT 7.x-1.37 8.x-1.3 2020 726 73 31 148
Calendar 7.x-3.5 8.x-1.0-a4 2021 84587 96 59 72
Intercept - 8.x-1.0-a39 2021 13 23 6 1260
Reserve - 4.0.x-dev 2021 5 9 5 63

See also module_eval.xslx in my Drupal module C:\inetpub\wwwroot\staging2 directory.

Final word

Links to other relevant chapters:


Last update: 2020-04-17 [gh].