Либо начисление бонуса, либо оплата бонусами
Бывают случаи, когда программа лояльности предполагает запрет на оплату бонусами в заказе, где они начисляются. Т. е. можно либо оплатить заказ или его часть бонусами, либо начислить бонусы.
Такая задача решается с помощью кассового скрипта, размещаемого на форме «Редактирование заказа» и/или «Редактирование заказа (быстрый чек)».
Скрипт, полностью запрещающий оплату бонусами при наличии в заказе любой скидки (или начисления бонусов, как частного случая скидки):
procedure CheckViewOnBeforeCheckViewEdit(Sender: TObject; AEditType: TEditType; AObjectBef, AObjectAft: TObject; var AAllow: boolean; var AMessage: string); var i, currCode:integer; discPresent:boolean; it: TCheckItem; begin discPresent := false; currCode := 96; for i := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do begin it := RKCheck.CurrentOrder.Sessions.Lines[i]; if SYS.ObjectInheritsFrom(it, 'TDiscountItem') then if TDiscountItem(it).CalcAmount<>0 then discPresent := true; end; if SYS.ObjectInheritsFrom(AObjectAft, 'TPayLine') then if ((TPayLine(AObjectAft).code=currCode) and discPresent) then begin AAllow := false; AMessage := 'Для оплаты бонусами удалите скидки из заказа'; end; end;
в данном примере 96 - это код валюты «Оплата бонусами».