Tuesday, October 11, 2011 - 02:08
Written by

Our idea is that a Room Booking Module would be a fantastic addition to CiviCRM.

The Room Booking Module would give the ability to manage the availability of multiple rooms (i.e. meetings rooms / conference facilities) and assign the bookings to CiviCRM Contacts. Each booking would appear on a contacts new ‘Room Booking’ Tab and an activity ‘Room Booked’ would also be generated. This is the same methodology used for CiviEvents. A calendar view would allow you to search current bookings and add new ones in available time slots. In addition a room could not be booked if that time slot had already been taken unless a booking had been cancelled.

When making a booking you would be able to assign resources to the room. This could be limited number items, such as Projectors, or unlimited items such as Cups of Coffee. Each resource would have a unit cost which would be automatically added to the Booking charge.

If applicable each room would have a fixed cost per time period (i.e. Morning / Afternoon/ Evening). The cost would alter automatically based upon which CiviCRM Contact was making the booking. As an example Members may get a cheaper rate. All costs (room and resources) would be totalled by the system. In the event of something going wrong on the day with a booking a manual override for the total must be available. Each booking cost when logged would be integrated with the CiviCRM Contribution module.

When making a booking a room layout must also be specified. The reason for this is that room capacity changes based upon the layout required. As an example using ‘Theatre’ layout a room may hold 80 people but under ‘Board Room’ layout the same room may only hold 30 people.

The module would also provide PDF Templates for contacting those making the Booking. A good example being that a PDF invoice with all cost / date / room details would have to be generated after the Booking has taken place with a method for emailing the invoice. With Room Bookings invoicing after the booking is common as extra resources are often utilised on the day.

Further phases to this new function could be;
- To provide a public interface so anonymous users could make their own bookings which were then moderated.
- Take Credit Card payments via the CiviCRM payment system

Update: A spec for this project is now on the CiviCRM wiki

Filed under


Hey Olly,

We are about to implement something similar for I'm hoping to get a working prototype up by 31st October. I'd originally called it CiviResource.

My initial thoughts were to model each resource (or meeting room) as an activity type (see,21577.msg90469.html#msg90469). We'd then make a calendar that showed all activities of a certain type (and status) that people can use to check availability and potentially make a booking. We are keen on building on the work that Tim Otten has done with calendars and activities:

I'm planning on working on the prototype during the California, New York and Albany sprints.

We're also interested in integrating with CiviContribute, but we're likely to leave that till a further phase.

I'd be really up for co-ordinating this work as much as possible. Maybe time to write up some requirements and specificiations on the wiki??

Also, just wondering about the CiviCRM MERCI integration and if you are still going down that road?

No the MERCi integration is now not taking place despite some work already being done. The MERCi development has forked and this option is no longer viable.


What is the nature of the fork? Will you release the work you have done so far? The MERCI stuff seems like a great basis for this, so I am really curious what is happening.

I have done something like this already. The approach I took was to build onto CiviEvent. I created a new participant role called "facility" as well as defining new contact sub-types called "meeting room", "projector", "ballroom", etc.

Once those definitions were in place, I created a new contact for each facility, ie "meeting room ABC", "meeting room DEF", "Ballroom AAA", etc.

Then someone in the back office could "book a room" for an event by clicking "Event ... Register Event Participant" then selecting "meeting room ABC" as the participant, and giving it the participant role of "facility"

If someone needs to see all the bookings for room "Ballroom AAA" they can look at the event tab for the "Ballroom AAA" contact record, or they can run a participant report.

I had thought of using activities initially, but decided against it as more often than not the room/facility is needed for an event, and the facility manager/staff needs to know how many people are attending so they can set up the correct number of tables and chairs, etc.

I also need something like this, and would be willing to contribute time to developing the project. Yes let's do start discussing specs on the wiki.

This has come up for us but the 'resource' a person wanted to book was a teacher's time (for a one-on-one training) and there was also a requirement to be able to charge for the appointment

Yes, our use-case is also very different from the one outlined above.

We book guest accommodations, and charge per-person, not per room, but the charge does vary depending on who that person is. We might also rent the whole building to a large group, and so need a parent->child relationship established between resources (in this case room->building).

I think if we put our heads together we can create something that's generalized enough to meet everyone's needs.

Since a room isn't the only thing someone might want to book, I've tried to abstract the concept a bit and have outlined a rough spec on the wiki.
Hopefully others will chime in on the wiki and this ball can get rolling.

any working version available for this. I'm planning to develop similar kind of module for hotel booking.