Skip to main content

RSVP Reservation System Guide

This guide outlines a process for constructing a RSVP Reservation Calendar Systems using Drupal CMS. 
 

Image
Calendar Components

WIP Github Code Template RSVP_System
https://github.com/slackstone/rsvp_system

 



 

Client & Application Requirements:

The Drupal CMS platform is ideal for building flexible "RSVP Systems".  Drupal has been proven to meet unique client needs while running Enterprise workloads. 

Accessible, Fair, Easy, Reliable. 
RSVP Locations are available based on Role membership. 
Conflict checking prevents time overlap. 
Moderation process manages with team and group Roles. 
Data Management tools for importing/exporting and reporting on data 
Modern Content Displays: Calendars dashboard pages, Email notifications, Mobile CSS, print and PDF reporting. 


ECA (Event Condition Action) Workflow Models

We leverage a few Drupal contributed modules within the RSVP system. The ECA module does the bulk of the lifting, providing a business logic workflow solution. ECA provides much of the functionality that was formerly provided by the Drupal Rules module. ECA can be used to help replace the need for small custom "one-off" modules. Resource Conflict, used for date overlap validation, was a key Drupal 7 module that we are replacing with the help of ECA. 

Key Workflow Models : 

1) Lead Time Validation (lead_time_validation)
https://www.drupal.org/project/field_validation
Provide an optional required "Lead Times" on the RSVP  intake form. 

2) RSVP Validation (reservation_validation)  
Performs conflict checking using the location and time data.  

 

Screenshots: ECA Reservation Validation Model  (Example Flow)

Image
Workflow_Example
Image
Overlap Flow


3) RSVP Assign Public Location (reservation_assignment) 
For new Requests. Copies the Author's the "Assigned Location" value into the "Public Location" display field.  This step pins the RSVP to a Location's affiliated site calendar.  

4) RSVP New Request Notification  (reservation _notification)  - Submission alerts for Site Teams 

5) RSVP Moderation State Change  (reservation_moderation)  - Site Manager Dashboard Updates / Approval Queue 
  
Content Types:

Location (location) This content type uses "Per-Node" security to limit  requester access during the request process.  A requester's Location selection access is governed using Role subscriptions. This content type is used later as an Entity Reference on RSVP Request.        

URL Content Pattern = {home_site}/location/location_name 

Reservation (reservation_request)    
Description RSVP Reservation Request   
 * Content Revisions Enabled 
url  {home_site}/reservation_request/{user_id}_MM-DD-YYY-HH-MM} 
underName Borrower / Requester - Entity Reference  {user_id} 
Booking Time bookingTime 
startTime 
endTime 

-- field_location (entity reference)     
https://schema.org/underName 
 -- field_assigned_user_id Account Contact Email  
 -- field_location  Author's Assigned Site / Location (Entity Reference)
 -- field_public_location  Public Calendar Display Site / Location 
 -- field_boolean_terms Submission Agreement Terms 
 -- field_destruct_date Data Retention Policy 
 

Image
Form Flow



Views (Data Queries) :

Location Lookup (Entity Reference); a security trimmed list of available locations.     
Used as an "Entity Reference" for RSVP Reservation Requests.

Screenshot: Content Access Control set "per-instance"  for Locations
Image
Trimmed To Role
Image
Content Access Control
Image
Reservation Example

 



Limitations of this Conflict Validation Process: 
It is likely more efficient to perform conflict validation in a custom module, where the SQL Query could be highly optimized. Our ECA model brings in all events from the Views Query, then processes them in a loop. There are a few steps that can help limit performance issues.  

- ECA Conflict Validation only runs against future Reservations 

- The Views Query has a contextual filter passed in from the ECA workflow. Ideally the query would filter on both Date and Location.  Reservable spaces with lots of future reservations could slow the validation process. 
 

Screenshot: Views Query Schema for Conflict Validation
Image
Content Validation View

Calendar Displays;  Monthly, Print Listings, QR Room Sheets  


Advance Setup and Requirements:

The Content Access module controls which locations are displayed on the RSVP request form. 

Our Tamper module has been patched to add Timezone display formatting. (Work in Progress, expected ready 5/23
https://www.drupal.org/files/issues/2023-04-06/0001-Issue-3268276-Reworking-timezones.patch 
 

Screenshot: RSVP Create Request - Security Trimmed Location Look-up
Image
Reservation Request