BAT: 予約・空き状況管理ツール

Unit、Event、State、Bookingの管理基盤を提供する、Drupal向けの汎用的な予約・空き状況管理フレームワーク。

bat
453 sites
99
drupal.org

概要

BAT(Booking and Availability Management Tools)は、空き状況管理、予約、予約管理など幅広いユースケースに対応できる基盤を提供するDrupal向けの包括的なフレームワークです。もともとRoomifyによって開発されたBATは、ホテル予約、機材レンタル、予約スケジューリング、リソース管理アプリケーションなどの複雑な予約システムを構築することを可能にします。

このモジュールは、Unit(予約可能なもの)、Event(ユニットに適用される時間ベースの状態)、Booking(特定の期間にユーザーとユニットを紐付ける予約)を中心とした柔軟なEntityベースのアーキテクチャを導入しています。BATは、日・時間・分単位の粒度で状態変更を追跡するための効率的なデータベースストレージ構造を使用しています。

主要なアーキテクチャ機能には、関連するユニットタイプを整理するためのType Group、カスタム状態を持つ設定可能なEvent Type、日単位と時間単位の両方の粒度のサポート、視覚的管理のためのFullCalendar統合、定期的な予約のためのEvent Seriesが含まれます。このモジュールは、PHP関数とhook実装の両方を通じてカスタマイズのための広範なAPIを提供します。

Features

  • 部屋、機材、サービスなどの予約可能なリソースを表すカスタマイズ可能なバンドル(Type)を持つUnit Entity管理
  • 設定可能な状態とターゲットEntityリファレンスを持つEventシステム。日/時間/分テーブルに空き状況データを効率的に保存
  • EventおよびUnitにリンクされた予約を管理するためのBooking Entity
  • 関連するユニットタイプを整理・グループ化するためのType Groupシステム
  • 視覚的なイベント管理のためのタイムラインとスケジューラービューを備えたFullCalendar統合
  • カスタマイズ可能なルールで定期的なイベントを作成するためのEvent Seriesサポート
  • 任意のフィールド追加可能なEntityにユニットの空き状況カレンダーを埋め込むためのCalendar Referenceフィールド
  • 日単位と時間単位の両方のイベント追跡のための粒度サポート
  • バンドルレベルのアクセス制御(自分の/すべての表示/編集/削除)を持つ包括的なパーミッションシステム
  • hookベースのカスタマイズによるEntityリストのクエリレベルアクセス制御
  • 設定可能な保持期間を持つcronによる自動イベント状態クリーンアップ
  • カスタムフィールドハンドラーを持つUnit、Event、BookingのViews統合
  • Search APIおよびFacetsモジュール統合によるファセット検索サポート
  • BAT Optionsサブモジュールを通じた価格オプションのCommerce統合
  • 複雑な空き状況ルールを定義するためのConstraintシステム

Use Cases

ホテル客室予約システム

ルームタイプ(シングル、ダブル、スイート)、個々の客室ユニット、空き状況イベント、ゲスト予約を持つホテル予約システムを作成します。客室分類にはType Bundle、客室カテゴリにはUnit Type、個々の客室にはUnit、空き状況/価格設定にはEvent Type、予約にはBookingを使用します。FullCalendar UIは客室の空き状況の視覚的管理を提供します。

機材レンタル管理

カメラ、工具、車両などのアイテムの機材レンタルシステムを構築します。Type Bundleで機材カテゴリを定義し、Unit Typeで機材モデルを作成し、Unitで個々のアイテムを管理し、Eventでレンタル期間を追跡します。Calendar Referenceフィールドで製品ページに機材の空き状況を表示できます。

予約スケジューリングシステム

医療相談やサロン予約などのサービスの予約システムを作成します。サービス提供者または部屋にはUnit、時間単位の粒度を持つ予約枠にはEvent Type、確定した予約にはBookingを使用します。Event Seriesで定期的な空き状況パターンを処理できます。

施設のリソース予約

会議室、スポーツ施設、イベントスペースの予約を管理します。施設タイプを定義し、予約可能な各スペースのユニットを作成し、日単位と時間単位の両方の予約粒度をサポートするEventで空き状況を追跡します。

バケーションレンタル物件管理

物件タイプ、個々のレンタルユニット、季節料金イベント、メンテナンスブロッキングイベント、ゲスト予約を持つバケーションレンタルプラットフォームを構築します。Type Groupを使用して物件を場所やカテゴリごとに整理し、ファセット検索統合を活用して空き状況フィルタリングを行います。

