Форма «Выбор заказа»

Выделять заказы на кассе, срок которых превышает X мин

На форме выбора заказа у объект OrderPanel в событии AfterConnectObject указать скрипт:

procedure OrderPanelAfterConnectObjectScript(Obj: TObject; Button: TGCustomButton);
var
  t: TDatetime;
begin
  t := StrToTime('0:05:00');  // hour:minutes:seconds
  if SYS.ObjectInheritsFrom(Obj, 'TOrder') then
    if TOrder(Obj).StartService < (now-t) then //  StartService
//    if TOrder(Obj).BillDateTime < (now-t) then // last bill print DateTime  70118
//    if TOrder(Obj).BillExists = true then //check bill printed?   70118
      Button.Color := $004646FF;  // colore of old orders
end;
CODE

Скрывать банкетные заказы после полуночи

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

procedure OrderPanelOnSuitableObjectScript(Sender: TBasePanel; Obj: TObject; var Suitable: boolean);
var lbl: TGLabel;
    CurrTime, Time1, Time2: TDateTime;
begin
  Time1 := EncodeTime(00,00,00,00);  // начало периода
  Time2 := EncodeTime(03,00,00,00);  // конец периода
  CurrTime := Time;
  lbl := TGLabel(gui.FindComponentByName('CaptionLabel'));
  if SYS.ObjectInheritsFrom(TObject(lbl), 'TGLabel') then
    if pos('резерв', TGLabel(lbl).Caption) <=0 then
      if SYS.ObjectInheritsFrom(Obj, 'TOrder') then
     //   if TOrder(Obj).Visit.Finished = vfReservation then
        if (StrToDate(DateToStr(TOrder(Obj).StartService))) >= (StrToDate(DateToStr(RK7.ShiftDate))) then //  StartService
          if (Time1<=CurrTime)and(CurrTime<=Time2) then
            if StrToTime(TimeToStr(TOrder(Obj).StartService))>Time1 then
              Suitable := false; // скрыть
end;
CODE

Форма «подкрепление и инкассация денег»

Скрипт подтверждения выбранной валюты для пополнения платежной карты

Скрипт выводит диалоговое окно с текстом «Выбрана валюта Х» и кнопками «Ок» и «Отмена».

Сначала для формы «подкрепление и инкассация денег» необходимо создать селектор selOkCancel в правом нижнем углу, а затем в форме «Разные – Подкрепление и инкасация денег – Подкрепление/Инкассация денег» у объекта  selOkCancel в событии OnOnOperationScript записать скрипт:

var amount :integer;
procedure selOkCancelOnOnOperationScript(Sender: TObject; fk: TReferentItem; var op: integer; var par: integer);
var
 ed: TBasePanel;
 s, s2: string;
 lbl: TGLabel;
 lbl2: TGButton;
begin
if op=rkoOK then
  lbl := TGLabel(GUI.findComponentByName('lblCurrency'));
  lbl2 := TGButton(GUI.findComponentByName('CaptionLabel'));
  s := lbl.caption;
  s2 := lbl2.text;
  if not(pos('087',s2)>1) then  // except cards like 087...
   if GUI.RKMessageDlg('Выбрана валюта ' +inttostr(Amount) + ' ' + s,0,12, 10000)=1
   then
    begin
      if GUI.RKMessageDlg('Вносится сумма ' +inttostr(Amount)+' '+s,0,3, 10000)=6
      then
        op:=rkoOK
      else
      begin
       op:=rkoEsc;
       ed:=TBasePanel(GUI.FindComponentByName('edtAmount'));
       TNumEditor(ed).SetFocus;
       exit;
      end 
    end
   else
     begin
       op:=rkoEsc;
       ed:=TBasePanel(GUI.FindComponentByName('edtAmount'));
       TNumEditor(ed).SetFocus;
       exit;
     end;
end;
procedure edtAmountOnChangeScript(Sender: TObject; var NewText: string; var Allow: boolean);
begin
  amount:=strtoint(newtext); 
end;
CODE

Форма «Метрдотель и Новый заказ»

Установка фокуса в текстовое поле

procedure userGTabelpicOnClickScript(Sender: TObject; XCoord, YCoord: integer);
var edt: TObject; 
begin
  edt := TObject(GUI.FindComponentByName('TableNumEditor'));
  if edt <> Nil then
    TCodeEditor(edt).SetFocus;
