Booking — Combine booking rule
Combine booking rule quyết định khi edit một booking thì những booking liên quan (cùng một thao tác đặt) có được nạp chung để sửa cùng lúc hay không. Đây là rule về phạm vi edit & điểm danh, KHÔNG phải rule về giá (giá là discount rule).
Cấu hình: CombinedBookingOption
Enum CombinedBookingOption (Tux/src/Tux.Core/Enums/RegularCasualBookingOption.cs), lưu ở ProgramCategory.CombinedBookingOptionId:
| Option | Mã | Phạm vi nạp khi edit |
|---|---|---|
Term_Program_Set | 0 | Chỉ trong cùng course (hành vi mặc định). |
ProgramCategory | 1 | Xuyên course trong cùng program category. |
ActionLogId — khóa nhóm
Các booking đặt trong cùng một thao tác chia sẻ một ActionLogId. Combine rule dùng nó để tìm các booking "anh em":
CombinedBookingOptionId = 1: nạp mọi booking editable cùngActionLogIdtrong cùng program category, kể cả khác course — không hỏi xác nhận.- Khác
1: giữ hành vi cũ — chỉ gợi ý candidate cùngActionLogIdtrong cùng course (ticket 9384), vẫn hỏi qua popup related-attendee.
Ví dụ: TermCare có
CombinedBookingOptionId = 1, booking Before School Care và After School Care cùngActionLogId→ edit một cái sẽ nạp cả hai.
Quy tắc loại trừ
Hệ thống không nạp vào combined edit khi:
- Khác
ActionLogId. - Khác program category (dù cùng
ActionLogId). - Ngoài scope account (customer) / scope admin được phép.
Validate candidate
Mọi id submit trong combined edit được validate trước khi tạo/cập nhật edit order:
- Cùng
ActionLogIdkhông-null và cùng program category. - Trong scope user; active, editable, unlocked, không có pending order xung đột.
- Vi phạm bất kỳ điều kiện nào → từ chối toàn bộ, không tạo edit order cho tập con hợp lệ.
Hiệu ứng khi remove khỏi nhóm
Khi reconfirm một combined booking khiến một booking bị bỏ khỏi nhóm:
- Booking đó →
Canceled. TermAttendanceactive của nó bị deactivate trong cùng thao tác confirm.- Booking còn giữ lại vẫn active (trừ khi diff thay đổi riêng).
Khám phá combined existing booking
Khi vào create/edit flow mà account/attendee hiện tại đã có booking cùng ActionLogId dưới một category combined, Booking UI preselect account và nạp nhóm combined mà không bắt chọn lại account (admin attendee-first search sẽ resolve account trước).
Invariant liên quan
INV-BOOK-20— combined edit expand theo category ActionLog group.INV-BOOK-19(v2) — non-combined giữ hành vi same-course; validate scope category ActionLog.
Tiếp theo: Dữ liệu & bảng đọc/ghi.