Booking — Tổng quan
Booking (ở đây là normal booking — booking suất học thông thường) là luồng cho khách hàng / admin đặt các suất học rời trong một term: chọn session → submit yêu cầu → confirm thành booking chính thức, kèm tính tiền, discount và quy tắc gộp booking.
Đây là luồng khác với Subscription (đăng ký dài hạn, thanh toán định kỳ). Hai luồng dùng chung nhiều bảng (Billing, Invoice, TermAttendance) và giao thoa khi chống trùng lịch, nhưng vòng đời và điểm vào hoàn toàn riêng.
Hình dung nhanh
Nghĩ về một trung tâm cho đặt từng buổi học / từng tuần care:
- Khách (hoặc admin) mở Booking Flow, chọn các session cho một hay nhiều attendee.
- Hệ thống tạo TermBookingOrder (yêu cầu đang xử lý) — như "giỏ hàng".
- Submit → sinh
Billing, validate (trùng lịch, capacity, chiều cao/cân nặng, pay-later). - Confirm (hoặc Quote → Accept) → tạo TermBooking chính thức +
TermAttendance(điểm danh), trigger hóa đơn. - Trong lúc đó: áp discount rule tự động, có thể gộp booking theo program category.
Normal booking vs Subscription booking
| Normal booking | Subscription booking | |
|---|---|---|
| Điểm vào | ConsumerBooking (Booking Flow) | ConsumerEnrollment (Enrollment) |
| Record | TermBookingOrder → TermBooking | Enrollment (+ booking nội bộ) |
TypeId | Booking (0) | Subscription (4) |
| Thanh toán | Khách chọn lúc checkout (PayNow/PayLater/Direct Debit) | Định kỳ theo billing schedule |
| Vòng đời | Submit → Confirm (2 bước) | Theo lịch enrollment |
| Quy tắc giá | Discount rule + combine booking rule | Discount theo từng kỳ |
⚠️ Booking type
SubscriptionvàWaitingListkhông bị tính là "normal booking conflict" khi chống trùng lịch — subscription đi theo đường validate riêng của Enrollment.
Các "vật thể" chính
| Tên | Một câu |
|---|---|
| Term / ProgramCategory / Program | Cấu hình nền định nghĩa kỳ, loại chương trình và chương trình cụ thể trước khi book. |
| TermProgramSet (TPS) | Offering/course trong một term; giữ lịch, giá, capacity và discount khả dụng. |
| TermProduct / Session | Buổi/slot cụ thể mà user chọn; booking line ghi nhận ở mức này. |
| Holiday / Activity | Holiday là category/program type đặc biệt; Activity là theme ngày Holiday, không phải session tính giá chính. |
| TermBookingOrder | Yêu cầu booking đang xử lý (request), có vòng trạng thái. |
| TermBooking | Booking đã confirm (runtime chính thức). |
| TermBookingLine / Extra / Discount | Dòng session / add-on / discount của một booking. |
| Discount (rule) | Quy tắc giảm giá tự động (sibling, early bird, attendee, profile…). |
| CombinedBookingOption | Cấu hình gộp booking cùng ActionLogId xuyên course trong một category. |
| TermAttendance | Bản ghi điểm danh sinh khi confirm booking. |
Xem chi tiết hierarchy và thuật ngữ ở Khái niệm cốt lõi.
Bạn nên đọc theo thứ tự
- Góc nhìn end-user — khách và admin thao tác gì.
- Khái niệm cốt lõi — Order vs Booking, status, confirmation type.
- Kiến trúc & dữ liệu — các bảng và quan hệ.
- Luồng xử lý trong code — controller, service, validation.
- Discount rule — quy tắc giảm giá & cách áp.
- Combine booking rule — gộp booking khi edit.
- Dữ liệu & bảng đọc/ghi — bảng đọc/ghi, khái niệm liên quan.
- Case thường gặp — double-booking, cancel, quote…