external:pro_bonus:98_dop:21_raznie_proxenti_oplat

Это старая версия документа!


Разный процент оплаты для разных счетов

Бывает ситуация, когда часть счетов должна иметь ограничения на оплату бонусами, а часть - не должна.
При этом стандартная настройка подразумевает, что в r_keeper всего одна валюта для оплаты бонусами и у неё задаётся процент.

Сделать две отдельные валюты и две отдельные скидки - для гостей и для персонала.

В интерфейсе ProBonus для групп счетов гостей и персонала в поле «Шаблон для API» указать созданные скидки

В скрипт вписать коды скидок и валют соответственно.

Скрипт на форму редактирования заказа:

//ищет скидку бонусной карты
function FindBonusDiscount(DiscCode :integer) :boolean;    
var
  i :integer;
  it: TCheckItem;
begin 
  result := false;            
  for i := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do
  begin     
    it := RKCheck.CurrentOrder.Sessions.Lines[i]; 
    if SYS.ObjectInheritsFrom(TObject(it), 'TDiscountItem') then 
    begin
      //Если дана картой ПДС и неудаленная
      if (TDiscountItem(it).State <> disDeleted) then //если активна 
      //if (TDiscountItem(it).ChargeSource = chsInterface) then //если Добавлена интерфейсом
      begin                    
        dbg.dbgprint('найдена бонусная скидка ' + TDiscountItem(it).Name + ' код скидки ' + IntToStr(TDiscountItem(it).Code) + ' элемент № ' + IntToStr(TDiscountItem(it).Number));
        if (TDiscountItem(it).Code = DiscCode) then
          result := true;
      end;
    end; 
  end; 
  if result then dbg.dbgprint('FindBonusDiscount true ' + IntToStr(DiscCode)); 
  if result then dbg.dbgprint('FindBonusDiscount false ' + IntToStr(DiscCode)); 
end;     

//фильтр пдс-оплат: для каждого интерфейса только последняя примененная в заказе карта и только одной валютой
procedure MainSelectorOnSuitableObjectScript(Sender: TBasePanel; Obj: TObject; var Suitable: boolean);
begin
  if GUI.CheckFormInPayMode then  // если сейчас режим оплаты
  if Suitable then //если валюта доступна
  //Персонализированные уже авторизованные валюты
  if (SYS.ObjectInheritsFrom(Obj, 'TMcrPay') OR SYS.ObjectInheritsFrom(Obj, 'TMcrCoupon')) then
  begin 
    dbg.dbgprint('TMcrPay(Obj).Code ' + IntToStr(TMcrPay(Obj).Code)  + ' ' + TMcrPay(Obj).Name);
    if TMcrPay(Obj).Code = 101 then Suitable := FindBonusDiscount(26); //валюта с кодом 101 только если есть скидка с кодом 26 
    if TMcrPay(Obj).Code = 102 then Suitable := FindBonusDiscount(25); //валюта 102 только если есть скидка 25
  end;
  //Неперсонализированные валюты
  if SYS.ObjectInheritsFrom(Obj, 'TCurrency') then
  begin
    dbg.dbgprint('TCurrency(Obj).Code ' + IntToStr(TCurrency(Obj).Code)  + ' ' + TCurrency(Obj).Name);
    if TCurrency(Obj).Code = 101 then Suitable := FindBonusDiscount(26); //валюта 101 только если есть скидка 26 
    if TCurrency(Obj).Code = 102 then Suitable := FindBonusDiscount(25); //валюта 102 только если есть скидка 25
  end;
end;
  • external/pro_bonus/98_dop/21_raznie_proxenti_oplat.1742460206.txt.gz
  • Последнее изменение: 2025/03/20 11:43
  • Алексей Коробов