Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия |
external:procart:02_procart_api [2022/09/28 16:21] – [Классификации блюд] Александр Ильин | external:procart:02_procart_api [2025/03/28 08:55] (текущий) – Евгений Горносталь |
---|
====== ProCart API ====== | ====== ProCart API ====== |
==== Общий принцип работы ==== | ===== Общий принцип работы ===== |
Перед работой с API рекомендуется ознакомиться с данной статьей, для понимания основных принципов работы модуля ProCart и возможностей его API. | Перед работой с API рекомендуется ознакомиться с данной статьей, для понимания основных принципов работы модуля ProCart и возможностей его API. |
| |
Дополнительно возможна подписка внешней системы на push уведомления от модуля **ProCart** по факту изменения статуса заказа (удален, пречек, оплачен) | Дополнительно возможна подписка внешней системы на push уведомления от модуля **ProCart** по факту изменения статуса заказа (удален, пречек, оплачен) |
| |
==== Работа со столами ==== | ===== Работа со столами ===== |
По умолчанию все заказы из внешней системы создаются на выделенный стол (**код** нужного стола указывается в настройках ProCart). | По умолчанию все заказы из внешней системы создаются на выделенный стол (**код** нужного стола указывается в настройках ProCart). |
Если в работе находится несколько заказов одновременно, то они будут создаваться на дополнительных столах. | Если в работе находится несколько заказов одновременно, то они будут создаваться на дополнительных столах. |
При большом количестве внешних заказов имеет смысл создать отдельный "план зала" и в рамках него завести стол (столы) для приема внешних заказов. | При большом количестве внешних заказов имеет смысл создать отдельный "план зала" и в рамках него завести стол (столы) для приема внешних заказов. |
При такой настройке на кассе можно будет легко переключаться между заказами в зале и заказами из внешних источников, просто переключая залы. | При такой настройке на кассе можно будет легко переключаться между заказами в зале и заказами из внешних источников, просто переключая залы. |
==== Классификации блюд ==== | ===== Классификации блюд ===== |
В системе r_keeper дерево меню может иметь сложную древовидную структуру с большим уровнем вложенности веток. Такая форма удобна для работы на кассе, но не нужна при работе с внешними источниками. Более того, далеко не все блюда, которые заведены в меню, должны быть доступны для продажи во внешнем источнике. | В системе r_keeper дерево меню может иметь сложную древовидную структуру с большим уровнем вложенности веток. Такая форма удобна для работы на кассе, но не нужна при работе с внешними источниками. Более того, далеко не все блюда, которые заведены в меню, должны быть доступны для продажи во внешнем источнике. |
| |
| |
| |
==== Категория заказа ==== | ===== Категория заказа ===== |
В системе **r_keeper** возможность заказа конкретных блюд, а так же цена на них может зависеть от различных факторов, например, "категории заказа" (КЗ). | В системе **r_keeper** возможность заказа конкретных блюд, а так же цена на них может зависеть от различных факторов, например, "категории заказа" (КЗ). |
В настройках **ProCart** указывается код основной категории заказа. Запрос **/getmenu** возвращает блюда и цены для данной категории заказа. | В настройках **ProCart** указывается код основной категории заказа. Запрос **/getmenu** возвращает блюда и цены для данной категории заказа. |
В запросе **/getmenu** будут возвращаться цены на блюда по типу цены "Доставки". | В запросе **/getmenu** будут возвращаться цены на блюда по типу цены "Доставки". |
Гость наполнил корзину блюда, перешел в оформление заказа и указал "Самовывоз". | Гость наполнил корзину блюда, перешел в оформление заказа и указал "Самовывоз". |
В запросе **/validate** необходимо указать верный код категории заказа (код Самовывоза) и тогда в ответе вернутся цены, по которым можно продать эти блюда на самовывоз. | В запросе **/validate** (а далее в **/postorder**) необходимо указать верный код категории заказа (код Самовывоза) и тогда в ответе вернутся цены, по которым можно продать эти блюда на самовывоз. |
| |
**Пример №2:** | **Пример №2:** |
При валидации корзины и создании заказа на самовывоз, в запросах **/validate** и **/postorder** дополнительно передаем код соответствующей категории заказа (самовывоз). В итоге будет создан стол с блюдами и в него автоматически будет добавлена соответствующая скидка. | При валидации корзины и создании заказа на самовывоз, в запросах **/validate** и **/postorder** дополнительно передаем код соответствующей категории заказа (самовывоз). В итоге будет создан стол с блюдами и в него автоматически будет добавлена соответствующая скидка. |
| |
==== Комментарии к заказу ==== | ===== Комментарии к заказу ===== |
В системе r_keeper у заказов есть свойство, которое можно использовать для хранения дополнительной текстовой информации (комментария к заказу), но к сожалению, длина этого поля крайне мала (30-100 символов) и зачастую вся необходимая доп. информация по заказу туда не помещается. | В системе r_keeper у заказов есть свойство, которое можно использовать для хранения дополнительной текстовой информации (комментария к заказу), но к сожалению, длина этого поля крайне мала (30-100 символов) и зачастую вся необходимая доп. информация по заказу туда не помещается. |
В рамках ProCart эта проблема решена следующим образом: В запросе **/postorder** внешняя система может передать текстовый комментарий. | В рамках ProCart проблема длинных комментариев решена следующим образом: В запросе **/postorder** внешняя система может передать текстовый комментарий (поле "comment"). |
Он будет сохранен в локальной базе ProCart и связан с реальным заказом в системе r_keeper. | Он будет сохранен в локальной базе ProCart и связан с реальным заказом в системе r_keeper. |
В печатных формах системы r_keeper (сервис-чек, пречек, чек) можно добавить небольшой скрипт, который при помощи служебного метода **/print_info** будет получать комментарий по конкретному заказу из БД ProCart и выводить его на печать. | В печатных формах системы r_keeper (сервис-чек, пречек, чек) можно добавить небольшой скрипт, который при помощи служебного метода **/internal/print_info** будет получать комментарий по конкретному заказу из БД ProCart и выводить его на печать. |
| |
==== Заказы с Оплатой ==== | Так же в запросе **/postorder** есть поле "short_external_info", куда можно передать краткую информацию о заказе (идентификатор заказа во внешней системе, тел или ФИО гостя и т.п.) |
| Этот комментарий (30 символов) будет виден персоналу на экране кассы r_keeper (в списке заказов) и может помочь быстрее сориентироваться и найти нужный заказ. |
| |
| ===== Комментарии к блюду в заказе (открытый модификатор) ===== |
| **С версии 1.5.0.30** |
| В рамках ProCart к блюду может быть прикреплен комментарий. Для этого в запросе **/postorder**, для элемента меню, можно передать комментарий в поле "item_comment". Данный комментарий будет виден персоналу на экране кассы, как модификатор для блюда. |
| Данный комментарий, имеет ограничение на длину от 1 до 255 символов. |
| **Важно!** [[https://wiki.carbis.ru/external/procart/01_setup/01_rkeeper_settings#настройка_общего_текстового_модификатора_для_комментариев_к_блюду_опционально|Требуется дополнительная настройка в r_keeper]] |
| ===== Заказы с оплатой ===== |
Через систему **ProCart** можно создать в **r_keeper** заказ в котором есть только блюда (нет оплат) и далее этот заказ будет рассчитан сотрудником на кассе как обычно. | Через систему **ProCart** можно создать в **r_keeper** заказ в котором есть только блюда (нет оплат) и далее этот заказ будет рассчитан сотрудником на кассе как обычно. |
Также, при создании заказа (метод **/postorder**), можно передать информацию об оплатах этого заказа. | Также, при создании заказа (метод **/postorder**), можно передать информацию об оплатах этого заказа. |
Все переданные оплаты добавляются в заказ как "предоплата". Если заказ полностью оплачен во внешней системе, то на кассе r_keeper будет создан стол с блюдами, внесена предоплата переданными валютами. Заказ будет открыт на кассе пока его не завершит сотрудник ресторана. Метод учета предоплат (фискально или нет) настраивается в рамках причины внесения предоплат в r_keeper. | Все переданные оплаты добавляются в заказ как "предоплата". Если заказ полностью оплачен во внешней системе, то на кассе r_keeper будет создан стол с блюдами, внесена предоплата переданными валютами. Заказ будет открыт на кассе пока его не завершит сотрудник ресторана. Метод учета предоплат (фискально или нет) настраивается в рамках причины внесения предоплат в r_keeper. |
| |
==== Скидки (суммовая и словарная) ==== | ===== Скидки (суммовая и словарная) ===== |
Модуль **ProCart** поддерживает работы со скидками. | Модуль **ProCart** поддерживает работы со скидками. |
Это может быть словарная скидка. "Словарная" - значит заранее настроенная в редакторе меню r_keeper, с заранее известным процентом и другими тонкими настройками. В запросах **/validate** и **/postorder** нужно передать код скидки (можно передать несколько словарных скидок в один заказ), существующей в кассовой системе. Применимость данной скидки для текущего заказа определяется на стороне кассовой системы (с учетом стола, категории заказа, времени суток, правил комбинации с другими скидками и т. п.). В ответе на запросы будет возвращен заказ пересчитанный со всеми возможными скидками. | Это может быть словарная скидка. "Словарная" - значит заранее настроенная в редакторе меню r_keeper, с заранее известным процентом и другими тонкими настройками. В запросах **/validate** и **/postorder** нужно передать код скидки (можно передать несколько словарных скидок в один заказ), существующей в кассовой системе. Применимость данной скидки для текущего заказа определяется на стороне кассовой системы (с учетом стола, категории заказа, времени суток, правил комбинации с другими скидками и т. п.). В ответе на запросы будет возвращен заказ пересчитанный со всеми возможными скидками. |
Такой сценарий можно применять для случая когда гость тратит в оплату заказа какие-то купоны или бонусы. Тогда сумма всех этих скидок передается одной строкой и применяется на кассе r_keeper в виде суммовой скидки. | Такой сценарий можно применять для случая когда гость тратит в оплату заказа какие-то купоны или бонусы. Тогда сумма всех этих скидок передается одной строкой и применяется на кассе r_keeper в виде суммовой скидки. |
| |
Также поддержана работа с автоматическими скидками кассы r_keeper. Если в ресторане используются какие-то автоматические скидки по определенным правилам, и заказ сделанный внешней системой удовлетворяет этим условиям, запросу **/validate** и **/postorder** вернут содержимое заказа с учетом автоматических скидок. | Также поддержана работа с автоматическими скидками кассы r_keeper. Если в ресторане используются какие-то автоматические скидки по определенным правилам, и заказ сделанный внешней системой удовлетворяет этим условиям, то запросы **/validate** и **/postorder** вернут содержимое заказа с учетом автоматических скидок. |
| |
==== Поддержка стоп-листов и ограниченных блюд ==== | ===== Наценка суммовая ===== |
| Модуль **ProCart** поддерживает работу с наценками, от версии ProCart 1.9.1.64. |
| Для суммовой наценки поддержана работа с произвольной (суммовыми) наценкой. В данном сценарии сумма наценки и правила ее применения находятся на стороне внешней системы, в запросах **/validate** и **/postorder** передается итоговая сумма наценки, рассчитанная внешней системой. |
| |
| Пример того, как в запросе в поле "discount" можно передать одновременно Скидку словарную (Ref), Скидку суммовую(Sum) и Наценку суммовую(MARKUPSUM): |
| <code> |
| "discounts": [ |
| { |
| 'type': 'REF', |
| 'code': 10, |
| }, |
| { |
| "type":"SUM", |
| "sum": 120, |
| "code": 1137 |
| }, |
| { |
| "type":"MARKUPSUM", |
| "sum": 40, |
| "code": 1143 |
| } |
| ] |
| </code> |
| |
| |
| |
| ===== Поддержка стоп-листов и ограниченных блюд ===== |
Запрос **/getmenu** возвращает список блюд с учетом стоп-листов и остатка (если таковые введены на кассе **r_keeper**) | Запрос **/getmenu** возвращает список блюд с учетом стоп-листов и остатка (если таковые введены на кассе **r_keeper**) |
Таким образом, если на кассе какое то блюдо поставлено в стоп-лист, то внешняя система получит эту информацию. | Таким образом, если на кассе какое то блюдо поставлено в стоп-лист, то внешняя система получит эту информацию. |
Запросы **/validate** и **/postorder** также учитывают стоп-листы и ограниченные остатки. Т. е. нельзя провалидировать и создать заказ содержащий в себе блюда из стоп-листа и нельзя сделать заказ, в котором указано количество порций больше, чем остаток на кассе. | Запросы **/validate** и **/postorder** также учитывают стоп-листы и ограниченные остатки. Т. е. нельзя провалидировать и создать заказ содержащий в себе блюда из стоп-листа и нельзя сделать заказ, в котором указано количество порций больше, чем остаток на кассе. |
| |
==== Оповещения о заказах ==== | ===== Оповещения о заказах ===== |
При работе с модулем ProCart персонал заведения может получать уведомления о новых заказах через механики внешних систем (push уведомления в приложении, письма на почту, СМС сообщения и т. п.) | При работе с модулем ProCart персонал заведения может получать уведомления о новых заказах через механики внешних систем (push уведомления в приложении, письма на почту, СМС сообщения и т. п.) |
Когда заказ создан в кассовой системе, автоматически происходит сервис печать (по настройкам r_keeper)/ Этот механизм можно дополнительно задействовать для уведомления персонала, если в используемую схему печати добавить еще одно правило, согласно которому, все заказы полученные из внешней системы будут печататься по отдельному макету сервис-печати на выделенный принтер. | Когда заказ создан в кассовой системе, автоматически происходит сервис печать (по настройкам r_keeper). Этот механизм можно дополнительно задействовать для уведомления персонала, если в используемую схему печати добавить еще одно правило, согласно которому, все заказы полученные из внешней системы будут печататься по отдельному макету сервис-печати на выделенный принтер. |
| |
| ===== Описание блюда ===== |
| Описание блюда передаётся при запросе меню. Логика этого поля имеет постоянное свойство и дополнительно не настраивается. В приоритете в ProCart поле "description"(описание блюда) заполняется значение из поля "Комментарий" из карточки блюда в r_keeper, если это поле пустое, то заполняется из поля "Рецепт". Если на стороне r_keeper оба поля не заполнены, то и в ProCart в поле "description" будет пустым. |
| <hidden> |
| Пример поля на стороне Procart: |
| {{ :external:procart:2025-03-28_12-33-07_2_.png |}} |
| Пример передаваемых полей на стороне r_keeper (приоритет у поля "Комментарий") |
| {{ :external:procart:2025-03-28_12-35-43_2_.png |}} |
| </hidden> |
| |
| |