Скрипты на использование скидок
Автоматическое удаление скидки по истечении периода использования
Задача: Необходимо, чтобы скидка автоматически исчезала из сохраненного заказа по истечении определенного времени.
Например, есть ручная скидка «Счастливые часы», которая действует с 11.00 до 13.00. Если сохраненный заказ остается неоплаченным более чем до 13.30, то скидка должна автоматически исчезнуть и не должна распространятся на блюда, забитые до 13.00 ч.
Решение:
procedure DiscountUsage1001863(UsageParameters: TDiscountUsageParameters);
var
t1, t2: TDatetime;
begin
t1 := StrToTime('11:00:00'); // hour:minutes:seconds
t2 := StrToTime('13:30:00'); // hour:minutes:seconds
if (Time >= t1)and(Time < t2) then
UsageParameters.UsageMode := umAllow //umAuto
else
UsageParameters.UsageMode := umDeny;
end;Удаление автоматической наценки при добавлении определенного блюда
Задача: В караоке есть автоматическая наценка (оплата входа). Необходим скрипт, который будет удалять наценку при добавлении в заказ определенного блюда (заказ песни), или выводить напоминание о том, что ее нужно удалить.
Решение:
procedure DiscountUsage1000872(UsageParameters: TDiscountUsageParameters);
var i: integer;
it: TCheckItem;
begin
for i := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do begin
it := RKCheck.CurrentOrder.Sessions.Lines[i];
if SYS.ObjectInheritsFrom(TObject(it), 'TDish') then
if (it.CODE = 23) then // заменить 23 на код блюда, при наличии которого отменять скидку
Begin
UsageParameters.UsageMode := umDeny;
Exit;
End;
end;
UsageParameters.UsageMode := umAuto;
end;Добавление скидки на каждое второе блюдо в заказ
Задача: Необходим скрипт, который бы разрешал использование скидки на каждое второе блюдо. Коды конкретных блюд должны быть указаны в самом скрипте и могут быть изменены.
Решение:
procedure DiscountUsage1001506(UsageParameters: TDiscountUsageParameters);
var i,sd,CategCode: integer;
it: TCheckItem;
Categ: TClassificatorGroup;
begin
if not RKCheck.Valid then Exit;
CategCode := 8; // указать код категории
Categ := TClassificatorGroup(getitemBycodeNum('ClassificatorGroups', CategCode));
sd := 0;
for i := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do begin
it := RKCheck.CurrentOrder.Sessions.Lines[i];
if SYS.ObjectInheritsFrom(TObject(it), 'TDish') then
// if Categ.IsChild(TDish(it).RefItem) then // проверка по категории блюда
if
//Блюда
((it.CODE = 3006)
or (it.CODE = 3007)
or (it.CODE = 3022)
or (it.CODE = 3025)
or (it.CODE = 8056)
or (it.CODE = 8060)
or (it.CODE = 3035)
or (it.CODE = 3036)
or (it.CODE = 8096)
or (it.CODE = 8097)
or (it.CODE = 3029)
or (it.CODE = 3031)
or (it.CODE = 3032)
or (it.CODE = 3003)
or (it.CODE = 3018)
or (it.CODE = 3019)
//Комбо
or (it.CODE = 8066)
or (it.CODE = 8067)
or (it.CODE = 8068)
or (it.CODE = 5011)
or (it.CODE = 5015)
or (it.CODE = 5023)
or (it.CODE = 5026)
or (it.CODE = 5029)
or (it.CODE = 5102)
or (it.CODE = 5152)
or (it.CODE = 5202)
or (it.CODE = 5254)
or (it.CODE = 5302)
or (it.CODE = 5354)
or (it.CODE = 5402)
or (it.CODE = 5452)
or (it.CODE = 5502)
or (it.CODE = 5552)
or (it.CODE = 5604)
or (it.CODE = 5654)
or (it.CODE = 5754)
or (it.CODE = 5904)
or (it.CODE = 5039)
or (it.CODE = 5040)
or (it.CODE = 5041)
or (it.CODE = 5042)
or (it.CODE = 5043)
or (it.CODE = 5044)
or (it.CODE = 5045)
or (it.CODE = 5046)
or (it.CODE = 6013)
or (it.CODE = 6014)
or (it.CODE = 6015)
or (it.CODE = 5047)
or (it.CODE = 5048)
or (it.CODE = 5049)
or (it.CODE = 5050)
or (it.CODE = 5051)
or (it.CODE = 5052)
or (it.CODE = 5053)
or (it.CODE = 5201)
or (it.CODE = 5204)
or (it.CODE = 5205)
or (it.CODE = 5206)
or (it.CODE = 5207)
or (it.CODE = 5208)
or (it.CODE = 5209)
or (it.CODE = 5210)
or (it.CODE = 5211)
or (it.CODE = 5212)
or (it.CODE = 5213)
or (it.CODE = 5214)
or (it.CODE = 5215)
or (it.CODE = 5216)
or (it.CODE = 5217)
or (it.CODE = 5218)
or (it.CODE = 5219)
or (it.CODE = 5220)
or (it.CODE = 5221)
or (it.CODE = 5222)
or (it.CODE = 5223)
or (it.CODE = 5224)
or (it.CODE = 5054)
or (it.CODE = 5055)
or (it.CODE = 5056)
or (it.CODE = 5225))
then // проверка по коду блюда
sd := sd + 1;
end;
if sd>0 then
UsageParameters.UsageMode := umAllow // umAllow umAuto
else
UsageParameters.UsageMode := umDeny;
end;Добавления скидки при наличии в заказе блюд из определённой категории
Задача: Создать скрипт, автоматически добавляющий скидку при наличии в заказе блюд, прописанной в скрипте категории:
Решение:
procedure DiscountUsage1002322(UsageParameters: TDiscountUsageParameters);
var i,sd,CategCode: integer;
it: TCheckItem;
Categ: TClassificatorGroup;
begin
if not RKCheck.Valid then Exit;
CategCode := 8; // указать код категории
Categ := TClassificatorGroup(getitemBycodeNum('ClassificatorGroups', CategCode));
sd := 0;
for i := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do begin
it := RKCheck.CurrentOrder.Sessions.Lines[i];
if SYS.ObjectInheritsFrom(TObject(it), 'TDish') then
if TDish(it).Quantity > 0 then
if Categ.IsChild(TDish(it).RefItem) then // проверка по категории блюда
sd := sd + 1;
end;
if sd>0 then
UsageParameters.UsageMode := umAuto // umAllow umAuto
else
UsageParameters.UsageMode := umDeny;
end;
Добавление блюда в чек, если добавляется скидка
procedure CheckViewOnAfterCheckViewEdit(Sender: TObject; AEditType: TEditType; AObjectBef, AObjectAft: TObject);
begin
if AEditType = etInsert then
if SYS.ObjectInheritsFrom(AObjectAft, 'TDiscountItem') then
if (TDiscountItem(AObjectAft).Code = 3) then
RKCheck.CreateCheckItem(rkrefMenuItems, IntToStr(143), '1');
end;