BAT: Herramientas de Reservas y Disponibilidad

Un framework generalizado de gestión de reservas y disponibilidad para Drupal que proporciona una base para gestionar unidades, eventos, estados y reservas.

bat
453 sites
99
drupal.org

Overview

BAT (Booking and Availability Management Tools) es un framework integral para Drupal que proporciona una base a través de la cual se pueden abordar una amplia gama de casos de uso de gestión de disponibilidad, reservaciones y reservas. Desarrollado originalmente por Roomify, BAT permite a los desarrolladores construir sistemas de reservas complejos como reservas de hoteles, alquiler de equipos, programación de citas y aplicaciones de gestión de recursos.

El módulo introduce una arquitectura flexible basada en entidades centrada en Units (cosas que pueden reservarse), Events (estados basados en tiempo aplicados a las unidades) y Bookings (reservaciones que vinculan usuarios con unidades para períodos de tiempo específicos). BAT utiliza una estructura de almacenamiento de base de datos eficiente para rastrear cambios de estado con granularidad de día, hora o minuto.

Las características arquitectónicas clave incluyen: Type Groups para organizar tipos de unidades relacionados, Event Types configurables con estados personalizados, soporte tanto para granularidad diaria como horaria, integración con FullCalendar para gestión visual, y Event Series para reservas recurrentes. El módulo proporciona APIs extensas tanto a través de funciones PHP como implementaciones de hooks para personalización.

Features

  • Gestión de entidades Unit con bundles personalizables (Types) para representar recursos reservables como habitaciones, equipos o servicios
  • Sistema de eventos con estados configurables y referencias a entidades objetivo, almacenando datos de disponibilidad eficientemente en tablas de día/hora/minuto
  • Entidad Booking para gestionar reservaciones vinculadas a eventos y unidades
  • Sistema Type Group para organizar y agrupar tipos de unidades relacionados
  • Integración con FullCalendar con vistas de línea de tiempo y programador para gestión visual de eventos
  • Soporte de Event Series para crear eventos recurrentes con reglas personalizables
  • Campos Calendar Reference para incrustar calendarios de disponibilidad de unidades en cualquier entidad con campos
  • Soporte de granularidad para seguimiento de eventos tanto diario como por hora
  • Sistema de permisos integral con control de acceso a nivel de bundle (ver/editar/eliminar propios/cualquiera)
  • Control de acceso a nivel de consulta para listados de entidades con personalización basada en hooks
  • Limpieza automática de estados de eventos vía cron con períodos de retención configurables
  • Integración con Views para unidades, eventos y reservas con manejadores de campos personalizados
  • Soporte de búsqueda facetada a través de integración con Search API y el módulo Facets
  • Integración con Commerce para opciones de precios a través del submódulo BAT Options
  • Sistema de restricciones para definir reglas de disponibilidad complejas

Use Cases

Sistema de Reservas de Habitaciones de Hotel

Crea un sistema de reservas de hotel con tipos de habitaciones (Individual, Doble, Suite), unidades de habitación individuales, eventos de disponibilidad y reservas de huéspedes. Usa Type Bundles para clasificaciones de habitaciones, Unit Types para categorías de habitaciones, Units para habitaciones individuales, Event Types para disponibilidad/precios y Bookings para reservaciones. La interfaz FullCalendar proporciona gestión visual de la disponibilidad de habitaciones.

Gestión de Alquiler de Equipos

Construye un sistema de alquiler de equipos para artículos como cámaras, herramientas o vehículos. Define categorías de equipos como Type Bundles, crea Unit Types para modelos de equipos, Units para artículos individuales y rastrea períodos de alquiler usando Events. El campo de referencia de calendario puede mostrar la disponibilidad de equipos en las páginas de productos.

Sistema de Programación de Citas

Crea un sistema de citas para servicios como consultas médicas o reservas de salón. Usa Units para proveedores de servicios o salas, Event Types para franjas horarias con granularidad por hora y Bookings para citas confirmadas. Event Series puede manejar patrones de disponibilidad recurrentes.

Reserva de Recursos para Instalaciones

Gestiona reservas para salas de reuniones, instalaciones deportivas o espacios para eventos. Define tipos de instalaciones, crea Units para cada espacio reservable y usa Events para rastrear la disponibilidad con soporte tanto para granularidad de reservas diarias como por hora.

Gestión de Propiedades de Alquiler Vacacional

Construye una plataforma de alquiler vacacional con tipos de propiedades, unidades de alquiler individuales, eventos de precios estacionales, eventos de bloqueo por mantenimiento y reservas de huéspedes. Usa Type Groups para organizar propiedades por ubicación o categoría y aprovecha la integración de búsqueda facetada para filtrado de disponibilidad.

