Booking — Luồng xử lý trong code
Trang này trace từ API → service → validation cho normal booking. File chính:
- Controller:
Tux/src/Tux.Api/Controllers/Consumer/ConsumerBookingController.cs - Service:
Tux/src/Services/Tux.Service/BookingService.cs - Helper:
Tux/src/Services/Tux.Service/Helpers/BookingHelper.cs
Tổng thể
Luồng 1 — Create order (giỏ hàng)
- API:
CreateBookingOrder. - Tạo
TermBookingOrder+TermBookingOrderLine(statusCreated). - Validate: attendee/term product hợp lệ, org setting, measurement (chiều cao/cân nặng) nếu bật, double-booking (trừ khi
IgnoreDoubleBooking). - Chưa tạo Billing.
Luồng 2 — Submit
- API:
SubmitBookingOrders→BookingService.SubmitBookingAsync. - Chỉ chấp nhận order type
BookingvàTrialSession. - Tạo
Billing(tổng hợp tài chính); validate Pay Later eligibility (quaBookingHelper). - Có thể arm timeout auto-cancel nếu payment option yêu cầu (PayNow/Deposit/Direct Debit).
- Double-booking check lần cuối. Status →
Submitted. Chưa tạo Invoice.
Luồng 3 — Confirm / Quote
- API:
ConfirmBookingOrders→BookingService.ConfirmBookingAsync(hoặcGenerateQuotesAsync/AcceptQuoteAsync). - Tạo
TermBookingtừTermBookingOrder; copy Line/Extra/Discount. - Áp discount, tính tổng (xem Discount rule).
- Tạo
TermAttendancecho từng session; trigger billing sinh Invoice. - Status →
Approved(hoặcAttendance_Approved, hoặcQuote). - Edited booking: confirm build một
BookingConfirmationPlanchung từTermBookingOrderIdstrước khi áp side-effect thật (invariantINV-BOOK-23).
Luồng 4 — Cancel
- API:
DeleteBookingOrdersAsync→BookingService.CancelBookingAsync. - Status →
Canceled; đảo invoice bằng credit note; deactivateTermAttendance(kể cả khi một số line trước đó đã rờiApproved).
Validation chính
| Loại | Ở đâu |
|---|---|
| Capacity | TermProduct.Capacity, TermProgramSetCapacity; check ở create/submit/confirm. |
| Double-booking | So attendee × session trùng ngày/giờ; bypass bằng IgnoreDoubleBooking. |
| Measurement | Chiều cao/cân nặng vs cấu hình course; admin override từng rule. |
| Lock & pending | Booking locked / có pending order → chặn edit. |
| Discount eligibility | DiscountEligibilityService + BookingHelper.ApplyDiscount. |
Tiếp theo: Discount rule.