UFN_REVENUETRIBUTE_CALCULATEGROSSAMOUNT

Calculates the gross amount for a revenue tribute.

Return

Return Type
money

Parameters

Parameter Parameter Type Mode Description
@TRIBUTEID uniqueidentifier IN
@REVENUEID uniqueidentifier IN
@TRIBUTEAMOUNT money IN

Definition

Copy


CREATE function dbo.UFN_REVENUETRIBUTE_CALCULATEGROSSAMOUNT
(
  @TRIBUTEID uniqueidentifier,
  @REVENUEID uniqueidentifier,
  @TRIBUTEAMOUNT money
)
returns money
with execute as caller
as
begin
  declare @GROSSAMOUNT money;
  declare @TRIBUTETAXCLAIMAMOUNT money;
  declare @TRIBUTEPERCENTAGE decimal(18,16) = 0;
  declare @DATE datetime;
  declare @REVENUETAXCLAIMAMOUNT money;
  declare @TRANSACTIONTYPE smallint;
  declare @BASETAXRATE numeric(30,6);
  declare @TRANSITIONALTAXRATE numeric(30,6);

  select
    @DATE = REVENUE.DATE,
    @TRANSACTIONTYPE = REVENUE.TRANSACTIONTYPECODE
  from
    dbo.REVENUETRIBUTE
  inner join
    dbo.REVENUE on REVENUE.ID = REVENUETRIBUTE.REVENUEID
  where
    REVENUETRIBUTE.TRIBUTEID = @TRIBUTEID and
    REVENUE.ID = @REVENUEID;

  declare @TRIBUTES_TOTALAMOUNT money;

  select
    @TRIBUTES_TOTALAMOUNT = sum(AMOUNT)
  from
    dbo.REVENUETRIBUTE
  where
    REVENUEID = @REVENUEID;

  if @TRIBUTES_TOTALAMOUNT > 0
  begin
    set @TRIBUTEPERCENTAGE = @TRIBUTEAMOUNT / @TRIBUTES_TOTALAMOUNT;
  end

  set @BASETAXRATE = dbo.UFN_GETGIFTAIDBASETAXRATE(@DATE);
  set @TRANSITIONALTAXRATE = dbo.UFN_GETGIFTAIDTRANSITIONALTAXRATE(@DATE);

  --pledges require a different calculation

  if @TRANSACTIONTYPE = 1
  begin
    select
      @REVENUETAXCLAIMAMOUNT = (sum(coalesce(TAXCLAIM.BASETAXCLAIMAMOUNT + TAXCLAIM.TRANSITIONALTAXCLAIMAMOUNT, 0))) * @TRIBUTEPERCENTAGE
    from
      dbo.REVENUESPLIT
    cross apply
      dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATEPLEDGETAXCLAIMAMOUNT(REVENUESPLIT.ID) as TAXCLAIM
    where
      REVENUESPLIT.REVENUEID = @REVENUEID
  end
  else
  begin
    set @REVENUETAXCLAIMAMOUNT = dbo.UFN_GIFTAIDREVENUESPLIT_GETTAXCLAIMAMOUNT(@REVENUEID, 1) * @TRIBUTEPERCENTAGE;
  end

  set @TRIBUTETAXCLAIMAMOUNT = @TRIBUTEAMOUNT * ((@BASETAXRATE + @TRANSITIONALTAXRATE) / (100 - (@BASETAXRATE + @TRANSITIONALTAXRATE)))

  if @TRIBUTETAXCLAIMAMOUNT > @REVENUETAXCLAIMAMOUNT
  begin
    set @TRIBUTETAXCLAIMAMOUNT = @REVENUETAXCLAIMAMOUNT
  end

  set @GROSSAMOUNT = @TRIBUTEAMOUNT + coalesce(@TRIBUTETAXCLAIMAMOUNT, 0);

  return @GROSSAMOUNT;
end