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:

  1. 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: asc hoặc desc.
    • 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ể).
  2. 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": { ... }}