UFN_REVENUEBATCH_EVENTREGISTRANT_GETPAYMENTBENEFITS

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@REGISTRANTID uniqueidentifier IN
@AMOUNT money IN
@TRANSACTIONCURRENCYID uniqueidentifier IN
@BASECURRENCYID uniqueidentifier IN
@EXCHANGERATE decimal(20, 8) IN
@BASEEXCHANGERATEID uniqueidentifier IN
@MUSTPAYFULLREGISTRATIONAMOUNT bit IN

Definition

Copy


create function dbo.UFN_REVENUEBATCH_EVENTREGISTRANT_GETPAYMENTBENEFITS
(
  @REGISTRANTID uniqueidentifier,
  @AMOUNT money = null,
  @TRANSACTIONCURRENCYID uniqueidentifier = null,
  @BASECURRENCYID uniqueidentifier = null,
  @EXCHANGERATE decimal(20, 8) = null,
  @BASEEXCHANGERATEID uniqueidentifier = null,
  @MUSTPAYFULLREGISTRATIONAMOUNT bit = 0
)
returns @BENEFITS table
(
  BENEFITID uniqueidentifier,
  QUANTITY int,
  UNITVALUE money,
  DETAILS nvarchar(255),
  BENEFITNAME nvarchar(100),
  TRANSACTIONTOTALVALUE money
)
as
begin

  if @MUSTPAYFULLREGISTRATIONAMOUNT = 1
  begin

    declare @REGISTRATIONAMOUNT money;
    declare @REGISTRATIONCURRENCYID uniqueidentifier;

      select
          @REGISTRATIONAMOUNT = sum(REGISTRANTREGISTRATION.AMOUNT),
          @REGISTRATIONCURRENCYID = EVENT.BASECURRENCYID
      from 
          dbo.REGISTRANTREGISTRATION
      inner join dbo.EVENTPRICE on REGISTRANTREGISTRATION.EVENTPRICEID = EVENTPRICE.ID
      inner join dbo.EVENT on EVENTPRICE.EVENTID = EVENT.ID
      where
          REGISTRANTREGISTRATION.REGISTRANTID = @REGISTRANTID and
          -- Exclude registrations that had their registration fees waived

          REGISTRANTREGISTRATION.AMOUNT > 0
      group by EVENT.BASECURRENCYID;


    declare @AMOUNTINCURRENCY money;
    declare @REGISTRATIONAMOUNTINCURRENCY money;

    if @TRANSACTIONCURRENCYID = @REGISTRATIONCURRENCYID
    begin
      set @AMOUNTINCURRENCY = @AMOUNT;
      set @REGISTRATIONAMOUNTINCURRENCY = @REGISTRATIONAMOUNT;
    end
    else
    begin

      if @BASEEXCHANGERATEID is not null or coalesce(@EXCHANGERATE, 0) <> 0
      begin
        if coalesce(@EXCHANGERATE, 0) <> 0
          set @AMOUNTINCURRENCY = dbo.UFN_CURRENCY_APPLYRATE(@AMOUNT, @EXCHANGERATE);
        else
          set @AMOUNTINCURRENCY = dbo.UFN_CURRENCY_CONVERT(@AMOUNT, @BASEEXCHANGERATEID);

        if @BASECURRENCYID = @REGISTRATIONCURRENCYID
        begin
          set @REGISTRATIONAMOUNTINCURRENCY = @REGISTRATIONAMOUNT;
        end
        else
        begin
          declare @TODAY date = getdate();
          declare @CORPORATERATETYPECODE tinyint = 0;
          declare @REGISTRATIONEXCHANGERATEID uniqueidentifier = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@REGISTRATIONCURRENCYID, @BASECURRENCYID, @TODAY
            @CORPORATERATETYPECODE, default); 

          if @REGISTRATIONEXCHANGERATEID is not null
            set @REGISTRATIONAMOUNTINCURRENCY = dbo.UFN_CURRENCY_CONVERT(@REGISTRATIONAMOUNT, @REGISTRATIONEXCHANGERATEID);

        end
      end
    end

    if @AMOUNTINCURRENCY is null or @REGISTRATIONAMOUNTINCURRENCY is null or @AMOUNTINCURRENCY <> @REGISTRATIONAMOUNTINCURRENCY
      return;
  end

  insert into
    @BENEFITS
    select
        REGISTRANTBENEFIT.BENEFITID,
        sum(REGISTRANTBENEFIT.QUANTITY) as QUANTITY,
        -- When the registration fee is waived, set the unit value to 0

        case
            when REGISTRANTREGISTRATION.AMOUNT = 0 then cast (0 as money)
            else REGISTRANTBENEFIT.UNITVALUE
        end as UNITVALUE,
        REGISTRANTBENEFIT.DETAILS,
        BENEFIT.NAME as BENEFITNAME,
        case
            when REGISTRANTREGISTRATION.AMOUNT = 0 then
        cast (0 as money)
            when REGISTRANTBENEFIT.BASECURRENCYID = @TRANSACTIONCURRENCYID then
        REGISTRANTBENEFIT.UNITVALUE * sum(REGISTRANTBENEFIT.QUANTITY)
            else
        dbo.UFN_CURRENCY_CONVERT
        (
                    REGISTRANTBENEFIT.UNITVALUE * sum(REGISTRANTBENEFIT.QUANTITY),
                    dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST
          (
                        REGISTRANTBENEFIT.BASECURRENCYID,
                        @TRANSACTIONCURRENCYID,
                        getdate(),
                        1,
                        default
                    )
                )
        end as TRANSACTIONTOTALVALUE
    from
    dbo.REGISTRANT
    inner join
    dbo.REGISTRANTBENEFIT on REGISTRANTBENEFIT.REGISTRANTID = REGISTRANT.ID
    inner join
    dbo.BENEFIT on BENEFIT.ID = REGISTRANTBENEFIT.BENEFITID
    left join
    dbo.REGISTRANTREGISTRATIONMAP on REGISTRANTREGISTRATIONMAP.REGISTRANTID = REGISTRANT.ID
    left join
    dbo.REGISTRANTREGISTRATION on REGISTRANTREGISTRATION.ID = REGISTRANTREGISTRATIONMAP.REGISTRANTREGISTRATIONID
    where
        (
            REGISTRANT.ID = @REGISTRANTID
      or
            REGISTRANT.GUESTOFREGISTRANTID = @REGISTRANTID
        )
    and
        BENEFITSWAIVED = 0
    and
        REGISTRANTBENEFIT.BASECURRENCYID = @BASECURRENCYID
    group by
        REGISTRANTBENEFIT.BENEFITID,
        REGISTRANTBENEFIT.DETAILS,
        BENEFIT.NAME,
        REGISTRANTBENEFIT.UNITVALUE,
        REGISTRANTREGISTRATION.AMOUNT,
        REGISTRANTBENEFIT.BASECURRENCYID;

  return;
end