Rest API Список документов на заказ продукта - datawizio/pythonAPI GitHub Wiki

20. Ресурс /purchase-documents/ (Документ на заказ продукта, Коллекция, только для чтения)

Документ на заказ продукта - это документ, который составляется магазином во время заказа товаров в поставщиков или производителя. Он включает название товара, артикул, штрих-код, единицы измерения, цену и количество товара. С помощью ресурса /purchase-documents/ можно получить доступ к списку документов на заказ товаров. А также добавлять в справочник новые документы на заказ

20.1. Структура объекта Purchase documents:

Название поля Тип поля размер Обязательно Только чтение Примечание
document_id строка да нет идентификатор документа, должен соответствовать id с клиентской бухгалтерской программы
url URL 50 нет да url этого объекта
document_number строка 50 да да порядковый номер документа
shop_id строка 50 нет да должен соответствовать id магазина с клиентской бухгалтерской программы
shop_url URL нет да url этого объекта
supplier_id строка 50 да нет должен соответствовать id поставщика товара
supplier_url URL нет да url этого объекта
items_qty число 50 да нет количество товаров
receive_date дата, время 50 да нет дата и время получения
responsible рядок 200 да нет отвественный
order_date дата, время да нет дата и время заказа
price_total число да нет общая стоимость
commodity_credit_days число нет нет количество дней товарного кредита
products строка да нет товары

20.1.2. Структура обьектв ТОВАРЫ (PRODUCTS):

Каждый товар содержит в себе некие характеристики, которые можно выразить в такой структуре:

Название поля Тип поля размер Обязательно Только чтение Примечание
product_id строка 200 да нет идентификатор товара с Справочника по товарам (смотр.[/products/])
product_url URL нет да url идентификатора товара
qty число да да количество
price число нет нет реальная цена позиции (если это поле отсутствует, или price*qty <> price_total, то вычисляется, как price_total/qty)
price_total число да нет общая стоимость позиции (= цена * количество)

20.2. Доступные команды

Для управления ресурсом /purchase-documents/ поддерживаются следующие команды:

  • GET - получить одну страницу коллекции
  • POST - загрузить документы на заказ продукта
  • OPTIONS - мета-информация по структуре объекта
  • HEAD - аналог GET, но возвращается только заголовок ответа

20.2.1. GET /purchase-documents/ - получить одну страницу коллекции.

Вид команды: GET http://api.datawiz.io/api/v1/purchase-documents

Суффиксы:
  • .json - получить ответ с сервера в формате JSON
  • .api - получить ответ с сервера в формате HTML (тестовая платформа)
Параметры:
  • format = json | api - аналог вышеуказанных суффиксов
  • page_size = nn - установить размер страницы равен nn объектов
  • page = n - загрузить страницу n
  • search = text - отображать только объекты, в поле name где найдено "text"
  • ordering = name | identifier - сортировать по полю в алфавитном порядке (от меньшего - к большему)
  • ordering = -name | -identifier - сортировать по полю в обратном порядке
Ответ сервера:

Объект "коллекция" состоит из четырех полей (count, next, previous, results).

Пример пустой коллекции, полученной в результате запроса:

GET http://api.datawiz.io/api/v1/purchase-documents/.json/?search=unknown-string

{
     "count": 0,
     "next": null,
     "previous": null,
     "results": [] 
}

Пример коллекции из 2-х элементов: GET http://api.datawiz.io/api/v1/purchase-documents/?format=api&page_size=2:

HTTP 200 OK
Content-Type: application/json
Vary: Accept
Allow: GET, HEAD, OPTIONS
{
            "document_id": "11114",
            "url": "http://api.datawiz.io/api/v1/purchase-documents/11114/",
            "document_number": "",
            "shop_id": "675",
            "shop_url": "http://api.datawiz.io/api/v1/shops/46e08f10-cbe3-11e4-80b9-a01d4897e530/",
            "supplier_id": "2",
            "supplier_url": "http://api.datawiz.io/api/v1/suppliers/supplier-1/",
            "items_qty": "2.0000",
            "receive_date": "2016-07-01T00:00:00",
            "responsible": "",
            "order_date": "2016-01-01T00:00:00",
            "price_total": "20.0000",
            "commodity_credit_days": 0,
            "products": [
                {
                    "product_id": null,
                    "product_url": "http://api.datawiz.io/api/v1/products/a26f866b-1465-11e5-80cb-a01d4897e530/",
                    "qty": "2.0000",
                    "price": "10.0000",
                    "price_total": "20.0000"
                }
            ]
        },
        {
            "document_id": "11112",
            "url": "http://api.datawiz.io/api/v1/purchase-documents/11112/",
            "document_number": "",
            "shop_id": "675",
            "shop_url": "http://api.datawiz.io/api/v1/shops/46e08f10-cbe3-11e4-80b9-a01d4897e530/",
            "supplier_id": "2",
            "supplier_url": "http://api.datawiz.io/api/v1/suppliers/supplier-1/",
            "items_qty": "2.0000",
            "receive_date": "2016-07-01T00:00:00",
            "responsible": "",
            "order_date": "2016-01-01T00:00:00",
            "price_total": "20.0000",
            "commodity_credit_days": 0,
            "products": [
                {
                    "product_id": null,
                    "product_url": "http://api.datawiz.io/api/v1/products/a26f866b-1465-11e5-80cb-a01d4897e530/",
                    "qty": "2.0000",
                    "price": "10.0000",
                    "price_total": "20.0000"
                }
            ]
        },
Сообщение об ошибке:

