Выбор заказа, Подкрепление и инкассация денег, Метрдотель и Новый заказ, Редактирование заказа
Форма «Выбор заказа»
Выделять заказы на кассе, срок которых превышает 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