サポート #78
完了予約に編集機能がない
説明
登録した予約を変更したい場合、いったん削除してから登録し直すしか出来ないので、
実績同様に、変更可能にしたい
吉田 明 さんが約1ヶ月前に更新
予約の変更(日時や機械の変更)を可能にすることは機能として非常に有用ですので、実装することに問題はありません。 ただし、システムとして整合性を保つために、いくつか技術的な懸念点(注意点)を考慮して実装する必要があります。
主な懸念点と対応策
重複チェックの複雑化 (Overlap Check)
懸念: 単純に「変更後の時間帯が空いているか」を確認すると、変更前の自分自身の予約と重複判定されてエラーになる可能性があります(例: 10:00-12:00 を 11:00-13:00 に変更する場合、11:00-12:00 が重なる)。
対応: 重複チェックのロジックで「現在編集中の予約ID (self.id)」を除外して判定するようにBackendを修正します。
履歴管理 (Audit Log)
懸念: 現在の仕様では、予約の操作ログ (ReservationHistory) は「作成」と「キャンセル」のみを想定しています。
対応: 履歴モデルに「変更 (UPDATE)」種別を追加し、変更前後の内容(元の時間→新しい時間)を記録できるようにします。
UI/UXの整合性
懸念: 現在の予約詳細画面には「キャンセル」と「実績登録」ボタンしかありません。
対応: 「編集」ボタンを追加し、予約作成モーダルと同様の画面(ただし値は入力済み)を開くようにします。実績編集と同様のフローになります。
提案する進行手順
以下のステップで実装を進めることを提案します。
Implementation Planの作成: 上記の懸念点を踏まえた詳細設計を作成します。
Backend実装:
ReservationHistory モデルの更新(UPDATE追加)。
reservation_update_api の実装(自分除外ロジック含む)。
Frontend実装:
予約詳細モーダルへの「編集」ボタン追加。
編集用モーダル(または作成モーダルの流用)の実装。
動作確認
この方針で進めてよろしいでしょうか?
吉田 明 さんが約1ヶ月前に更新
- ステータス を 新規 から 進行中 に変更
予約編集機能の実装計画
概要
ユーザーおよび管理者が、既存の予約情報(日時、機械、利用者)を編集できる機能を実装します。 これまで予約の変更は「キャンセル→新規作成」の手順が必要でしたが、直接編集できるようにすることでユーザビリティを向上させます。
User Review Required
IMPORTANT
重複チェックロジックの変更: 予約更新時の重複チェックにおいて、「現在編集中の予約」を除外して空き状況を確認するように変更します。これにより、自分の予約時間を延長したり移動したりする際に、自分自身と重複してエラーになることを防ぎます。
Proposed Changes
Backend
[MODIFY] src/reservations/models.py
ReservationHistory.OperationType に UPDATE ('update', '変更') を追加します。
[NEW] src/reservations/views.py (API追加)
reservation_update_api を新規実装します。
Method: POST
Permission: 予約の所有者 または 管理者 (is_staff)
Logic:
対象予約の取得と権限チェック
入力値(機械、開始日時、終了日時、利用者)のバリデーション
重複チェック: start_at < new_end_at AND end_at > new_start_at かつ id != current_reservation_id となる予約が存在するか確認
予約情報の更新
ReservationHistory
(UPDATE) の作成
[MODIFY] src/reservations/urls.py
新規APIのエンドポイント /api/int:pk/update/ を追加します。
Frontend
[MODIFY] src/templates/reservations/calendar.html
予約詳細モーダル (reservationDetailModal): 「編集」ボタンを追加します。
予約編集モーダル (reservationEditModal): 新規に追加します(構成は予約作成モーダルと同様ですが、更新用として分離します)。
機械名(変更不可または可、今回は変更可とする)、利用者(管理者のみ)、開始日時、終了日時
[MODIFY] src/static/js/calendar.js
showReservationDetail
: 自分の予約(または管理者)で、かつキャンセルされていない場合に「編集」ボタンを表示するロジックを追加します。
openReservationEdit: 編集モーダルを開き、現在の予約情報をフォームにセットする関数を実装します。
submitReservationEdit: 編集内容をAPIに送信し、カレンダーをリフレッシュする関数を実装します。
Verification Plan
Automated Tests
現状、自動テスト環境が整備されていないためスキップします。
Manual Verification
以下のシナリオで動作確認を行います。
通常編集(時間変更):
自分の予約の開始・終了時刻を変更し、保存できること。
変更後の時間がカレンダーに反映されること。
重複チェック(成功と失敗):
自己重複回避: 自分の予約時間を延長しても(元の時間と被っていても)、他に予約がなければ保存できること。
他者重複エラー: 他人の予約と重なる時間に変更しようとした場合、エラーになること。
機械変更:
予約する機械を変更して保存できること。
代理編集(管理者のみ):
管理者が他のユーザーの予約を編集できること。