USP_DATALIST_BATCHREVENUEMGDEFAULTFROMCONDITION
Returns default matching gift claim information based on the matching condition and gift amount.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONSTITUENTID | uniqueidentifier | IN | Constituent ID |
@MATCHINGGIFTCONDITIONID | uniqueidentifier | IN | Matching gift condition ID |
@DATE | datetime | IN | Date |
@DONATIONAMOUNT | money | IN | Donation amount |
@DONATIONRECEIPTAMOUNT | money | IN | Donation receipt amount |
@DONATIONSPLITS | xml | IN | Donation splits |
Definition
Copy
/****
NOTE: This code is similar to UFN_REVENUEBATCH_GETDEFAULTMATCHINGGIFTS_FORCONSTITUENT_2.xml
****/
CREATE procedure dbo.USP_DATALIST_BATCHREVENUEMGDEFAULTFROMCONDITION
(
@CONSTITUENTID uniqueidentifier,
@MATCHINGGIFTCONDITIONID uniqueidentifier,
@DATE datetime,
@DONATIONAMOUNT money,
@DONATIONRECEIPTAMOUNT money,
@DONATIONSPLITS xml
)
as
set nocount on;
declare @AMOUNT money;
declare @MGAMOUNT money;
declare @MGSPLITS xml;
declare @COULDNOTDEFAULTMATCHINGGIFT bit;
declare @RETURNROW bit = 0;
set @AMOUNT = @DONATIONAMOUNT;
declare @ORGANIZATIONID uniqueidentifier;
declare @MATCHINGFACTOR decimal(5,2);
declare @MINMATCHPERGIFT money;
declare @MAXMATCHPERGIFT money;
declare @MAXMATCHANNUAL money;
declare @MAXMATCHTOTAL money;
declare @MATCHTYPECODE tinyint;
declare @REVENUETYPECODE tinyint;
declare @APPLICATIONCODE tinyint;
declare @DONATIONSPLITS_T table
(
ID uniqueidentifier,
DESIGNATIONID uniqueidentifier,
DESIGNATIONTRANSLATION nvarchar(512),
AMOUNT money,
SEQUENCE int,
APPLICATIONCODE tinyint,
TYPECODE tinyint,
TRANSACTIONCURRENCYID uniqueidentifier
);
insert into @DONATIONSPLITS_T(ID, DESIGNATIONID, DESIGNATIONTRANSLATION, AMOUNT, SEQUENCE, APPLICATIONCODE, TYPECODE, TRANSACTIONCURRENCYID)
select
T.c.value('(ID)[1]', 'uniqueidentifier'),
T.c.value('(DESIGNATIONID)[1]', 'uniqueidentifier'),
DESIGNATION.NAME,
T.c.value('(AMOUNT)[1]', 'money'),
T.c.value('(SEQUENCE)[1]', 'int'),
T.c.value('(APPLICATIONCODE)[1]', 'tinyint'),
T.c.value('(TYPECODE)[1]', 'tinyint'),
T.c.value('(TRANSACTIONCURRENCYID)[1]', 'uniqueidentifier')
from @DONATIONSPLITS.nodes('/SPLITS/ITEM') T(c)
inner join DESIGNATION on DESIGNATION.ID = T.c.value('(DESIGNATIONID)[1]', 'uniqueidentifier');
select
@ORGANIZATIONID=ORGANIZATIONID,
@MATCHINGFACTOR=MATCHINGFACTOR,
@MINMATCHPERGIFT=MINMATCHPERGIFT,
@MAXMATCHPERGIFT=MAXMATCHPERGIFT,
@MAXMATCHANNUAL=MAXMATCHANNUAL,
@MAXMATCHTOTAL=MAXMATCHTOTAL,
@MATCHTYPECODE=MATCHTYPECODE,
@REVENUETYPECODE=REVENUETYPECODE
from
dbo.MATCHINGGIFTCONDITION
where
ID = @MATCHINGGIFTCONDITIONID;
declare @GENERATECLAIMS bit;
set @GENERATECLAIMS = 1;
select @AMOUNT = coalesce(sum(AMOUNT), 0)
from @DONATIONSPLITS_T where TYPECODE = @REVENUETYPECODE;
--check if we need to apply the full amount or the tax portion
if @MATCHTYPECODE = 1
begin
if exists(select ID from @DONATIONSPLITS_T where TYPECODE <> @REVENUETYPECODE) or @AMOUNT = 0
set @GENERATECLAIMS = 0; --If we're only matching the tax-deductible portions but some of the splits aren't to be matched, we can't figure out how much to match
else
set @MGAMOUNT = @DONATIONRECEIPTAMOUNT * @MATCHINGFACTOR;
end
else
begin
set @MGAMOUNT = @AMOUNT * @MATCHINGFACTOR;
end
--determine if the matching gift needs to be adjusted based on the conditions of the MG organization
--REVISIT: This function will not take batch gifts into account. Not sure how to deal with it.
set @MGAMOUNT = dbo.UFN_MATCHINGGIFTPLEDGE_CALCULATEMGAMOUNT(@CONSTITUENTID, @ORGANIZATIONID, @MGAMOUNT, @DATE, @MAXMATCHPERGIFT, @MAXMATCHANNUAL, @MAXMATCHTOTAL);
if @MGAMOUNT >= @MINMATCHPERGIFT and @MGAMOUNT > 0 and @GENERATECLAIMS = 1
begin
--Get new MG splits
select @MGSPLITS = (select sum(AMOUNT) as AMOUNT, DESIGNATIONID, DESIGNATIONTRANSLATION, TYPECODE, TRANSACTIONCURRENCYID
from @DONATIONSPLITS_T where TYPECODE = @REVENUETYPECODE
group by DESIGNATIONID, DESIGNATIONTRANSLATION, TYPECODE, TRANSACTIONCURRENCYID
for xml raw('ITEM'),type,elements,root('SPLITS'),binary base64);
select @APPLICATIONCODE = APPLICATIONCODE from @DONATIONSPLITS_T where TYPECODE = @REVENUETYPECODE;
set @MGSPLITS = dbo.UFN_REVENUEBATCH_GETAUTOMGSPLITS(@AMOUNT, @MGAMOUNT, @MGSPLITS, @REVENUETYPECODE, @APPLICATIONCODE);
set @COULDNOTDEFAULTMATCHINGGIFT = 0;
set @RETURNROW = 1;
end
else
begin
if @GENERATECLAIMS = 0
begin
--For some reason, we've decided not to default claims. Indicate this fact.
set @MGAMOUNT = null;
set @MGSPLITS = null;
set @COULDNOTDEFAULTMATCHINGGIFT = 1;
set @RETURNROW = 1;
end
end
select
@MGAMOUNT as MGAMOUNT,
@MGSPLITS as MGSPLITS,
@COULDNOTDEFAULTMATCHINGGIFT as COULDNOTDEFAULTMATCHINGGIFT
where @RETURNROW = 1;