FE: module pre_order_setting — đặt trước / bán vượt tồn #
Phần chung (khởi tạo client, lỗi, danh sách, ngôn ngữ) ở tài liệu FE của Core:
docs/fe/common.md (bản đọc: xforge-documentation, ADR-0102 của xforge-core).
Sửa file này CÙNG PR khi đổi hành vi FE thấy được của module.
Chỉ có ở CMS (XforgeClient). Storefront chưa đọc được cài đặt (chưa hiện được
"đặt trước, hàng về ngày…"); chốt đơn của biến thể có cài đặt chỉ khác ở chỗ
không còn báo hết hàng trong hạn mức.
Menu: key pre_order_setting.pre_order_settings (quyền
pre_order_setting.read).
Cài đặt #
Bộ route CRUD chuẩn, không có replace (listPreOrderSettings,
getPreOrderSetting, createPreOrderSetting, updatePreOrderSetting,
deletePreOrderSetting, restorePreOrderSetting, listPreOrderSettingTrash,
listPreOrderSettingOptions). Lọc theo variant_id, allow_backorder.
| Field | Ghi chú |
|---|---|
variantId | Chỉ đặt lúc tạo, mỗi biến thể một cài đặt (409 pre_order_setting_variant_exists) |
allowBackorder | Mặc định true; false giữ cài đặt nhưng tạm chặn bán vượt |
maxBackorderQty | CHUỖI thập phân ≥ 0, ≤ 4 chữ số lẻ, theo ĐƠN VỊ GỐC, tính cho từng kho; null = không giới hạn. Response ở dạng gọn ("3") |
expectedRestockAt | Mốc thời gian ISO 8601 có Z / độ lệch (không nhận ngày trơn 2026-12-01); chỉ để hiển thị, không tự tắt cài đặt khi qua ngày |
Biến thể không thuộc store → 404 pre_order_setting_variant_not_found.
Bán vượt hoạt động thế nào #
Khi đơn giữ kho mà available không đủ, kho cho giữ chỗ vượt nếu phần vượt sau
đơn (reserved - onHand) không quá maxBackorderQty. Ví dụ: còn 2, hạn mức 3
thì một đơn đặt được tối đa 5; sau đó available của dòng tồn là -3.
- Màn tồn kho:
availableâm là số đang bán vượt, cần nhập thêm ngần ấy. - Hết hạn mức → chốt đơn vẫn trả 409
stock_insufficient_available, vớidetails.availablelà số còn đặt được (đã cộng phần hạn mức còn lại). - Biến thể theo lô / serial: cài đặt không có tác dụng.
- Xoá (vào thùng rác) hoặc tắt
allowBackorder: đơn mới chặn ngay; đơn đã đặt giữ nguyên chỗ đã giữ. Store tắt modulepre_order_settingcũng vậy.
Màn hình dựng sẵn #
listMenu() → mục pre_order_setting.pre_order_settings có screen
(type: "crud"): CMS chung vẽ được từ
getMenuScreen({ params: { key: "pre_order_setting.pre_order_settings" } }) mà
không cần code riêng (tài liệu FE của Core: cms.md §3.1). Có: danh sách (sản
phẩm, SKU, cho bán vượt, tối đa, ngày dự kiến về hàng; lọc theo bán vượt / biến
thể), form (biến thể chọn từ listProductVariantOptions CHỈ lúc tạo — không đổi
được sau), xoá, thùng rác + khôi phục.
Quyền ngoài module mà màn hình dùng (thiếu thì CMS ẩn / rơi về ô nhập thường):
- Ô biến thể (BẮT BUỘC lúc tạo) dùng
listProductVariantOptions— cầnproduct.read; thiếu thì chỉ còn ô nhập id, thực tế không tạo được.