Кассовая политика представляет собой класс, реализующий интерфейс ICashDeskCustom (описан в библиотеке CashDeskSysy.dll) при помощи которого можно изменить поведение кассы в ряде предопределенных случаев.
Для того, чтобы кассовая политика использовалась кассой, имя этой политики должно быть указано в соответствующей настройке профиля кассы. Пустое значение вышеупомянутой настройки возвращает кассу к стандартному поведению.
Следует помнить, что кассовая политика является не функционалом или настройкой, а набором достаточно гибких инструментов и возможностей придать кассе требуемое пользователем поведение, зачастую за счет отказа от некоторой универсальности. Разработка кассовой политики представляет собой творческий процесс, требующий от разработчика достаточной квалификации.
Главным преимуществом изменения поведения кассы (если таковое действительно требуется) является возможность сделать это не потеряв совместимости с официальной версией (с большей вероятностью), сохранив возможность получать и применять официальные обновления (обязательно проверяя предварительно совместимость своей кассовой политики с ними на стенде).
Никаких ограничений на имя файла библиотеки кассовой политики не накладывается. Для того, чтобы касса могла обнаружить и использовать пользовательскую кассовую политику, библиотека с ней (и все требуемые для работы кассовой политики библиотеки, если таковые есть) должна находиться в том же каталоге и на том же уровне вложенности что и CashDesk.exe.
Описание интерфейса ICashDeskCustom и его возможностей.
Интерфейс ICashDeskCustom достаточно прост:
public interface ICashDeskCustom
{
string Name { get; }
bool Execute(CashDeskCustomAction action, out object result);
bool Execute(CashDeskCustomAction action, object param, out object result);
bool Execute(CashDeskCustomAction action, object param1, object param2, out object result);
void Init();
}
Name – возвращает имя кассовой политики, то которое требуется указать в профиле кассы; рекомендуется задавать это имя совпадающее с именем библиотеки без расширения (если библиотека называется «CashDeskCustom.dll» то политика называется «CashDeskCustom»).
Init – метод, который вызывается сразу после создания объекта.
Execute – собственно рабочий метод кассовой политики, вызываемый каждый раз, когда касса может переопределить свое поведение.
Каждый раз, когда касса позволяет переопределить свое поведение при помощи кассовой политики, она вызывает один из вариантов метода Execute. Непосредственно переопределяемое действие указывается при помощи перечисления CashDeskCustomAction. При этом в качестве параметров «param», «param1» и «param2» может передаваться дополнительная информация, зависящая от конкретного значения CashDeskCustomAction, а результат переопределения (так же зависит от CashDeskCustomAction) возвращается в параметре «result». Если переопределение поведения произошло, то метод Execute должен вернуть «true», в противном случае значение result будет проигнорировано, а поведение кассы для данной ситуации останется стандартным.
Описание переопределяемых действий.
IsNoFiscalArticle – позволяет переопределить признак того, что товар не попадает в фискальный чек. Параметры:
Имя параметра | Тип значения | Описание |
parametr1 | Receipt | Текущий чек |
parametr2 | Receipt.ReceiptItem | Товарная позиция, для которой запрашивается признак |
result | bool | «True» – не попадает в фискальный чек |
GetFirmIDForReceiptItemSales – позволяет переопределить значение идентификатора фирмы для конкретной товарной позиции (часто используется в качестве альтернативного признака того, что позиция не попала в фискальный чек). Параметры:
Имя параметра | Тип значения | Описание |
parametr1 | Receipt | Текущий чек |
parametr2 | Receipt.ReceiptItem | Товарная позиция, для которой запрашивается идентификатор |
result | int? | Идентификатор фирмы, назначаемый текущей позиции |
PaymentModeEnter – позволяет запретить переход в окно оплаты. Параметры:
Имя параметра | Тип значения | Описание |
parametr | Receipt | Текущий чек |
result | string | Сообщение, выдаваемое при запрете перехода в окно оплаты, если переход разрешен – передается пустая строка. |
CloseWorkDayCheck – позволяет запретить закрывать рабочий день. Параметры:
Имя параметра | Тип значения | Описание |
parametr | ISession | Сеанс текущего пользователя кассы |
result | string | Сообщение, выводимое при закрытии рабочего дня, если закрытие разрешено – передается пустая строка |
CashierPrinterMenuExtButtonName, CashierPrinterMenuExtButtonImage, CashierPrinterMenuExtButtonAction – позволяют создать пользовательскую кнопку в меню кассы: Кассир->Отчетыи ФР->Принтер, при этом CashierPrinterMenuExtButtonName определяет наименование этой кнопки, CashierPrinterMenuExtButtonImage определяет картинку, размещаемую на кнопке, а CashierPrinterMenuExtButtonAction – выполняемое кнопкой действие (команда принтеру, вызов формы с дополнительными кнопками и т.д.)
Параметры CashierPrinterMenuExtButtonName:
Имя параметра | Тип значения | Описание |
result | string | Название пользовательской кнопки |
Параметры CashierPrinterMenuExtButtonImage:
Имя параметра | Тип значения | Описание |
result | byte[] | Картинка, которая будет отображаться на кнопке |
Параметры CashierPrinterMenuExtButtonAction:
Имя параметра | Тип значения | Описание |
result | object | Любой объект, может быть «null» |
InitExtendedServices – вызывается при старте кассы и позволяет проинициализировать другие пользовательские расширения, которые должны быть проинициализированы. Параметры:
Имя параметра | Тип значения | Описание |
parametr | ISession | Сеанс текущего пользователя кассы |
result | object | Любой объект, может быть «null» |
OrderNumberForPrint – позволяет переопределить номер заказа печатаемый на встречке и счете клиента. Параметры:
Имя параметра | Тип значения | Описание |
parametr | RestaurantReceipt | Текущий чек (заказ) кассы ресторана |
result | string | Значение, которое будет напечатано как номер заказа |
HasSetRefundReceiptCountPermission – позволяет запретить изменение количества для позиции чека возврата. Параметры:
Имя параметра | Тип значения | Описание |
parametr1 | Receipt | Текущий чек |
parametr2 | Receipt. OfflineReceiptItem | Товарная позиция, для которой запрашивается разрешение |
result | bool | «True» – можно изменить количество |
RefundReceiptChoosed – позволяет запретить формирование чека возврата, выдав соответствующее сообщение об ошибке. Параметры:
Имя параметра | Тип значения | Описание |
parametr1 | ISession | Сеанс текущего пользователя кассы |
parametr2 | Receipt | Чек возврата |
result | string | Сообщение, выводимое при попытке создать чек возврата в качестве ошибки, если пустая строка – чек возврата будет создан. |
ReceiptPrinted – вызывается непосредственно перед сохранением чека в БД (после успешной печати чека на всех принтерах). Параметры:
Имя параметра | Тип значения | Описание |
parametr | Receipt | Текущий чек |
result | object | Любой объект, может быть «null» |
CreateController – позволяет переопределить один или несколько контроллеров форм, доступных в перечислении CashDeskCustomControllerType, что в свою очередь позволит изменить поведение соответствующей формы. Параметры:
Имя параметра | Тип значения | Описание |
parametr1 | CashDeskCustomControllerType | Элемент перечисления контроллеров, которые могут быть переопределены |
parametr2 | object[] | Массив объектов, необходимых для создания соответствующего контроллера |
result | ISlotItemController | Экземпляр альтернативного контроллера |
Доступные значения CashDeskCustomControllerType:
Значение перечисления | Значение «parametr2» |
ReceiptPayment | { ISession, Receipt, IReceiptController } |
GetPresenterAssemblies – позволяет дополнить список библиотек, в которых будет выполняться поиск презенторов, что позволяет использовать пользовательские презентеры, если требуется в тех или иных обстоятельствах отображать пользовательские формы (в т.ч. при переопределении контроллеров форм). Параметры:
Имя параметра | Тип значения | Описание |
result | Assembly[] | Список библиотек, где следует искать пользовательские презентеры. |
OpenCashBoxForPaymentType – позволяет переопределить необходимость открывать денежный ящик для того или иного типа оплаты. Параметры:
Имя параметра | Тип значения | Описание |
parametr1 | Receipt | Текущий чек |
parametr2 | PaymentData | Данные оплаты |
result | bool | «True» – открывать денежный ящик |
CreateSecondaryReceiptTemplate, CreateTotalSecondaryReceiptTemplate – позволяет переопределить процесс формирования на основании шаблона соответственно нефискального чека и общего нефискального чека (актуален при работе по нескольким фирмам). Параметры:
Имя параметра | Тип значения | Описание |
parametr1 | IReceiptPrint | Текущий чек для печати (можно преобразовать к Receipt) |
parametr2 | PrintTemplate | Шаблон печати |
result | IPrintTemplateFactory | Как правило экземпляр класса PrintTemplateFactory |
Формирование шаблона заключается в заполнении ReceiptTemplate.ExpressionDS значениями тэгов шаблона, содержащимися в перечислении ServiceItem, для чего предусмотрен специальный ментод ExpressionDS .SetStaticData(ServiceItem, string). При заполнении стандартной фактуры необходимо заполнить лист ExpressionDS .ReceiptItemsGroups экземплярами класса ReceiptItemsGroup (каждый экземпляр – отдельная группа товаров в чеке, в простейшем случае – достаточно одной группы с названием в виде пустой строки). Каждый товар в группе представляет собой экземпляр класса ReceiptGoodItem. Заполнение «универсальной» фактуры необходимо заполнить лист ExpressionDS .BodyStringLines экземплярами класса StringLine, каждый из которых содержит произвольную строку.
GetPrintReceiptInfoForPrimary, GetPrintReceiptInfoForSecondary – позволяет полностью переопределить информацию для печати соответственно на основном и дополнительном чеке (в плоть до предотвращения печати). Параметры:
Имя параметра | Тип значения | Описание |
parametr | IReceiptPrint | Текущий чек для печати (можно преобразовать к Receipt) |
result | PrintReceiptInfo | Специальный класс, содержащий информацию для печати |
Класс PrintReceiptInfo имеет следующий вид:
public class PrintReceiptInfo
{
public bool IsNeedPrint { get; set; }
public Receipt.ReceiptItem[] ReceiptItems { get; set; }
public Receipt.OfflineReceiptItem[] RefundReceiptItems { get; set; }
public NoFiscalPosition[] NoFiscalPosition { get; set; }
public Money ReceiptDiscountSum { get; set; }
public string[] BottomReceiptComment { get; set; }
public Money ReceiptSum { get; set; }
public PrinterPayment PrinterPayment { get; set; }
}
Здесь:
– IsNeedPrint – флаг, разрешающий / запрещающий печать чека;
– ReceiptItems – позиции чека продажи (для чека возврата эти данные не используются);
– RefundReceiptItems – позиции чека возврата (для чека продажи эти данные не используются);
– NoFiscalPosition – позиции, которые не попадут в фискальный (основной чек);
– ReceiptDiscountSum – сумма скидки, приходящаяся именно на весь чек (без учета скидок на позиции);
– BottomReceiptComment – произвольные строки, печатаемые между фактурой и оплатой чека;
– ReceiptSum – сумма чека с учетом всех скидок;
– PrinterPayment – оплаты чека (может быть несколько, сумма оплат может быть больше суммы чека, что приведет к печати на чеке информации о сдаче).
Все требуемая для PrintReceiptInfo информация содержится в IReceiptPrint но при этом может быть переопределена разработчиком.
ConvertBonusSumToString – позволяет переопределить значение суммы начисленных бонусов (используется при отображении бонусов в виде балов). Следует помнить, что переопределенное значение никак не влияет на сумму начисленных бонусов, только на форму отображения этой суммы в чеке. Параметры:
Имя параметра | Тип значения | Описание |
parametr | Money | Собственно сумма в валюте кассы |
result | string | Часть строки, которая будет напечатана на чеке вместо суммы начисленных бонусов. |
AfterSetRefundReceiptCount – позволяет переопределить установленное количество в позиции чека возврата (например ограничивая максимальное количество). Параметры:
Имя параметра | Тип значения | Описание |
parametr1 | Receipt | Текущий чек |
parametr2 | Receipt. OfflineReceiptItem | Товарная позиция, для которой изменяется количество |
result | Quantity | Количество, которое требуется установить |
Изначально установленное количество можно получить из свойства SelectedCount товарной позиции (parametr2).
GetCustomItemProperty – позволяет сформировать произвольное свойство товарной позиции (CustomItemProperty), используется в т.ч. для отображения в фактуре чека некой дополнительной информации. Параметры:
Имя параметра | Тип значения | Описание |
parametr1 | Receipt | Текущий чек |
parametr2 | Receipt.ReceiptItem | Товарная позиция, для которой формируется значение свойства CustomItemProperty |
result | object | Произвольный класс, содержащий требуемую информацию. |
BankTeminalAfterCardCodeInput – вызывается драйвером «OpenStrre ПЦ» после получения номера карты. Вызов предназначен для реализации подтверждения оплаты через этот драйвер с использованием SMS, электронной почты и т.д. Параметры:
Имя параметра | Тип значения | Описание |
parametr | ExtActionCustomInfo | Экземпляр класса содержащего информацию о примененной карте клиента и данные о предстоящей оплате |
result | object | Любой объект, может быть «null» |
CheckClientForm – вызывается при проверке анкеты клиента перед ее сохранением в БД, позволяет дополнить выполняемую проверку новыми условиями. Параметры:
Имя параметра | Тип значения | Описание |
parametr | ClientFormInfo | Экземпляр класса содержащего информацию о сохраняемой анкете. |
result | string | Текст сообщения о ошибке обнаруженной при проверке анкеты, если пустая строка – анкета коректна |
UseCustomButtonForPayment, CustomButtonForPaymentText, CustomButtonForPaymentImage, CustomButtonForPaymentAction – признак, разрешающий использовать пользовательскую кнопку в окне оплаты, название этой кнопки, картинка, размещаемая на кнопке и действие этой кнопки соответсвенно.
Параметры UseCustomButtonForPayment:
Имя параметра | Тип значения | Описание |
result | bool | «True» – кнопка доступна к использованию |
Параметры CustomButtonForPaymentText:
Имя параметра | Тип значения | Описание |
result | string | Название, отображаемое на кнопке |
Параметры CustomButtonForPaymentImage:
Имя параметра | Тип значения | Описание |
result | byte[] | Отображаемая на кнопке картинка |
Параметры CustomButtonForPaymentAction:
Имя параметра | Тип значения | Описание |
paramtr | object[] { ISession, Receipt, Action<ISlotItemController>, Money, Money } | ISession – сессия текущего пользователя кассы; текущий чек; Action<ISlotItemController> – делегат, позволяющий встроить показываемый контроллер в слот; сумма сдачи; сумма оплаты |
result | object | Любой объект, может быть «null» |
CheckArticle – позволяет предотвратить добавление товара в чек. Параметры:
Имя параметра | Тип значения | Описание |
parametr1 | Receipt | Текущий чек |
parametr2 | Article | Добавляемый в чек товар |
result | string | Текст ошибки отображаемой при добавлении товара, если пустая строка – товар будет добавлен успешно |
CreateReceitSlotFloatWindowController – позволяет создать в слоте плавающую суб-форму, предназначенную для отображения дополнительной информации поверх элементов слота (например таймер, сообщение и т.д.).
Имя параметра | Тип значения | Описание |
parametr1 | ISession | Сессия текущего пользователя кассы |
parametr2 | ReceiptController | Добавляемый в чек товар |
result | IReceiptFloatWindowController | Экземпляр контроллера, реализующий соответсвующий интерфейс. |
Для корректной работы формы контроллера требуется добавить библиотеку содержащую его презентер при помощи действия GetPresenterAssemblies.
Классы, используемые в качестве параметров.
Класс | Библиотека | Пространство имен |
Quantity | Globals.dll | Phoenix.Globals.Units |
Money | Globals.dll | Phoenix.Globals.Units |
ICashDeskCustom | CashDeskSys.dll | Phoenix.OS.CashDesk.CashDeskSys.Domain |
Receipt | CashDeskSys.dll | Phoenix.OS.CashDesk.CashDeskSys.Domain |
Receipt.ReceiptItem | CashDeskSys.dll | Phoenix.OS.CashDesk.CashDeskSys.Domain |
Receipt. OfflineReceiptItem | CashDeskSys.dll | Phoenix.OS.CashDesk.CashDeskSys.Domain |
RestaurantReceipt | CashDeskSys.dll | Phoenix.OS.CashDesk.CashDeskSys.Domain |
IReceiptPrint | CashDeskSys.dll | Phoenix.OS.CashDesk.CashDeskSys.Domain |
PrintReceiptInfo | CashDeskSys.dll | Phoenix.OS.CashDesk.CashDeskSys.Domain |
PaymentData | CashDeskSys.dll | Phoenix.OS.CashDesk.CashDeskSys.Domain |
Article | CashDeskSys.dll | Phoenix.OS.CashDesk.CashDeskSys.Domain |
CashDeskCustomControllerType | CashDeskSys.dll | Phoenix.OS.CashDesk.CashDeskSys.Domain |
ISession | CommonUnits.dll | Phoenix.OS.CommonUnits.SessionManagement |
ReceiptController | CashDeskControllers.dll | Phoenix.OS.CashDesk.Controllers.ReceiptManagement |
IReceiptFloatWindowController | CashDeskControllers.dll | Phoenix.OS.CashDesk.Controllers.ReceiptManagement |
ISlotItemController | CashDeskControllers.dll | Phoenix.OS.CashDesk.Controllers.ReceiptManagement |
ClientFormInfo | CashDeskControllers.dll | Phoenix.OS.CashDesk.Controllers.ClientManagement |
ExtActionCustomInfo | DriverGlobals.dll | Phoenix.Devices.BankTerminals |