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