====== HTTP сервис для расчета скидок ТП 7 ======
В HTTP сервис KKMTransfer добавлена ф-я DiscountCalculation.
===== Настройка =====
В ТП 7 требуется:
- Создать и настроить элемент справочника ККМ.
- Создать и настроить элемент справочника "Настройки расчета скидок".
- Создать запись в регистре сведений "Настройки расчета скидок для ККМ", в которой указать ККМ из п.1 и настройку из п.2.
- Опубликовать на веб-сервисе HTTP сервис KKMTransfer.
-
===== Метод DiscountCalculation=====
Для получения рассчитанных скидок нужно отправить POST запрос на адрес "{веб-адрес ТП 7}/hs/KKMTransfer/DiscountCalculation",\\
где {веб-адрес ТП 7} - адрес опубликованной базы ТП 7, например, http://localhost:8080/TP7_dev.\\
В теле запроса нужно передать информацию о чеке, для которого нужно получить рассчитанные скидки.\\
Авторизация Basic Base64(login:password).
==== Входные параметры ====
Тело POST запроса строка JSON:
* kkm - код ккм
* card - код дисконтной карты
* items - массив позиций чека
* id - индекс позиции
* type - 0 - продажа, 2 - сторно (игнорируются)
* code - код номенклатуры
* attr - код разреза характеристики
* pack - штрихкод единицы (для базовой не заполняется)
* q - количество товара в позиции в единицах (для одной упаковки с коэффициентом 10 нужно передать 1)
* price - цена позиции (единицы)
* payments - необязательное поле - массив видов оплаты, используется только для активизации скидки по виду оплаты
* code - код вида оплаты в справочнике
* value - сумма вида оплаты
===Пример===
{
"kkm": 1,
"card": "123456",
"items": [
{
"id": 0,
"type": 0,
"code": 1,
"attr": "",
"pack": "",
"q": 2,
"price": 50
},
{
"id": 1,
"type": 0,
"code": 4,
"attr": "1",
"pack": "",
"q": 2,
"price": 15.3
}
],
"payments": [
{"code": 1, "value": 1000.00}
]
}
==== Выходные параметры ====
В ответ ф-я DiscountCalculation возвращает строку в формате JSON.\\
Выходные параметры строка JSON:
* result - "ok" - запрос успешно обработан, "error" - произошла ошибка
* msg - текст ошибки, в случае неуспешного запроса
* data - в случае успешного запроса содержит ниже перечисленные атрибуты
* sum_wd - сумма без скидки
* sum_total - итог чека
* discount_sum_total - общая сумма скидки (скидки на чек + скидки позиций)
* discount_sum - сумма скидок на только на чек
* discount_sum_round - сумма скидки округления итога (не учитывается в других скидках)
* active_schemes - массив активные схем скидок на чек
* code - код схемы скидки
* name - наименовании схемы скидок
* discount_sum - сумма скидок по схеме скидок
* bonus_sum - сумма начисленных бонусов
* details - массив активных скидок в схеме
* code - код скидки
* name - наименование скидки
* discount_type - Вид скидки (1-процентная, 2-суммовая)
* discount_value - значение скидки
* discount_sum - сумма скидки
* bonus_type - Вид бонуса (1-процентный, 2-суммовой)
* bonus_value - значение бонуса
* bonus_sum - сумма начисленного бонуса
* spec_price_code - код доп. цены акции
* text - текст скидки для чека
* items - массив описания скидок позиций
* id - индекс позиции
* discount_sum - сумма скидок на позицию
* bonus_sum - сумма начисленных бонусов на позицию
* spec_price_code - код доп. цены (может определяться как скидкой на чек, так и скидкой на позицию)
* spec_price_value - код доп. цены
* active_schemes - массив активных скидок на позицию (описание элементов массива совпадает с описанием active_schemes на чек)
* bonus_sum - общая сумма начисляемых бонусов на дисконтную карту при закрытии чека
* card - null, если номер ДК не был передан или если карта не была найдена, иначе содержит атрибуты:
* Код - номер карты
* Наименование - наименование карты
* ТекстДляЧека - текст для чека
* НеВестиНакопление - если true - накопление не начисляется
* ДеньРождения - день рождения владельца карты
* Накопление - сумма накопления
* КоличествоЧеков - количество чеков по карте
* СуммаБонуса - сумма бонусов на карте
* Группы - массив кодов групп дисконтных карт
* НомерТелефона - номер телефона владельца карты
* АдресЭлектроннойПочты - адрес эл. почты владельца карты
* card_error - пустая строка, если не был передан номер карты или если карта была найдена, иначе описание ошибки поиска карты.
=== Пример успешного запроса ===
{
"data": {
"sum_wd": 130.6,
"sum_total": 81,
"discount_sum": 0,
"discount_sum_total": 50,
"discount_sum_round": -0.4,
"active_schemes": [
{
"code": 2,
"name": "Акция на чек",
"discount_sum": 0,
"bonus_sum": 7,
"ban": false,
"details": [
{
"code": 2,
"discount_type": 1,
"discount_value": 0,
"discount_sum": 0,
"bonus_type": 1,
"bonus_value": 5,
"bonus_sum": 7,
"spec_price_code": 0,
"text": "5% бонус на карту",
"name": "Начисление бонусов",
"ban": false
}
]
}
],
"items": [
{
"id": 0,
"discount_sum": 50,
"bonus_sum": 0,
"spec_price_code": 0,
"spec_price_value": 0,
"active_schemes": [
{
"code": 1,
"name": "Акция на позиции",
"discount_sum": 50,
"bonus_sum": 0,
"ban": false,
"details": [
{
"code": 1,
"discount_type": 1,
"discount_value": 100,
"discount_sum": 50,
"bonus_type": 0,
"bonus_value": 0,
"bonus_sum": 0,
"spec_price_code": 0,
"text": "Акция 1+1=1",
"name": "Товарная скидка 2 по цене 1",
"ban": false
}
]
}
]
},
{
"id": 1,
"discount_sum": 0,
"bonus_sum": 0,
"spec_price_code": 0,
"spec_price_value": 0,
"active_schemes": []
}
],
"bonus_sum": 7,
"card": {
"Код": "123456",
"Наименование": "123456",
"ТекстДляЧека": "Текст чека ДК",
"НеВестиНакопление": false,
"ДеньРождения": "2021-03-19T00:00:00",
"Накопление": 0,
"КоличествоЧеков": 0,
"СуммаБонуса": 0,
"НомерТелефона": "",
"АдресЭлектроннойПочты": "dsa@das.com",
"Группы": [1]
},
"card_error": ""
},
"result": "ok"
}
=== Пример неуспешного запроса ===
{
"result": "error",
"msg": "ККМ не найден"
}
===== Метод PriceChecker =====
Для получения информации о товаре и/или дисконтной карте нужно отправить POST запрос на адрес "{веб-адрес ТП 7}/hs/KKMTransfer/PriceChecker",\\
где {веб-адрес ТП 7} - адрес опубликованной базы ТП 7, например, http://localhost:8080/TP7_dev.\\
В теле запроса нужно передать штрихкод и/или номер дисконтной карты.\\
Авторизация Basic Base64(login:password).
==== Входные параметры ====
Тело POST запроса строка JSON:
* kkm - код ккм
* barcode - штрихкод товара или код маркировки
* card - код дисконтной карты
===Пример===
{
"kkm": 1,
"barcode": "12345678",
"card": "123"
}
==== Выходные параметры ====
В ответ ф-я PriceChecker возвращает код ответа 200 и в теле ответа строку в формате JSON.\\
Выходные параметры строка JSON:
* result - "ok" - запрос успешно обработан, "error" - произошла ошибка
* msg - текст ошибки, в случае неуспешного запроса
* good - null, если barcode не был передан, иначе структуру:
* code - код номенклатуры
* barcode - штрихкод товара или единицы (может отличаться от входного параметра)
* name - наименование номенклатуры или единицы
* art - артикул
* price - розничная цена
* spec_price - акционная цена, 0 - не действует акционная цена
* price_d - цена со скидкой
* discount_sum - сумма скидки (розничная цена минус акционная цена (если действует) минус скидки)
* measure_unit - единица измерения
* country - страна производителя
* description - описание товара
* image - картинка в base64 или null при отсутствии
* image_ext - расширение файла картинки или null при отсутствии картинки
* card - null, если номер ДК не был передан или если карта не была найдена, иначе содержит атрибуты:
* Код - номер карты
* Наименование - наименование карты
* ТекстДляЧека - текст для чека
* НеВестиНакопление - если true - накопление не начисляется
* ДеньРождения - день рождения владельца карты
* Накопление - сумма накопления
* КоличествоЧеков - количество чеков по карте
* СуммаБонуса - сумма бонусов на карте
* Группы - массив кодов групп дисконтных карт
* НомерТелефона - номер телефона владельца карты
* АдресЭлектроннойПочты - адрес эл. почты владельца карты
=== Пример успешного запроса ===
{
"result": "ok",
"good": {
"code": 1,
"barcode": "12345678",
"name": "Товар 1",
"art": "01",
"price": 100.00,
"spec_price": 0,
"price_d": 95.00,
"discount_sum": 5.00,
"measure_unit": "шт.",
"country": "РФ",
"description": "описание товара",
"image": null
},
"card": {
"Код": "1234",
"Наименование": "123",
"ТекстДляЧека": "Текст чека ДК",
"НеВестиНакопление": false,
"ДеньРождения": "2021-03-19T00:00:00",
"Накопление": 0,
"КоличествоЧеков": 0,
"СуммаБонуса": 0,
"НомерТелефона": "",
"АдресЭлектроннойПочты": "dsa@das.com",
"Группы": [1]
}
}
=== Пример неуспешного запроса ===
{
"result": "error",
"msg": "Товар не найден"
}
==== Коллекция Postman ====
{{ :tp7:модули:м_online_ккм:discountcalculation.postman_collection.zip |}}