API CreateOrder
Request
- tenant - (mandatory) - to which tenant/system to connect, e.g. "zegoal"
- customer_name - (conditional)
- account_id - (conditional)
- external_customer_id - (conditional)
- create_account - (optional; default true)
- start_date - (optional; default now())
- end_date - (optional; default "")
- order_type - (optional; default "")
- account_address_id - (optional; mandatory if account exists)
- tel_num - (optional; default "")
- email - (optional; default "")
- address_text - (optional; default "")
- order_description - (optional; default "")
- order_status - (optional; default Draft)
- order_positions - (optional; default [])
- [0...n]
- position_type - (optional; default "")
- product_name - (mandatory if catalog_position_id is not provided)
- product_code - (optional)
- quantity - (optional; default 1)
- unit - (optional; default "шт")
- price - (mandatory if catalog_position_id is not provided)
- description - (optional)
- implementation_comments - (optional)
- [0...n]
Универсальный интерфейс для создание заказа. Поддерживает следующие режимы работы:
- Создание заказа для существующего клиента (аккаунта) с несколькими вариантами поиска аккаунта
- Создание заказа для нового аккаунта с автосозданием нового аккаунта в системе
- Создание заказа без позиций и с уже наполненными позициями
Сценарий 1. Заказ для существующего клиента
В данном сценарии достаточно указать атрибут идентификации клиента и передать атрибуты непосредственно для создания заказа.
Для идентификации клиента может быть использован:
- customer_name
- account_id
- external_customer_id
Минимальный набор атрибутов для создания заказа для существующего аккаунта и без указания позиций указан в примере ниже.
Напомним, что многие атрибуты для сущностей сконфигурированы с заполнением "по умолчанию" и будут добавлены в запрос автоматически.
Запрос
{
"tenant": "orderingtenant885",
"account_id": 1,
"account_address_id": 1,
"tel_num": "11122233344455",
"email": "newCusmoter@email.com"
}
Ответ
{
"processing_result": {
"text": "Order is created.",
"status": "ok",
"ctx_id": "37GMTPLL:0-dP",
"code": 0
},
"processing_date": "2020-07-03 09:16:31",
"CreateOrder": {
"response": {
"tenant": "orderingtenant885",
"order": {
"start_date": "2020-07-03 09:16:30",
"order_type": "",
"order_total": 0,
"order_status": "Draft",
"order_positions": [],
"order_num": 3,
"order_id": 3,
"order_description": "",
"end_date": "",
"customer_name": "NewClient_1",
"address_text": "",
"account_id": 1,
"account_address_id": 1
},
"create_account": true,
"TZ": "Europe/Minsk"
},
"request": {
"tenant": "orderingtenant885",
"tel_num": "11122233344455",
"email": "newCusmoter@email.com",
"account_id": 1,
"account_address_id": 1
},
"extra_logic": "",
"enriched_request": {
"tenant": "orderingTenant885",
"tel_num": "11122233344455",
"start_date": "2020-07-03 09:16:30",
"order_type": "",
"order_status": "Draft",
"order_positions": [],
"order_description": "",
"end_date": "",
"email": "newCusmoter@email.com",
"create_account": true,
"address_text": "",
"account_id": 1,
"account_address_id": 1
}
}
}
Стандартный запрос на создание заказа для существующего клиента ниже. Особенности запроса:
- аккаунт будет идентифицирован по "customer_name": "name1",
- переданы конкретные координаты кастомера для этого заказа (телефон и почта)
- указан конкретный id адреса для заказа
- В примере указана одна позиция из каталога, а одна добавлена вручную.
Запрос
{
"tenant": "orderingtenant885",
"customer_name": "NewClient_1",
"account_address_id": 1,
"start_date":"2020-07-03 09:19:58",
"end_date":"2020-07-06 09:19:58",
"tel_num": "0012232211",
"email": "newCusmoter@email.com",
"address_text":"a big white building",
"order_description":"order Description",
"order_status":"Draft",
"order_type": "OnSite",
"order_positions": [
{
"catalog_position_id": 4
},
{
"position_type": "Goods",
"product_name": "position #2",
"price": 200.50,
"product_code":"6205",
"unit":"кг",
"quantity": 1
}
]
}
Ответ
{
"processing_result": {
"text": "Order is created.",
"status": "ok",
"ctx_id": "br8NGtHP:0-DL",
"code": 0
},
"processing_date": "2020-07-03 09:22:34",
"CreateOrder": {
"response": {
"tenant": "orderingtenant885",
"order": {
"start_date": "2020-07-03 09:19:58",
"order_type": "OnSite",
"order_total": 260.5,
"order_status": "Draft",
"order_positions": [
{
"unit": "шт",
"quantity": 2,
"product_name": "position #612",
"price": 30,
"position_type": "Goods",
"position_id": 7,
"order_id": 4,
"catalog_position_id": 4
},
{
"unit": "кг",
"quantity": 1,
"product_name": "position #2",
"product_code": "6205",
"price": 200.5,
"position_type": "Goods",
"position_id": 8,
"order_id": 4
}
],
"order_num": 4,
"order_id": 4,
"order_description": "order Description",
"end_date": "2020-07-06 09:19:58",
"customer_name": "NewClient_1",
"address_text": "a big white building",
"account_id": 1,
"account_address_id": 1
},
"create_account": true,
"TZ": "Europe/Minsk"
},
"request": {
"tenant": "orderingtenant885",
"tel_num": "0012232211",
"start_date": "2020-07-03 09:19:58",
"order_type": "OnSite",
"order_status": "Draft",
"order_positions": [
{"catalog_position_id": 4},
{
"unit": "кг",
"quantity": 1,
"product_name": "position #2",
"product_code": "6205",
"position_type": "Goods",
"price": 200.5
}
],
"order_description": "order Description",
"end_date": "2020-07-06 09:19:58",
"email": "newCusmoter@email.com",
"customer_name": "NewClient_1",
"address_text": "a big white building",
"account_address_id": 1
},
"extra_logic": "",
"enriched_request": {
"tenant": "orderingtenant885",
"tel_num": "0012232211",
"start_date": "2020-07-03 09:19:58",
"order_type": "OnSite",
"order_status": "Draft",
"order_positions": [
{"catalog_position_id": 4},
{
"unit": "кг",
"quantity": 1,
"product_name": "position #2",
"product_code": "6205",
"position_type": "Goods",
"price": 200.5
}
],
"order_description": "order Description",
"end_date": "2020-07-06 09:19:58",
"email": "newCusmoter@email.com",
"customer_name": "NewClient_1",
"create_account": true,
"address_text": "a big white building",
"account_address_id": 1
}
}
}
Сценарий 2, заказ для нового клиента
Для данного сценария интерфейсу требуется ряд атрибутов для создание собственно нового аккаунта:
- customer_name
- external_customer_id
Остальные атрибуты использованы для создания непосредственно заказа.
Запрос
{
"tenant": "orderingtenant885",
"external_customer_id":"2",
"customer_name": "NewClient_2",
"start_date":"2020-07-03 09:26:53",
"end_date":"2020-07-06 09:26:53",
"tel_num": "1112223334",
"email": "newCusmoter2@email.com",
"address_text":"a big white building",
"order_description":"order Description",
"order_status":"Draft",
"order_type": "OnSite",
"order_positions": [
{
"catalog_position_id": 1
},
{
"catalog_position_id": 2
},
{
"catalog_position_id": 3
}
]
}
Ответ
{
"processing_result": {
"text": "Order is created.",
"status": "ok",
"ctx_id": "M72r2hJ6:0-LH",
"code": 0
},
"processing_date": "2020-07-03 09:28:08",
"CreateOrder": {
"response": {
"tenant": "orderingtenant885",
"order": {
"start_date": "2020-07-03 09:26:53",
"order_type": "OnSite",
"order_total": 238.6,
"order_status": "Draft",
"order_positions": [
{
"unit": "шт",
"quantity": 3,
"product_name": "position #552",
"price": 23.1,
"position_type": "Goods",
"position_id": 9,
"order_id": 5,
"catalog_position_id": 1
},
{
"unit": "шт",
"quantity": 3,
"product_name": "position #340",
"price": 23.1,
"position_type": "Goods",
"position_id": 10,
"order_id": 5,
"catalog_position_id": 2
},
{
"unit": "шт",
"quantity": 2,
"product_name": "position #296",
"price": 50,
"position_type": "Goods",
"position_id": 11,
"order_id": 5,
"catalog_position_id": 3
}
],
"order_num": 5,
"order_id": 5,
"order_description": "order Description",
"end_date": "2020-07-06 09:26:53",
"customer_name": "NewClient_2",
"address_text": "a big white building",
"account_id": 2,
"account_address_id": 2
},
"create_account": true,
"TZ": "Europe/Minsk"
},
"request": {
"tenant": "orderingtenant885",
"tel_num": "1112223334",
"start_date": "2020-07-03 09:26:53",
"order_type": "OnSite",
"order_status": "Draft",
"order_positions": [
{"catalog_position_id": 1},
{"catalog_position_id": 2},
{"catalog_position_id": 3}
],
"order_description": "order Description",
"external_customer_id": "2",
"end_date": "2020-07-06 09:26:53",
"email": "newCusmoter2@email.com",
"customer_name": "NewClient_2",
"address_text": "a big white building"
},
"extra_logic": "",
"enriched_request": {
"tenant": "orderingtenant885",
"tel_num": "1112223334",
"start_date": "2020-07-03 09:26:53",
"order_type": "OnSite",
"order_status": "Draft",
"order_positions": [
{"catalog_position_id": 1},
{"catalog_position_id": 2},
{"catalog_position_id": 3}
],
"order_description": "order Description",
"external_customer_id": "2",
"end_date": "2020-07-06 09:26:53",
"email": "newCusmoter2@email.com",
"customer_name": "NewClient_2",
"create_account": true,
"address_text": "a big white building"
}
}
}
Алгоритм валидации атрибутов
Логика анализа атрибутов для решения создавать-не создавать аккаунт:
- ожидаем account_id или external_customer_id или customer_name и ищем у нас аккаунт. Если есть - используем его и все остальные атрибуты запроса не обязательные.
- если не найден то проверяем параметр create_account.
- Если true (по умолчанию true) то валидируем все атрибуты для создания аккаунта (customer_name, external_customer_id) и создаем его.
- Если false то отдаем ошибку что по такому external_customer_id или customer_name аккаунт не найден.
account_id имеет выше приоритет над другими атрибутами. Если его прислали то сразу ищем аккаунт и возвращаем ошибку если не нашли.При получении external_customer_id и customer_name то external_customer_id приоритетней.