Скрипты на использование скидок
Автоматическое удаление скидки по истечении периода использования
Задача: Необходимо, чтобы скидка автоматически исчезала из сохраненного заказа по истечении определенного времени.
Например, есть ручная скидка «Счастливые часы», которая действует с 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;