Tips

  • Usa la función bat_event_get_calendar() para consultar eficientemente la disponibilidad a través de múltiples Units - almacena en caché la configuración del calendario para mejor rendimiento.
  • Al crear Event Types, considera cuidadosamente la granularidad (diaria vs por hora) ya que esto afecta el almacenamiento en la base de datos y no puede cambiarse fácilmente después.
  • Implementa hook_bat_entity_access() para lógica de control de acceso personalizada que va más allá de los permisos CRUD estándar.
  • Usa Type Groups para organizar Unit Types relacionados para mejor organización administrativa y potencialmente configuración compartida.
  • El módulo Event Series es ideal para patrones de disponibilidad recurrentes como horarios de apertura semanales o cierres estacionales.
  • Configura correctamente la licencia de FullCalendar Scheduler si usas vistas premium de timeline/resource para evitar advertencias en la consola.
  • Usa bat_date_range_fields() para crear campos de selector de fechas pareados consistentes en formularios personalizados.
  • Para sitios de alto tráfico, ajusta la configuración de limpieza de eventos antiguos para equilibrar el tamaño de la base de datos contra el tiempo de ejecución de cron.

Technical Details

Admin Pages 20
Bat /admin/bat

Página principal de administración de BAT que proporciona acceso a todas las áreas de gestión de BAT, incluyendo Units, Events, Bookings, Groups y Configuration.

Fecha /admin/bat/config/date

Configurar los formatos de fecha utilizados en BAT para eventos, resúmenes de búsqueda y ventanas emergentes del calendario.

Configuración de Bat Event /admin/bat/config/bat_event

Configurar ajustes para la eliminación automática de eventos antiguos durante las ejecuciones de cron.

Fullcalendar /admin/bat/config/fullcalendar

Configurar ajustes globales para la visualización de FullCalendar, incluyendo rangos de tiempo, altura, vistas y licencias.

Mantenimiento de Bat Event /admin/bat/config/maintenance

Herramientas de mantenimiento de base de datos para las tablas de eventos de BAT, incluyendo eliminación de eventos antiguos y corrección de integridad de tablas.

Unit /admin/bat/unit

Sección de gestión de Unit que proporciona acceso a Units, Types, Type Bundles y Unit Bundles.

Lista de Unit /admin/bat/unit/unit

Listar y gestionar todas las units. Las units son los recursos reservables individuales.

Lista de tipos de unit /admin/bat/unit/unit_type

Listar y gestionar tipos de unit. Los tipos de unit agrupan units similares (ej., Habitación Individual, Habitación Doble).

Lista de Type Bundle /admin/bat/unit/type-bundles

Gestionar type bundles (entidades de configuración) que definen la estructura de los tipos de unit.

Lista de Unit Bundle /admin/bat/unit/unit-bundles

Gestionar unit bundles (entidades de configuración) que definen la estructura de las units.

Events /admin/bat/events

Sección de gestión de Event que proporciona acceso a Events, Event States, Event Types y Event Series.

Lista de Event /admin/bat/events/event

Listar y gestionar todos los events. Los events representan estados basados en tiempo aplicados a las units.

State /admin/bat/events/state

Gestionar estados de event. Los estados definen las condiciones posibles en las que puede estar una unit (ej., Disponible, Reservado, Mantenimiento).

Lista de Event Type /admin/bat/events/event/event-types

Gestionar tipos de event. Los tipos de event categorizan los events (ej., Disponibilidad, Precios).

Lista de Event series /admin/bat/events/event_series

Listar y gestionar series de events para eventos recurrentes.

Booking /admin/bat/booking

Sección de gestión de Booking para administrar reservas.

Lista de Booking /admin/bat/config/booking

Listar y gestionar todas las bookings/reservas.

Group /admin/bat/group

Sección de gestión de Type Group para organizar tipos de unit relacionados.

Type Groups /admin/bat/group/type-group

Listar y gestionar type groups para organizar tipos de unit relacionados.

Calendario /admin/bat/calendar/{unit_type}/{event_type}

Vista de calendario para visualización y edición masiva de events para una combinación específica de tipo de unit y tipo de event. Requiere el módulo BAT Event UI.

Permissions 27
Configurar BAT

Permite a los usuarios gestionar los ajustes de configuración de BAT en todo el sitio.

Administrar bundles de grupos de tipos

Permite a los usuarios agregar bundles de grupos de tipos y configurar sus campos.

Ver cualquier grupo de tipos no publicado

Permite a los usuarios ver cualquier grupo de tipos no publicado.

Ver grupos de tipos propios no publicados

Permite a los usuarios ver sus propios grupos de tipos no publicados.

Omitir acceso a grupo de tipos

Permite a los usuarios realizar cualquier acción en entidades de grupo de tipos.

Crear grupo de tipos de cualquier tipo

Permite a los usuarios crear grupos de tipos.

Ver cualquier grupo de tipos de cualquier tipo

Permite a los usuarios ver cualquier grupo de tipos.

Editar cualquier grupo de tipos de cualquier tipo

Permite a los usuarios editar cualquier grupo de tipos.

Eliminar cualquier grupo de tipos de cualquier tipo

Permite a los usuarios eliminar cualquier grupo de tipos.

Administrar bundles de unidades

Permite a los usuarios agregar bundles de unidades y configurar sus campos.

Administrar bundles de tipos

Permite a los usuarios agregar bundles de tipos y configurar sus campos.

Ver cualquier unidad no publicada

