Jupiter.JPOS API
Формат заказа ORDER_JSON
Примеры
{
"uid":"e52e8d81-631e-4615-b35f-c16cf7cc29ca", // Уникальный ID заказа
"num":"4", // Внутренний или порядковый номер заказа
"date":"2019-09-02 15:19:30", // Дата рабочего дня
"hour":"15", // Час, когда заказ открыт. Нужно только для ЛК
"day_week":"Пон", // День недели, по дате рабочего дня. Нужно только для ЛК
"open_date":"2019-09-02 15:19:30", // Дата/время открытия заказа
"close_date":"", // Дата/время закрытия заказа (только если заказ закрыт)
"vid":"Обычный заказ", // Вид заказа: "Доставка", "На вынос", "Обычный заказ".
"type":"Заказ", // Тип заказа. "Заказ" или "Возврат"
"name":"5", // Имя заказа. Например номер стола.
"source":"Телефон", // Имя источника заказа
"waiter":"Трофимова В.А.", // Имя официанта
"cashier":"Пикаров Б.К.", // Имя кассира
"sum_rozn":"300", // Розничная сумма заказа. Подитог. Сумма ДО всех скидок\наценок
"sum_fakt":"270", // Фактическая сумма заказа. Итог. Сумма ПОСЛЕ всех скидок\наценок
"sum_skidki":"30", // Сумма всех скидок\наценок
"bonus_nach": "0.00", // Сумма "Сколько начислено бонусов". Нужно только для ЛК
"bonus_trat": "0.00", // Сумма "Сколько потрачено бонусов". Нужно только для ЛК
"address": "Дмитров, мкр.Маркова, д.19, кв.1", // Адрес клиента
"coordinates": "37.527624 56.34734", // Координаты дома
"block_change": "0", // Признак "Товарная часть документа, закрыта для изменений". 1 - да, 0 - нет
"client": {
"client_uid": "4:1:0:10221", // Уникальный UID клиента внутри Юпитера
"id": "8765456", // ID (код) клиента
"name": "Святослав", // Имя клиента
"card": "1234", // Номер карты клиента
"bonus": "100" // Кол-во бонусов на счете клиента
},
"order_line":[
{
"uid":"183", // Уникальный ID строки
"date":"2019-09-02 15:19:30", // Дата рабочего дня. Нужно только для ЛК
"product_uid":"3:77:0:6286", // UID товара
"product_code":"3233", // Код товара
"product_tax":"0", // Ставка НДС (20,10,0)
"product":"ПИЦЦА 4 СЫРА", // Имя товара. Нужно только для ЛК
"group":"", // Имя группы товара. Нужно только для ЛК
"subgroup":"", // Имя подгруппы товара. Нужно только для ЛК
"price_rozn":"250", // Розничная цена товара. Цена ДО всех скидок\наценок. Без учета стоимости модификаторов.
"price_fakt":"225", // Фактическая цена товара. Цена ПОСЛЕ всех скидок\наценок. Без учета стоимости модификаторов.
"quantity":"1", // Количество по строке
"sum_rozn":"250", // Розничная сумма по строке. Сумма ДО всех скидок\наценок. Без учета суммы модификаторов.
"sum_fakt":"225", // Фактическая сумма по строке. Сумма ДО всех скидок\наценок. Без учета суммы модификаторов.
"block_change": "1", // Признак "Строка отправлена в производство". 1 - да, 0 - нет
"selected_modifiers": [ // Если у строки есть модификаторы, то в массиве перечислены все строки модификаторов.
{ // Формат строки модификаторов идентичен формату строки заказа.
"uid":"184",
"date":"2019-09-02 15:19:30",
"product_uid":"3:77:0:9999",
"product":"ДОП СЫР",
"group":"",
"subgroup":"",
"price_rozn":"50",
"price_fakt":"45",
"quantity":"1", // Количество по строке модификатора. Указывается без учета кол-ва в базовой строке.
"sum_rozn":"50",
"sum_fakt":"45"
}
]
}
],
"order_discounts": [ // Скидки\наценки по заказу
{
"date": "2019-09-02 15:19:30", // Дата рабочего дня. Нужно только для ЛК
"name": "Скидка 10%", // Наименование скидки\наценки
"sum": "30.00" // Сумма скидки\наценки. Если наценка, то со знаком -
}
],
"order_payment": [ // Оплаты по заказу
{
"uid": "5:62:0:99650", // Уникальный UID документа оплаты. Нужно только для ЛК
"id": "1", // Номер оплаты в чеке
"date": "2019-09-02 15:19:30", // Дата рабочего дня. Нужно только для ЛК
"name": "РУБЛИ ЗАЛ", // Имя вида оплаты
"pay_type_uid": "2:1:0:24", // UID вида оплаты
"cash": "1", // Признак нал\безнал. 0 - безна, 1 - нал. Нужно только для ЛК
"sum": "270.00", // Сумма оплаты (без сдачи)
"change": "30.00" // Сумма сдачи
}
]
}
Добавить клиента в заказ add_client_to_order
Описание
- JPOS запрашивает у пользователя идентификатор клиента. На данный момент это может быть только специальный код для внешнего приложения.
- Далее JPOS отправляет в Юпитер запрос add_client_to_order, где передает этот идентификатор клиента.
- Юпитер, получает запрос. Выполняет поиск клиента. Добавляет клиента в заказ, применят все его скидки\бонусы.
- Юпитер возвращает в JPOS обновленный заказ
Примеры
Запрос
{
"command": "add_client_to_order",
"user_id": "4:1:0:14", // ID сотрудника в Юпитере. Получается командой get_user_id.
"serverId": "25162093", // SERVER_ID с которого отправляется запрос.
"client_id": "1234", // Идентификатор клиента, который вводится пользователем в JPOS.
"order_uid": "ac09d9d8-c206-4291-bd3f-e59c46f71b42" // ID заказа, в который нужно добавить клиента
}
Ответ успех
{
"status": "ok",
"order": {Заказ в формате ORDER_JSON}
}
Ответ ошибка
{
"status": "error",
"message": "Клиент не найден"
}
Создать новый заказ add_new_order
Описание
- JPOS отправляет в Юпитер все заказы.
- Юпитер принимает данные, определяет это новый заказ или нет.
- Если заказ не новый, то Юпитер обновляет данные заказа. Добавляет в заказ, те строки, которых у него нет. Проверка какие строки есть выполняется по id строк.
- Если заказ новый, то Юпитер создает его и применяет к нему все возможные автоматические скидки.
- Печатает заказ на кухню.
- 2019-10-17 Добавил загрузку закрытого заказа. Если в запросе add_new_order в поле close_date стоит дата, то заказ считается закрытым и Юпитер выполняет у себя необходимые действия по закрытию заказа. ВАЖНО перед тем как присылать в Юпитер закрытый заказ, JPOS должен хотя бы 1 раз отправить запрос add_new_order пока заказ открыт. Это нужно, чтобы к заказу применились скидки и он распечатался на кухню.
Примеры
Запрос
{
"command":"add_new_order",
"serverId":"25162093", // SERVER_ID с которого отправляется запрос
"user_id":"4:1:0:14", // ID сотрудника в Юпитере.
"order": {Заказ в формате ORDER_JSON}
}
Ответ успех
{
"status": "ok",
"order": {Заказ в формате ORDER_JSON}
}
Ответ ошибка
{
"status" : "error",
"message" : "Не найден открытый рабочий день"
}
Получить список закрытых заказов get_closed_orders
Описание
- На вход получает массив id всех заказов, которые есть в JPOS.
- Находит серди них те заказы, которые были закрыты в Юпитере и возвращает массив с их id.
- 2019-11-26 Теперь возвращает еще и список всех открытых заказов (open_orders), которые есть в Юпитере, для сотрудника указанного в запросе (user_id)
Примеры
Запрос
{
"command": "get_closed_orders",
"serverId": "25162093",
"user_id": "4:1:0:14",
"orders": ["ac09d9d8-c206-4291-bd3f-e59c46f71b4c", "ac09d9d8-c206-AS291-bd3f-e59c46f71b4c"]
}
Ответ успех
{
"status": "ok",
"closed_orders": ["ac09d9d8-c206-4291-bd3f-e59c46f71b4c", "ac09d9d8-c206-AS291-bd3f-e59c46f71b4c"],
"open_orders": [{
"uid": "11111-22222-aaaaaa-3333-asdas1",
"open_time": "15:19",
"name": "5",
"sum_fakt": "270"
}, {
"uid": "ggggg-22222-33333-4444-5555555",
"open_time": "15:49",
"name": "6",
"sum_fakt": "1000"
}]
}
Получение настроек (меню)
Описание
JPOS получает настройки торговой точки (меню) с облачного сервера. Для этого:
- JPOS периодически обращается к серверу, для проверки необходимости обновить настройки.
- Если сервер сообщает, что есть данные для обновления, то JPOS посылает запрос на получение настроек
- В настройках есть "дата настроек", которую JPOS сохраняет и использует в запросах проверки обновлений
- POST запросы на адрес https://jupiter.report/jpos/index.php
- В меню передается иерархическое дерево раскладок, как в Юпитере. В раскладке может быть два вида кнопок, кнопка с товаром и кнопка для перехода на другую раскладку
Проверка обновления checkUpdate
Примеры
Запрос
{
"command":"checkUpdate", // Константа
"server_id":"12345678", // server_id JPOS
"date_from_request":"date_from_request", // Дата настроек в JPOS
}
Ответ успех. Есть данные для обновления:
{
"status": "ok", // Признак успешного выполнения запроса
"update": "yes" // Признак, что есть данные для обновления
}
Ответ успех. Обновление не требуется.
{
"status": "ok", // Признак успешного выполнения запроса
"update": "no" // Признак, что обновление не требуется
}
Ответ ошибка
{
"status": "error", // Признак, что при выполнении запроса была ошибка
"message": "SERVER_ID не зарегистрирован" // Описание ошибки
}
Запрос настроек getTT
Примеры
Запрос
{
"command":"getTT", // Константа
"serverId":"12345678", // server_id JPOS
}
Ответ успех
{
"status": "ok", // Признак успешного выполнения запроса
"data": { // Блок с данными торговой точки
"id": "1", // id торговой точки в облаке
"name": "Торговая точка", // Название торговой точки
"print_header": "" // Строка (заголовок) для печати в чеке\счете
},
"menu": { // Блок с меню
"settingsDate": "2020-10-09 15:37:59", // Дата настроек
"menuSections": [ // Массив всех разделов меню (раскладок)
{
"name": "ОСНОВНОЕ МЕНЮ", // Название раскладки
"uid": "5:99:0:59541", // Уникальный id раскладки
"type": "", // ???
"is_button": 0, // Признак, что это кнопка с товаром
"is_main": 1, // Признак, что это главная (начальная) раскладка
"is_modifier": 0, // Признак, что это группа модификаторов
"buttons": [ // Массив кнопок раскладки
{
"is_button": 0, // Признак, что это кнопка с товаром
"is_main": 0, // Признак, что это главная (начальная)
"is_modifier": 0, // Признак, что это группа модификаторов
"name": "СЕТЫ", // Название кнопки
"type": "",
"uid": "5:1:0:247" // id объекта кнопки, в данном случае другой раскладки
},
{
"is_button": 0,
"is_main": 0,
"is_modifier": 0,
"name": "ГРАНД СЕТЫ",
"type": "",
"uid": "5:98:0:1328445"
},
{
"name": "ПЛАТНЫЕ ПАЛОЧКИ БАМБУКОВЫЕ ШТ", // Название кнопки
"uid": "3:98:0:355541", // id объекта кнопки, в данном случае id товара
"type": "product",
"is_button": 1, // Признак, что это кнопка с товаром
"is_main": 0, // Признак, что это главная (начальная)
"options": { // Блок с параметрами товара
"code": "940", // Код товара
"price": 5, // Цена товара
"tax": "no_tax", // Ставка НДС (10,20,no_tax)
"modifiers": [], // Массив с модификаторами
"show_modifiers_always": 0, // Признак, что нужно всегда предлагать выбор модификаторов
"max_weight_summ": null, // Максимальный общий вес модификаторов
"action": "",
"group_name": "13.ТОВАРЫ франшиза", // Название товарной группы
"subgroup_name": "РАЗНОЕ", // Название товарной подгруппы
"image": "", // Ссылка на картинку с товаром
"description": "Столовый прибор в Азии" // Описание для меню из карточки ТМЦ
}
}
]
},
{
"name": "СЕТЫ",
"uid": "5:1:0:247",
"type": "",
"is_button": 0,
"is_main": 0,
"is_modifier": 0,
"buttons": [
{
"name": "СЕТ 1 КГ РОЛЛОВ",
"uid": "3:98:0:1182438",
"type": "product",
"is_button": 1,
"is_main": 0,
"options": {
"code": "1681",
"price": 699,
"tax": "no_tax",
"modifiers": [],
"show_modifiers_always": 0,
"max_weight_summ": null,
"action": "",
"group_name": "01.СЕТЫ",
"subgroup_name": "АКЦИОННЫЕ СЕТЫ",
"image": "",
"description": ""
}
},
{
"name": "ХИТ",
"uid": "3:1:0:79",
"type": "product",
"is_button": 1,
"is_main": 0,
"options": {
"code": "F2132DE00B",
"price": 499,
"tax": "no_tax",
"modifiers": [
"5:98:0:1256108",
"5:99:0:23409",
"5:98:0:1087161"
],
"show_modifiers_always": 1,
"max_weight_summ": null,
"action": "",
"group_name": "01.СЕТЫ",
"subgroup_name": "СЕТЫ",
"image": ""
}
},
{
"is_button": 0,
"is_main": 0,
"is_modifier": 0,
"name": "ЕЩЁ СЕТЫ",
"type": "",
"uid": "5:98:0:1328444"
}
]
},
{
"name": "СУШИ",
"uid": "5:1:0:256",
"type": "",
"is_button": 0,
"is_main": 0,
"is_modifier": 0,
"buttons": [
{
"name": "СУШИ УГОРЬ",
"uid": "3:1:0:178",
"type": "product",
"is_button": 1,
"is_main": 0,
"options": {
"code": "D3194D6AA7",
"price": 49,
"tax": "no_tax",
"modifiers": [],
"show_modifiers_always": 0,
"max_weight_summ": null,
"action": "",
"group_name": "04.СУШИ",
"subgroup_name": "СУШИ",
"image": "",
"description": ""
}
}
]
},
{
"name": "ЕЩЁ СЕТЫ",
"uid": "5:98:0:1328444",
"type": "",
"is_button": 0,
"is_main": 0,
"is_modifier": 0,
"buttons": [
{
"is_button": 0,
"is_main": 0,
"is_modifier": 0,
"name": "СЕТЫ",
"type": "",
"uid": "5:1:0:247"
}
]
}
],
"payment": [ // Массив c раскладками оплаты
{
"cash": "no", // Признак наличной оплаты (yes\no)
"fiscal_num": 0, // Номер фискального вида оплаты. 0 - нефискальная оплата
"type": "paymentBonus",
"name": "Баллы", // Название вида оплаты
"uid": "paymentBonus" // uid вида оплаты
}
],
"modifiersSections": [ // Массив с группами модификаторов
{
"name": "Для Лапши допы",
"uid": "5:98:0:438315",
"type": "",
"is_button": 0,
"is_main": 0,
"is_modifier": 1,
"is_auto_modifier": 0, // Признак Группа автоматических модификаторов
"weight_min": 0, // Минимальный вес модификаторов для выбора
"weight_max": 10, // Максимальный вес модификаторов для выбора
"buttons": [
{
"name": "АВОКАДО 10г",
"uid": "3:99:0:31632",
"type": "product",
"is_button": 1,
"is_main": 0,
"options": {
"code": "FCB50AD3F",
"price": 49,
"tax": "no_tax",
"modifiers": [], // У модификатора не может быть модификаторов
"action": "",
"group_name": "13.ТОВАРЫ франшиза",
"subgroup_name": "ЛИШНЕЕ",
"quantity": "1",
"weight": 1, // Вес модификатора
"image": "",
"description": ""
}
},
{
"name": "ЛОСОСЬ 25г",
"uid": "3:99:0:53026",
"type": "product",
"is_button": 1,
"is_main": 0,
"options": {
"code": "667",
"price": 59,
"tax": "no_tax",
"modifiers": [],
"action": "",
"group_name": "13.ТОВАРЫ франшиза",
"subgroup_name": "ЛИШНЕЕ",
"quantity": "1",
"weight": 1,
"image": "",
"description": ""
}
}
]
},
{
"name": "ГАРНИРЫ СЕТЫ",
"uid": "5:98:0:1256108",
"type": "",
"is_button": 0,
"is_main": 0,
"is_modifier": 1,
"is_auto_modifier": 1,
"weight_min": null,
"weight_max": null,
"buttons": [
{
"name": "Соевый соус фасованный 30г.",
"uid": "3:99:0:34145",
"type": "product",
"is_button": 1,
"is_main": 0,
"options": {
"code": "658",
"price": 0,
"tax": "no_tax",
"modifiers": [],
"action": "",
"group_name": "07.ДОПОЛНИТЕЛЬНО",
"subgroup_name": "ГАРНИРЫ",
"quantity": "2",
"weight": 1,
"image": "",
"description": ""
}
},
{
"name": "Имбирь фасованный 30г.",
"uid": "3:99:0:34144",
"type": "product",
"is_button": 1,
"is_main": 0,
"options": {
"code": "657",
"price": 0,
"tax": "no_tax",
"modifiers": [],
"action": "",
"group_name": "07.ДОПОЛНИТЕЛЬНО",
"subgroup_name": "ГАРНИРЫ",
"quantity": "1",
"weight": 1,
"image": "",
"description": ""
}
}
]
}
]
}
}
Ответ ошибка
{
"status": "error", // Признак, что при выполнении запроса была ошибка
"message": "SERVER_ID не зарегистрирован" // Описание ошибки
}
Авторизация сотрудника get_user_id
Описание
- JPOS запрашивает у пользователя код авторизации и передает его в Юпитер.
- Юпитер выполняет поиск сотрудника по полученному коду авторизации. Поиск происходит по коду+паролю и дорожке магнитной карты.
- Если сотрудник найден, то Юпитер возвращает его UID
Примеры
Запрос
{
"command": "get_user_id",
"serverId": "5123123",
"password": "11112" // Пароль который вводится пользователем в JPOS
}
Ответ успех
{
"status": "ok",
"user_id": "4:1:0:14",
"workday_id": "5:3:0:747531" // UID рабочего дня в Юпитере
}
Ответ ошибка
{
"status": "error",
"message": "Пользователя с таким паролем не существует"
}
Блокировка заказа lock_order
Описание
- Перед тем как открыть заказ на редактирование JPOS отправляет в Юпитер запрос lock_order
- Юпитер проверяет можно ли открыть заказ на редактирование и если можно, то устанавливает блокировку на заказ.
Проверяет:
- Что заказ не закрыт
- Что в заказе не закрыта товарная часть (еще не печатали счет)
- Что заказ не редактируется на другом рабочем месте (именно другом!)
Особенности блокировки:
- В качестве рабочего места записывается UID сотрудника (4:1:0:14)
- В расширенном протоколе запись о блокировке помечается, что блокировка от JPOS
- Если в системе нет заказа с переданным id, то вернет успех
Если заказ можно открыть на редактирование, то Юпитер возвращает заказ в формате ORDER_JSON.
Особенности возврата заказа:
- Если в заказ не прописан id заказа JPOS, то возвращает uid заказа из Юпитера
- В поле kod передает внутренний код заказа в Юпитере
- В поле status передает closed если заказ закрыт, во всех других случаях open
- Т.к. формат не предусматривает передачи модификаторов, модификаторы передаются как обычные товарные строки
- В поле summa для оплаты попадает сумма оплаты без сдачи. Чтобы рассчитать сумму полученных денег нужно сложить summa и change
Примеры
Запрос
{
"command":"lock_order",
"user_id":"4:1:0:14",
"order_uid":"ac09d9d8-c206-4291-bd3f-e59c46f71b42"
}
Ответ успех
{
"status" : "ok",
"order" : {Заказ в формате ORDER_JSON}
}
Ответ ошибка
{
"status" : "error",
"message" : "Пользователь с таким id не существует"
}
Печать счета print_bill
Описание
Делает тоже самое что и add_new_order, только еще печатает счет
Запрос и ответы точно такие же как и в add_new_order (только command = print_bill)
Разблокировка заказа unlock_order
Описание
- Перед выходом из заказа, JPOS отправляет в Юпитер запрос unlock_order.
- Если переданный заказ заблокирован указанным сотрудником, то Юпитер снимает блокировку с заказа.
Примеры
Запрос
{
"command":"unlock_order",
"user_id":"4:1:0:14",
"order_uid":"ac09d9d8-c206-4291-bd3f-e59c46f71b42"
}
Ответ успех
{
"status" : "ok"
}
Ответ ошибка
{
"status" : "error",
"message" : "Пользователь с таким id не существует"
}
Система JUPITER www.jupiter.systems (с) 2024г.
Нет комментариев