Categories
GET /product-cats
Lấy danh sách nhóm sản phẩm. Quyền: product.category.view_list
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| parentid | NO | ||
| name | NO | ||
| catorder | NO | ||
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
{
"_embedded": {
"categories": [
{
"id",
"parentid",
"name",
"catorder"
},
...
]
}
}
POST /product-cats
Thêm nhóm sản phẩm. Quyền product.category.add
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| parentid | NO | ||
| name | NO | ||
| catorder | NO | ||
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Content-Type | application/vnd.products.v1+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Body
{
"parentid",
"name", //required
"catorder",
}
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 201: Created
- 400: Client Error
- 422: Unprocessable Entity
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
{"result": "SUCCESS | ERROR"}
PUT /product-cats[/:cat_id]
Sửa nhóm sản phẩm. Quyền: product.category.edit_info, product.category.edit_parent
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| parentid | NO | ||
| name | NO | ||
| catorder | NO | ||
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Content-Type | application/vnd.products.v1+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Body
{
"action": "editInfo | editParent"
"parentid", //Với action editParent
"name", //Với action editInfo. Required
"catorder", //Với action editInfo
}
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 404: Not Found
- 400: Client Error
- 422: Unprocessable Entity
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
{result: "SUCCESS | ERROR"}
Lỗi: NOT_FOUND_CATEGORY, ERROR
DELETE /product-cats[/:cat_id]
Xóa nhóm sản phẩm. Mã lỗi: NOT_FOUND_CATEGORY, HAS_CATEGORY_CHILDREN, ERROR. Quyền: product.category.delete
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| parentid | NO | ||
| name | NO | ||
| catorder | NO | ||
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 204: No Content
- 404: Not Found
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Documents
GET /product-docs
- Lấy danh sách sản phẩm chứng từ: /product-docs
- Param: reference, product_name, has_doc, order, dir
- Order: reference, product_name, [business_uuid]
- Lấy label các cột động: /product-docs?get_column_label=Y
- Lấy danh sách chi tiết sản phẩm chứng từ: /product-docs?view_detail=Y
- Param: business (business_uuid. Required), reference, product_name, has_doc, product_doc_code, product_doc_name, order, dir
- Order: reference, product_name, has_doc, product_doc_code, product_doc_name, uom, convert_rate, created_at, stock_units, tax_rate
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| product_id | NO | ||
| business_uuid | NO | ||
| has_doc | NO | ||
| product_doc_code | NO | ||
| product_doc_name | NO | ||
| tax_rate | NO | ||
| stock_units | NO | ||
| uom | NO | ||
| convert_rate | Tỉ lệ chuyển đổi so với sản phẩm POS. VD SP POS apollo (24 chai), SP chứng từ apollo (1 chai) => tỉ lệ: 1:24 (luu y viet lien luon co dấu ":") |
NO | |
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
- Danh sách SP chứng từ:
{
"_embedded": {
"documents": [
{
"id", //product_id
"reference",
"product_name",
[business_uuid]: "Y|N|null"
...
},
...
]
}
}
- Label cột động:
{
"_embedded": {
"documents": [
{
"key": [business_uuid],
"value": [business_name]
}
...
]
}
- Danh sách chi tiết SP chứng từ:
{
"_embedded": {
"documents": [
{
"id",//product_id
"reference",
"product_name",
"has_doc": "Y|N|null",
"product_doc_code", // Mã SP chứng từ
"product_doc_name", // Tên SP chứng từ
"uom", // Tên đơn vị tính
"convert_rate", // Tỉ lệ chuyển đổi
"stock_units", //Tồn kho chứng từ
"tax_rate", // Thuế suất (%)
"created_at",
},
...
]
},
}
POST /product-docs
Thêm mới chứng từ sản phẩm doanh nghiệp
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| product_id | NO | ||
| business_uuid | NO | ||
| has_doc | NO | ||
| product_doc_code | NO | ||
| product_doc_name | NO | ||
| tax_rate | NO | ||
| stock_units | NO | ||
| uom | NO | ||
| convert_rate | Tỉ lệ chuyển đổi so với sản phẩm POS. VD SP POS apollo (24 chai), SP chứng từ apollo (1 chai) => tỉ lệ: 1:24 (luu y viet lien luon co dấu ":") |
NO | |
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Content-Type | application/vnd.products.v1+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Body
{
"product_id", //required
"business_uuid", //required
"has_doc":"Y|N", //required
"uom", //Tên đơn vị tính
"convert_rate":"[số nguyên]:[số nguyên]", //required. Tỉ lệ chuyển đổi (Tỉ lệ chuyển đổi so với sản phẩm POS. VD SP POS apollo (thùng 24 chai), SP chứng từ apollo (1 chai) => tỉ lệ: 1:24 (luu y viet lien luon co dấu ":"))
"product_doc_code",
"product_doc_name",
"tax_rate" //Thuế suất (%). Có thể null (ghi chú: Nếu giá trị rỗng sẽ lấy theo thuế suất chung trong cấu hình HDDT)
}
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 201: Created
- 400: Client Error
- 422: Unprocessable Entity
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
{"result": "SUCCESS|ERROR"}
Mã Lỗi:
- EXIST_PRODUCT_DOC_BUSINESS: Đã tồn tại chứng từ sản phẩm doanh nghiệp
- NOT_FOUND_PRODUCT: Không tìm thấy product
- NOT_FOUND_BUSINESS: Không tìm thấy business
- ERROR: Lỗi khác
PUT /product-docs
Import tồn chứng từ. Quyền product.doc.import_stock
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| product_id | NO | ||
| business_uuid | NO | ||
| has_doc | NO | ||
| product_doc_code | NO | ||
| product_doc_name | NO | ||
| tax_rate | NO | ||
| stock_units | NO | ||
| uom | NO | ||
| convert_rate | Tỉ lệ chuyển đổi so với sản phẩm POS. VD SP POS apollo (24 chai), SP chứng từ apollo (1 chai) => tỉ lệ: 1:24 (luu y viet lien luon co dấu ":") |
NO | |
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Content-Type | application/vnd.products.v1+json
application/json |
Body
[
{
"business_uuid", //Phải giống với các item khác
"product_doc_code", //Mã chứng từ
"stock_units" //Tồn chung từ
},
...
]
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 400: Client Error
- 422: Unprocessable Entity
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
{result: "SUCCESS | ERROR"}
Các mã lỗi:
- DUPLICATE_PRODUCT: trùng product_doc_code
- ERROR: Lỗi khác
GET /product-docs[/:document_id]
Lấy thông tin chi tiết chứng từ của sản phẩm: /product-docs/[product_id]
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| product_id | NO | ||
| business_uuid | NO | ||
| has_doc | NO | ||
| product_doc_code | NO | ||
| product_doc_name | NO | ||
| tax_rate | NO | ||
| stock_units | NO | ||
| uom | NO | ||
| convert_rate | Tỉ lệ chuyển đổi so với sản phẩm POS. VD SP POS apollo (24 chai), SP chứng từ apollo (1 chai) => tỉ lệ: 1:24 (luu y viet lien luon co dấu ":") |
NO | |
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 404: Not Found
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
{
"info": {
"reference",
"name"
},
"doc": [
{
"uuid", // uuid document
"business_uuid",
"business_name",
"has_doc": "Y|N",
"uom",
"convert_rate",
"product_doc_code",
"product_doc_name",
"stock_units",
"created_at",
},
...
]
}
PUT /product-docs[/:document_id]
- Chỉnh sửa chứng từ sản phẩm doanh nghiệp: /product-docs/[doc_uuid]. Quyền: product.doc.edit
- Đồng bộ tồn từ hệ thống VNPT HKD: /product-docs/[eb_uuid]. Quyền: product.doc.sync_stock
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| product_id | NO | ||
| business_uuid | NO | ||
| has_doc | NO | ||
| product_doc_code | NO | ||
| product_doc_name | NO | ||
| tax_rate | NO | ||
| stock_units | NO | ||
| uom | NO | ||
| convert_rate | Tỉ lệ chuyển đổi so với sản phẩm POS. VD SP POS apollo (24 chai), SP chứng từ apollo (1 chai) => tỉ lệ: 1:24 (luu y viet lien luon co dấu ":") |
NO | |
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Content-Type | application/vnd.products.v1+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Body
- Chỉnh sửa chứng từ sản phẩm doanh nghiệp
{
"action": "editDoc"
"has_doc": "Y|N", //required
"product_doc_code",
"product_doc_name",
"uom",
"convert_rate",
"tax_rate"
}
- Đồng bộ tồn
{
"action": "syncStock"
}
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 404: Not Found
- 400: Client Error
- 422: Unprocessable Entity
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
{"result": "SUCCESS|ERROR"}
Mã Lỗi:
- Chỉnh sửa chứng từ sản phẩm doanh nghiệp:
+ NOT_FOUND_DOC: Không tìm thấy chứng từ
+ ERROR: Lỗi khác
- Đồng bộ tồn:
+ NOT_FOUND_EB: Không tìm thấy dịch vụ HDDT
+ NOT_EB_VNPT_HOUSEHOLD: Dịch vụ không phải là VNPT HKD
+ NOT_EB_REQUIRED_INFO: Thiếu thông tin đăng nhập dịch vụ
+ ERROR_LOGIN_EB: Lỗi đăng nhập dịch vụ (sai thông tin đăng nhập)
+ NOT_STOCK_ITEM: Không có tồn sản phẩm nào trong hệ thống dịch vụ
+ ERROR: Lỗi khác
DELETE /product-docs[/:document_id]
Xóa chứng từ sản phẩm doanh nghiệp: /product-docs/[doc_uuid]
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| product_id | NO | ||
| business_uuid | NO | ||
| has_doc | NO | ||
| product_doc_code | NO | ||
| product_doc_name | NO | ||
| tax_rate | NO | ||
| stock_units | NO | ||
| uom | NO | ||
| convert_rate | Tỉ lệ chuyển đổi so với sản phẩm POS. VD SP POS apollo (24 chai), SP chứng từ apollo (1 chai) => tỉ lệ: 1:24 (luu y viet lien luon co dấu ":") |
NO | |
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 204: No Content
- 404: Not Found
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
ProductSuppliers
Quản lý nhà cung cấp của sản phẩm.
GET /product-suppliers/:product_id
Lấy danh sách NCC của sản phẩm. Quyền: product.supplier.view_list
Các chế độ xem (view_type):
1. Mặc định (không truyền view_type): Danh sách NCC theo sản phẩm.
2. view_type=history: Lấy lịch sử thay đổi giá nhập của một NCC đối với sản phẩm. Yêu cầu param supplier_id.
3. view_type=buy: Lịch sử nhập hàng gần nhất của sản phẩm (dựa trên nhật ký kho).
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| supplier_id | NO | ||
| price | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
// 1. Danh sách NCC của sản phẩm (Mặc định)
{
"_embedded": {
"product_suppliers": [
{
"id", // id product_supplier
"supplier_id",
"supplier_name",
"price", // Giá
"update_at" // Ngày cập nhật
},
...
]
}
}
// 2. Lịch sử giá NCC (view_type=history)
{
"_embedded": {
"product_suppliers": [
{
"id",
"price", // Giá
"person_name", // Người cập nhật
"update_at"
},
...
]
}
}
// 3. Lịch sử nhập hàng gần nhất (view_type=buy)
{
"_embedded": {
"product_suppliers": [
{
"id", // id stockdiary
"supplier_id",
"supplier_name",
"price",
"units",
"datenew"
},
...
]
}
}
POST /product-suppliers/:product_id
Thêm NCC cho sản phẩm. Quyền: product.supplier.add
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| supplier_id | NO | ||
| price | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Content-Type | application/vnd.products.v1+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Body
{
"supplier_id", // Required. ID nhà cung cấp. Lấy danh sách gọi API: /suppliers?other_role_view=product.supplier.add[&search_supplier=]
"price" // Required. Giá
}
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 201: Created
- 400: Client Error
- 422: Unprocessable Entity
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
//SUCCESS
{"result": "SUCCESS"}
//ERROR
- EXIT_SUPPLIER: NCC đã tồn tại cho sản phẩm này.
- NOT_FOUND_PRODUCT: Không tìm thấy sản phẩm.
- NOT_FOUND_SUPPLIER: Không tìm thấy NCC.
- ERROR: Lỗi khác.
PUT /product-suppliers/:product_id[/:product_supplier_id]
Cập nhật giá nhập của NCC cho sản phẩm. Quyền: product.supplier.edit
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| supplier_id | NO | ||
| price | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Content-Type | application/vnd.products.v1+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Body
{
"price" // Required. Giá
}
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 404: Not Found
- 400: Client Error
- 422: Unprocessable Entity
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
//SUCCESS
{"result": "SUCCESS"}
//ERROR
- NOT_FOUND_PRODUCT_SUPPLIER: Không tìm thấy thông tin liên kết sản phẩm - NCC.
- ERROR: Lỗi khác.
DELETE /product-suppliers/:product_id[/:product_supplier_id]
Xóa NCC khỏi sản phẩm. Quyền: product.supplier.delete
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| supplier_id | NO | ||
| price | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 204: No Content
- 404: Not Found
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Products
Quản lý danh sách sản phẩm
GET /products[/:type/:product_id]
Lấy danh sách sản phẩm. Có 2 chế độ hoạt động:
Lấy danh sách sản phẩm chung.
- Quyền:
product.view_list. - Các tham số lọc:
name,code,reference: Lọc theo tên, mã vạch, mã sản phẩm.category: Lọc theo ID danh mục.pricebuy,pricesell: Lọc theo giá mua, giá bán.active=Y: Chỉ lấy các sản phẩm đang hoạt động.
- Sắp xếp:
order:name,reference,pricesell,pricebuy,category.dir:aschoặcdesc.
- Lấy kèm giá gói:
- Truyền
with=priceđể lấy danh sách sản phẩm kèm các giá gói (không áp dụng cho khách hàng cụ thể).
- Truyền
- Quyền:
Lấy danh sách sản phẩm cho chức năng khác.
- Mục đích: Lấy danh sách sản phẩm đơn giản (id, reference, name) phục vụ cho các chức năng khác.
- Tham số:
other_role_view=[role]. - Tham số lọc:
search_product(tìm theo tên hoặc mã sản phẩm).
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| action | NO | ||
| reference | NO | ||
| code | NO | ||
| name | NO | ||
| category | NO | ||
| pricesell | NO | ||
| pricebuy | NO | ||
| uom | NO | ||
| supplier | NO | ||
| active | NO | ||
| customer | NO | ||
| customer_cat | NO | ||
| units | NO | ||
| units_label | NO | ||
| price | NO | ||
| price_id | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
1. Phản hồi cho danh sách chung:
{
"_embedded": {
"products": [
{
"id",
"reference",
"name",
"pricesell",
"pricebuy", // Sẽ là "**********" nếu không có quyền `product.view_pricebuy`
"category_name",
"units", //Chỉ hiển thị khi xem theo giá gói
"units_label", //Chỉ hiển thị khi xem theo giá gói
"isactive"
},
...
]
}
}
2. Phản hồi cho `other_role_view`:
{
"_embedded": {
"products": [
{
"id",
"reference",
"name"
}
]
}
}
POST /products[/:type/:product_id]
Tạo sản phẩm mới. Quyền: product.create
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| action | NO | ||
| reference | NO | ||
| code | NO | ||
| name | NO | ||
| category | NO | ||
| pricesell | NO | ||
| pricebuy | NO | ||
| uom | NO | ||
| supplier | NO | ||
| active | NO | ||
| customer | NO | ||
| customer_cat | NO | ||
| units | NO | ||
| units_label | NO | ||
| price | NO | ||
| price_id | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Content-Type | application/vnd.products.v1+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Body
{
"reference", // Required
"code", // Required
"name", // Required
"category", // Required
"pricesell", // Required
"pricebuy", // Required
"uom", // Required
"supplier", // Required
"active": "Y|N" // Required
}
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 201: Created
- 400: Client Error
- 422: Unprocessable Entity
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
//SUCCESS
{
"result": "SUCCESS",
"product_id"
}
//ERROR
- EXIST_REFERENCE: Mã sản phẩm đã tồn tại.
- EXIST_CODE: Mã vạch đã tồn tại.
- EXIST_NAME: Tên sản phẩm đã tồn tại.
- NOT_FOUND_UOM
- NOT_FOUND_SUPPLIER
- ERROR
GET /products[/:type/:product_id]
Lấy thông tin sản phẩm theo type:
- /products/product/[product_id]: Lấy thông tin chi tiết sản phẩm. Quyền: product.view_detail.
- /products/prices/[product_id]: Lấy danh sách giá gói của sản phẩm. Quyền: product.view_price. Truyền thêm customer_id để lấy giá theo khách hàng.
- /products/stocks/[product_id]: Lấy thông tin tồn kho của sản phẩm. Quyền: product.view_units.
- /label/[giatribatki]?form_label_num=num&product[1][id]=id&product[1][units]=units&product[1][label_num]=label_num&...: Lấy dữ liệu để in tem sản phẩm. Quyền: product.print_label
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| action | NO | ||
| reference | NO | ||
| code | NO | ||
| name | NO | ||
| category | NO | ||
| pricesell | NO | ||
| pricebuy | NO | ||
| uom | NO | ||
| supplier | NO | ||
| active | NO | ||
| customer | NO | ||
| customer_cat | NO | ||
| units | NO | ||
| units_label | NO | ||
| price | NO | ||
| price_id | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 404: Not Found
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
//Return ERROR
{
"result": "ERROR",
"code": "NOT_FOUND_PRODUCT"
}
//Return SUCCESS
//Thông tin chi tiết sản phẩm (type=product)
{
"attributes": {
"reference", //Mã SP
"code", //Mã vạch
"name",
"category_id",
"category_name",
"pricebuy", // Sẽ là "**********" nếu không có quyền `product.view_pricebuy`
"pricesell",
"profit", // Tỉ suất lợi nhuận. Sẽ là "**********" nếu không có quyền `product.view_pricebuy`
"uom_id", //id ĐVT
"uom_name",
"supplier_id", //Id NCC
"supplier_name",
"isactive": "Y|N",
},
"prices": [ //Danh sach gia goi
{
"customer_id",
"customer_name",
"customer_cat_id",
"customer_cat_name",
"price",
"units",
"profit", // Tỉ suất lợi nhuận. Sẽ là "**********" nếu không có quyền `product.view_pricebuy`
"units_label",
"total_price"
},
...
],
"label": [ //Danh sách nhãn phụ
{
"uuid", //label uuid
"label", //Tên nhãn phụ
"image", //Hình ảnh
"position", //Vị trí
"is_active":"Y|N", //Trạng thái kích hoạt
"is_default": "Y|N",
"created_at" //Ngày tạo
},
...
],
"doc": [ //Danh sách chứng từ
{
"uuid", // uuid document
"business_uuid",
"business_name",
"has_doc": "Y|N",
"product_doc_code",
"product_doc_name",
"created_at",
},
...
]
}
//Danh sách giá gói (type=prices)
{
"result": "SUCCESS",
"prices": [
{
"pricesell",
"units",
"units_label"
}
],
}
//Danh sách thông tin kho hàng (type=stocks)
{
"result": "SUCCESS",
"stocks": [
{
"location_name", //Tên kho
"units", // Tồn kho
"stock_min", //Tồn min
"stock_max", //Tồn max
"position", //Vị trí
"deviation", //Tồn lệch
"deviation_flag_type", //Loại cờ set tồn lệch
"deviation_person", // Người cập nhật tồn lệch
"deviation_update_at" // Thời gian cập nhật tồn lệch
},
....
]
}
//Danh sách tem (type=label)
{
"result": "SUCCESS",
"label_product": [
{
"reference",
"code",
"code_label",
"name",
"price"
},
...
]
}
//Lỗi có thể xảy ra
- REQUIRED_PARAM_PRODUCT: Yêu cầu param `product`.
- REQUIRED_PARAM_FORM_LABEL_NUM: Yêu cầu param `form_label_num`.
- INCORRECT_PRODUCT: Param `product` không đúng cấu trúc.
- INCORRECT_FORM_LABEL_NUM: Giá trị `form_label_num` không hợp lệ (phải > 0 và <= 4).
- INCORRECT_UNITS: Số lượng gói sản phẩm không đúng (phải > 0).
- DUPLICATE_PRODUCT: Bị trùng gói sản phẩm trong yêu cầu.
- INCORRECT_LABEL_NUM: Giá trị `label_num` của sản phẩm không hợp lệ.
- NOT_FOUND_PRODUCT: Không tìm thấy gói sản phẩm.
- PRODUCT_EMPTY: Không tìm thấy sản phẩm nào.
PUT /products[/:type/:product_id]
Chỉnh sửa thông tin sản phẩm theo action:
- editCode: Sửa mã SP, mã vạch. Quyền: product.edit_code.
- editName: Sửa tên SP. Quyền: product.edit_name.
- editCategory: Sửa danh mục. Quyền: product.edit_category.
- editPricesell: Sửa giá bán. Quyền: product.edit_pricesell.
- editPricebuy: Sửa giá mua. Quyền: product.edit_pricebuy.
- editUom: Sửa đơn vị tính. Quyền: product.edit_uom.
- editSupplier: Sửa nhà cung cấp. Quyền: product.edit_supplier.
- editActive: Sửa trạng thái. Quyền: product.edit_active.
- addPrice: Thêm giá gói. Quyền: product.price_unit.add.
- editPrice: Sửa giá gói. Quyền: product.price_unit.edit.
- deletePrice: Xóa giá gói. Quyền: product.price_unit.delete.
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| action | NO | ||
| reference | NO | ||
| code | NO | ||
| name | NO | ||
| category | NO | ||
| pricesell | NO | ||
| pricebuy | NO | ||
| uom | NO | ||
| supplier | NO | ||
| active | NO | ||
| customer | NO | ||
| customer_cat | NO | ||
| units | NO | ||
| units_label | NO | ||
| price | NO | ||
| price_id | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Content-Type | application/vnd.products.v1+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Body
{
"action": "editCode | editName | editCategory | editPricesell | editPricebuy | editUom | editSupplier | editActive | addPrice | editPrice | deletePrice",
"reference", // Required với action `editCode`
"code", // Required với action `editCode`
"name", // Required với action `editName`
"category", // Required với action `editCategory`
"pricesell", // Required với action `editPricesell`
"pricebuy", // Required với action `editPricebuy`
"uom", // Required với action `editUom`
"supplier", // Required với action `editSupplier`
"active": "Y|N", // Required với action `editActive`
"customer", // Optional với action `addPrice` | `editPrice`
"customer_cat", // Optional với action `addPrice` | `editPrice`
"units", // Required với action `addPrice` | `editPrice`
"units_label", // Optional với action `addPrice` | `editPrice`
"price", // Required với action `addPrice` | `editPrice`
"price_id" // Required với action `editPrice` | `deletePrice`
}
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 404: Not Found
- 400: Client Error
- 422: Unprocessable Entity
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
//SUCCESS
{
"result":"SUCCESS",
"price" // Thông tin giá gói. Chỉ hiển thị với action addPrice, editPrice
}
//ERROR
- Lỗi chung: ERROR
- Action `editCode`: EXIST_REFERENCE, EXIST_CODE
- Action `editName`: EXIST_NAME
- Action `editUom`: NOT_FOUND_UOM
- Action `editSupplier`: NOT_FOUND_SUPPLIER
- Action `addPrice`, `editPrice`:
+ NOT_FOUND_CUSTOMER
+ NOT_FOUND_CUSTOMER_CAT
+ NOT_UNIT_1_WITH_NOT_CUSTOMER (Không được setup giá với gói SL 1 khi không chọn KH và nhóm KH)
+ EXIST_PRICE: Gói SL với đối tượng chọn đã tồn tại
- Action `editPrice`, `deletePrice`: NOT_FOUND_PRICE_ID
DELETE /products[/:type/:product_id]
Xóa sản phẩm: DELETE /products/product/[product_id]. Quyền: product.delete. Lỗi có thể xảy ra: NOT_FOUND_PRODUCT
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| action | NO | ||
| reference | NO | ||
| code | NO | ||
| name | NO | ||
| category | NO | ||
| pricesell | NO | ||
| pricebuy | NO | ||
| uom | NO | ||
| supplier | NO | ||
| active | NO | ||
| customer | NO | ||
| customer_cat | NO | ||
| units | NO | ||
| units_label | NO | ||
| price | NO | ||
| price_id | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 204: No Content
- 404: Not Found
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Promotions
Quản lý các chương trình khuyến mãi.
GET /product-promotions
Lấy danh sách các chương trình khuyến mãi.
Quyền: product.promotion.view_list
- Filter: title (Tên CTKM), product_name (Tên SP có trong CTKM), reference (Mã SP có trong CTKM), has_product (Y/N - có sản phẩm áp dụng), is_active (Y|N), time_status (pending|processing|expired)
- Order: title, start_date, end_date, is_active
- Dir: asc|desc
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| title | NO | ||
| is_active | NO | ||
| content | NO | ||
| product | NO | ||
| start_date | NO | ||
| end_date | NO | ||
| customer | NO | ||
| customer_cat | NO | ||
| not_customer | NO | ||
| not_customer_cat | NO | ||
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
{
"_embedded": {
"promotions": [
{
"uuid",
"title",
"start_date",
"end_date",
"is_active": "Y|N"
},
...
]
}
}
POST /product-promotions
Tạo mới chương trình khuyến mãi.
Quyền: product.promotion.create
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| title | NO | ||
| is_active | NO | ||
| content | NO | ||
| product | NO | ||
| start_date | NO | ||
| end_date | NO | ||
| customer | NO | ||
| customer_cat | NO | ||
| not_customer | NO | ||
| not_customer_cat | NO | ||
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Content-Type | application/vnd.products.v1+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Body
{
"title", // Tiêu đề (bắt buộc)
"is_active": "Y|N", // Trạng thái (bắt buộc)
"content", // Nội dung (bắt buộc)
"start_date", // Ngày bắt đầu (bắt buộc, format YYYY-MM-DD)
"end_date", // Ngày kết thúc (bắt buộc, format YYYY-MM-DD)
"product": [id1, id2...], // Mảng ID sản phẩm áp dụng (tùy chọn)
"customer": [id1, id2...], // Mảng ID khách hàng áp dụng (tùy chọn)
"customer_cat": [id1, id2...], // Mảng ID nhóm khách hàng áp dụng (tùy chọn)
"not_customer": [id1, id2...], // Mảng ID khách hàng loại trừ (tùy chọn)
"not_customer_cat": [id1, id2...] // Mảng ID nhóm khách hàng loại trừ (tùy chọn)
}
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 201: Created
- 400: Client Error
- 422: Unprocessable Entity
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
// Thành công
{"result": "SUCCESS"}
// Lỗi
Mã lỗi có thể xảy ra:
- 403 Forbidden: Không có quyền.
- 422 Unprocessable Entity: Thiếu các trường bắt buộc.
- ERROR: Lỗi hệ thống.
GET /product-promotions[/:uuid]
Lấy thông tin chi tiết một CTKM: /promotions/[promotion_uuid]
Quyền: product.promotion.view_detail
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| title | NO | ||
| is_active | NO | ||
| content | NO | ||
| product | NO | ||
| start_date | NO | ||
| end_date | NO | ||
| customer | NO | ||
| customer_cat | NO | ||
| not_customer | NO | ||
| not_customer_cat | NO | ||
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 404: Not Found
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
{
"result": "OK",
"promotion": {
"uuid",
"title",
"content",
"start_date",
"end_date",
"is_active": "Y|N",
"product": [ // Danh sách sản phẩm
{ "id", "reference", "product_name" }, ...
],
"customer": [ // Danh sách khách hàng
{ "id", "taxid", "name" }, ...
],
"customer_cat": [ // Danh sách nhóm khách hàng
{ "id", "name" }, ...
],
"not_customer": [ ... ],
"not_customer_cat": [ ... ]
}
}
Mã lỗi:
- NOT_FOUND_TUTORIAL: Không tìm thấy CTKM.
PUT /product-promotions[/:uuid]
Cập nhật thông tin CTKM theo action: /promotions/[promotion_uuid]
Các action hỗ trợ:
- editTitle: Sửa tiêu đề. Quyền: product.promotion.edit_title
- editContent: Sửa nội dung. Quyền: product.promotion.edit_content
- editActive: Sửa trạng thái. Quyền: product.promotion.edit_active
- editDate: Sửa ngày áp dụng. Quyền: product.promotion.edit_active
- editProduct: Sửa sản phẩm áp dụng. Quyền: product.promotion.edit_product
- editCustomer: Sửa khách hàng áp dụng (bao gồm cả loại trừ). Quyền: product.promotion.edit_product
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| title | NO | ||
| is_active | NO | ||
| content | NO | ||
| product | NO | ||
| start_date | NO | ||
| end_date | NO | ||
| customer | NO | ||
| customer_cat | NO | ||
| not_customer | NO | ||
| not_customer_cat | NO | ||
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Content-Type | application/vnd.products.v1+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Body
{
"action": "editTitle | editContent | editActive | editDate | editProduct | editCustomer",
"title", // Required với editTitle
"content", // Required với editContent
"is_active", // Required với editActive
"start_date", // Required với editDate
"end_date", // Required với editDate
"product": [id...], // Required với editProduct
"customer": [id...], // Optional với editCustomer
"customer_cat": [id...], // Optional với editCustomer
"not_customer": [id...], // Optional với editCustomer
"not_customer_cat": [id...] // Optional với editCustomer
}
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 404: Not Found
- 400: Client Error
- 422: Unprocessable Entity
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
{"result": "SUCCESS|ERROR"}
Mã lỗi:
- NOT_FOUND_PROMOTION: Không tìm thấy CTKM.
- ERROR: Lỗi hệ thống.
DELETE /product-promotions[/:uuid]
Xóa CTKM: /promotions/[promotion_uuid]
Quyền: product.promotion.delete
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| title | NO | ||
| is_active | NO | ||
| content | NO | ||
| product | NO | ||
| start_date | NO | ||
| end_date | NO | ||
| customer | NO | ||
| customer_cat | NO | ||
| not_customer | NO | ||
| not_customer_cat | NO | ||
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 204: No Content
- 404: Not Found
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Replace
GET /product-replace
Lấy danh sách sản phẩm group replace, convert.
- Filter: product_name (tên SP), reference (Mã SP), has_replace (có nhóm thay thế), has_convert (có nhóm chuyển đổi)
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| action | NO | ||
| name | NO | ||
| min | NO | ||
| max | NO | ||
| product_id | NO | ||
| allow_propose | NO | ||
| ratio | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
{
"_embedded": {
"replace": [
{
"id", //ID tạm, là id replace khi SP có group replace và là id product khi SP chưa có group replace
"replace_id",
"replace_name",
"min", // Tồn min group replace
"max", // Tồn max group replace
"convert": String JSON "[
{
"id", //ID group convert
"name", // Tên group convert
"products": [
{
"id", //ID product
"reference", //Mã SP
"name", //Tên SP
"ratio", //Số lượng tỉ lệ
"is_default": "Y|N", // Là SP mặc đỉnh của group replace
"allow_propose": "N|Y" // Cho phép đặt hàng hay không
},
....
]
},
....
]",
},
]
}
}
POST /product-replace
Khởi tạo group replace, group convert
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| action | NO | ||
| name | NO | ||
| min | NO | ||
| max | NO | ||
| product_id | NO | ||
| allow_propose | NO | ||
| ratio | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Content-Type | application/vnd.products.v1+json
application/json |
Body
{
"action": "createReplace|createConvert",
"name", //Tên group.
"min", // Tồn min group. Chỉ với action createReplace
"max", // Tồn max group. Chỉ với action createReplace
"product_id" //Sản phẩm để khởi tạo group. Required
}
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 201: Created
- 400: Client Error
- 422: Unprocessable Entity
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
{"result":"SUCCESS|ERROR"}
//Các lỗi có thể xảy ra:
- NOT_FOUND_PRODUCT: Không tìm thấy SP với product_id
- EXISTED_REPLACE_PRODUCT: Sản phẩm đã có group replace
- EXISTED_CONVERT_PRODUCT: Sản phẩm đã có group convert
- ERROR: Lỗi khác
GET /product-replace[/:replace_id]
- Lấy danh sách sản phẩm convert từ product_id (áp dụng khi chuyển đổi SP): /product-replace/[:product_id]?get_convert=Y&location=[:location]
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| action | NO | ||
| name | NO | ||
| min | NO | ||
| max | NO | ||
| product_id | NO | ||
| allow_propose | NO | ||
| ratio | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 404: Not Found
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
//SUCCESS
{
"result": "SUCCESS",
"products": [
{
"id", // id product
"reference", // Mã SP
"name", // Tên SP
"ratio": [units_product_out, units_product_in], // Tỉ lệ chuyển đổi SP. VD: Xuất xăng cal 30L sang cal 1L thì tỉ lệ 1:30, ratio = [1,30]
"units", // Tồn theo kho
"location_name" // Tên kho
},
}
Lỗi có thể xảy ra:
- REQUIRED_PARAM_LOCATION: Yêu cầu cần có param location
- NOT_FOUND_PRODUCT: Id sản phẩm không đúng
- NOT_FOUND_CONVERT: Không tìm thấy danh sách sản phẩm chuyển đổi
PUT /product-replace[/:replace_id]
- Chỉnh thông tin group replace (editReplace): /product-replace/[:replace_id]
- Chỉnh thông tin group convert (editConvert): /product-replace/[:convert_id]
- Thêm sản phẩm vào group replace (addProductReplace): /product-replace/[:replace_id]
- Thêm sản phẩm vào group convert (addProductConvert): /product-replace/[:convert_id]
- Sửa thông tin sản phẩm (editProduct): /product-replace/[:product_id]
- Xóa sản phẩm khỏi group replace (deleteProductReplace): /product-replace/[:replace_id]
- Xóa sản phẩm khỏi group convert (deleteProductConvert): /product-replace/[:convert_id]
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| action | NO | ||
| name | NO | ||
| min | NO | ||
| max | NO | ||
| product_id | NO | ||
| allow_propose | NO | ||
| ratio | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Content-Type | application/vnd.products.v1+json
application/json |
Body
{
"action": "editReplace | editConvert | addProductReplace | addProductConvert | editProduct | deleteProductReplace | deleteProductConvert",
"name", //tên group. Với action editReplace, editConvert
"min", // Với action editReplace
"max", // Với action editReplace
"product_id", với action editReplace, addProductReplace, addProductConvert, deleteProductReplace, deleteProductConvert
"allow_propose", // Với action editProduct
"ratio" // Với action editProduct
}
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 404: Not Found
- 400: Client Error
- 422: Unprocessable Entity
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
//SUCCESS
{"result": "SUCCESS"}
//ERROR
- editReplace
+ NOT_FOUND_REPLACE_GROUP: Không tìm thấy group replace
+ NOT_FOUND_PRODUCT: Không tìm thấy product
+ PRODUCT_NOT_IN_REPLACE_GROUP: Product không ở trong group replace
+ ERROR: Lỗi khác
- editConvert:
+ NOT_FOUND_CONVERT_GROUP: Không tìm thấy group convert
+ ERROR: Lỗi khác
- addProductReplace:
+ NOT_FOUND_REPLACE_GROUP: Không tìm thấy group replace
+ NOT_FOUND_PRODUCT: Không tìm thấy product
+ PRODUCT_IN_REPLACE_GROUP_OTHER: Sản phẩm đang ở group replace khác
+ ERROR: Lỗi khác
- addProductConvert:
+ NOT_FOUND_CONVERT_GROUP: Không tìm thấy group convert
+ NOT_FOUND_PRODUCT: Không tìm thấy product
+ PRODUCT_IN_CONVERT_GROUP_OTHER: Sản phẩm đang ở group convert khác
+ PRODUCT_IN_REPLACE_GROUP_OTHER: Sản phẩm đang ở group replace khác
+ ERROR: Lỗi khác
- editProduct:
+ NOT_FOUND_PRODUCT: Không tìm thấy SP
+ ERROR: Lỗi khác
- deleteProductReplace:
+ NOT_FOUND_REPLACE_GROUP: Không tìm thấy group replace
+ NOT_FOUND_PRODUCT: Không tìm thấy product
+ PRODUCT_NOT_IN_REPLACE_GROUP: Sản phẩm không nằm trong group replace
+ ERROR: Lỗi khác
- deleteProductConvert:
+ NOT_FOUND_CONVERT_GROUP: Không tìm thấy group convert
+ NOT_FOUND_PRODUCT: Không tìm thấy product
+ PRODUCT_NOT_IN_CONVERT_GROUP: Sản phẩm không nằm trong group convert
+ ERROR: Lỗi khác
SecondaryLabels
GET /product-secondary-labels
Lấy danh sách sản phẩm nhãn phụ - Param: code, reference, product_name, has_label=Y|N - Order: reference, product_name
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| product_id | NO | ||
| label | NO | ||
| image | NO | ||
| position | NO | ||
| is_active | NO | ||
| is_default | NO | ||
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
{
"_embedded": {
"secondary_labels": [
{
"id", //product id
"reference",
"product_name",
"label_image", //nhãn phụ
},
...
]
}
}
POST /product-secondary-labels
Thêm nhãn phụ cho sản phẩm
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| product_id | NO | ||
| label | NO | ||
| image | NO | ||
| position | NO | ||
| is_active | NO | ||
| is_default | NO | ||
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Content-Type | application/vnd.products.v1+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Body
{
"product_id", //Required
"label", //Tên nhãn phụ
"image", Hình ảnh, kiểu base64. Required
"position", //Vị trí
"is_active": "Y|N", //Reuiqred
"is_default": "Y|N" //Required
}
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 201: Created
- 400: Client Error
- 422: Unprocessable Entity
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
{result: "SUCCESS|ERROR"}
Mã lỗi:
- DEFAULT_MUST_ACTIVE: is_default = Y thì is_active phải Y
- NOT_FOUND_PRODUCT: Không tìm thấy product
- ERROR_UPLOAD_IMAGE: Lỗi upload hình ảnh
- ERROR: Lỗi khác
GET /product-secondary-labels[/:label_id]
Lấy thông tin chi tiết nhãn phụ sản phẩm: /product-secondary-labels/[product_id]
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| product_id | NO | ||
| label | NO | ||
| image | NO | ||
| position | NO | ||
| is_active | NO | ||
| is_default | NO | ||
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 404: Not Found
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
{
"info": {
"reference", //Mã SP
"name" //Tên SP
},
"label": [
{
"uuid", //label uuid
"label", //Tên nhãn phụ
"image", //Hình ảnh
"position", //Vị trí
"is_active":"Y|N", //Trạng thái kích hoạt
"is_default": "Y|N",
"created_at" //Ngày tạo
},
...
]
}
Mã lỗi:
- NOT_FOUND_PRODUCT: Không tìm thấy nhãn phụ
PUT /product-secondary-labels[/:label_id]
Chỉnh sửa nhãn phụ: /product-secondary-labels/[label_uuid]
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| product_id | NO | ||
| label | NO | ||
| image | NO | ||
| position | NO | ||
| is_active | NO | ||
| is_default | NO | ||
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Content-Type | application/vnd.products.v1+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Body
{
"action": "editInfo | editImage"
"label", //với action editInfo
"image": "", /với action editImage. Reuiqred
"position": "", //với action editInfo
"is_active": "", //với action editInfo. Required
"is_default": "", //với action editInfo. Required
}
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 404: Not Found
- 400: Client Error
- 422: Unprocessable Entity
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
{result: "SUCCESS|ERROR"}
Các mã lỗi:
- NOT_FOUND_LABEL: Không tìm thấy nhãn phụ
- DEFAULT_MUST_ACTIVE: Nhãn mặc định phải active. Với action editInfo
- ERROR_UPLOAD_IMAGE: Lỗi upload image. Với action editImage
- INVALID_IMAGE: Hình ảnh không đúng. Với action editImage
- ERROR: Lỗi khác
DELETE /product-secondary-labels[/:label_id]
Xóa nhãn phụ: /product-secondary-labels/[label_uuid]
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| product_id | NO | ||
| label | NO | ||
| image | NO | ||
| position | NO | ||
| is_active | NO | ||
| is_default | NO | ||
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 204: No Content
- 404: Not Found
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Tutorials
Quản lý các hướng dẫn sử dụng.
GET /product-tutorials
Lấy danh sách tất cả các hướng dẫn.
Quyền: product.tutorial.view_list
- Filter: title, is_active (Y/N), product_name, reference, has_product (Y/N)
- Order: title, is_active
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| title | NO | ||
| is_active | NO | ||
| content | NO | ||
| product | NO | ||
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
{
"_embedded": {
"tutorials": [
{
"uuid",
"title",
"is_active": "Y|N"
},
...
]
}
}
POST /product-tutorials
Tạo một hướng dẫn mới.
Quyền: product.tutorial.create
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| title | NO | ||
| is_active | NO | ||
| content | NO | ||
| product | NO | ||
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Content-Type | application/vnd.products.v1+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Body
{
"title", // Tiêu đề (bắt buộc)
"content", // Nội dung (bắt buộc)
"is_active": "Y|N", // Trạng thái (bắt buộc, ví dụ: "Y")
"product": [1, 2, 3] // Mảng các ID sản phẩm liên quan (tùy chọn)
}
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 201: Created
- 400: Client Error
- 422: Unprocessable Entity
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
// Thành công
{"result": "SUCCESS"}
// Lỗi
Mã lỗi có thể xảy ra:
- 403 Forbidden: Không có quyền.
- 422 Unprocessable Entity: Thiếu các trường bắt buộc.
- ERROR: Lỗi hệ thống.
GET /product-tutorials[/:uuid]
Lấy thông tin chi tiết của một hướng dẫn: /product-tutorials/[tutorial_uuid]
Quyền: product.tutorial.view_detail
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| title | NO | ||
| is_active | NO | ||
| content | NO | ||
| product | NO | ||
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 404: Not Found
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
{
"result": "OK",
"tutorial": {
"uuid",
"title",
"content",
"is_active": "Y|N",
"product": [ // danh sách sản phẩm liên quan
{ "id", "reference", "product_name" },
...
]
}
}
Mã lỗi có thể xảy ra:
- NOT_FOUND_TUTORIAL: Không tìm thấy hướng dẫn.
PUT /product-tutorials[/:uuid]
Cập nhật thông tin một hướng dẫn: /product-tutorials/[tutorial_uuid]
Các quyền tương ứng: product.tutorial.edit_title, product.tutorial.edit_content, product.tutorial.edit_active, product.tutorial.edit_product
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| title | NO | ||
| is_active | NO | ||
| content | NO | ||
| product | NO | ||
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Content-Type | application/vnd.products.v1+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Body
{
"action": "editTitle|editContent|editActive|editProduct", // (bắt buộc)
"title": "New Title", // (bắt buộc với action "editTitle")
"content": "New Content", // (bắt buộc với action "editContent")
"is_active": "Y|N", // (bắt buộc với action "editActive")
"product": [1, 2] // (tùy chọn với action "editProduct")
}
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 404: Not Found
- 400: Client Error
- 422: Unprocessable Entity
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
{"result": "SUCCESS|ERROR"}
Mã lỗi:
- NOT_FOUND_TUTORIAL: Không tìm thấy hướng dẫn.
- ERROR: Lỗi hệ thống.
DELETE /product-tutorials[/:uuid]
Xóa một hướng dẫn: /product-tutorials/[tutorial_uuid]
Quyền: product.tutorial.delete
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| title | NO | ||
| is_active | NO | ||
| content | NO | ||
| product | NO | ||
| action | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 204: No Content
- 404: Not Found
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Uom
Quản lý đơn vị tính
GET /product-uom
Lấy danh sách đơn vị tính. Quyền: product.uom.view_list
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| name | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
{
"_embedded": {
"uom": [
{
"id",
"name",
},
...
]
}
}
POST /product-uom
Tạo đơn vị tính mới. Quyền: product.uom.create
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| name | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Content-Type | application/vnd.products.v1+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Body
{
"name" // Tên đơn vị tính. Required
}
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 201: Created
- 400: Client Error
- 422: Unprocessable Entity
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
//SUCCESS
{"result": "SUCCESS"}
//ERROR
- EXIST_NAME: Tên đơn vị tính đã tồn tại
- ERROR: Lỗi khác
PUT /product-uom[/:uom_id]
Cập nhật đơn vị tính. Quyền: product.uom.edit
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| name | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Content-Type | application/vnd.products.v1+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Body
{
"name" // Tên đơn vị tính. Required
}
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 404: Not Found
- 400: Client Error
- 422: Unprocessable Entity
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
//SUCCESS
{"result": "SUCCESS"}
//ERROR
- NOT_FOUND_UOM: Không tìm thấy đơn vị tính
- EXIST_NAME: Tên đơn vị tính đã tồn tại
- ERROR: Lỗi khác
DELETE /product-uom[/:uom_id]
Xóa đơn vị tính. Quyền: product.uom.delete
Fields
| Field | Type | Description | Required |
|---|---|---|---|
| name | NO |
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 204: No Content
- 404: Not Found
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
UpdatePrices
Cập nhật giá sản phẩm
GET /product-update-prices[/:product_id]
Lấy thông tin chi tiết giá của một hoặc nhiều sản phẩm dựa vào mã sản phẩm (reference).
Quyền: products.update_prices
Tham số (query parameter): reference (bắt buộc) - chuỗi các mã sản phẩm, cách nhau bởi dấu phẩy. Ví dụ: /product-update-prices?reference=SP001,SP002
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Authorization | HTTP Basic, HTTP Digest, or OAuth2 Bearer token (check API provider for details) |
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
- 401: Unauthorized
- 403: Forbidden
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
{
"products_prices": [
{
"product_id",
"reference",
"name",
"pricebuy",
"pricesell",
"group_convert",
"prices": [
{
"price_id",
"customer_id",
"customer_name",
"category_id",
"category_name",
"units",
"units_label",
"price",
"total_price"
},
...
]
},
...
]
}
Mã lỗi có thể xảy ra:
- 403 Forbidden: Không có quyền `products.update_prices`.
- 422 Unprocessable Entity:
+ Thiếu tham số `reference`.
+ Một hoặc nhiều `reference` không tồn tại trong hệ thống.
PUT /product-update-prices[/:product_id]
Cập nhật hàng loạt giá mua, giá bán và các giá gói của sản phẩm.
Quyền: products.update_prices
Request
Headers
| Header | Value |
|---|---|
| Accept | application/vnd.products.v1+json
application/hal+json
application/json |
| Content-Type | application/vnd.products.v1+json
application/json |
Body
{
"[product_id_1]": {
"pricesell": [new_pricesell],
"pricebuy": [new_pricebuy],
"prices": {
"[price_id_1]": [new_price],
"[price_id_2]": [new_price]
}
},
"[product_id_2]": {
"pricesell": [new_pricesell]
}
}
Response
Status Codes
- 406: Not Acceptable
- 415: Unsupported Media Type
- 200: OK
Headers
| Header | Value |
|---|---|
| Content-Type | application/vnd.products.v1+json
application/hal+json
application/json |
| Allow | Comma-separated list of all HTTP methods allowed |
Body
// Thành công
{"result": "SUCCESS"}
// Thất bại
{"result": "ERROR", "data_error": { ... }}