👉🏻 Настройка:
👉🏻 Интерфейс
Регистр важен!
Рекомендуемое значение 60-120 сек.
Если в ресторане несколько кассовых серверов, то мы можем подключить их все на одну копию FarCard. В этом случае «PDS Server Name» для «PDS Interfaсe» каждого кассового сервера делаем одинаковым.
Если в ресторане используется собственная дисконтная система, то мы добавляем дополнительные интерфейсы.
В «файлах библиотек» проверить привязку кассовых серверов к PDS интерфейсам, созданным на предыдущем шаге.
Маска обработки – iiiiiii (кол-во знаков «i» по дефолту 7, но у клиента может быть нумерация карт с другой разрядностью. Необходимо этот момент уточнить у сотрудников MCRM в чат-боте Поддержки).
function MCR1000047(DeviceSignal: Integer; DeviceIdent: Integer; var Parameter: String): Boolean;
var RestCode: integer;
begin
if length(Parameter) = 10 then Result := true
else Result := false;
end;Опционально!
в. Сразу добавим ещё один алгоритм со скриптом для промокодов, аналогично скрипту для телефонов.
function MCR1000648(DeviceSignal: Integer; DeviceIdent: Integer; var Parameter: String): Boolean;
var
PROMO_PREFIX: String;
PROMO_POSTFIX: String;
have_prefix:boolean;
have_postfix:boolean;
begin
PROMO_PREFIX := 'ZN';
PROMO_POSTFIX := 'XX';
have_prefix := pos(PROMO_PREFIX, Parameter) > 0;
have_postfix := (pos(PROMO_POSTFIX, Parameter) = Length(Parameter) - Length(PROMO_POSTFIX) + 1);
//Uncomment suitable
//prefix only
Result := have_prefix;
//postfix only
//Result := have_postfix;
//both
//Result := have_prefix and have_postfix;
end;
Чаще всего используется только префикс. Промокоды имеют примерно такой вид: ZN12345.
При создании промокодов маркетологи определяют префикс, который нужно будет задать в 9 строке скрипта.
Или поступить от обратного, задать в скрипте префикс, который будут использовать маркетологи при создании промокодов.
Запоминаем код скидки!
Запоминаем код типа бонуса: Начисление
Запоминаем код типа бонуса: Оплата
var
DopInfo: string;
User_email: string;
function CheckMCRMDiscount: boolean;
var
isChargeDiscount: boolean;
i: integer;
it: TCheckItem;
begin
// Функция проверяет наличие скидки с кодом 8 в заказе
isChargeDiscount := False;
for i := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do
begin
if isChargeDiscount then break;
it := RKCheck.CurrentOrder.Sessions.Lines[i];
if SYS.ObjectInheritsFrom(TObject(it), 'TDiscountitem') then
if (it.CODE = 8) and (it.state <> disDeleted) then // Код скидки
isChargeDiscount := True;
end;
result := isChargeDiscount;
end;В 18 строке скрипта выставляем код скидки из пункта 4.а.
procedure ProcessDiscount(d: TDiscountItem);
var
Question: String;
begin
if d.Code <> 8 then Exit; // Код скидки
if d.BonusType = RK7.FindItemByCode(rkrefBonusTypes, 2).Ident then Exit; // Код типа бонуса Начисление
Question := DopInfo + #13 + #10 + 'Используем карту для списания бонусов?';
if gui.RKMessageDlg(Question, 3, 3, 0) = 6 then
begin
d.BonusType := RK7.FindItemByCode(rkrefBonusTypes, 3).Ident; // Код типа бонуса Оплата
end
else
begin
d.BonusType := RK7.FindItemByCode(rkrefBonusTypes, 2).Ident; // Код типа бонуса Начисление
end;
RKCheck.CurrentOrder.Sessions.NeedRecalc := True;
end;
procedure CheckViewOnBeforeCheckViewEdit(Sender: TObject; AEditType: TEditType; AObjectBef, AObjectAft: TObject; var AAllow: boolean; var AMessage: string);
var
d: TDiscountItem;
begin
if (AEditType <> etRemove) and SYS.ObjectInheritsFrom(AObjectAft,
'TDiscountItem') then
ProcessDiscount(TDiscountItem(AObjectAft))
else
if (AEditType = etRemove) then
begin
if SYS.ObjectInheritsFrom(AObjectAft, 'TDiscountItem') then
begin
d := TDiscountItem(AObjectAft);
if d.Code = 8 then Exit; // Код скидки
end;
if CheckMCRMDiscount then
begin
AAllow := False;
AMessage := 'После добавления карты MCRM редактирование состава заказа запрещено';
end;
end;
end;procedure DesignFormOnProcessCard(IntfID, EntranceCardType: integer; CardCode: string; RKCardInfo: TRKCardInfo; var res: integer);
var
isDiscountInOrder: boolean;
i: integer;
it: TCheckItem;
begin
isDiscountInOrder := False;
for i := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do
begin
if isDiscountInOrder then break;
it := RKCheck.CurrentOrder.Sessions.Lines[i];
if SYS.ObjectInheritsFrom(TObject(it), 'TDiscountitem') then
if (it.CODE = RKCardInfo.Discount) and (it.state <> disdeleted) then
isDiscountInOrder := True;
end;
DopInfo := RKCardInfo.Holder;
User_email := RKCardInfo.Holder;
if isDiscountInOrder then
begin
gui.ShowMessage('Дважды применить в одну карту нельзя');
res := 1;
end;
end;Опционально!
б. Скидка для промокода.
Завести еще одну скидку с произвольным названием, например, "MCRM Промокод".
Эта скидка будет использоваться при применении промокодов на "Подарочное блюдо".
В "Детализации" добавить 100% детализацию. Т.е. размер скидки всегда равен 100%.
Ограничить область действия "На блюдо" и "Не вручную".
Задать значение созданной скидки ("MCRM Промокод").
Тип фискальности валюты доступен только под дилерской учетной записью. Обычно выставляется в значение «Фискальная Скидка» (по требованиям 54-ФЗ).
Выберите готовый шаблон по ссылке
farcards.ini
Type = 1 - обязательно!
DLL = mcrm.dll - с таким же именем должен быть и ini-файл. Имя dll менять нельзя!
NetServerName=MCRM - имя интерфейса, созданного в Шаге 1.
mcrm.ini
BaseURL=
ApiKey=
ExtraAccountId=
- эти данные необходимо получить у сотрудников в MCRM.
UseWriteoffApprovement=0
параметр для вкл./выкл. верификации клиента при списании бонусов (0 - не отправлять смс, 1 - отправлять смс с кодом)
ZeroDiscountCode=8
Добавить в секции [DISCOUNTS] новый параметр:
BonusAsDiscount=8
код скидки из пункта "а" Шага 4.
Для механизма верификации клиента (WriteoffApprovement) существуют ещё 2 скрытых параметра, которые устанавливают время, через которое можно отправить проверочный код повторно и задать кастомный шаблон текста смс с подтверждением. При необходимости запросите их в боте нашей поддержки
После выполнения всех настроек необходимо перезапустить кассовый сервер.
Запустить FarCards в качестве консольного приложения.
При возникновении ошибки, при которой FarCards не находит mcrm.dll (DLL not found: mcrm.dll) нужно установить пакет Visual C++ для Visual Studio 2015
Инсталлятор содержится в архиве со сборкой FarCards
Промокод добавляется в заказ только после добавления клиента.
mcrm.ini
Для отключения передачи номера телефона и email в расширенные свойства заказа и отключения отправки чеков через ОФД в конфиг-файле изменить параметры:
PassGuestPhoneOnAuth - отключение телефона
PassGuestEmailOnAuth - отключение email
принимают значения 0 и 1
0 - отключить
Удачного вам запуска и больших выручек!
Установите "сервис автоматической авторизации карт" для r_keeper
Рекомендуется для ресторанов с официантами.