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;
DELPHI


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;
DELPHI

Протестировано в 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;
DELPHI

Скрипт на 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;
DELPHI

Скрипт для события CurItemChanged у объекта CheckView:

procedure CheckViewCurItemChangedScript(Sender: TObject);

var MainSelector: TSelectorPanel;

begin

MainSelector := TSelectorPanel(GUI.FindComponentByName('OperSelector'));

MainSelector.RedrawLevel; 

end;
DELPHI

Скрипт, разделяющий чек на Два фискальных Регистратора в зависимости от категории блюд, а оплату с кредитной карты отправляющий только на один

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;
DELPHI

Скрипт, прячущий определенный селектор при попадании в режим оплаты

В форме редактирования заказа у объекта OperSelector в событии OnSuitableItem вписать скрипт:

procedure OperSelectorOnSuitableItemScript(Sender: TBasePanel; item: TReferentItem; var Suitable: boolean);

begin

if GUI.CheckFormInPayMode then // если сейчас режим оплаты

Suitable := Suitable and (item.code <> 9110); // указать код селектора, который надо скрыть

end;
DELPHI

Скрипт, скрывающий блюдо при сумме заказа менее указанной

procedure MainSelectorOnSuitableItemScript(Sender: TBasePanel; item: TReferentItem; var Suitable: boolean);

begin

if RKCheck.CurrentOrder.ToPaySum < 300 then // сумма чека, ниже которой скрывается селектор блюда

Suitable := Suitable and (item.code <> 46); // скрыть блюдо с кодом 46

end;
DELPHI

Скрипт, отображающий валюту только при предоплате

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;
DELPHI

Скрипт, скрывающий валюты в списке оплат, если гостей равно либо больше 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;
DELPHI

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;
DELPHI

Скрипт, ограничивающий количество купонов в заказе

Разместите скрипт в событии 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;
DELPHI

Скрипт проверять на версиях не ниже 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;
DELPHI

Скрипт на цвет кнопок блюд в главном селекторе

В форме редактирования чека у объекта 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;
DELPHI

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;
DELPHI

А в событии 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;
DELPHI