UFN_PAYMENTAPPLICATION_GETGIFTFEE

Returns the gift fee amount for a given payment application provided a split amount () and the total revenue amount (in organization currency).

Return

Return Type
money

Parameters

Parameter Parameter Type Mode Description
@SPLITID uniqueidentifier IN
@SPLITAMOUNT money IN
@TOTALAMOUNT money IN
@APPLICATIONCODE tinyint IN
@DESIGNATIONLEVELID uniqueidentifier IN

Definition

Copy


CREATE function dbo.UFN_PAYMENTAPPLICATION_GETGIFTFEE(
        @SPLITID uniqueidentifier,
        @SPLITAMOUNT money,                -- SPLITAMOUNT must be an amount in the transaction currency.

        @TOTALAMOUNT money,                -- TOTALAMOUNT must be an amount in the organization currency.

        @APPLICATIONCODE tinyint,
        @DESIGNATIONLEVELID uniqueidentifier)
returns money
as

begin
/*
    returns null when no fee is accessed
    returns 0# when the fee is waived

*/

declare @PLEDGEID uniqueidentifier;
declare @FEEPERCENT numeric(10,5);
declare @FEE money;                        -- Fee amount in transaction currency.

declare @USECUSTOM bit;
declare @APPLYFEE bit;
declare @WAIVED bit

--Set default values

select @WAIVED = 0, @FEEPERCENT = 0.00, @USECUSTOM = 0, @FEE = 0.00;

--no fees possible

if @SPLITAMOUNT = 0 
    return null;

--Check if gift fee enabled globally

if dbo.UFN_GIFTFEE_ENABLED() = 0
    return null;

--check if application type is covered

set @APPLYFEE = dbo.UFN_GIFTFEE_APPLICATIONCODEINCLUDED(@APPLICATIONCODE, @DESIGNATIONLEVELID);

--If this is a pledge check for overrides on pledge

if @APPLICATIONCODE = 2 --Pledge

begin
    select top 1 @PLEDGEID = PLEDGEID 
    from dbo.INSTALLMENTSPLITPAYMENT where PAYMENTID = @SPLITID;

    select 
        @APPLYFEE = 1,
        @FEEPERCENT = CUSTOMFEE/100,
        @WAIVED = WAIVEFEE,
        @USECUSTOM = USECUSTOM
    from dbo.PLEDGEGIFTFEEOVERRIDE
    where ID = @PLEDGEID and 
        (WAIVEFEE = 1 or USECUSTOM = 1);
end

--This application type does not have gift fees

--and there is no override on the pledge

if @APPLYFEE = 0 
    return null;

--Otherwise use setup

if @USECUSTOM = 0 and @WAIVED = 0
begin
    if dbo.UFN_DESIGNATIONLEVELGIFTFEE_ENABLED(@DESIGNATIONLEVELID) = 1
    begin
        -- Multicurrency - RobertDi 6/1/2010 - Gift fee "from amounts" are expressed in organization

        --                                     currency, so TOTALAMOUNT must be in organization currency.

        --                    RobBr 9/22/2010 - Gift fee "from amounts" can now be in the base currency

        --                                        of the designation level, so we will use ORGANIZATIONFROMAMOUNT

        --                                        for comparison.


        --Use structure from designation level if it exists otherwise use defaults

        if dbo.UFN_DESIGNATIONLEVELGIFTFEE_OVERRIDESTRUCTURE(@DESIGNATIONLEVELID) = 1
            select top 1 
                @FEEPERCENT = FEE/100
            from dbo.DESIGNATIONLEVELGIFTFEESTRUCTURE
            where DESIGNATIONLEVELID = @DESIGNATIONLEVELID
                    and ORGANIZATIONFROMAMOUNT <= @TOTALAMOUNT
            order by ORGANIZATIONFROMAMOUNT desc;
        else
        begin
            select top 1 
                @FEEPERCENT = FEE/100
            from dbo.GIFTFEESTRUCTURE
            where FROMAMOUNT <= @TOTALAMOUNT
            order by FROMAMOUNT desc;
        end
    end
end

-- Calculate and round the fee amount.


declare @CURRENCYID uniqueidentifier;
select @CURRENCYID = TRANSACTIONCURRENCYID from dbo.REVENUESPLIT where ID = @SPLITID;

declare @DECIMALDIGITS tinyint;
declare @ROUNDINGTYPECODE tinyint;

select
    @DECIMALDIGITS = DECIMALDIGITS, 
    @ROUNDINGTYPECODE = ROUNDINGTYPECODE
from dbo.UFN_CURRENCY_GETPROPERTIES(@CURRENCYID);

declare @PAYMENTID uniqueidentifier;
declare @TOTALAMOUNT_TRANSACTION money;

if exists(select 1 from dbo.FINANCIALTRANSACTIONLINEITEM LI where LI.ID = @SPLITID)
begin
    select 
          @PAYMENTID = FINANCIALTRANSACTIONID 
         ,@TOTALAMOUNT_TRANSACTION = FT.TRANSACTIONAMOUNT
    from FINANCIALTRANSACTIONLINEITEM FT where ID = @SPLITID

    declare @SPLITSXML xml = (
            select ftli.ID, ftli.TRANSACTIONAMOUNT AMOUNT
            from FINANCIALTRANSACTION ft 
            inner join FINANCIALTRANSACTIONLINEITEM ftli on ft.ID = ftli.FINANCIALTRANSACTIONID
            inner join dbo.REVENUESPLIT_EXT RSE on RSE.ID = ftli.ID
            where ft.ID = @PAYMENTID and ftli.DELETEDON is null and ftli.TYPECODE != 1
            for xml raw('ITEM'),type,elements,root('AMOUNTSTOPRORATE'),BINARY BASE64)

    set @FEE = (
            select AMOUNT 
            from dbo.UFN_SPLITS_PRORATEAMOUNTS(@TOTALAMOUNT_TRANSACTION, (@SPLITAMOUNT * @FEEPERCENT), @DECIMALDIGITS, @SPLITSXML)
            where ID = @SPLITID
    );
end
else
    set @FEE = (@SPLITAMOUNT * @FEEPERCENT);

if @WAIVED = 1
    return 0;

if @FEE > 0
    return @FEE

return null;

end