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г.
Нет комментариев