Оборудование
Для работы в iikoFront часто используется оборудование, начиная редактированием заказа и заканчивая его оплатой. Используемые виды оборудования могут быть самыми разными: фискальные регистраторы, принтеры, весы, денежные ящики, экран покупателя и т.д.
В версиях до 6.2 система могла работать только с определёнными моделями оборудования. Как правило, это были самые распространенные модели оборудования. С помощью API можно реализовать поддержку фискальных регистраторов и весов любой модели.
Фискальный регистратор
В API фискальные регистраторы представлены типом ICashRegister
, который в себе содержит только идентификатор устройства и его имя.
По большей части, ICashRegister
представляет собой набор команд, таких как открытие/закрытие кассовой смены, оплата/возврат заказа, внесение/изъятие денежных средств и др.
Набор команд предопределен, а внутренняя реализация будет зависеть от конкретного устройства.
Чаще всего команды фискального регистратора возвращают текущее состояние в виде объекта CashRegisterResult
, который содержит информацию о счётчиках денежных сумм, номерах документов, налоговых суммах и т. д.
Каждый фискальный регистратор имеет свои настройки, которые представлены типом CashRegisterSettings
.
В интерфейсе BackOffice при добавлении или повторном настраивании устройства их можно будет увидеть и задать им значения.
CashRegisterSettings
включает в себя следующую информацию:
- Наименование модели фискального регистратора, например «MStar-TK. Протокол AFP» (
Code
). - Версия формата фискальных данных (
OfdProtocolVersion
). - Таблица налоговых ставок (
FiscalRegisterTaxItems
). - Таблица типов оплаты — определяется типом (
FiscalRegisterPaymentTypes
). - Количество символов в одной строке чека, напечатанной стандартным шрифтом (
Font0Width
). - Список настроек (
DeviceSetting
) — это произвольный набор настроек, дополнительный к описанному выше набору. Например, это может быть COM-порт, TCP/IP-адрес, скорость обмена, пароль доступа и др.
Схема подключения оборудования к iikoFront для всех видов оборудования одинаковая.
Для того чтобы начать пользоваться своей моделью фискального регистратора, нужно зарегистрировать ее в списке оборудования.
Для этого нужно создать класс, реализующий ICashRegisterFactory
, который будет являться представителем новой модели фискального регистратора, и добавить новую модель в список оборудования с помощью метода RegisterCashRegisterFactory()
.
В ICashRegisterFactory
указывается имя модели оборудования и его настройки. Таким образом, в iikoOffice по имени модели можно будет найти фискальный регистратор и создать или отредактировать его настройки.
Пример плагина, реализующего интеграцию с фискальным регистратором, можно посмотреть в проекте Resto.Front.Api.SampleCashRegisterPlugin
.
Весы
В Api весы представлены типом IScale
. Как и любое устройство, весы в себе содержат идентификатор устройства и его имя. Тип IScale
состоит из одной команды - взвесить (MeasureWeight()
).
Результатом взвешивания является объект типа ScaleWeightResult
, который включает в себя вес в килограммах (Weight
).
Для того чтобы начать пользоваться своей моделью весов, нужно зарегистрировать ее в списке оборудования. Чтобы зарегистрировать модель, нужно создать тип IScaleFactory
, который будет являться представителем новой модели весов, и добавить ее в список оборудования с помощью RegisterScaleFactory()
.
В IScaleFactory
указывается имя модели оборудования и его настройки. Т.о. в BackOffice по имени модели можно будет найти весы и создать или отредактировать их настройки.
Пример плагина, реализующего интеграцию с весами, можно посмотреть в проекте Resto.Front.Api.SampleScalePlugin
.
Автоматический запуск устройств
iikoFront умеет автоматически запускать устройства. Если устройство не запущено, любое выполнение команды на нем, кроме запуска, приведет к неудаче. Чтобы вручную не запускать устройство через BackOffice («Настройки оборудования») или iikoFront («Инструменты» -> «Настройки оборудования»), можно воспользоваться нижеописанным способом.
В настройках устройства в BackOffice установите галочку «Запускать автоматически». В целевых методах (например, DoCheque, OpenSession для ФР) добавьте проверку состояния устройства и выбросите исключение DeviceNotStartedException
:
private void CheckStarted()
{
if (state != State.Running)
throw new DeviceNotStartedException("Device not started");
}
При возникновение такого исключения iikoFront попытается произвести запуск устройства и затем выполнить целевую команду.