Tips

  • bat_event_get_calendar()関数を使用して複数のユニット全体の空き状況を効率的にクエリできます - カレンダーセットアップをキャッシュしてパフォーマンスを向上させます。
  • Event Typeを作成する際は、粒度(日単位 vs 時間単位)がデータベースストレージに影響し、後から簡単に変更できないため、慎重に検討してください。
  • 標準のCRUDパーミッションを超えたカスタムアクセス制御ロジックにはhook_bat_entity_access()を実装してください。
  • Type Groupを使用して関連するユニットタイプを整理し、より良い管理組織と潜在的に共有設定を実現してください。
  • Event Seriesモジュールは、毎週の営業時間や季節ごとの休業などの定期的な空き状況パターンに最適です。
  • プレミアムタイムライン/リソースビューを使用する場合は、コンソール警告を避けるためにFullCalendar Schedulerライセンスを適切に設定してください。
  • bat_date_range_fields()を使用してカスタムフォームで一貫したペアの日付ピッカーフィールドを作成してください。
  • 高トラフィックサイトでは、データベースサイズとcron実行時間のバランスを取るために古いイベントのクリーンアップ設定を調整してください。

Technical Details

Admin Pages 20
Bat /admin/bat

Unit、Event、Booking、Group、設定を含むすべてのBAT管理エリアへのアクセスを提供するメインBAT管理ランディングページ。

日付 /admin/bat/config/date

イベント、検索サマリー、カレンダーポップアップでBAT全体で使用される日付形式を設定します。

Bat Event設定 /admin/bat/config/bat_event

cron実行中の古いイベントの自動削除の設定を構成します。

Fullcalendar /admin/bat/config/fullcalendar

時間範囲、高さ、ビュー、ライセンスを含むFullCalendar表示のグローバル設定を構成します。

Bat Eventメンテナンス /admin/bat/config/maintenance

古いイベントの削除やテーブル整合性の修正を含むBATイベントテーブルのデータベースメンテナンスツール。

Unit /admin/bat/unit

Unit、Type、Type Bundle、Unit Bundleへのアクセスを提供するユニット管理セクション。

ユニット一覧 /admin/bat/unit/unit

すべてのユニットを一覧表示・管理します。ユニットは個々の予約可能なリソースです。

ユニットタイプ一覧 /admin/bat/unit/unit_type

ユニットタイプを一覧表示・管理します。ユニットタイプは類似のユニット(例:シングルルーム、ダブルルーム)をグループ化します。

Type Bundle一覧 /admin/bat/unit/type-bundles

ユニットタイプの構造を定義するType Bundle(設定Entity)を管理します。

Unit Bundle一覧 /admin/bat/unit/unit-bundles

ユニットの構造を定義するUnit Bundle(設定Entity)を管理します。

Event /admin/bat/events

Event、Event State、Event Type、Event Seriesへのアクセスを提供するイベント管理セクション。

イベント一覧 /admin/bat/events/event

すべてのイベントを一覧表示・管理します。イベントはユニットに適用される時間ベースの状態を表します。

State /admin/bat/events/state

イベント状態を管理します。状態はユニットが取りうる条件(例:空き、予約済み、メンテナンス中)を定義します。

Event Type一覧 /admin/bat/events/event/event-types

イベントタイプを管理します。イベントタイプはイベント(例:空き状況、価格設定)を分類します。

Event Series一覧 /admin/bat/events/event_series

定期的なイベントのイベントシリーズを一覧表示・管理します。

Booking /admin/bat/booking

予約を管理するための予約管理セクション。

予約一覧 /admin/bat/config/booking

すべての予約を一覧表示・管理します。

Group /admin/bat/group

関連するユニットタイプを整理するためのType Group管理セクション。

Type Group /admin/bat/group/type-group

関連するユニットタイプを整理するためのType Groupを一覧表示・管理します。

カレンダー /admin/bat/calendar/{unit_type}/{event_type}

特定のユニットタイプとイベントタイプの組み合わせのイベントを一括表示・編集するためのカレンダービュー。BAT Event UIモジュールが必要です。

権限 27
BATを設定

サイト全体のBAT設定を管理できるようにします。

Type Group Bundleを管理

Type Group Bundleの追加とフィールドの設定ができるようにします。

未公開のType Groupをすべて表示

未公開のType Groupをすべて表示できるようにします。

自分の未公開Type Groupを表示

自分の未公開Type Groupを表示できるようにします。

Type Groupへのアクセスをバイパス

Type Group Entityに対してあらゆるアクションを実行できるようにします。

任意のタイプのType Groupを作成

Type Groupを作成できるようにします。

任意のタイプのType Groupをすべて表示

Type Groupをすべて表示できるようにします。

任意のタイプのType Groupをすべて編集

Type Groupをすべて編集できるようにします。

任意のタイプのType Groupをすべて削除

Type Groupをすべて削除できるようにします。

Unit Bundleを管理

Unit Bundleの追加とフィールドの設定ができるようにします。

Type Bundleを管理

Type Bundleの追加とフィールドの設定ができるようにします。

未公開のユニットをすべて表示

未公開のユニットをすべて表示できるようにします。

自分の未公開ユニットを表示

自分の未公開ユニットを表示できるようにします。

