====== 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 |}}