MainSelectorOnSuitableItem, MainSelectorOnSuitableObject, MainSelectorAfterConnectObject, userGOperationButton
MainSelectorOnSuitableItem
Скрипт на скрытие селекторов модификаторов
Блюдо сендвич имеет схему модификаторов из нескольких групп (виды хлеба, виды сыра, топпинги, соусы). Вводится дополнительная группа модификаторов «Запреты Диеты» с модификаторами: Соя, Рыба, Глютен, Яйцо.
При выборе модификаторов из этой группы должны быть недоступны к выбору некоторые модификаторы из других групп.
Пример №1 Выбираем Глютен — в группе соусы становиться недоступен соус «Терьяки», а в группе «Хлеб» — выбор Белого хлеба.
Пример №2 Выбираем Глютен и Яйцо — недоступен к выбору Майонез.
Скрипт скрывает указанные в скрипте модификаторы. Разместить на форме редактирования заказа у объекта MainSelector в событии OnSuitableItem:
procedure MainSelectorOnSuitableItemScript(Sender: TBasePanel; item: TReferentItem; var Suitable: boolean);
var i, j, p, z, ModifCode1: integer;
it, CurItem: TCheckItem;
DishCode, CntDish1, CntDish2, AddDishCode: integer;
CheckView: TCheckView;
DishesCode,ModifDenyList: TStringList;
ModifDenied: boolean;
s,s1:string; ii:Integer;
begin
if SYS.ObjectInheritsFrom(item, 'TModifier') then
begin
ModifDenied := false;
DishesCode := TStringList.Create;
ModifDenyList := TStringList.Create;
//********** Set parameters ***********//
DishesCode.Add('1002016=1002017;45'); // код модификатора = код скрываемого модификатора ;
DishesCode.Add('20=21;46');
DishesCode.Add('17=18;43');
//********** Set parameters ***********//
begin
for i := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do
begin
it := RKCheck.CurrentOrder.Sessions.Lines[i];
if SYS.ObjectInheritsFrom(it, 'TDish') then
begin
for j := 0 to TDish(it).Modifiers.Count - 1 do // checking by modifier
begin
for z := 0 to DishesCode.Count-1 do
begin
p:=pos('=',DishesCode.Strings[z]);
ModifCode1 := StrToInt(copy(DishesCode.Strings[z],1,p-1)); // код ключевого модификатора
if TDish(it).Modifiers.Items[j].Code = ModifCode1 then
begin
s:=copy(DishesCode.Strings[z],p+1,length(DishesCode.Strings[z]));
while length(s)<>0 do begin
ii:=pos(';',s);
if ii=0 then begin
s1:=s;
delete(s,1,length(s1));
ModifDenyList.Add(s1);
end
else begin
s1:=copy(s,1,ii-1);
delete(s,1,ii);
ModifDenyList.Add(s1)
end;
end;
end;
end;
end;
end;
end;
end;
for i := 0 to ModifDenyList.Count - 1 do
begin
if TModifier(item).code = StrToInt(ModifDenyList.Strings[i]) then
ModifDenied := True;
end;
ModifDenyList.Free();
DishesCode.Free();
Suitable := Suitable and not(ModifDenied); // скрыть запрещенные модификаторы
end;
end;
Cкрипт по выбору макета печати из 2-х доступных в зависимости от используемой валюты в диалоге «Пополнения баланса карты PDS»
На форме «Подкрепление/Инкассация денег» у объекта MainSelector в событии OnSuitableItem поместить скрипт:
procedure MainSelectorOnSuitableItemScript(Sender: TBasePanel; item: TReferentItem; var Suitable: boolean);
var ed: TBasePanel;
begin
ed := TBasePanel(GUI.FindComponentByName('edtCurrency'));
if StrToInt(TCodeEditor(ed).Text) = 1 then // если валюта с кодом 1
begin // сюда пишем коды макетов которые скрыть
Suitable := Suitable and (item.code <> 12062);
end
else
begin // сюда пишем коды макетов которые открыть
Suitable := Suitable and (item.code <> 1002364);
end;
end;
Протестировано в 7.5.6.049
Скрипт на временные ограничения на причины удаления
Скрипт разместить на форме редактирования заказа у объекта MainSelector в событии OnSuitableItem:
procedure MainSelectorOnSuitableItemScript(Sender: TBasePanel; item: TReferentItem; var Suitable: boolean);
var
i: integer;
it: TCheckItem;
CurrTime, Time1: TDateTime;
Allow:Boolean;
begin
if SYS.ObjectInheritsFrom(item, 'TOrderVoid') then
if not(TOrderVoid(item).WriteOffOnStore) then
begin
Allow := False;
Time1 := EncodeTime(00,05,00,00); // граничное время
CurrTime := now;
it := RKCheck.CurrentCheckItem;
if it <> Nil then
if SYS.ObjectInheritsFrom(TObject(it), 'TDish') then
if (CurrTime < (TDish(it).Session.StartService+Time1)) then
begin
Allow := True;
end
else
Suitable := Suitable and (Allow); // отобразить причины списания
end;
end;
Скрипт на OpenPrice для блюд с признаком AllowPurchase
В форме редактирования заказа у объекта OperSelector в событии OnSuitableItem вписать скрипт:
procedure OperSelectorOnSuitableItemScript(Sender: TBasePanel; item: TReferentItem; var Suitable: boolean);
begin
try
if (item.code = 16) then
Suitable := Suitable and (SYS.ObjectInheritsFrom(RKCheck.CurrentCheckItem, 'TPurchaseDish'));
except
end;
end;
Скрипт для события CurItemChanged у объекта CheckView:
procedure CheckViewCurItemChangedScript(Sender: TObject);
var MainSelector: TSelectorPanel;
begin
MainSelector := TSelectorPanel(GUI.FindComponentByName('OperSelector'));
MainSelector.RedrawLevel;
end;
Скрипт, разделяющий чек на Два фискальных Регистратора в зависимости от категории блюд, а оплату с кредитной карты отправляющий только на один
procedure MainSelectorOnSuitableItemScript(Sender: TBasePanel; item: TReferentItem; var Suitable: boolean);
var i: integer;
it: TcheckItem;
begin
for i := RKCheck.CurrentOrder.Sessions.LinesCount - 1 downto 0 do begin
it := RKCheck.CurrentOrder.Sessions.Lines[i];
if SYS.ObjectInheritsFrom(TObject(it), 'TPayLine') then
Begin
if ((TPayLine(it).code = 1) or (TPayLine(it).code = 4)) then // Наличные
begin // сюда пишем коды макетов которые скрыть
Suitable := Suitable and (item.code <> 1014);
Suitable := Suitable and (item.code <> 1017);
break;
end
if ((TPayLine(it).code = 95) or (TPayLine(it).code = 96)) then // Кредитные карты
begin // сюда пишем коды макетов которые скрыть
Suitable := Suitable and (item.code <> 1010);
Suitable := Suitable and (item.code <> 1017);
break;
end
if ((TPayLine(it).code = 380) or (TPayLine(it).code = 3003) or (TPayLine(it).code = 3002) or (TPayLine(it).code = 380) or (TPayLine(it).code = 3004) or (TPayLine(it).code = 551)) then // Нефискальные валюты
begin // сюда пишем коды макетов которые скрыть
Suitable := Suitable and (item.code <> 1010);
Suitable := Suitable and (item.code <> 1014);
break;
end
End;
end;
end;
Скрипт, прячущий определенный селектор при попадании в режим оплаты
В форме редактирования заказа у объекта OperSelector в событии OnSuitableItem вписать скрипт:
procedure OperSelectorOnSuitableItemScript(Sender: TBasePanel; item: TReferentItem; var Suitable: boolean);
begin
if GUI.CheckFormInPayMode then // если сейчас режим оплаты
Suitable := Suitable and (item.code <> 9110); // указать код селектора, который надо скрыть
end;
Скрипт, скрывающий блюдо при сумме заказа менее указанной
procedure MainSelectorOnSuitableItemScript(Sender: TBasePanel; item: TReferentItem; var Suitable: boolean);
begin
if RKCheck.CurrentOrder.ToPaySum < 300 then // сумма чека, ниже которой скрывается селектор блюда
Suitable := Suitable and (item.code <> 46); // скрыть блюдо с кодом 46
end;
Скрипт, отображающий валюту только при предоплате
procedure MainSelectorOnSuitableItemScript(Sender: TBasePanel; item: TReferentItem; var Suitable: boolean);
var
SB: TGStatusBar;
begin
if GUI.CheckFormInPayMode then // если сейчас режим оплаты
begin
SB := TGStatusBar(GUI.findComponentByName('StatusBar'));
if SYS.ObjectInheritsFrom(item, 'TCurrency') then
Suitable := Suitable and (pos('Предоплаты',SB.DefCaption)>0); // отобразить при предоплате
end;
end;
Скрипт, скрывающий валюты в списке оплат, если гостей равно либо больше 10
На форме редактирования заказа у объекта MainSelector в событии OnSuitableItem указать скрипт:
procedure MainSelectorOnSuitableItemScript(Sender: TBasePanel; item: TReferentItem; var Suitable: boolean);
begin
if GUI.CheckFormInPayMode then // если сейчас режим оплаты
if SYS.ObjectInheritsFrom(item, 'TCurrency') then
if RKCheck.CurrentOrder.GuestsCount < 10 then
begin
Suitable := Suitable and ((TCurrency(item).code = 1)or(TCurrency(item).code = 2)or(TCurrency(item).code = 3)or(TCurrency(item).code = 4)or(TCurrency(item).code = 5)); // отобразить валюты
end
else
begin
Suitable := Suitable and ((TCurrency(item).code = 6)or(TCurrency(item).code = 7)or(TCurrency(item).code = 8)or(TCurrency(item).code = 9)or(TCurrency(item).code = 10)); // отобразить валюты
end;
end;
MainSelectorOnSuitableObject
Скрипт, ограничивающий добавление скидочных купонов в заказ меньше определенной суммы
Скрипт разместить на форме редактирования чека в событии OnSuitableObject у объекта MainSelector.
procedure MainSelectorOnSuitableObjectScript(Sender: TBasePanel; Obj: TObject; var Suitable: boolean);
begin
if SYS.ObjectInheritsFrom(Obj, 'TMcrCoupon') then begin
if (RKCheck.CurrentOrder.ToPaySum < 300) and (TMcrCoupon(Obj).GroupUNI = 0) then
if (Pos('CARDS', TMcrCoupon(Obj).CouponName) > 0) then
Suitable := True
else
Suitable := False;
end;
Скрипт, ограничивающий количество купонов в заказе
Разместите скрипт в событии OnSuitableObject у объекта MainSelector на форме редактирования чека.
procedure MainSelectorOnSuitableObjectScript(Sender: TBasePanel; Obj: TObject; var Suitable: boolean);
var i, j, DiscountCode, CntDish1, cntDiscount, AllowCntCoupon, TableGroupCode1, TableGroupCode2: integer;
minOrderSum: double;
it, it2: TCheckItem;
begin
//************************* Set parameter *************************//
minOrderSum := 300; // минимальная сумма заказа
DiscountCode := 70; // код скидки(купона)
AllowCntCoupon := 1; // максимально количество купонов в заказе
TableGroupCode1 := 1001119; // код типа столов
TableGroupCode2 := 1005168; // код типа столов
//************************* Set parameter *************************//
if (TRk7Table(RK7.FindItemBySifr(rkrefTables, RKCheck.CurrentOrder.TableID)).TableGroup = TableGroupCode1)
or(TRk7Table(RK7.FindItemBySifr(rkrefTables, RKCheck.CurrentOrder.TableID)).TableGroup = TableGroupCode2) then // check tables type
if SYS.ObjectInheritsFrom(Obj, 'TMcrCoupon') then
begin
begin
CntDish1 := 0;
cntDiscount := 0;
for i := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do
begin
it := RKCheck.CurrentOrder.Sessions.Lines[i];
if SYS.ObjectInheritsFrom(it, 'TDish') then
if (TDish(it).Quantity) > 0 then
begin
CntDish1 := CntDish1 + trunc(TDish(it).Quantity);
for j := RKCheck.CheckItemCount(TObject(TDish(it).Discounts)) - 1 downto 0 do
begin
it2 := RKCheck.CheckItemByNumber(TObject(TDish(it).Discounts), j);
if (it2.Code = DiscountCode) then
// if abs(TDiscountItem(it2).SrcAmount)>0 then
begin
cntDiscount := cntDiscount + 1;
end;
end;
end;
end;
end;
Suitable := Suitable and ((RKCheck.CurrentOrder.ToPaySum > minOrderSum) and (CntDish1 > 0) and (cntDiscount < AllowCntCoupon));
end;
end;
Скрипт проверять на версиях не ниже 7.5.4.237, 7.5.5.081, 7.5.6.024, 7.5.7.003
MainSelectorAfterConnectObject
Скрипт, выводящий на экран сумму сдачи только после печати чека
Скрипт прячет сдачу на селекторах с номиналами валют. Разместить на форме редактирования быстрого чека в событии AfterConnectObject у объекта MainSelector
procedure MainSelectorAfterConnectObjectScript(Obj: TObject; Button: TGCustomButton);
begin
if SYS.ObjectInheritsFrom(TObject(Obj), 'TCurrencyFaceValue') then
Button.text := TCurrencyFaceValue(Obj).RightLangName + #10;// + IntToStr(TCurrencyFaceValue(Obj).Tag);
end;
Скрипт на цвет кнопок блюд в главном селекторе
В форме редактирования чека у объекта MainSelector в событии AfterConnectObjectScript указать скрипт:
procedure MainSelectorAfterConnectObjectScript(Obj: TObject; Button: TGCustomButton);
var Categ: TClassificatorGroup;
midserv, CategCode: integer;
begin
CategCode := 8; // code of category
midserv := 15001; // ident of midserver
Categ := TClassificatorGroup(getitemBycodeNum('ClassificatorGroups', CategCode));
if RK7.CashGroup.Ident = midserv then
if SYS.ObjectInheritsFrom(TObject(Obj), 'TRK7MenuItem') then
if Categ.IsChild(TRK7MenuItem(Obj)) then
Button.Color := clred;
end;
userGOperationButton
Скрипт, изменяющий цвет кнопки
Разместите кнопку на форме. В её событии OnClick укажите скрипт:
procedure userGOperationButton1OnClickScript(Sender: TObject; XCoord, YCoord: integer);
begin
If RKCheck.CurrentOrder.BillExists=false then
begin
RK7.PerformOperation(RkoPrintBill,0)
TGOperationButton(Sender).Text := 'отменить пречек';
TGOperationButton(Sender).Color := clRed;
end
else
begin
RK7.PerformOperation(RkoUnlockBill,0);
TGOperationButton(Sender).Text := 'пречек';
TGOperationButton(Sender).Color := clBlue;
end;
end;
А в событии OnShow указать скрипт по отрисовке кнопки согласно текущему состоянию заказа:
procedure userGOperationButton1OnShowScript(Sender: TObject);
begin
If RKCheck.CurrentOrder.BillExists=false then
begin
TGOperationButton(Sender).Text := 'пречек';
TGOperationButton(Sender).Color := clBlue;
end
else
begin
TGOperationButton(Sender).Text := 'отменить пречек';
TGOperationButton(Sender).Color := clRed;
end;
end;