BEE Bookable Entities Everywhere

A booking and availability management module based on BAT that enables any node type to become bookable with daily or hourly reservation capabilities.

bee
257 sites
68
drupal.org

Overview

Bookable Entities Everywhere (BEE) is a powerful Drupal module that extends the BAT (Booking and Availability Tools) framework to provide booking and availability functionality to any content type. The module allows site builders to make any node type bookable without requiring custom development.

BEE supports two booking granularity modes: daily bookings for full-day reservations (ideal for vacation rentals, equipment rental) and flexible hourly bookings for time-based reservations (ideal for meeting rooms, appointments). Each bookable node can have single or multiple units to handle identical resources (e.g., multiple copies of the same equipment or multiple seats).

The module provides an availability calendar displayed on each enabled node, a comprehensive reservation form, and the ability to set open hours for hourly bookables. When integrated with Drupal Commerce, BEE enables payment processing for reservations with configurable pricing per day or per hour/minute.

BEE also supports repeating bookings with daily, weekly, or monthly frequencies, making it suitable for recurring events or regular resource allocations.

Features

  • Make any node type bookable through content type settings without custom code
  • Support for both daily bookings (full days) and flexible hourly bookings (any duration)
  • Multiple units per node to handle identical resources (e.g., 10 identical meeting rooms)
  • Visual availability calendar using FullCalendar for each bookable node
  • Configurable open hours for hourly booking types using Office Hours field
  • Commerce integration for payment processing with configurable pricing per day/hour/minute
  • Repeating bookings support with daily, weekly, or monthly frequencies
  • Availability management form to update unit availability states
  • Dynamic per-content-type permissions for managing availability
  • Event series support for recurring reservations
  • Automatic BAT unit creation when nodes are created
  • Price alteration hook for custom pricing logic

Use Cases

Meeting Room Booking System

Configure a 'Meeting Room' content type with hourly bookings. Each room node gets an availability calendar. Users can book rooms for specific time slots. Set open hours (e.g., 8 AM - 6 PM weekdays) to restrict booking times. Multiple identical rooms can be handled with multiple units per node.

Vacation Rental Property

Create a 'Property' content type with daily bookings set to 'generally available'. Each property has one unit by default. Enable Commerce payments to charge per night. Property owners with 'manage availability for own property nodes' permission can mark dates as unavailable for maintenance.

Equipment Rental Service

Set up an 'Equipment' content type with daily bookings. For items with multiple copies (e.g., 5 identical laptops), add additional units through the node edit form. The calendar shows availability across all units and automatically assigns an available unit to each reservation.

Appointment Scheduling

Create a 'Service' content type with hourly flexible bookings. Configure open hours per service node. Integrate with Commerce for paid appointments. Use repeating bookings for regular appointments (e.g., weekly therapy sessions).

Tour or Event Booking

Use 'periodically available' mode for a 'Tour' content type. Tours are unavailable by default and only made available for specific dates/times through the availability management form. Enable capacity to allow multiple participants per tour slot.

Webform-based Reservations

Use the bee_webform submodule to embed reservation forms in webforms. Users select dates and see available nodes, then submit the form to create bookings. Useful for complex booking workflows requiring additional data collection.

Tips

  • Use 'generally available' mode for resources that are typically available (meeting rooms, equipment) and 'periodically available' for resources that need explicit availability windows (tours, special events)
  • Add multiple units to a node when you have identical resources - the system automatically assigns available units to reservations
  • The booking length setting (daily vs hourly) cannot be changed after initial configuration, so plan accordingly
  • Use the hook_bee_reservation_price_alter hook to implement dynamic pricing based on seasons, duration, or other factors
  • For complex booking workflows requiring additional data, consider using the bee_webform submodule to create custom booking forms
  • The capacity field on reservations allows booking multiple units at once, useful for group bookings or multi-resource reservations

Technical Details

Admin Pages 3
Content Type BEE Settings /admin/structure/types/manage/{node_type}

Configure BEE booking settings for a specific content type. This is where you enable bookability and configure booking parameters for the content type.

Availability Management /node/{node}/availability

Manage the availability of a bookable node's units. View and update availability states through a calendar interface.

Add Reservation /node/{node}/add-reservation

Create a new reservation/booking for a bookable node.

Permissions 6
Administer bee settings

Allows users to configure BEE settings on content types

Create bee reservation

Allows users to create reservations on bookable nodes

View calendar data for any availability_daily event

Allows viewing daily availability calendar data

View calendar data for any availability_hourly event

Allows viewing hourly availability calendar data

Manage availability for all {bundle} nodes

Dynamically generated per content type - allows managing availability for all nodes of this type

Manage availability for own {bundle} nodes

Dynamically generated per content type - allows managing availability only for nodes owned by the user

Hooks 3
hook_bee_reservation_price_alter

Allows modules to alter the calculated price for a BEE reservation

hook_form_node_type_edit_form_alter

BEE adds settings to the node type edit form through this hook

hook_bat_api_events_index_calendar_alter

BEE alters BAT calendar events to customize display colors and labels based on availability states

Troubleshooting 6
Availability calendar not displaying on node

Ensure the content type has BEE enabled in its settings. Check that the 'field_availability_daily' or 'field_availability_hourly' field is configured to display in the node's view display settings with the appropriate calendar view mode.

Cannot enable payment option for bookings

Commerce checkout and payment modules must be installed and enabled. Additionally, at least one Commerce Store must be configured before payments can be enabled.

Reservations not being created after checkout

Ensure the commerce_order.place.pre_transition event is being triggered. Check that the BEE order item type exists and the booking entity reference field is properly configured.

Users cannot access the Add Reservation form

Users need the 'create bee reservation' permission. Verify the permission is assigned to the appropriate roles.

Availability tab not showing on nodes

Users need either 'manage availability for all {type} nodes' or 'manage availability for own {type} nodes' permission for the specific content type.

Open hours not being respected

For hourly bookable types, ensure the 'Set Open Hours' checkbox is enabled on the node edit form and that the Open Hours field has values configured.

Security Notes 4
  • BEE implements per-content-type permissions allowing granular access control for availability management
  • The 'manage availability for own nodes' permission restricts users to only their own content, providing multi-tenant capability
  • Commerce integration follows standard Drupal Commerce security practices for payment processing
  • Access to reservation forms is controlled by the 'create bee reservation' permission