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
Request Body
Thông tin PO chính
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
company_id | int | Có | ID công ty |
creator_id | int | Có | ID người tạo |
supplier_id | int | Có | ID nhà cung cấp |
warehouse_id | int | Không | ID kho nhận hàng |
source | int | Không | Nguồn tạo: 1 (Manual), 3 (Planning). Mặc định: 1 |
source_id | int | Không | ID nguồn liên kết. Mặc định: 0 |
group_identifier | string | Không | Mã nhóm PO. Mặc định: rỗng |
related_id | int | Không | ID liên quan. Mặc định: 0 |
price_sell | int | Không | Tổng giá bán tham chiếu |
price_shipping | int | Không | Phí vận chuyển |
price_discount | int | Không | Chiết khấu |
price_final | int | Không | Tổng tiền cuối cùng |
quantity | int | Không | Tổng số lượng |
note | string | Không | Ghi chú |
tag | string | Không | Nhãn/Tag |
status | int | Có | 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) |
details | array | Có | Danh sách chi tiết sản phẩm (ít nhất 1 item) |
Chi tiết sản phẩm (details[])
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
product_variant_id | int | Có | ID biến thể sản phẩm (phải thuộc công ty) |
item_name | string | Không | Tên sản phẩm hiển thị |
uom_id | int | Không | ID đơn vị tính |
uom_name | string | Không | Tên đơn vị tính |
uom_factor | int | Có | Hệ số quy đổi UOM |
uom_quantity | int | Có | Số lượng theo UOM |
uom_unit_price | int | Có | Đơn giá theo UOM |
weight_sale_mode | int | Không | Chế độ bán cân. Mặc định: 0 |
weight_preset_id | string | Không | ID preset cân. Mặc định: rỗng |
weight_preset_name | string | Không | Tên preset cân. Mặc định: rỗng |
weight_preset_factor | int | Không | Hệ số preset cân. Mặc định: 0 |
pricing_type | int | Không | Loại định giá. Mặc định: 0 |
catch_counting | int | Không | Catch-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_finaltừ 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:
- Xóa tất cả chi tiết đã tạo thành công
- Xóa đơn đặt hàng chính
Error Codes
Lỗi dữ liệu đầu vào. Trả về mảng các mã lỗi:
| Mã lỗi | Mô tả |
|---|---|
error_supplier_required | Chưa chọn nhà cung cấp |
error_supplier_invalid | Nhà cung cấp không hợp lệ hoặc không thuộc công ty |
error_warehouse_invalid | Kho nhận hàng không hợp lệ hoặc không thuộc công ty |
error_order_detail_not_found | Danh sách chi tiết sản phẩm trống |
error_status_invalid | Trạng thái không hợp lệ |
error_cancel_is_not_allow | Không thể tạo PO với trạng thái Đã hủy |
error_status_complete_not_allow | Khô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_required | ID công ty không được để trống |
error_company_id_notfound | ID công ty không tìm thấy |
error_user1_id_required | ID người tạo không được để trống |
error_user_id_notfound | ID 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