В случае ошибки сервер возвращает ответ с соответствующим статусом, а также сообщением об ошибке, записанным в ключе detail и / или в поле http.response.content:

HTTP 404 NOT FOUND 
Content-Type: application/json 
Vary: Accept 
Allow: GET, HEAD, OPTIONS, PATCH 

{ "detail": "Not found" }

20.2.2 POST /purchase-documents/ - добавить информацию по документу на заказ продукта

Вид команды: POST http://api.datawiz.io/api/v1/purchase-documents/?format=json

Суффиксы:
  • .json - получить ответ с сервера в формате JSON
  • .api - получить ответ с сервера в формате HTML (тестовая платформа)
Параметры:
  • format = json | api - аналог вышеуказанных суффиксов
  • Данные запроса:

    В запросе передается JSON-объект типа словарь (dictionary), который описывает документ на заказ продукта. Важные поля: document_id, shop_id, supplier_id, product_id, qty, document_date, responsible, order_date, price_total, price>. Последовательность полей не принципиальна.

    Пример запроса на загрузку документа на заказ продукта: POST http://api.datawiz.io/api/v1/purchase-documents/.json

{
            "document_id": "11112",           
            "document_number": "",
            "shop_id": "675",
            "supplier_id": "2",
            "items_qty": "2.0000",
            "receive_date": "2016-07-01T00:00:00",
            "responsible": "",
            "order_date": "2016-01-01T00:00:00",
            "price_total": "20.0000",
            "commodity_credit_days": 0,
            "products": [
                {
                    "product_id": null,
                    "qty": "2.0000",
                    "price": "10.0000",
                    "price_total": "20.0000"
                }
            ]
        }
Ответ сервера:

При корректной обработке запроса сервер возвращает код статуса 201 и статус создания объекта.

Пример ответа сервера:

HTTP 201 CREATED
Content-Type: application/json
Vary: Accept
Location: http://api.datawiz.io/api/v1/purchase-documents/124/
Allow: GET, POST, HEAD, OPTIONS

{ "updated": 0, "inserted": 1 }

Условия и ограничения (Constraints):
  • Если объект с идентификатором product_id, shop_id, date уже существует на сервере, то указанный запрос заменит объект на сервере (replace) без предупреждения.
  • price_total должен быть равным price*qty.
  • Нельзя добавить на сервер объект, если не существует магазина с указанным идентификатором shop_id
  • Нельзя добавить на сервер объект, если не существует товара с указанным идентификатором product_id
  • Нельзя добавить на сервер объект, если не существует поставщика с указанным идентификатором supplier_id
Сообщение об ошибке:

В случае ошибки сервер возвращает ответ с соответствующим статусом, а также сообщением об ошибке, записанным напротив имени поля, с которым эта ошибка связана. Если ошибка касается не отдельного поля, а всего объекта, то сообщение об ошибке будет записано напротив ключа non_field_errors.

ПРИМЕЧАНИЕ. Каждое сообщение об ошибке представляет собой коллекцию (массив) строчных символов.

Пример ответа сервера при возникновении ошибки (поле qty передано пустым):

HTTP 400 BAD REQUEST 
Content-Type: application/json 
Vary: Accept 
Allow: GET, POST, HEAD, OPTIONS 
{
     "qty": [
         "This field is required." 
     ] 
}

20.2.3. OPTIONS /purchase-documents/ - мета-информация по структуре объекта

При выполнении данной команды возвращается такая JSON-структура:

OPTIONS /api/v1/purchase-documents/

HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{ "name": "Purchase Order Document List", "description": "this is my text. You can see this text on the REST-page", "renders": [ "application/json", "text/html" ], "parses": [ "application/json", "application/x-www-form-urlencoded", "multipart/form-data" ], "actions": { "POST": { "document_id": { "type": "string", "required": true, "read_only": false, "label": "Document id" }, "url": { "type": "field", "required": false, "read_only": true, "label": "Url" }, "document_number": { "type": "string", "required": false, "read_only": false, "label": "Document number", "max_length": 50 }, "shop_id": { "type": "string", "required": true, "read_only": false, "label": "Shop id", "max_length": 50 }, "shop_url": { "type": "field", "required": false, "read_only": true, "label": "Shop url" }, "supplier_id": { "type": "string", "required": true, "read_only": false, "label": "Supplier id", "max_length": 50 }, "supplier_url": { "type": "field", "required": false, "read_only": true, "label": "Supplier url" }, "items_qty": { "type": "decimal", "required": true, "read_only": false, "label": "Items qty" }, "receive_date": { "type": "datetime", "required": true, "read_only": false, "label": "Receive date" }, "responsible": { "type": "string", "required": true, "read_only": false, "label": "Responsible", "max_length": 200 }, "order_date": { "type": "datetime", "required": true, "read_only": false, "label": "Order date" }, "price_total": { "type": "decimal", "required": true, "read_only": false, "label": "Price total" }, "commodity_credit_days": { "type": "integer", "required": false, "read_only": false, "label": "Commodity credit days" }, "products": { "type": "field", "required": true, "read_only": false, "label": "Products", "child": { "type": "nested object", "required": true, "read_only": false, "children": { "product_id": { "type": "string", "required": true, "read_only": false, "label": "Product id" }, "product_url": { "type": "field", "required": false, "read_only": true, "label": "Product url" }, "qty": { "type": "decimal", "required": true, "read_only": false, "label": "Qty" }, "price": { "type": "decimal", "required": true, "read_only": false, "label": "Price" }, "price_total": { "type": "decimal", "required": true, "read_only": false, "label": "Price total" } } } } } } }

⚠️ **GitHub.com Fallback** ⚠️