external:pro_bonus:98_dop:25_zapret_oplaty_bonusom

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
external:pro_bonus:98_dop:25_zapret_oplaty_bonusom [2024/01/30 08:50] Алексей Коробовexternal:pro_bonus:98_dop:25_zapret_oplaty_bonusom [2025/02/05 17:44] (текущий) Александр Ильин
Строка 1: Строка 1:
 ====== Либо начисление бонуса, либо оплата бонусами ====== ====== Либо начисление бонуса, либо оплата бонусами ======
  
-Бывают случаи, когда программа лояльности предполагает запрет на оплату бонусами в заказе, где они начисляются. Т. е. можно либо оплатить заказ или его часть бонусами, либо начислить бонусы.+Бывают случаи, когда программа лояльности предполагает запрет на оплату бонусами в заказе, где они начисляются. Т. е. можно либо оплатить заказ или его часть бонусами (при этом на сумму оплаченную Рублями бонус не начисляется), либо начислить бонусы (на всю сумму заказа, без возможности потраты бонусов).
  
-Такая задача решается с помощью кассового скрипта, размещаемого на форме "Редактирование заказа" и/или "Редактирование заказа (быстрый чек)". 
  
-Скриптполностью запрещающий оплату бонусами при наличии в заказе любой скидки (или начисления бонусов, как частного случая скидки):+Такая задача решается с помощью кассового скрипта, размещаемого на форме "Редактирование заказа" и/или "Редактирование заказа (быстрый чек)" - в компоненте CheckView . 
 +Скрипт работает как для расчёта по местам, так и для обычного случая. 
 +При нажатии на кнопку "оплата" - задаёт вопрос. 
 +{{:external:pro_bonus:98_dop:pasted:20241212-091630.png}} 
 +В зависимости от ответа либо блокируется для оплаты валюта "Оплата бонусами", либо удаляется из заказа скидка-бонус (и тогда бонусы не начисляются). 
 +Скрипт вставляем в верхнюю часть обработчика (важна последовательность). 
 +Внутри скрипта нужно поменять код валюты оплаты бонусами и код скидки-бонуса.
  
 <code> <code>
-procedure CheckViewOnBeforeCheckViewEdit(SenderTObjectAEditTypeTEditType; AObjectBef, AObjectAft: TObject; var AAllow: boolean; var AMessage: string)+ 
-var icurrCode:integer; +function DiscPres(DiscCodeintegerseatN:string):string; 
-discPresent:boolean+var 
-itTCheckItem;+j,i: integer; 
 +ittCheckitem
 +aga:string;
 begin begin
-discPresent := false;  +aga:=''
-currCode := 96;  +for := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do 
-for := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do+  begin 
 +    it := RKCheck.CurrentOrder.Sessions.Lines[j]; 
 +    if SYS.ObjectInheritsFrom(TObject(it), 'TDiscountitem') then 
 +        if (TDiscountitem(it).state=disdeleted) and (TDiscountitem(it).code=discCode) and(TDiscountItem(it).SeatName=seatN)  then aga:=TDiscountItem(it).CardCode; 
 +  end; 
 +result:=aga; 
 +end; 
 +procedure DesignFormOnOperation(Sender: TBasePanel; Operation, Param: integer; var res: integer); 
 +var 
 +k,i,diskcode:integer; 
 +CheckView: TCheckView; 
 +it,CurItem: TCheckItem; 
 +d:TDiscountitem; 
 +isDisk:boolean; 
 +sl: TStringList;
 begin begin
-it := RKCheck.CurrentOrder.Sessions.Lines[i]; +  diskcode:=35; // код скидки-бонуса 
-if SYS.ObjectInheritsFrom(it, 'TDiscountItem') then +  dbg.dbgprint(inttostr(operation)); 
-if TDiscountItem(it).CalcAmount<>then +  SL:= TStringList.Create; 
-discPresent := true;+  if (((operation = rkoCalcOrder) or (operation = rkoBalanceReceipt)or (operation = rkoCalcBySeats)) and(RKCheck.CurrentOrder.BillExists=false)) or (operation = rkoPrintBill) or (operation = rkoPrintSeatBills) then 
 +  begin 
 +    CheckView := TCheckView(GUI.FindComponentByName('CheckView')); 
 +    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).code= diskcode) and (TDiscountItem(it).state<>disdeleted) then  
 +          begin 
 +            isDisk:=true;             
 +            SL.AddObject(FormatFloat('00000000.00', TDiscountitem(it).code) + IntToStr(TDiscountitem(it).UNI), TObject(it)); 
 +          end; 
 +      end;   
 + 
 +   if isdisk then 
 +   begin 
 +   for i:= 0 to SL.Count - 1 do 
 +    begin 
 + 
 +    d:= TDiscountitem(SL.Objects[i]);     
 +    k:=GUI.MessageDlgEx('Списываем бонусы или начисляем бонусы?  для места № '+inttostr(Tdiscountitem(d).seat)+'?',mtInformation, mbYes+mbNo, 'Оплачиваем бонусами;Начисляем бонусы'); 
 +     if k= id_YES then  
 +     begin     
 +       CheckView.GotoItem(TObject(d));         
 +       RKCheck.DeleteCheckItem(d); 
 +       RKCheck.CurrentOrder.Recalc(); 
 +     end;     
 +    end; 
 +   end; 
 +   SL.Free(); 
 + end;
 end; end;
  
-if SYS.ObjectInheritsFrom(AObjectAft, 'TPayLine'then +procedure MainSelectorAfterConnectObjectScript(Obj: TObject; Button: TGCustomButton); 
-        if ((TPayLine(AObjectAft).code=currCode) and discPresent) then   +var 
-        begin     +CurrCode, diskcode:integer; 
-          AAllow := false+CheckViewTCheckView
-          AMessage := ля оплаты бонусами удалите скидки из заказа'; +CurItem: TCheckItem; 
-        end; +c: TVisualComponent; 
 +begin 
 +CurrCode:=10; //код валюты "оплата бонусами
 +diskcode:=35; // код скидки-бонуса 
 +CheckView:=TCheckView(GUI.FindComponentByName('CheckView')); 
 +c := GUI.FindComponentByName('MainSelector'); 
 +if CheckView = Nil then Exit; 
 +   if SYS.ObjectInheritsFrom(obj, 'TMcrPay') then 
 +   begin 
 +     CurItem := RKCheck.CurrentCheckItem; 
 +     if SYS.ObjectInheritsFrom(TObject(curitem), 'TPrintCheckitem') then 
 +     begin 
 +        if DiscPres(diskcode, TPrintCheckitem(curitem).SeatName )=TMcrPay(obj).CardNum then  
 +               button.enabled :=true 
 +               else button.enabled :=false; 
 +     end;     
 +   end;
 end; end;
 +
 </code> </code>
-в данном примере 96 - это код валюты "Оплата бонусами". 
  • external/pro_bonus/98_dop/25_zapret_oplaty_bonusom.1706593822.txt.gz
  • Последнее изменение: 2024/01/30 08:50
  • Алексей Коробов