end;
procedure userGWaiterpicOnClickScript(Sender: TObject; XCoord, YCoord: integer);
var edt: TObject; 
begin
  edt := TObject(GUI.FindComponentByName('MainWaiterEdit'));
  if edt <> Nil then
    TCodeEditor(edt).SetFocus;
end;
CODE

Форма «Редактирование заказа»

Блюдо в подарок при заказе от 150 рублей

procedure AddEveryOtherDiscount(DiscCode: integer);
var i, j, numcateg: integer;
    it, CurItem: TCheckItem;
    SL: TStringList;
    a, q,  Price: double;
    d: TDish;
    CheckView: TCheckView;
    Categ: TClassificatorGroup;
begin
CheckView := TCheckView(GUI.FindComponentByName('CheckView'));
if CheckView = Nil then Exit;
CurItem   := RKCheck.CurrentCheckItem;
SL        := TStringList.Create;
if RKCheck.CurrentOrder.UnpaidSum >= 500 then  // ограничение на сумму чека
try
  // Create list of the dishes, sorted by price
  SL.Sorted := False;
  numcateg := 8;    //5 - category code
  for i     := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do
    begin
      it      := RKCheck.CurrentOrder.Sessions.Lines[i];
      Categ   := TClassificatorGroup(getitemBycodeNum('ClassificatorGroups', numcateg));   //5 - category code
      if SYS.ObjectInheritsFrom(TObject(it), 'TDish') then //Check dish lines only
      if Categ.IsChild(it.RefItem) then //Check category of the dish
//      if (it.RefItem.MainParent.code =11 ) then    // if dish from categore of menu and have same code
      if ((it.State = disOpened) or (it.State = disPrinted)) then
      begin
        if SL.Count<1 then
        begin
          if (TDish(it).Quantity = 0) or (TDish(it).PRListSum = 0) then Price := TDish(it).Price
          else Price := TDish(it).PRListSum/TDish(it).Quantity;
          SL.AddObject(FormatFloat('00000000.00', Price) + IntToStr(TDish(it).UNI), TObject(it));
        end;       
      end;
    end;
  //Magic
  q:=0;
      a:= 0;
  for i:= 0 to SL.Count - 1 do
    begin
      d:= TDish(SL.Objects[i]);
      q:= d.Quantity;
      if (d.Quantity = 0) or (d.PRListSum = 0) then Price := d.Price
      else Price := d.PRListSum/d.Quantity;
      a:= a + Price;
    // Delete discount, if a sum changed
    for j     := RKCheck.CheckItemCount(TObject(d.Discounts)) - 1 downto 0 do
      begin
        it      := RKCheck.CheckItemByNumber(TObject(d.Discounts), j);
        if (it.Code = DiscCode) then
          begin
            if abs(TDiscountItem(it).SrcAmount) = a then a := 0
            else RKCheck.DeleteCheckItem(it);
            break;
          end;
      end;
    // Create discount to a dish
    if a > 0 then
      begin
        CheckView.GotoItem(TObject(d));
        RKCheck.CreateCheckItem(rkrefDiscounts, IntToStr(DiscCode), FloatToStr(a));
      end;
    end;
finally
  SL.Free();
  if CurItem <> Nil then CheckView.GotoItem(CurItem);
  end;
RKCheck.CurrentOrder.Recalc();
end;
CODE

на форме редактирования чека в событии OnOperation:

procedure DesignFormOnOperation(Sender: TBasePanel; Operation, Param: integer; var res: integer);
begin
  if (operation = 420)  // 420 - Расcчитать чек
   or(operation = 455)  // 455 - Оплатить чек
   then
  begin
    AddEveryOtherDiscount(11);  //  Код суммовой скидки
  end;   
end;
CODE

На форме редактирования заказа разместить таймер со скриптом:

procedure userTimer1OnTimer(Sender: TObject);
begin
// Проверка на корректный чек
  if not RKCheck.Valid then Exit;
  if (GUI.CheckFormInPayMode) then exit;
  if SYS.ObjectInheritsFrom(RKCheck.CurrentCheckItem, 'TPrintCheckItem') then Exit;
  if RKCheck.CurrentOrder.ToPaySum >= 150 then
    if RKCheck.CurrentOrder.UserTag1 = 0 then
    begin
      RKCheck.CurrentOrder.UserTag1 := 1;
      gui.showmessage('show');
    end;
  if RKCheck.CurrentOrder.ToPaySum < 150 then
    if RKCheck.CurrentOrder.UserTag1 = 1 then
      RKCheck.CurrentOrder.UserTag1 := 0;  
end;
CODE