UFN_MATCHINGGIFTPLEDGE_CALCULATEMGAMOUNTINCURRENCY

This function calculates the amount for a matching gift claim based on the matching organization's matching conditions for revenue in a specific currency.

Return

Return Type
money

Parameters

Parameter Parameter Type Mode Description
@CONSTITUENTID uniqueidentifier IN
@MGORGID uniqueidentifier IN
@AMOUNT money IN
@DATE datetime IN
@MAXMATCHPERGIFT money IN
@MAXMATCHANNUAL money IN
@MAXMATCHTOTAL money IN
@BASECURRENCYID uniqueidentifier IN

Definition

Copy


            CREATE function dbo.UFN_MATCHINGGIFTPLEDGE_CALCULATEMGAMOUNTINCURRENCY
            (
                @CONSTITUENTID uniqueidentifier,
                @MGORGID uniqueidentifier,
                @AMOUNT money,
                @DATE datetime,
                @MAXMATCHPERGIFT money,
                @MAXMATCHANNUAL money,
                @MAXMATCHTOTAL money,
                @BASECURRENCYID uniqueidentifier = null  --NB:  Not necessarily the base currency.  Couldn't rename because of backwards compatibility.

            )
            returns money
            with execute as caller
            as
            begin
                declare @MATCHINGGIFTAMOUNT money;
                declare @FISCALYEARSTARTDATE datetime;
                declare @CONSTITUENTMATCHEDANNUALTOTAL money;
                declare @CONSTITUENTMATCHEDTOTAL money;

                declare @MAXLEFTINYEAR money;
                declare @MAXLEFTTOTAL money;

                declare @OVERMAXANNUAL bit;
                declare @OVERMAXTOTAL bit;

                if @BASECURRENCYID is null
                    set @BASECURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();

                set @MATCHINGGIFTAMOUNT = @AMOUNT;
                set @FISCALYEARSTARTDATE = dbo.UFN_DATE_THISFISCALYEAR_FIRSTDAY(@DATE, 0);

                -- find the totals for the constituent and the matching organization

                -- base currency of the condition is the transaction currency of the claims

                select
                    @CONSTITUENTMATCHEDANNUALTOTAL = dbo.UFN_CONSTITUENT_GETMATCHEDTOTALFORYEARINCURRENCY(@CONSTITUENTID, @MGORGID, @FISCALYEARSTARTDATE, @BASECURRENCYID),
                    @CONSTITUENTMATCHEDTOTAL = dbo.UFN_CONSTITUENT_GETMATCHEDTOTALINCURRENCY(@CONSTITUENTID, @MGORGID, @BASECURRENCYID);

                -- determine if the matching gift amount is greater than the amount remaining for the year

                if @MAXMATCHANNUAL > 0
                    begin
                        set @MAXLEFTINYEAR = @MAXMATCHANNUAL - @CONSTITUENTMATCHEDANNUALTOTAL;
                        if @MATCHINGGIFTAMOUNT > @MAXLEFTINYEAR set @OVERMAXANNUAL = 1;
                    end

                -- determine if the matching gift amount is greater than the total amount remaining

                if @MAXMATCHTOTAL > 0
                    begin
                        set @MAXLEFTTOTAL = @MAXMATCHTOTAL - @CONSTITUENTMATCHEDTOTAL
                        if @MATCHINGGIFTAMOUNT > @MAXLEFTTOTAL set @OVERMAXTOTAL = 1;
                    end

                if @OVERMAXANNUAL = 1 and @OVERMAXTOTAL = 1
                    -- if the mg amount is greater than both the amount left fo the year and the total amount, choose the smaller of the two

                    begin
                        if @MAXLEFTINYEAR < @MAXLEFTTOTAL
                            set @MATCHINGGIFTAMOUNT = @MAXLEFTINYEAR;
                        else
                            set @MATCHINGGIFTAMOUNT = @MAXLEFTTOTAL;
                    end
                else if @OVERMAXANNUAL = 1
                    begin
                        set @MATCHINGGIFTAMOUNT = @MAXLEFTINYEAR;
                    end
                else if @OVERMAXTOTAL = 1
                    begin
                        set @MATCHINGGIFTAMOUNT = @MAXLEFTTOTAL;
                    end

                -- if the matching gift amount is greater than the max amount per gift condition, set the mg amount to the max

                if @MATCHINGGIFTAMOUNT > @MAXMATCHPERGIFT and @MAXMATCHPERGIFT > 0
                    set @MATCHINGGIFTAMOUNT = @MAXMATCHPERGIFT;

                if @MATCHINGGIFTAMOUNT < 0
                    set @MATCHINGGIFTAMOUNT = 0;

                return @MATCHINGGIFTAMOUNT;
            end