未公開のタイプをすべて表示

未公開のタイプをすべて表示できるようにします。

自分の未公開タイプを表示

自分の未公開タイプを表示できるようにします。

Unitへのアクセスをバイパス

Unit Entityに対してあらゆるアクションを実行できるようにします。

Unit Typeへのアクセスをバイパス

Unit Type Entityに対してあらゆるアクションを実行できるようにします。

Event Typeを管理

Event Typeの追加とフィールドの設定ができるようにします。

Event Stateを管理

Event Stateを追加できるようにします。

Eventへのアクセスをバイパス

Event Entityに対してあらゆるアクションを実行できるようにします。

予約タイプを管理

予約タイプの追加とフィールドの設定ができるようにします。

ユニットを予約

予約ページにアクセスできるようにします。

Bookingへのアクセスをバイパス

Booking Entityに対してあらゆるアクションを実行できるようにします。

カレンダーイベントを管理

カレンダー上でイベントを操作できるようにします。

過去のイベント情報を表示

過去のイベント情報を表示できるようにします(特にイベントリファレンスフィールド経由)。

Event Series Typeを管理

Event Series Typeの追加とフィールドの設定ができるようにします。

Event Seriesへのアクセスをバイパス

Event Series Entityに対してあらゆるアクションを実行できるようにします。

Hooks 6
hook_bat_entity_access

他のアクセスチェックが行われる前に、BAT Entityに対する非表示操作をユーザーが実行することを拒否または許可することをモジュールに許可します。FALSEを返すと拒否、TRUEを返すと許可、何も返さないと通常のパーミッションチェックが行われます。

hook_bat_event_target_entity_types

BAT Eventによって参照され、BATライブラリにUnitとして提供されるEntityタイプをモジュールが定義することを許可します。EntityタイプはgetEventDefaultValue()とformatEventValue()メソッドを実装する必要があります。

hook_bat_event_constraints_info

空き状況をチェックする際に適用されるイベント制約をモジュールが定義することを許可します。

hook_bat_event_constraints_info_alter

定義されたイベント制約をモジュールが変更することを許可します。

hook_bat_facets_search_results_alter

ファセット検索の結果をモジュールが変更することを許可します。

hook_bat_entity_access_OP_condition_ENTITY_TYPE_alter

特定の操作とEntityタイプのEntityアクセスクエリに条件を追加することをモジュールに許可します。

Troubleshooting 5
イベントがカレンダーに正しく表示されない

Event Typeが正しいターゲットEntityタイプ(bat_unit)で適切に設定されていること、およびそのEvent TypeにEvent Stateが存在することを確認してください。FullCalendarモジュールが有効化され、/admin/bat/config/fullcalendarで設定されていることを確認してください。

ユニットまたはイベントを作成する際にアクセス拒否される

BATは詳細なパーミッションシステムを使用しています。ユーザーが特定のEntityタイプとバンドルに対する適切な「作成」パーミッションを持っていることを確認してください。/admin/people/permissionsでパーミッションを確認し、bat_unit、bat_event、またはbat_bookingのパーミッションを探してください。

イベントデータテーブルが大きくなりすぎている

/admin/bat/config/bat_eventで古いイベントの自動クリーンアップを有効化してください。保持日数とcron実行ごとに削除するイベント数を設定します。/admin/bat/config/maintenanceから手動でクリーンアップをトリガーすることもできます。

Calendar Referenceフィールドが空き状況を表示しない

次のことを確認してください:1)参照されたユニットが存在する、2)選択されたイベントタイプにイベントが存在する、3)フィールドフォーマッターがタイムラインまたは月表示に設定されている、4)過去のデータを表示する場合、ユーザーが「過去のイベント情報を表示」パーミッションを持っている。

空き状況検索が正しくない結果を返す

Event StateがEvent Typeに対して正しく設定されていることを確認してください。bat_event_get_matching_units()関数はIDではなく状態のマシン名を使用します。検索コードで参照している状態が存在し、正しいEvent Typeに関連付けられていることを確認してください。

Security Notes 5
  • BATはhook_query_TAG_alterを通じてクエリレベルのアクセス制御を実装し、ユーザーがリストで表示する権限のあるEntityのみを確実に見えるようにします。
  • 「バイパス」パーミッションは、それぞれのEntityタイプに対する他のすべてのアクセスチェックを上書きするため、慎重に付与する必要があります。
  • イベントデータはDrupalの標準Entityアクセスを継承しないカスタムテーブル(bat_event_*)に保存されます - カスタムアクセスチェックはbat_entity_access()で実装されています。
  • BAT Facetsモジュールはhook_bat_facets_search_results_alterを通じてユーザーパーミッションに基づいて検索結果をフィルタリングします。
  • hook_bat_event_constraints_infoを通じてカスタム制約を実装する場合、機密性の高い空き状況データが公開されないようにしてください。