Quản lý mua hàngĐơn đặt hàng mua

Tạo đơn đặt hàng mua

Tạo mới một đơn đặt hàng mua (PO) kèm danh sách sản phẩm

Endpoint

POST /v1/purchaseorders

Quyền: purchaseorder.add

Headers

TênBắt buộcMô tả
AuthorizationCó<JWT> của người dùng có quyền purchaseorder.add

Request Body

Thông tin PO chính

TrườngKiểuBắt buộcMô tả
company_idintCóID công ty
creator_idintCóID người tạo
supplier_idintCóID nhà cung cấp
warehouse_idintKhôngID kho nhận hàng
sourceintKhôngNguồn tạo: 1 (Manual), 3 (Planning). Mặc định: 1
source_idintKhôngID nguồn liên kết. Mặc định: 0
group_identifierstringKhôngMã nhóm PO. Mặc định: rỗng
related_idintKhôngID liên quan. Mặc định: 0
price_sellintKhôngTổng giá bán tham chiếu
price_shippingintKhôngPhí vận chuyển
price_discountintKhôngChiết khấu
price_finalintKhôngTổng tiền cuối cùng
quantityintKhôngTổng số lượng
notestringKhôngGhi chú
tagstringKhôngNhãn/Tag
statusintCóTrạng thái PO: 1 (Nháp), 3 (Chờ duyệt), 5 (Đã duyệt), 11 (Hoàn thành). Không được dùng 13 (Đã hủy)
detailsarrayCóDanh sách chi tiết sản phẩm (ít nhất 1 item)

Chi tiết sản phẩm (details[])

TrườngKiểuBắt buộcMô tả
product_variant_idintCóID biến thể sản phẩm (phải thuộc công ty)
item_namestringKhôngTên sản phẩm hiển thị
uom_idintKhôngID đơn vị tính
uom_namestringKhôngTên đơn vị tính
uom_factorintCóHệ số quy đổi UOM
uom_quantityintCóSố lượng theo UOM
uom_unit_priceintCóĐơn giá theo UOM
weight_sale_modeintKhôngChế độ bán cân. Mặc định: 0
weight_preset_idstringKhôngID preset cân. Mặc định: rỗng
weight_preset_namestringKhôngTên preset cân. Mặc định: rỗng
weight_preset_factorintKhôngHệ số preset cân. Mặc định: 0
pricing_typeintKhôngLoại định giá. Mặc định: 0
catch_countingintKhôngCatch-weight counting. Mặc định: 0

Lưu ý:

  • Trạng thái COMPLETED (11) khi tạo mới yêu cầu quyền purchaseorder.statuscomplete.
  • Hệ thống tự động tính item_quantity, item_unit_price, price_final từ các trường UOM.
  • SKU, tên biến thể, color, size được hệ thống tự động lấy từ ProductVariant.

Ví dụ JSON

{
    "company_id": 1,
    "creator_id": 10,
    "supplier_id": 36,
    "warehouse_id": 5,
    "source": 1,
    "price_sell": 500000,
    "price_shipping": 30000,
    "price_discount": 0,
    "price_final": 530000,
    "quantity": 10,
    "note": "PO hàng tuần",
    "tag": "weekly",
    "status": 1,
    "details": [
        {
            "product_variant_id": 456,
            "item_name": "Áo thun trắng M",
            "uom_id": 0,
            "uom_name": "Cái",
            "uom_factor": 1,
            "uom_quantity": 5,
            "uom_unit_price": 100000,
            "weight_sale_mode": 0,
            "weight_preset_id": "",
            "weight_preset_name": "",
            "weight_preset_factor": 0,
            "pricing_type": 0,
            "catch_counting": 0
        },
        {
            "product_variant_id": 789,
            "item_name": "Áo thun đen L",
            "uom_id": 0,
            "uom_name": "Cái",
            "uom_factor": 1,
            "uom_quantity": 5,
            "uom_unit_price": 100000,
            "weight_sale_mode": 0,
            "weight_preset_id": "",
            "weight_preset_name": "",
            "weight_preset_factor": 0,
            "pricing_type": 0,
            "catch_counting": 0
        }
    ]
}

Response Schema

HTTP 201 - Created

Trả về Purchase Order Object vừa tạo.

Rollback

Nếu xảy ra lỗi khi tạo chi tiết đơn hàng, hệ thống sẽ tự động:

  1. Xóa tất cả chi tiết đã tạo thành công
  2. Xóa đơn đặt hàng chính

Error Codes

Lỗi dữ liệu đầu vào trả về HTTP 422 kèm mảng các mã lỗi:

Mã lỗiMô tả
error_role_not_available(HTTP 403) Tài khoản không có quyền purchaseorder.add
error_supplier_requiredChưa chọn nhà cung cấp
error_supplier_invalidNhà cung cấp không hợp lệ hoặc không thuộc công ty
error_warehouse_invalidKho nhận hàng không hợp lệ hoặc không thuộc công ty
error_order_detail_not_foundDanh sách chi tiết sản phẩm trống
error_status_invalidTrạng thái không hợp lệ
error_cancel_is_not_allowKhông thể tạo PO với trạng thái Đã hủy
error_status_complete_not_allowKhông có quyền tạo PO với trạng thái Hoàn thành
error_add_detail_order_sku_{sku}Không thể tạo chi tiết cho SKU cụ thể
error_add_detail_order_invalid_variant_id_{id}ID biến thể không hợp lệ
error_company_id_requiredID công ty không được để trống
error_company_id_notfoundID công ty không tìm thấy
error_user1_id_requiredID người tạo không được để trống
error_user_id_notfoundID người tạo không tìm thấy

Webhook

Sau khi tạo thành công, hệ thống gửi webhook event: purchaseorder.add

On this page