© Tillypad, 2004-2022

© Tillypad, 2004-2022
POST
/post-guest
{ "gest_ID": "BFA83CA6-A5C9-8945-94FD-32CB40880933" }
В секции BODY
запроса содержимое гостевого счета в иерархическом виде. В секции HEADER
необходимо указать "Content-Type: application/json"
.
curl \ -H "Content-Type: application/json" \ -d @guest_in.json \-o out.json \
--url "http://89.22.216.169:8090/post-guest"
Гостевой счет на входе:
{ "gest_gsst_ID": 0, "gest_Comment": ", Сдача с суммы:3000, К 12-00 часам ", "gest_DateOpen": "2020-10-12T12:00:00", "gest_Count": "20", "gest_dvsn_ID": "274013BE-AA55-294F-ADC6-99DE44BEA4E1", "gest_ClientPhone": "999999999", "gest_Name": "S404095", "gest_ClientAddress": "<?xml version='1.0'?>\n<Address>\n <Village Caption='Населенный пункт' Key='True'>Санкт-Петербург</Village>\n <Street Caption='Улица' Key='True'>Ткачей</Street>\n <House Caption='Дом' Key='True'>101</House>\n <Building Caption='Корпус' Key='True'>А</Building>\n <Apartment Caption='Квартира' Key='True'></Apartment>\n <Entrance Caption='Подъезд' Key='True'></Entrance>\n <Floor Caption='Этаж' Key='True'></Floor>\n <Intercom Caption='Домофон' Key='True'></Intercom>\n <Comment Caption='Комментарий'></Comment>\n</Address>", "gest_ClientName": "Евгения", "gest_IsDelivery": "1", "guestDeliveries": { "gsdlv_dlvrst_ID": 0, "gsdlv_dlvrmt_ID": 1, "gsdlv_pytp_ID_Prepaid": "0789C108-6C80-BC47-BB39-A13C7CDDD030", "gsdlv_CashAmount": "3000", "gsdlv_cncpt_ID": "15761EEA-AD73-BA46-AE1E-5F288CB9BE97", "gsdlv_Date": "2020-10-12T10:20:14", "gsdlv_IsAutoStart": 0, "gsdlv_SendSooner": 0, "gsdlv_NeedConfirmation": 1, "gsdlv_GeoRegionID": "606", "gsdlv_GeoCoordinates": "59.892383, 30.421824" }, "orders": [ { "ordr_orst_ID": 0, "ordr_Date": "2020-10-12T10:20:14", "ordr_Name": "S404095", "orderItems": [ { "orit_mitm_ID": "708E39BB-F1E6-E546-B7A2-4568A30B3FA4", "orit_mvtp_ID": "2FD4FA63-12A1-4FAD-B215-607460886D82", "orit_Volume": 1, "orit_Count": "1", "orit_Price": "480", "orit_VAT": 0, "orit_PriceVat": 0 }, { "orit_mitm_ID": "6D572995-2636-194D-ADEF-CFD2A87E288F", "orit_mvtp_ID": "2FD4FA63-12A1-4FAD-B215-607460886D82", "orit_Volume": 1, "orit_Count": "1", "orit_Price": "490", "orit_VAT": 0, "orit_PriceVat": 0 }, { "orit_mitm_ID": "0702420B-F65C-BA49-B099-D1870855F990", "orit_mvtp_ID": "2FD4FA63-12A1-4FAD-B215-607460886D82", "orit_Volume": 1, "orit_Count": "1", "orit_Price": "490", "orit_VAT": 0, "orit_PriceVat": 0 }, { "orit_mitm_ID": "88F17CAB-4B47-294D-AAFE-D760B47A1540", "orit_mvtp_ID": "2FD4FA63-12A1-4FAD-B215-607460886D82", "orit_Volume": 1, "orit_Count": "1", "orit_Price": "450", "orit_VAT": 0, "orit_PriceVat": 0 }, { "orit_mitm_ID": "025D6A2F-9136-FF4E-93D3-912936643268", "orit_mvtp_ID": "2FD4FA63-12A1-4FAD-B215-607460886D82", "orit_Volume": 1, "orit_Count": "1", "orit_Price": "470", "orit_VAT": 0, "orit_PriceVat": 0 }, { "orit_mitm_ID": "289066B9-823F-6D4E-A1FA-987BBCEEAAA5", "orit_mvtp_ID": "2FD4FA63-12A1-4FAD-B215-607460886D82", "orit_Volume": 1, "orit_Count": "1", "orit_Price": "420", "orit_VAT": 0, "orit_PriceVat": 0 } ] } ] }
Ответ:
{"gest_ID":"0AF8BD5C-2C23-B54A-9A6A-B64ECA8CEED9"}
Если приходит заказ со статусом «Зарегистрирован» (ordr_orst_ID = 1), то заказу прописывается ссылка на текущий торговый день подразделения и создается пречек.
Если у подразделения не оказалось открытого торгового дня, функция возвращает ошибку и клиентское приложение может:
или сохранить гостевой счет в качестве черновика,
или переопределить подразделение.
Пример ошибки:
{{ "timestamp": 1501692189085, "status": 500, "error": "Internal Server Error", "exception": "com.tillypad.lib.client.SQLException", "message": "[Microsoft][ODBC SQL Server Driver][SQL Server]Проверка что у завершаемого заказа проставлен торговый день и подразделение ", "path": "/post-guest", "errorcode": 130228}
Любое время, которое передается в счет, будет записано в базу данных, как передано, без каких-либо изменений. Если время не передано, будет использовано время сервера приложений, с которым работает сервис.
Чтобы заказ приходил сразу на подразделение, минуя кол-центр, и был в статусе «Ждет начала приготовления» нужно:
Чтобы с сайта он приходил в статусе «Ждет подтверждения исполнителя».
Чтобы на подразделении-исполнителе была запущена задача обработки статуса «Ждет начала приготовления», которая автоматически переводит счет в статус «Ждет начала приготовления».
Чтобы на подразделении-исполнителе была запущена задача обработки статуса «Начали готовить», которая в нужный момент автоматически переводит статус счета в «Начали готовить».
В свою очередь, чтобы с сайта заказ приходил в статусе «Ждет подтверждения исполнителя» нужно:
Выставить gsdlv_dlvrst_ID = 2
Не допустить попадания элементов стоп-листа в заказ.
Если заказ – доставка, а не самовывоз, должно быть заполнено поле gsdlv_GeoCoordinates.
Заказ должен идти не на подразделение кол-центра.
DELETE
/delete-guest
Идентификатор гостевого счета.
Для успешного удаления у счета не должно быть операций авторизации и фискализации, пречеки счета не должны быть общими с другими счетами. Записи в контролируемые операции не ведутся, счет, его пречеки, чеки удаляются полностью.
http://127.0.0.1:8090/delete-guest?id=8051B912-B90C-1045-9AA9-05A049551B57
Возвращается http-код 200
, если регистрация успешна, иначе http-ответ 500
с текстом ошибки.
{ поля таблицы tp_Guests "guestDeliveries": {поля таблицы tp_GuestDeliveries}, --опционально "guestSalePrivileges": [ {поля таблицы tp_GuestSalePrivileges}, { } ], --опционально "orders": [ { поля таблицы tp_Orders "orderItems": [ { поля таблицы tp_OrderItems "orderItems": [{...},{...}], --опционально. Модификаторы родительского элемента. У модификаторов в свою очередь тоже могут быть модификаторы. "orderItemDiscounts": [{поля таблицы tp_OrderItemDiscounts}, {...}] }, ... ] }, ... ], "guestDiscountPointOperations": [{поля таблицы tp_GuestDiscountPointOperations}, { }], --опционально. "notes": [{поля таблицы tp_Notes},{ },] -- опционально }
Таблица tp_Guests
Поле | Обязательное | Заполняется на сервере | Заполняется на клиенте |
---|---|---|---|
gest_ID | ✔ | ✔ | ✔ |
gest_dvsn_ID | ✔ | ✔ | ✔ |
gest_gest_ID_Original | ✔ | ||
gest_sprv_ID | ✔ | ||
gest_clnt_ID | ✔ | ||
gest_idnt_ID | ✔ | ||
gest_usr_ID | ✔ | ||
gest_dev_ID | ✔ | ||
gest_plac_ID | ✔ | ||
gest_lggr_ID | ✔ | ||
gest_gsst_ID | ✔ | ✔ | |
gest_dev_ID_SalePrivilege | ✔ | ||
gest_DateOpen | ✔ | ✔ | ✔ |
gest_DateClose | ✔ | ||
gest_Name | ✔ | ✔ | |
gest_ClientName | ✔ | ||
gest_ClientPhone | ✔ | ||
gest_ClientEMail | ✔ | ||
gest_ClientAddress | ✔ | ||
gest_PlaceNumber | ✔ | ||
gest_Count | ✔ | ||
gest_Comment | ✔ |
Таблица tp_GuestSalePrivileges
Поле | Обязательное | Заполняется на сервере | Заполняется на клиенте |
---|---|---|---|
gsprv_ID | ✔ | ✔ | ✔ |
gsprv_gest_ID | ✔ | ✔ | ✔ |
gsprv_sprv_ID | ✔ |
Таблица tp_GuestDeliveries
Поле | Обязательное | Заполняется на сервере | Заполняется на клиенте |
---|---|---|---|
gsdlv_gest_ID | ✔ | ✔ | |
gsdlv_usr_ID_Courier | ✔ | ||
gsdlv_dlvrst_ID | ✔ | ✔ | |
gsdlv_dlvrmt_ID | ✔ | ✔ | |
gsdlv_cncpt_ID | ✔ | ||
gsdlv_pytp_ID_Prepaid | ✔ | ||
gsdlv_Date | ✔ | ✔ | ✔ |
gsdlv_DateDelivered | ✔ | ||
gsdlv_IsAutoStart | ✔ | ✔ | |
gsdlv_CookingTime | ✔ | ||
gsdlv_DeliveryTime | ✔ | ||
gsdlv_SendSooner | ✔ | ✔ | |
gsdlv_NeedConfirmation | ✔ | ✔ | |
gsdlv_PayDescription | ✔ | ||
gsdlv_GeoRegionID | ✔ | ||
gsdlv_GeoCoordinates | ✔ | ||
gsdlv_ExtraInfo | ✔ |
Таблица tp_Orders
Поле | Обязательное | Заполняется на сервере | Заполняется на клиенте |
---|---|---|---|
ordr_ID | ✔ | ✔ | |
ordr_gest_ID | ✔ | ✔ | |
ordr_usr_ID | ✔ | ✔ | ✔ |
ordr_usr_ID_Operator | ✔ | ✔ | ✔ |
ordr_dev_ID | ✔ | ✔ | ✔ |
ordr_dvsn_ID | ✔ | ✔ | ✔ |
Таблица tp_OrderItems
Поле | Обязательное | Заполняется на сервере | Заполняется на клиенте | Источник данных |
---|---|---|---|---|
orit_ID | ✔ | ✔ | ||
orit_ordr_ID | ✔ | ✔ | ||
orit_master_ID | ✔ | |||
orit_mitm_ID | ✔ | ✔ | mitm_ID | |
orit_mvtp_ID | ✔ | ✔ | mitm_mvtp_ID | |
orit_mmgr_ID | ✔ | |||
orit_slgr_ID | ✔ | ✔ | ||
orit_sprv_ID | ✔ | |||
orit_orpi_ID | ✔ | |||
orit_pcit_ID | ✔ | |||
orit_VolumeID | ✔ | ✔ | mitm_Volume | |
orit_Count | ✔ | ✔ | ||
orit_Price | ✔ | ✔ | mitm_Price | |
orit_PriceDiscount | ✔ | |||
orit_PriceMargin | ✔ | |||
orit_VAT | ✔ | ✔ | mitm_Vat | |
orit_PriceVat | ✔ | ✔ | ✔ | |
orit_Course |
Таблица tp_OrderItemDiscounts
Поле | Обязательное | Заполняется на сервере | Заполняется на клиенте |
---|---|---|---|
oritd_ID | ✔ | ✔ | |
oritd_orit_ID | ✔ | ✔ | |
oritd_dstp_ID | ✔ | ✔ | |
oritd_Price | ✔ | ✔ | |
oritd_PriceDiscount | ✔ | ✔ | |
oritd_PriceMargin | ✔ | ✔ | |
oritd_Order | ✔ | ✔ |
Таблица tp_GuestDiscountPointOperations
Поле | Обязательное | Заполняется на сервере | Заполняется на клиенте |
---|---|---|---|
gdpo_ID | ✔ | ✔ | |
gdpo_gest_ID | ✔ | ✔ | |
gdpo_dspt_ID | ✔ | ✔ | |
gdpo_gdpot_ID | ✔ | ✔ | ✔ |
gdpo_Date | ✔ | ✔ | ✔ |
gdpo_Name | ✔ | ✔ | ✔ |
gdpo_Description | ✔ | ||
gdpo_Value | ✔ | ✔ |
Поле | Название | Описание |
---|---|---|
gsdlv_gest_ID | Гостевой счет доставки (tp_Guests) | |
gsdlv_usr_ID_Courier | Курьер | Курьер для доставки заказа. (tp_Users) |
gsdlv_dlvrst_ID | Статус доставки (tp_DeliveryStates) | |
| ||
gsdlv_dlvrmt_ID | Способ доставки (tp_DeliveryMethods) | |
| ||
gsdlv_cncpt_ID | Концепция | Концепция (tp_Conceptions) |
gsdlv_pytp_ID_Prepaid | Тип интернет-оплаты | Если тип оплаты указан, то считается что сумма счета доставки полностью им оплачена. (tp_PayTypes) |
gsdlv_Date | Дата оформления | Дата создания счета (открытия карточки доставки или приема звонка). |
gsdlv_DateDelivered | Дата фактической доставки | Дата присвоения статуса доставке «Закрыта». |
gsdlv_IsAutoStart | Начало готовки | Признак автоматического перевода счета доставки в статус «Начали готовить» при наступлении времени начала приготовления. |
Если в подразделении указан сегмент обработки статуса «Начали готовить», то при наступлении момента времени «время доставки минус время в пути минус время готовки» системной задачей счет доставки переводится в статус «Начали готовить» и производится печать сервис-марок на кухне. | ||
gsdlv_CookingTime | Время готовки | Временной интервал необходимый для приготовления блюд в заказе. Определяется автоматически исходя из значений геокодера по номерам зон доставки, либо по настройкам подразделения (tp_Divisions.dvsn_CookingTime). Может изменяться вручную для каждого счета. Участвует в расчете ближайшего времени доставки. |
gsdlv_DeliveryTime | Время в пути | Временной интервал необходимый для доставки заказа клиенту. Определяется автоматически исходя из значений геокодера по номерам зон доставки, либо по настройкам подразделения (tp_Divisions.dvsn_DeliveryTime). Может изменяться вручную для каждого счета. Участвует в расчете ближайшего времени доставки. |
gsdlv_SendSooner | «Ближайшее» время доставки | Флаг, означающий, что заказ создан на «ближайшее время». |
Ближайшее время доставки означает, что заказ необходимо доставить не позднее (можно раньше) указанного времени. Если клиент указывает собственное время, то флаг сбрасывается в 0, если время доставки считается автоматически, то флаг = 1. Время доставки сохраняется как дата открытия гостевого счета (tp_Guests.gest_DateOpen) Ближайшее время доставки рассчитывается:
| ||
gsdlv_NeedConfirmation | Требуется подтверждение | Флаг, указывающий, что требуется подтверждение клиента. Оператор, при получении заказа, должен перезвонить клиенту для уточнения заказа. |
gsdlv_CashAmount | Сдача с | Сумма, с которой потребуется сдача при оплате |
gsdlv_PayDescription | Информация об оплате | Текстовый комментарий для оператора доставки, в котором указывается как собирается расплачиваться клиент наличными или банковской картой. И необходимая сумма сдачи с наличных. |
gsdlv_GeoRegionID | Номер зоны | Номер зоны доставки, указанный в параметрах геокодера (geoRegionID). |
gsdlv_GeoCoordinates | Координаты адреса | Координаты адреса. Возвращаются геокодером. |
gsdlv_ExtraInfo | Дополнительные параметры доставки | Дополнительные параметры доставки. |
Состав дополнительных полей задается в системных настройках программы Тиллипад менеджер, аналогично структуре адреса. | ||
gsdlv_CourierComment | Информация о курьере |
POST/GET
/calc-discount
curl \ -H "Content-Type: application/json" \ -d @CalcDiscount_in.json \-o CalcDiscount_out.json \
--url "http://89.22.216.169
В секции BODY
запроса содержимое гостевого счета в иерархическом виде, в секции HEADER
необходимо указать "Content-Type: application/json"
.
{ "gest_DateOpen": "2017-07-25T07:11:04", "gest_sprv_ID": "D572B760-99CB-C64D-9CE0-77FD5FD1171E", "gest_clnt_ID": "7F944ABD-0729-D948-A052-531D74B3482F", "gest_Name": "11", "orders": [ { "ordr_Date": "2017-07-25T07:11:04", "ordr_Name": "22", "orderItems": [ { "orit_mitm_ID": "2A8BA73F-8DC0-F74C-8BA8-B081FEF9C2CC", "orit_Volume": 1, "orit_Count": 2, "orit_Price": 10.5, "orderItems": [ { "orit_mitm_ID": "6D6EC248-EC86-5F4E-84B3-C450C1919221", "orit_Price": 20.5, "orit_mmgr_ID": "93BF901D-ECAB-CA4A-9FCC-DA9E99C805DF", "orit_Volume": 1, "orit_Count": 1 } ] }, { "orit_mitm_ID": "6D6EC248-EC86-5F4E-84B3-C450C1919221", "orit_Volume": 1, "orit_Count": 2, "orit_Price": 30.5 } ] } ] }
В секции BODY
запроса содержимое гостевого счета в иерархическом виде.
{ "gest_ID": "00000000-FFFF-FFFF-FFFF-FFFFFFFFFFFF", "gest_dvsn_ID": "7BF665B0-2793-4B26-946E-D03A82E7EECB", "gest_sprv_ID": "D572B760-99CB-C64D-9CE0-77FD5FD1171E", "gest_clnt_ID": "7F944ABD-0729-D948-A052-531D74B3482F", "gest_usr_ID": "5D7FEB83-5686-4DCB-9F09-C64C51B0A41D", "gest_dev_ID": "F721D056-4AAF-4EF1-86F3-57A1BF588FDA", "gest_gsst_ID": 0, "gest_DateOpen": "2017-07-25T07:11:03", "gest_Name": "11", "orders": [ { "ordr_ID": "00000001-FFFF-FFFF-FFFF-FFFFFFFFFFFF", "ordr_gest_ID": "00000000-FFFF-FFFF-FFFF-FFFFFFFFFFFF", "ordr_usr_ID": "5D7FEB83-5686-4DCB-9F09-C64C51B0A41D", "ordr_usr_ID_Operator": "5D7FEB83-5686-4DCB-9F09-C64C51B0A41D", "ordr_dev_ID": "F721D056-4AAF-4EF1-86F3-57A1BF588FDA", "ordr_dvsn_ID": "7BF665B0-2793-4B26-946E-D03A82E7EECB", "ordr_orst_ID": 0, "ordr_Date": "2017-07-25T07:11:03", "ordr_Name": "22", "orderItems": [ { "orit_ID": "00000002-FFFF-FFFF-FFFF-FFFFFFFFFFFF", "orit_ordr_ID": "00000001-FFFF-FFFF-FFFF-FFFFFFFFFFFF", "orit_mitm_ID": "2A8BA73F-8DC0-F74C-8BA8-B081FEF9C2CC", "orit_Volume": 1, "orit_Count": 2, "orit_Price": 9.5, "orit_PriceDiscount": 1, "orit_PriceMargin": 0, "orit_VAT": 0, "orit_PriceVat": 0, "orit_Order": 0, "orit_IsUnspentCredit": false, "orderItems": [ { "orit_ID": "00000003-FFFF-FFFF-FFFF-FFFFFFFFFFFF", "orit_ordr_ID": "00000001-FFFF-FFFF-FFFF-FFFFFFFFFFFF", "orit_master_ID": "00000002-FFFF-FFFF-FFFF-FFFFFFFFFFFF", "orit_mitm_ID": "6D6EC248-EC86-5F4E-84B3-C450C1919221", "orit_mmgr_ID": "93BF901D-ECAB-CA4A-9FCC-DA9E99C805DF", "orit_Volume": 1, "orit_Count": 1, "orit_Price": 19.5, "orit_PriceDiscount": 1, "orit_PriceMargin": 0, "orit_VAT": 0, "orit_PriceVat": 0, "orit_Order": 0, "orit_IsUnspentCredit": false, "orderItemDiscounts": { "oritd_ID": "9DBFE6DA-6395-4FBA-928C-C7C77708FE8F", "oritd_orit_ID": "00000003-FFFF-FFFF-FFFF-FFFFFFFFFFFF", "oritd_dstp_ID": "B9EC5388-9B01-8C47-932E-5F449A5EFA79", "oritd_Price": 19.5, "oritd_PriceDiscount": 1, "oritd_PriceMargin": 0, "oritd_Order": 1 } } ], "orderItemDiscounts": { "oritd_ID": "A6412C5A-5D10-466C-BBD6-0DC86E62F0AF", "oritd_orit_ID": "00000002-FFFF-FFFF-FFFF-FFFFFFFFFFFF", "oritd_dstp_ID": "B9EC5388-9B01-8C47-932E-5F449A5EFA79", "oritd_Price": 9.5, "oritd_PriceDiscount": 1, "oritd_PriceMargin": 0, "oritd_Order": 1 } }, { "orit_ID": "00000004-FFFF-FFFF-FFFF-FFFFFFFFFFFF", "orit_ordr_ID": "00000001-FFFF-FFFF-FFFF-FFFFFFFFFFFF", "orit_mitm_ID": "6D6EC248-EC86-5F4E-84B3-C450C1919221", "orit_Volume": 1, "orit_Count": 2, "orit_Price": 29.5, "orit_PriceDiscount": 1, "orit_PriceMargin": 0, "orit_VAT": 0, "orit_PriceVat": 0, "orit_Order": 1, "orit_IsUnspentCredit": false, "orderItemDiscounts": { "oritd_ID": "75BD2537-1554-440C-9478-50F40513F1BB", "oritd_orit_ID": "00000004-FFFF-FFFF-FFFF-FFFFFFFFFFFF", "oritd_dstp_ID": "B9EC5388-9B01-8C47-932E-5F449A5EFA79", "oritd_Price": 29.5, "oritd_PriceDiscount": 1, "oritd_PriceMargin": 0, "oritd_Order": 1 } } ] } ], "guestDiscountPointOperations": [ { "gdpo_ID": "A7F7763A-EAE8-4D97-8ACD-DCA14C4B051C", "gdpo_gest_ID": "00000000-FFFF-FFFF-FFFF-FFFFFFFFFFFF", "gdpo_dspt_ID": "A976C6ED-C511-4755-B942-636645A6A1B0", "gdpo_gdpot_ID": 3, "gdpo_Date": "2017-07-28T17:22:30", "gdpo_Name": "8", "gdpo_Value": 3 } ], "notes": [ { "note_ID": "97615696-6D7F-4B5A-AB00-3D2450F6E2B0", "note_nttp_ID": "5D0B2641-80FA-3743-A463-65FA674EF1DC", "note_Item_ID": "00000000-FFFF-FFFF-FFFF-FFFFFFFFFFFF", "note_obj_ID": "00000000-FFFF-FFFF-FFFF-FFFFFFFFFFFF", "note_tpsyso_ID": "7F40833C-3722-4502-BC11-45EC786A4621", "note_Date": "2017-07-28T17:22:30", "note_Value": { "value": "08200CFE-6E36-42B6-B1A1-D5653C88970B", "type": "guid" } } ] }
Черновой гостевой счет используется для расчета скидок сервисом до записи гостевого счета в базу .
– ещеЕсли у клиента есть скидка, прописанная в Тиллипад, при создании заказа на сайте, черновик этого гостевого счета обрабатывается сервисом Tillypad API с использованием метода Расчет скидок для чернового счета
. Данные после обработки сайт получает у Tillypad API – клиент видит скидку на сайте. По завершении оформления заказа на сайте, гостевой счет с сайта через Tillypad API передается в базу Тиллипад.
Скидки настроены в Тиллипад: правила продажи, программы лояльности, привилегии, типы дней. Эта информация (GUID) хранится в сервисе Tillypad API. На сайте клиент вводит заказ – информацию о заказе сайт передает в наш Tillypad API. В нашем Tillypad API есть метод обработки скидок Расчет скидок для чернового счета - Tillypad API отсылает в Тиллипад счет для обработки программы лояльности, но без записи в базу (это регулируется в методе - отрабатывает calc-discount
) - программа лояльности отрабатывает в большом Тиллипад - Tillypad API получает обработанный в Тиллипад счет и отдает сайту обсчитанный со скидкой счет – на сайте заказ со скидкой отображается для клиента. Далее сайт должен передать финализированный счет нашему Tillypad API без обсчета, в первозданном виде, чтобы придя в Тиллипад, он повторно со скидкой не обсчитался.
Привилегия указывается в gest_sprv_ID <guid>.
GET
/get-guest
Идентификатор счета
http://89.22.216.169:8090/get-guest?guest-id=E1D526BE-56F4-4C40-A169-2FEFD9D7679C
Полная структура гостевого счета.
{ gest_ID : "38450FC9-D852-2A40-8C78-9E925A35ABDC" gest_dvsn_ID : "7917642D-FF72-3B47-8ED8-04052BC144CB" gest_clnt_ID : "707A901A-D652-994C-9159-65D366C16FC6" gest_usr_ID : "942AF580-6AE9-4D89-9465-7A348FB604E9" gest_dev_ID : "D263A172-4D18-BC4A-AF9C-9CD5F61732E7" gest_gsst_ID : 4 gest_DateOpen : "2018-02-08T16:19:20" gest_Name : "в оплате" gest_Comment : "Первая строка Вторая строка" guestDeliveries gsdlv_gest_ID : "38450FC9-D852-2A40-8C78-9E925A35ABDC" gsdlv_dlvrst_ID : 0 gsdlv_dlvrmt_ID : 1 gsdlv_cncpt_ID : "B719499B-9DFC-BA47-B027-0F390028946E" gsdlv_Date : "2018-02-08T16:19:20" gsdlv_IsAutoStart : false gsdlv_SendSooner : false gsdlv_NeedConfirmation : false gsdlv_CashAmount : 1000.5 orders: [ { ordr_ID : "B0021CF2-8847-EA42-90DD-8515AFF3C03C" ordr_gest_ID : "38450FC9-D852-2A40-8C78-9E925A35ABDC" ordr_usr_ID : "942AF580-6AE9-4D89-9465-7A348FB604E9" ordr_usr_ID_Operator : "942AF580-6AE9-4D89-9465-7A348FB604E9" ordr_dev_ID : "D263A172-4D18-BC4A-AF9C-9CD5F61732E7" ordr_orst_ID : 0 ordr_Date : "2018-02-08T16:19:20" ordr_Name : "39", orderItems: [ { orit_ID : "65FBFF64-A33A-3844-BE41-8AB999E80D5A" orit_ordr_ID : "B0021CF2-8847-EA42-90DD-8515AFF3C03C" orit_mitm_ID : "B981C624-DA3A-F846-B35D-6D07E8A974FA" orit_mvtp_ID : "5224EB11-E8BE-1846-98C6-895B4B449B91" orit_slgr_ID : "25E3A39D-43E3-E840-8CCC-ED0DC12A4A37" orit_Volume : 1 orit_Count : 2 orit_Price : 315 orit_PriceDiscount : 0 orit_PriceMargin : 0 orit_VAT : 0 orit_PriceVat : 0 orit_Order : 1 orit_IsUnspentCredit : false }, { orit_ID : "42C053D6-8820-5047-8AC9-A0E20F52D040" orit_ordr_ID : "B0021CF2-8847-EA42-90DD-8515AFF3C03C" orit_mitm_ID : "D40DF381-FAE8-7243-8A72-7CEA2CFE02DA" orit_mvtp_ID : "5224EB11-E8BE-1846-98C6-895B4B449B91" orit_slgr_ID : "25E3A39D-43E3-E840-8CCC-ED0DC12A4A37" orit_Volume : 1 orit_Count : 1 orit_Price : 0 orit_PriceDiscount : 0 orit_PriceMargin : 0 orit_VAT : 0 orit_PriceVat : 0 orit_Order : 2 orit_IsUnspentCredit : false }, { orit_ID : "481AF606-C982-184F-BB3E-A59C1A853B38" orit_ordr_ID : "B0021CF2-8847-EA42-90DD-8515AFF3C03C" orit_mitm_ID : "FBE3CE39-94AA-D149-A993-1628A1092830" orit_mvtp_ID : "5224EB11-E8BE-1846-98C6-895B4B449B91" orit_slgr_ID : "25E3A39D-43E3-E840-8CCC-ED0DC12A4A37" orit_Volume : 1 orit_Count : 3 orit_Price : 375 orit_PriceDiscount : 0 orit_PriceMargin : 0 orit_VAT : 0 orit_PriceVat : 0 orit_Order : 0 orit_IsUnspentCredit : false } ] } ] }
GET
/get-guest-delivery-state
Идентификатор гостевого счета
http://89.22.216.169:8090/get-guest-delivery-state?guest-id=5C493318-3A9D-F649-A431-5C685D00C99E
{ "dlvrst_ID": 6, "dlvrst_Name": "Приготовлена, не отправлена" }
PUT
/update-guest-place
Идентификатор счета.
Идентификатор места размещения (plac_ID). Необязательный параметр.
Если не передан, у счета сбрасывается место размещения.
http://127.0.0.1:8090/update-guest-place?guest-id=8051B912-B90C-1045-9AA9-05A049551B57&place-id=BB43306C-F103-5D4C-BBEF-9A6A972C7A2C
Возвращает http-код 200
если успешно, иначе http-ответ 500
с текстом ошибки.
GET
/get-guest-info
Название гостевого счета.
Дата гостевого счета в формате yyyy-mm-dd
.
http://127.0.0.1:8090/get-guest-info?name=010&date=2020-09-16
[ { "ID": "4A40FFD0-AFFE-8028-D04F-C814FFBE337A", "Date": "2019-06-07T17:23:49", "Division": { "ID": "7917642D-FF72-3B47-8ED8-04052BC144CB", "Name": "WebService" }, "State": { "ID": 4, "Name": "В оплате" }, "Client": { "ID": "83BBEDEE-723B-AA6F-8B4E-A9FD3E75AEF0", "Name": "Client", "Phone": "+7(982)497-48-33" }, "Sum": 210.0 }, { "ID": "3B8759FF-E5AC-A746-D443-0B82AC215559", "Date": "2019-06-07T18:31:45", "Division": { "ID": "7917642D-FF72-3B47-8ED8-04052BC144CB", "Name": "WebService" }, "State": { "ID": 4, "Name": "В оплате" }, "Client": { "ID": "83BBEDEE-723B-AA6F-8B4E-A9FD3E75AEF0", "Name": "Client", "Phone": "+7(982)497-48-33" }, "Sum": 540.0 } ]
GET
/get-closed-guests-id
Дата начала диапазона в формате yyyy-mm-dd
. Обязательный параметр.
Дата окончания диапазона в формате yyyy-mm-dd
. Обязательный параметр.
Идентификатор подразделения гостевого счета. Необязательный параметр.
http://localhost:8090/get-closed-guests-id?from=2020-04-29T19:00:00&to=2021-01-18T19:00:00&division-id=7917642D-FF72-3B47-8ED8-04052BC144CB
["6F8D7E9E-E4AB-906D-0A4B-9C1FFE63E2B8","F61EFB81-DDC6-BB0D-0A4D-988354911405","59C6352E-AF9D-BB64-CB4D-3EC300DC0E61","06A40004-D1EE-AA34-2542-59933FF0CBF0","9D99F977-AD8D-9516-DB4E-308F0B5DE218","0B627124-AD6C-BFAF-DD46-CA68E546D57C","68A0305B-CB80-BB19-DB43-0662014DB535","0EE08163-1327-B507-C043-2152F41D3B54","2B27F3A2-ABEC-B9D9-A045-0A7B7EF8DDB9","44B6C52B-EC2F-A195-4240-05CEDA9040A5","4CE00136-4C23-B296-0842-5033970FBF6E","2F54C65C-9620-B3EA-7C4F-F677A99BB6D5","8B553148-B770-B112-4248-407A6B0B6AA0"]
POST
/operate-archive
Идентификатор подразделения гостевого счета.
Идентификатор торгового дня, если передан, то день будет закрыт.
http://127.0.0.1:8090/operate-archive?division-id=8051B912-B90C-1045-9AA9-05A049551B57
Если archive-id не был передан, то будет возвращен id или вновь созданного или открытого торгового дня.
Если день был успешно закрыт, то в ответе только http-status 200
.
{ "arch_ID": "863A1F77-B9E9-CA47-A144-F1E8492F2B02" }
Если была ошибка, вернется http-status 500
и данные ошибки.
POST
/pay-guest
{ "DiscountSums": [ { "type_ID": "60D367B5-15D2-D24D-8A74-A28F40C8CB9D", "sum": 20 } ], "AppliedDiscountSums": [ { "type_ID": "0412C97B-AF11-2447-88D9-B40FA0EB996D", "sum": 20 } ] }
или
"<Текст ошибки>"
Необязательный параметр запроса. Используется при пересчете скидки по баллам.
Значение флага DeletePrechecks | Описание | Примечание |
---|---|---|
0 | Не удалять | Применить абсолютную скидку Если нет элементов, не переданных в оплату (не включенных в пречек), выводится ошибка «Счет уже передан в оплату». |
1 | Удалить все пречеки | Применить абсолютную скидку Если есть хоть один пречек со статусом «Оплачен», выводится ошибка, что счет уже оплачен |
2 | Удалить неоплаченные пречеки | Применить абсолютную скидку @DiscountSum, отменив все пречеки оплата которых еще не началась. Остальные пречеки удаляются, если для них нет чеков |
В секции BODY
запроса два параметра Payment
и DiscountSum
(необязательный - при наличии), в секции HEADER
необходимо указать "Content-Type: application/json"
.
curl \ -H "Content-Type: application/json" \ -d @pay_in.json \-o out.json \
--url "http://89.22.216.169:8090/pay-guest?delete
Параметры на входе:
{ "Payment": { "gest_ID": "61BA736D-E34C-9C4B-97D3-E71BC2903915", Обязательный параметр "payType_ID": "CADA63B6-6833-574F-8427-AB98AE931814", Необязательный параметр "paySum": 3000 Необязательный параметр }, "DiscountSum": [ Необязательный параметр { "type_ID": "480F64A0-B729-3140-B796-678A1CD754F0", Необязательный параметр "sum": 100 Обязательный параметр } ] }
Ответ:
{ "DiscountSums": [ { "type_ID": "60D367B5-15D2-D24D-8A74-A28F40C8CB9D", "sum": 20 } ], "AppliedDiscountSums": [ {
или
"<Текст ошибки>"
Поле paySum необязательно для заполнения, если paySum не будет заполнено, то пречек и чек не будет сформирован
Поле payType_ID необязательно для заполнения, но если не заполнено поле оплачиваемого счета gsdlv_pytp_ID_Prepaid, то будет возвращена ошибка «Для проведения оплаты должен присутствовать либо payType_ID, либо gsdlv_pytp_ID_Prepaid». Также заполненное поле payType_ID записывает (или перезаписывает) значение поля gsdlv_gest_ID_Prepaid.
В pay-guest
можно передавать DiscountSum - скидку в виде баллов, где поле type_ID необязательное, так как может быть заполнено из настроек модуля, а sum - сумма скидки
Сумма оплаты должна совпадать с итоговой суммой заказов счета (учитывая частичную оплату баллами, если они есть), а иначе «Сумма интернет-оплаты не может отличаться от итоговой суммы счета».
После обработки (удаления) пречеков, указанное значение суммы скидки @DiscountSum
сохраняется в служебной заметке, после чего вызывается пересчет скидок процедурой p_CalcDiscount
.
Если paySum
полностью соответствует сумме счета (считая баллы), то формируется пречек и чек в статусе «Оплачено» на указанную сумму указанным типом оплаты.
В ответе запроса должны содержаться DiscountSum
(заявленная сумма баллов) и AppliedDiscountSum
(примененная сумма баллов), если AppliedDiscountSum
отсутствует - значит скидка по баллам не настроена (баллы не начислены).
Баллы в системе Тиллипад предназначены для того, чтобы повышать статус клиента. Списание баллов в счет оплаты блюд не было предусмотрено ранее.
В протокол стыка с мобильным приложением добавлен потоке DiscountSum, где поле type_ID (необязательное поле) содержит nttp_ID заметки гостевого счета. Заметка гостевого счета обязательно должна быть уникальной и иметь тип данных - вещественное, и Sum
- сумма для списания в счет оплаты.
При сохранении счета в систему модуль стыковки сохраняет указанную сумму в заметку к счету. Если заметка не указана, то берется заметка по умолчанию из настроек модуля.
Скидка пересчитывает стоимость блюд с учетом применения указанной суммы как абсолютной скидки на счет с учетом предыдущих программ лояльности.
При этом скидка проверяет, что не превышен максимально допустимый процент от общей суммы счета, который может быть оплачен баллами. Процент указывается для подразделения в заметке (уникальная, вещественное). Так как сумма может быть использована не полностью, например, при условии, что баллами можно оплатить не более 50% стоимости, то использованная сумма указывается в отдельной заметке к счету.
После пересчета скидки счет сохраняется в систему Тиллипад.
Передает в модуль стыковки список сумм скидок, которые должны быть применены как абсолютная скидка (поток DiscountSum).
Перед сохранением счета в систему, сохраняет указанную сумму в специальную заметку к гостевому счету. При этом, если в потоке DiscountSum не указан type_ID (=nttp_ID), то подставляет nttp_ID по умолчанию (указывается в настройках).
Производит расчет скидки.
Пишет в отдельную заметку использованную сумму скидки.
В данных запроса информации по гостевым счетам постоянного клиента в потоке AppliedDiscountSum в поле Sum возвращает сумму примененной скидки к счету, для того чтобы мобильное приложение могло произвести анализ по примененной сумме скидки.
Если для счета указана сумма в специальной заметке, то вычисляется максимальная сумма от общей суммы счета, которая может быть оплачена скидкой.
Применяет абсолютную скидку на счет.
В отдельной заметке сохраняет примененную сумму скидки
Предварительно для корректной работы в настройках модуля должны быть указаны note-type-Id (Сумма заявленной абсолютной скидки на счет) и applied-note-type-Id (Сумма примененной абсолютной скидки на счет) заметок (значения полей nttp_ID tp_NoteTypes), сами заметки должны быть настроены в системе, как и привилегия с типом программы лояльности Абсолютная скидка от мобильного приложения. В сам запрос
/post-guest
добавляется вкладка вида:
"discountSum": [ { "type_ID": "60D367B5-15D2-D24D-8A74-A28F40C8CB9D", "sum": 25 } ]
Поле type_ID необязательное к заполнению - id заметки может быть взят из настроек модуля, поле sum должно быть заполнено суммой скидки без кавычек (числовое поле).
В итоге тело запроса /post-guest может выглядеть таким образом:
{ "gest_Name": "Points0000001", "gest_ClientPhone": "+7(456)999-99-99", "gest_ClientAddress": "<Address><Village Caption=\"Город\" Key=\"True\">Санкт-Петербург</Village><Street Caption=\"Улица\" Key=\"True\">Ленина</Street><House Caption=\"Дом\" Key=\"True\">1</House><Building Caption=\"Корпус\" Key=\"True\">1</Building><Apartment Caption=\"Квартира\" Key=\"True\">12</Apartment><Entrance Caption=\"Подъезд\">1</Entrance><Floor Caption=\"Этаж\">2</Floor><Intercom Caption=\"Домофон\">24</Intercom> <Comment Caption=\"Комментарий\">комментарий</Comment></Address>", "guestDeliveries": { "gsdlv_cncpt_ID": "B719499B-9DFC-BA47-B027-0F390028946E", "gsdlv_dlvrst_ID": 0, "gsdlv_dlvrmt_ID": 1, "gsdlv_IsAutoStart": 0, "gsdlv_SendSooner": 1, "gsdlv_CookingTime": 1800, "gsdlv_DeliveryTime": 1800, "gsdlv_NeedConfirmation": 1, "gsdlv_GeoRegionID": 10, "gsdlv_CashAmount": 5000, "gsdlv_pytp_ID_Prepaid": "7EDA47CA-B67E-CB41-BF80-467D7C9086B0", "gsdlv_PayDescription": "description" }, "orders": [ { "ordr_Name": "01", "orderItems": [ { "orit_mitm_ID": "FBE3CE39-94AA-D149-A993-1628A1092830", "orit_mvtp_ID": "5224EB11-E8BE-1846-98C6-895B4B449B91", "orit_Volume": 1, "orit_Count": 2, "orit_Price": 350 } ] } ], "discountSum": [ { "sum": 100 } ] }
Для получения информации о баллах существующего гостевого счета или счетов можно использовать запросы
/get- guest?guest-id=<guid счета>
или
/get-guests?client-id=<guid клиента>
Данные по сумме заявленной и примененной скидки будут отображены во вкладках discountSum и appliedDiscountSum:
"discountSum":[{"type_ID":"60D367B5-15D2-D24D-8A74-A28F40C8CB9D","sum":90.0}], "appliedDiscountSum":[{"type_ID":"0412C97B-AF11-2447-88D9-B40FA0EB996D","sum":45.0}]
Для настройки скидки посредством баллов через API все прикрепленные заметки и тип программ лояльности должны быть импортированы в программу Tillypad Manager.
Заметка Сумма заявленной абсолютной скидки на счет.tpxl_exp
,
Заметка Сумма примененной абсолютной скидки на счет.tpxl_exp
,
Заметка Максимальная скидка от суммы счета.tpxl_exp
,
Тип программ лояльности Абсолютная скидка от мобильного приложения (Без копеек).tpxl_exp
.
Для получения пакета обновлений с заметками и типом программ лояльности нужно обратиться в службу поддержки.
Заводится программа лояльности с типом . В параметрах фильтра нужно указать все эти типы заметок и выбрать нужные группы прейскуранта.
Далее создается правило продажи с созданной выше программой лояльности, где указывается тип дней, в течение которых эта скидка должна работать в нужном подразделении. Максимальная сумма скидки на подразделении должна быть указана.
Заводится программа лояльности с типом . В параметрах фильтра нужно указать все эти типы заметок и выбрать нужные группы прейскуранта.
Далее создается правило продажи с созданной выше программой лояльности, где указывается тип дней, в течение которых эта скидка должна работать в нужном подразделении. Максимальная сумма скидки на подразделении должна быть указана.
Для ресторана реализована специальная процедура для счетов, которые нужно частично оплатить посредством баллов. Для корректной работы процедуры перед ее вызовом должна быть создана временная таблица #ClientDiscountPointOperations
, состоящая из полей cdpo_clnt_ID, cdpo_dspt_ID, cdpo_Name, cdpo_Value. Заполняется такая таблица как правило из счета (GuestDiscountPointOperations
).
Как пример: метод формирования гостевого счета. В этом методе в тело запроса помещается нужная структура гостевого счета, в том числе и guestDiscountPointOperations
:
"guestDiscountPointOperations": [ { "gdpo_Value": 100, "gdpo_dspt_ID": "CADA63B6-6833-574F-8427-AB98AE931814" }, { "gdpo_Value": 50, "gdpo_dspt_ID": "480F64A0-B729-3140-B796-678A1CD754F0" } ]
Таким образом формируется счет с заполненной tp_GuestDiscountPointOperations, где:
gdpo_ID формируется на стороне сервера, как NEWID
,
gdpo_gest_ID подхватывается с gest_ID счета,
gdpo_dspt_ID - <GUID> переданного типа баллов,
gdpo_gdpot_ID по умолчанию ставится, как Новые,
gdpo_Date формируется на сервере,
gdpo_Name подхватывается с имени счета,
gdpo_Description null по умолчанию,
gdpo_Value - сумма баллов.
Отсюда заполняется временная таблица #ClientDiscountPointOperations значениями:
cdpo_clnt_ID - берется из gest_clnt_ID счета,
cdpo_dspt_ID - берется из gdpo_dspt_ID, описанного выше,
cdpo_Name - берется из gdpo_Name, описанного выше,
cdpo_Value - берется из gdpo_Value, описанного выше.
Аналогично это работает при оплате: в готовый счет передаются все нужные для заполнения поля операций по баллам, из которых вытягиваются параметры для #ClientDiscountPointOperations по описанной выше схеме.