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
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
/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.
/admin/bat/config/date
Configurar los formatos de fecha utilizados en BAT para eventos, resúmenes de búsqueda y ventanas emergentes del calendario.
/admin/bat/config/bat_event
Configurar ajustes para la eliminación automática de eventos antiguos durante las ejecuciones de cron.
/admin/bat/config/fullcalendar
Configurar ajustes globales para la visualización de FullCalendar, incluyendo rangos de tiempo, altura, vistas y licencias.
/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.
/admin/bat/unit
Sección de gestión de Unit que proporciona acceso a Units, Types, Type Bundles y Unit Bundles.
/admin/bat/unit/unit
Listar y gestionar todas las units. Las units son los recursos reservables individuales.
/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).
/admin/bat/unit/type-bundles
Gestionar type bundles (entidades de configuración) que definen la estructura de los tipos de unit.
/admin/bat/unit/unit-bundles
Gestionar unit bundles (entidades de configuración) que definen la estructura de las units.
/admin/bat/events
Sección de gestión de Event que proporciona acceso a Events, Event States, Event Types y Event Series.
/admin/bat/events/event
Listar y gestionar todos los events. Los events representan estados basados en tiempo aplicados a las units.
/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).
/admin/bat/events/event/event-types
Gestionar tipos de event. Los tipos de event categorizan los events (ej., Disponibilidad, Precios).
/admin/bat/events/event_series
Listar y gestionar series de events para eventos recurrentes.
/admin/bat/booking
Sección de gestión de Booking para administrar reservas.
/admin/bat/config/booking
Listar y gestionar todas las bookings/reservas.
/admin/bat/group
Sección de gestión de Type Group para organizar tipos de unit relacionados.
/admin/bat/group/type-group
Listar y gestionar type groups para organizar tipos de unit relacionados.
/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
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
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.
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.
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.
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.
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.