The «sandwich» dish has a scheme of modifiers from several groups (types of bread, types of cheese, toppings, sauces). An additional group of «Diet Bans» modifiers is introduced with modifiers: Soy, Fish, Gluten, Egg.
When selecting modifiers from this group, some modifiers from other groups should not be available for selection.
Example #1: Choose Gluten — Teriyaki sauce becomes unavailable in the sauces group, and in the bread group, White bread becomes unavailable.
Example #2: Choose Gluten and Egg — Mayonnaise becomes unavailable.
A script to hide the modifiers specified in the script. Insert it in the OnSuitableItem event on the order editing form of the MainSelector object:
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'); // modifier code = hidden modifier code ; 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)); // key modifier code 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); // hide forbidden modifiers end; end; |
On the «Cash replenishment/collection» form of the MainSelector object, insert the script in the OnSuitableItem event:
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 // if currency with code 1 begin // write layouts codes here to hide them Suitable := Suitable and (item.code <> 12062); end else begin // write layouts codes here to hide them Suitable := Suitable and (item.code <> 1002364); end; end; |
Tested on 7.5.6.049 version |
On the order editing form of the MainSelector object, insert the script in the OnSuitableItem event:
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); // critical time 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); // show write-off reasons end; end; |
On the order editing form of the OperSelector object, insert the script in the OnSuitableItem event:
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; |
A script for the CurItemChanged event for the CheckView object:
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 // Cash begin // write layouts codes here to hide them 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 // credit cards begin // write layouts codes here to hide them 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 //non-fiscal currency begin // write layouts codes here to hide them Suitable := Suitable and (item.code <> 1010); Suitable := Suitable and (item.code <> 1014); break; end End; end; end; |
On the order editing form for the OperSelector object, insert the script in the OnSuitableItem event:
procedure OperSelectorOnSuitableItemScript(Sender: TBasePanel; item: TReferentItem; var Suitable: boolean); begin if GUI.CheckFormInPayMode then // if payment mode is on Suitable := Suitable and (item.code <> 9110); // specify the selector code to hide end; |
procedure MainSelectorOnSuitableItemScript(Sender: TBasePanel; item: TReferentItem; var Suitable: boolean); begin if RKCheck.CurrentOrder.ToPaySum < 300 then // the check amount below which the dish selector is hidden Suitable := Suitable and (item.code <> 46); // hide the dish with code 46 end; |
procedure MainSelectorOnSuitableItemScript(Sender: TBasePanel; item: TReferentItem; var Suitable: boolean); var SB: TGStatusBar; begin if GUI.CheckFormInPayMode then // if payment mode is on begin SB := TGStatusBar(GUI.findComponentByName('StatusBar')); if SYS.ObjectInheritsFrom(item, 'TCurrency') then Suitable := Suitable and (pos('Предоплаты',SB.DefCaption)>0); // show in case of prepayment end; end; |
On the order editing form, insert the script for the MainSelector object in the OnSuitableItem event:
procedure MainSelectorOnSuitableItemScript(Sender: TBasePanel; item: TReferentItem; var Suitable: boolean); begin if GUI.CheckFormInPayMode then // if payment mode is on 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)); // show currencies 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)); // show currencies end; end; |
On the OnSuitableObject event of the MainSelector object, insert the script on the receipt editing form.
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; |
Insert the script in the OnSuitableObject event of the MainSelector object on the receipt editing form.
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; // minimum order amount DiscountCode := 70; // discount code (coupon code) AllowCntCoupon := 1; // maximum number of coupons in the order TableGroupCode1 := 1001119; // table type code TableGroupCode2 := 1005168; // table type code //************************* 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; |
Check the script on versions not lower than 7.5.4.237, 7.5.5.081, 7.5.6.024, 7.5.7.003 |
The script hides the change on selectors with currency denominations. Insert it on the quick receipt editing form in the AfterConnectObject event of the MainSelector object:
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; |
On the form of editing the receipt of the MainSelector object, insert the script in the AfterConnectObjectScript event:
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; |
Place the button on the form. Insert the script in its OnClick event:
procedure userGOperationButton1OnClickScript(Sender: TObject; XCoord, YCoord: integer); begin If RKCheck.CurrentOrder.BillExists=false then begin RK7.PerformOperation(RkoPrintBill,0) TGOperationButton(Sender).Text := 'cancel bill'; TGOperationButton(Sender).Color := clRed; end else begin RK7.PerformOperation(RkoUnlockBill,0); TGOperationButton(Sender).Text := 'bill'; TGOperationButton(Sender).Color := clBlue; end; end; |
And in the OnShow event, insert the script for drawing the button according to the current state of the order:
procedure userGOperationButton1OnShowScript(Sender: TObject); begin If RKCheck.CurrentOrder.BillExists=false then begin TGOperationButton(Sender).Text := 'bill'; TGOperationButton(Sender).Color := clBlue; end else begin TGOperationButton(Sender).Text := 'cancel bill'; TGOperationButton(Sender).Color := clRed; end; end; |