BEE Bookable Entities Everywhere
BATをベースにした予約・空き状況管理モジュールで、任意のNodeタイプを日単位または時間単位の予約機能を持つブッカブル(予約可能)なエンティティに変換できます。
bee
概要
Bookable Entities Everywhere(BEE)は、BAT(Booking and Availability Tools)フレームワークを拡張し、任意のコンテンツタイプに予約・空き状況管理機能を提供する強力なDrupalモジュールです。カスタム開発なしで、サイト構築者が任意のNodeタイプを予約可能にできます。
BEEは2つの予約粒度モードをサポートしています:1日単位の予約(バケーションレンタル、機材レンタルに最適)と、柔軟な時間単位の予約(会議室、アポイントメントに最適)です。各予約可能なNodeは、同一リソースを扱うための単一または複数のユニットを持つことができます(例:同じ機材の複数のコピー、複数の座席など)。
このモジュールは、有効化された各Nodeに表示される空き状況カレンダー、包括的な予約フォーム、時間単位予約タイプの営業時間設定機能を提供します。Drupal Commerceと統合すると、BEEは日単位または時間/分単位の設定可能な価格で予約の決済処理が可能になります。
BEEは日次、週次、月次の頻度での繰り返し予約もサポートしており、定期的なイベントやリソース割り当てに適しています。
Features
- カスタムコード不要で、コンテンツタイプ設定から任意のNodeタイプを予約可能に設定
- 日単位予約(終日)と柔軟な時間単位予約(任意の長さ)の両方をサポート
- 同一リソースを扱うためのNode単位の複数ユニット(例:10室の同一会議室)
- 各予約可能Nodeに対するFullCalendarを使用したビジュアル空き状況カレンダー
- Office Hoursフィールドを使用した時間単位予約タイプの営業時間設定
- 日/時間/分単位の設定可能な価格によるCommerce統合決済処理
- 日次、週次、月次の頻度での繰り返し予約サポート
- ユニットの空き状況ステータスを更新する空き状況管理フォーム
- 空き状況管理のためのコンテンツタイプごとの動的パーミッション
- 定期的な予約のためのイベントシリーズサポート
- Node作成時のBATユニット自動作成
- カスタム価格ロジックのための価格変更フック
Use Cases
会議室予約システム
時間単位予約の「会議室」コンテンツタイプを設定します。各部屋のNodeに空き状況カレンダーが表示されます。ユーザーは特定の時間枠で部屋を予約できます。営業時間(例:平日の午前8時〜午後6時)を設定して予約時間を制限します。同一の部屋が複数ある場合は、Nodeごとの複数ユニットで対応できます。
バケーションレンタル物件
「通常利用可能」に設定した日単位予約の「物件」コンテンツタイプを作成します。各物件はデフォルトで1ユニットを持ちます。1泊あたりの課金のためにCommerce決済を有効化します。「自分のpropertyノードの空き状況を管理」パーミッションを持つ物件オーナーは、メンテナンスのために日付を利用不可にマークできます。
機材レンタルサービス
日単位予約の「機材」コンテンツタイプを設定します。複数のコピーがあるアイテム(例:5台の同一ノートパソコン)の場合、Node編集フォームから追加ユニットを追加します。カレンダーはすべてのユニットの空き状況を表示し、各予約に利用可能なユニットを自動的に割り当てます。
予約スケジューリング
時間単位フレキシブル予約の「サービス」コンテンツタイプを作成します。サービスNodeごとに営業時間を設定します。有料予約のためにCommerceと統合します。定期的な予約(例:週次のセラピーセッション)には繰り返し予約を使用します。
ツアーまたはイベント予約
「ツアー」コンテンツタイプに「期間限定利用可能」モードを使用します。ツアーはデフォルトで利用不可で、空き状況管理フォームを通じて特定の日時のみ利用可能にします。ツアースロットごとに複数の参加者を許可するために人数を有効化します。
Webformベースの予約
bee_webformサブモジュールを使用してWebformに予約フォームを埋め込みます。ユーザーは日付を選択して利用可能なNodeを確認し、フォームを送信して予約を作成します。追加データ収集が必要な複雑な予約ワークフローに便利です。
Tips
- 通常利用可能なリソース(会議室、機材)には「通常利用可能」モードを、明示的な空き状況ウィンドウが必要なリソース(ツアー、特別イベント)には「期間限定利用可能」を使用してください
- 同一のリソースがある場合はNodeに複数のユニットを追加 - システムは予約に利用可能なユニットを自動的に割り当てます
- 予約の長さ設定(日単位vs時間単位)は初期設定後に変更できないため、事前に計画を立ててください
- シーズン、期間、その他の要因に基づく動的な価格設定を実装するにはhook_bee_reservation_price_alterフックを使用してください
- 追加データが必要な複雑な予約ワークフローには、bee_webformサブモジュールを使用してカスタム予約フォームを作成することを検討してください
- 予約の人数フィールドを使用すると、一度に複数のユニットを予約でき、グループ予約や複数リソース予約に便利です
Technical Details
Admin Pages 3
/admin/structure/types/manage/{node_type}
特定のコンテンツタイプのBEE予約設定を構成します。ここで予約機能を有効化し、コンテンツタイプの予約パラメータを設定します。
/node/{node}/availability
予約可能なNodeのユニットの空き状況を管理します。カレンダーインターフェースで空き状況ステータスを表示・更新できます。
/node/{node}/add-reservation
予約可能なNodeに新しい予約を作成します。
権限 6
Hooks 3
hook_bee_reservation_price_alter
モジュールがBEE予約の計算価格を変更できるようにします
hook_form_node_type_edit_form_alter
BEEはこのフックを通じてNodeタイプ編集フォームに設定を追加します
hook_bat_api_events_index_calendar_alter
BEEは空き状況ステータスに基づいて表示色とラベルをカスタマイズするためにBATカレンダーイベントを変更します
Troubleshooting 6
コンテンツタイプの設定でBEEが有効になっていることを確認してください。「field_availability_daily」または「field_availability_hourly」フィールドがNodeのビュー表示設定で適切なカレンダービューモードで表示されるように設定されているか確認してください。
Commerceチェックアウトと決済モジュールがインストールされ有効化されている必要があります。また、決済を有効化する前に少なくとも1つのCommerce Storeが設定されている必要があります。
commerce_order.place.pre_transitionイベントがトリガーされていることを確認してください。BEE注文アイテムタイプが存在し、予約エンティティ参照フィールドが正しく設定されているか確認してください。
ユーザーには「create bee reservation」パーミッションが必要です。適切なロールにパーミッションが割り当てられているか確認してください。
ユーザーには特定のコンテンツタイプに対する「すべての{type} Nodeの空き状況を管理」または「自分の{type} Nodeの空き状況を管理」パーミッションが必要です。
時間単位予約タイプの場合、Node編集フォームで「営業時間を設定」チェックボックスが有効になっていて、Open Hoursフィールドに値が設定されていることを確認してください。
Security Notes 4
- BEEは空き状況管理のきめ細かなアクセス制御を可能にするコンテンツタイプごとのパーミッションを実装しています
- 「自分のNodeの空き状況を管理」パーミッションはユーザーを自分のコンテンツのみに制限し、マルチテナント機能を提供します
- Commerce統合は決済処理に関する標準的なDrupal Commerceのセキュリティプラクティスに従っています
- 予約フォームへのアクセスは「create bee reservation」パーミッションによって制御されます