Permite a los usuarios ver cualquier unidad no publicada.

Ver unidades propias no publicadas

Permite a los usuarios ver sus propias unidades no publicadas.

Ver cualquier tipo no publicado

Permite a los usuarios ver cualquier tipo no publicado.

Ver tipos propios no publicados

Permite a los usuarios ver sus propios tipos no publicados.

Omitir acceso a unidad

Permite a los usuarios realizar cualquier acción en entidades de unidad.

Omitir acceso a tipo de unidad

Permite a los usuarios realizar cualquier acción en entidades de tipo de unidad.

Administrar tipos de eventos

Permite a los usuarios agregar tipos de eventos y configurar sus campos.

Administrar estados de eventos

Permite a los usuarios agregar estados de eventos.

Omitir acceso a evento

Permite a los usuarios realizar cualquier acción en entidades de evento.

Administrar tipos de reservas

Permite a los usuarios agregar tipos de reservas y configurar sus campos.

Reservar unidades

Permite a los usuarios acceder a la página de reservas.

Omitir acceso a reserva

Permite a los usuarios realizar cualquier acción en entidades de reserva.

Administrar eventos del calendario

Permite a los usuarios manipular eventos en el calendario.

Ver información de eventos pasados

Permite a los usuarios ver información de eventos en el pasado (especialmente a través del campo de referencia de evento).

Administrar tipos de series de eventos

Permite a los usuarios agregar tipos de series de eventos y configurar sus campos.

Omitir acceso a serie de eventos

Permite a los usuarios realizar cualquier acción en entidades de serie de eventos.

Hooks 6
hook_bat_entity_access

Permite a los módulos denegar o proporcionar acceso para que un usuario realice una operación que no sea de visualización en una entidad BAT antes de que ocurra cualquier otra verificación de acceso. Devuelve FALSE para denegar, TRUE para permitir, o nada para la verificación de permisos normal.

hook_bat_event_target_entity_types

Permite a los módulos definir tipos de entidad que pueden ser referenciados por BAT Events y proporcionados a la biblioteca BAT como una Unit. Los tipos de entidad deben implementar los métodos getEventDefaultValue() y formatEventValue().

hook_bat_event_constraints_info

Permite a los módulos definir restricciones de eventos que se aplican al verificar la disponibilidad.

hook_bat_event_constraints_info_alter

Permite a los módulos modificar las restricciones de eventos definidas.

hook_bat_facets_search_results_alter

Permite a los módulos modificar los resultados de la búsqueda facetada.

hook_bat_entity_access_OP_condition_ENTITY_TYPE_alter

Permite a los módulos agregar condiciones a la consulta de acceso a entidades para operaciones y tipos de entidad específicos.

Troubleshooting 5
Los eventos no se muestran correctamente en el calendario

Asegúrate de que el Event Type haya sido configurado correctamente con el tipo de entidad objetivo correcto (bat_unit) y que existan Event States para ese Event Type. Verifica que el módulo FullCalendar esté habilitado y configurado en /admin/bat/config/fullcalendar.

Permiso denegado al crear Units o Events

BAT usa un sistema de permisos granular. Asegúrate de que el usuario tenga el permiso 'create' apropiado para el tipo de entidad y bundle específico. Verifica los permisos en /admin/people/permissions y busca los permisos de bat_unit, bat_event o bat_booking.

Las tablas de datos de eventos están creciendo demasiado

Habilita la limpieza automática de eventos antiguos en /admin/bat/config/bat_event. Configura el número de días a retener y los eventos a eliminar por ejecución de cron. También puedes activar manualmente la limpieza desde /admin/bat/config/maintenance.

El campo Calendar Reference no muestra la disponibilidad

Verifica que: 1) La Unit referenciada existe, 2) Existen Events para el Event Type seleccionado, 3) El formateador del campo está configurado en vista Timeline o Month, 4) El usuario tiene el permiso 'view past event information' si está viendo datos históricos.

La búsqueda de disponibilidad devuelve resultados incorrectos

Verifica que los Event States estén configurados correctamente para el Event Type. La función bat_event_get_matching_units() usa nombres de máquina de estados, no IDs. Verifica que los estados referenciados en tu código de búsqueda existan y estén asociados con el Event Type correcto.

Security Notes 5
  • BAT implementa control de acceso a nivel de consulta a través de hook_query_TAG_alter, asegurando que los usuarios solo vean entidades que tienen permiso para ver en los listados.
  • Los permisos 'bypass' deben otorgarse con moderación ya que anulan todas las demás verificaciones de acceso para los tipos de entidad respectivos.
  • Los datos de eventos se almacenan en tablas personalizadas (bat_event_*) que no heredan el acceso estándar de entidades de Drupal - las verificaciones de acceso personalizadas se implementan en bat_entity_access().
  • El módulo BAT Facets filtra los resultados de búsqueda basándose en los permisos del usuario a través de hook_bat_facets_search_results_alter.
  • Al implementar restricciones personalizadas a través de hook_bat_event_constraints_info, asegúrate de que no expongan datos sensibles de disponibilidad.