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

Cập nhật đơn đặt hàng mua

Cập nhật thông tin, trạng thái và chi tiết sản phẩm của đơn đặt hàng mua (PO)

Endpoint

PUT /v1/purchaseorders/:id

Quyền: Cần ít nhất một trong các quyền: purchaseorder.edit, purchaseorder.statuscomplete, purchaseorder.statuscancel

Path Parameters

TênKiểuBắt buộcMô tả
idintID đơn đặt hàng mua cần cập nhật

Request Body

Thông tin PO chính

TrườngKiểuBắt buộcMô tả
company_idintID công ty
creator_idintID người thao tác
statusintTrạng thái mới. Chỉ được chuyển TỚI trạng thái cao hơn
cancel_reasonintĐiều kiệnLý do hủy (bắt buộc khi status = 13). Xem Cancel Reason
tagstringKhôngNhãn/Tag
notestringKhôngGhi chú
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
detailsarrayKhôngDanh sách chi tiết sản phẩm (khi cần thay đổi detail)

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

Khi PO chưa hoàn thành/hủy (status < 11), có thể thay đổi chi tiết sản phẩm. Hệ thống tự động phát hiện:

  • Thêm mới: Detail item có id = 0 hoặc không có id → thêm mới
  • Cập nhật: Detail item có id > 0 và đã tồn tại → so sánh & cập nhật nếu có thay đổi
  • Xóa: Detail hiện tại không có trong danh sách request → tự động xóa
TrườngKiểuBắt buộcMô tả
idintKhôngID chi tiết (0 hoặc bỏ trống = thêm mới, > 0 = cập nhật)
product_variant_idintCó (khi thêm mới)ID biến thể sản phẩm
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_factorintHệ số quy đổi UOM
uom_quantityintSố lượng theo UOM
uom_unit_priceintĐơn giá theo UOM
weight_sale_modeintKhôngChế độ bán cân
weight_preset_idstringKhôngID preset cân
weight_preset_namestringKhôngTên preset cân
weight_preset_factorintKhôngHệ số preset cân
pricing_typeintKhôngLoại định giá
catch_countingintKhôngCatch-weight counting

Ví dụ: Cập nhật trạng thái sang Đã duyệt

{
    "company_id": 1,
    "creator_id": 10,
    "status": 5,
    "tag": "approved",
    "note": "Đã xác nhận với NCC"
}

Ví dụ: Hủy PO

{
    "company_id": 1,
    "creator_id": 10,
    "status": 13,
    "cancel_reason": 9
}

Ví dụ: Thay đổi chi tiết sản phẩm

{
    "company_id": 1,
    "creator_id": 10,
    "status": 1,
    "price_sell": 600000,
    "price_final": 630000,
    "details": [
        {
            "id": 100,
            "uom_factor": 1,
            "uom_quantity": 10,
            "uom_unit_price": 120000,
            "weight_sale_mode": 0,
            "weight_preset_id": "",
            "weight_preset_name": "",
            "weight_preset_factor": 0,
            "pricing_type": 0,
            "catch_counting": 0
        },
        {
            "id": 0,
            "product_variant_id": 999,
            "item_name": "Sản phẩm mới",
            "uom_id": 0,
            "uom_name": "Cái",
            "uom_factor": 1,
            "uom_quantity": 3,
            "uom_unit_price": 80000,
            "weight_sale_mode": 0,
            "weight_preset_id": "",
            "weight_preset_name": "",
            "weight_preset_factor": 0,
            "pricing_type": 0,
            "catch_counting": 0
        }
    ]
}

Lưu ý: Trong ví dụ trên, nếu PO hiện tại có 3 detail (id: 100, 101, 102) nhưng request chỉ gửi detail id 100 và 1 item mới → detail id 101 và 102 sẽ bị xóa tự động.

Response Schema

HTTP 200 - OK

Trả về Purchase Order Object sau khi cập nhật.

Quy tắc phân quyền

Hành độngQuyền cần thiết
Sửa nội dung PO (tag, note, detail, giá)purchaseorder.edit
Chuyển trạng thái sang Hoàn thành (11)purchaseorder.statuscomplete
Chuyển trạng thái sang Đã hủy (13)purchaseorder.statuscancel
Thay đổi chi tiết sản phẩmpurchaseorder.edit + PO chưa hoàn thành/hủy

Error Codes

Lỗi dữ liệu đầu vào. Trả về mảng các mã lỗi:

Mã lỗiMô tả
error_not_foundĐối tượng không tồn tại hoặc không thuộc quyền truy cập của bạn
error_not_permissionKhông có quyền thực hiện thao tác
error_status_backward_not_allowKhông được quay ngược trạng thái
error_status_complete_not_allowKhông có quyền chuyển sang trạng thái Hoàn thành
error_status_cancel_not_allowKhông có quyền chuyển sang trạng thái Đã hủy
error_cancel_reason_requireHủy PO bắt buộc phải có lý do
error_cancel_reason_not_existLý do hủy không hợp lệ
error_not_permission_edit_detailKhông có quyền sửa chi tiết sản phẩm
error_not_allow_change_detail_in_complete_or_cancel_orderKhông được sửa chi tiết khi PO đã Hoàn thành hoặc Đã hủy
error_details_have_invalid_data_lineChi tiết sản phẩm có dữ liệu 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 cập nhật thành công, hệ thống gửi webhook event: purchaseorder.edit

On this page