USP_MATCHINGGIFTCLAIM_RECREATE
A stripped down version of USP_MATCHINGGIFTPLEDGE_AUTOADD used to re-create the splits on a Matching Gift Claim when a payment is edited.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CHANGEAGENTID | uniqueidentifier | IN | |
@GIFTID | uniqueidentifier | IN | |
@DATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_MATCHINGGIFTCLAIM_RECREATE
(
@CHANGEAGENTID uniqueidentifier,
@GIFTID uniqueidentifier,
@DATE datetime
)
as begin
set nocount on;
declare @MGORGID uniqueidentifier;
declare @MATCHINGGIFTCONDITIONID uniqueidentifier;
declare @MATCHINGGIFTAMOUNT money;
declare @MATCHINGGIFTMINAMOUNT money;
declare @MATCHINGGIFTMAXAMOUNT money;
declare @MATCHINGGIFTMAXMATCHANNUAL money;
declare @MATCHINGGIFTMAXMATCHTOTAL money;
declare @MATCHINGGIFTFACTOR decimal(30,2);
declare @MGSPLITS xml;
declare @MATCHTYPECODE tinyint;
declare @REVENUETYPECODE tinyint;
declare @APPLICATIONCODE tinyint = 0;
declare @TRANSACTIONCURRENCYID uniqueidentifier;
declare @BASECURRENCYID uniqueidentifier;
declare @BASEEXCHANGERATEID uniqueidentifier;
declare @SPLITS xml;
declare @CONSTITUENTID uniqueidentifier;
declare @RECEIPTAMOUNT money;
declare @CURRENCYDECIMALDIGITS tinyint;
declare @CURRENCYROUNDINGTYPECODE tinyint;
declare @REVENUEMATCHINGGIFTID uniqueidentifier;
declare @AMOUNT money;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
select
@TRANSACTIONCURRENCYID = REVENUE.TRANSACTIONCURRENCYID,
@BASECURRENCYID = REVENUE.BASECURRENCYID,
@BASEEXCHANGERATEID = REVENUE.BASEEXCHANGERATEID,
@CONSTITUENTID = REVENUE.CONSTITUENTID,
@RECEIPTAMOUNT = REVENUE.RECEIPTAMOUNT
from
dbo.REVENUE
where ID = @GIFTID;
select
@CURRENCYDECIMALDIGITS = DECIMALDIGITS,
@CURRENCYROUNDINGTYPECODE = ROUNDINGTYPECODE
from dbo.CURRENCY
where ID = @TRANSACTIONCURRENCYID;
declare REVENUEMATCHINGGIFTDEFAULTCURSOR cursor local fast_forward for
select
REVENUEMATCHINGGIFT.ID,
MATCHINGGIFTCONDITION.ID as MATCHINGGIFTCONDITIONID,
MATCHINGGIFTCONDITION.REVENUETYPECODE,
MATCHINGGIFTCONDITION.MATCHTYPECODE,
MATCHINGGIFTCONDITION.MINMATCHPERGIFT,
MATCHINGGIFTCONDITION.MAXMATCHPERGIFT,
MATCHINGGIFTCONDITION.MAXMATCHANNUAL,
MATCHINGGIFTCONDITION.MAXMATCHTOTAL,
MATCHINGGIFTCONDITION.MATCHINGFACTOR,
MATCHINGGIFTCONDITION.ORGANIZATIONID as MGORGID
from dbo.REVENUEMATCHINGGIFT
inner join dbo.MATCHINGGIFTCONDITION on MATCHINGGIFTCONDITION.ID = REVENUEMATCHINGGIFT.MATCHINGGIFTCONDITIONID
where
[MGSOURCEREVENUEID] = @GIFTID
and REVENUEMATCHINGGIFT.ID not in (select PLEDGEID from INSTALLMENTSPLITPAYMENT)
and REVENUEMATCHINGGIFT.ID not in (select WRITEOFF.REVENUEID from dbo.WRITEOFFSPLIT inner join dbo.WRITEOFF on WRITEOFF.ID = WRITEOFFSPLIT.WRITEOFFID);
open REVENUEMATCHINGGIFTDEFAULTCURSOR;
fetch next from REVENUEMATCHINGGIFTDEFAULTCURSOR into @REVENUEMATCHINGGIFTID, @MATCHINGGIFTCONDITIONID, @REVENUETYPECODE, @MATCHTYPECODE, @MATCHINGGIFTMINAMOUNT, @MATCHINGGIFTMAXAMOUNT, @MATCHINGGIFTMAXMATCHANNUAL, @MATCHINGGIFTMAXMATCHTOTAL, @MATCHINGGIFTFACTOR, @MGORGID;
while (@@FETCH_STATUS = 0)
begin
--Bug 30719 - AdamBu 4/1/09 - Only generate matching gift claims based on RECEIPTAMOUNT
-- if all the splits in the revenue should be matched
declare @GENERATECLAIMS bit = 1;
-- calculate matching gift amount
-- recalculate matchgift amount based on the revenue type code and get application code
select @AMOUNT = sum(TRANSACTIONAMOUNT)
from dbo.REVENUESPLIT
where REVENUEID = @GIFTID and REVENUESPLIT.TYPECODE = @REVENUETYPECODE;
--AKG CR299627-050108 check if need to apply full amount or tax portion
if @MATCHTYPECODE = 1 and exists(select ID from dbo.REVENUESPLIT where REVENUEID=@GIFTID and TYPECODE = @REVENUETYPECODE)
begin
if exists(
select ID
from dbo.REVENUESPLIT
where REVENUEID=@GIFTID and TYPECODE <> @REVENUETYPECODE
)
begin
--If we only match tax deductible portions, but not all the splits on a revenue should
-- be matched, then we don't know how much to match for, so don't auto-generate claims.
set @GENERATECLAIMS = 0;
end
else
begin
set @MATCHINGGIFTAMOUNT = dbo.UFN_CURRENCY_ROUND(@RECEIPTAMOUNT * @MATCHINGGIFTFACTOR, @CURRENCYDECIMALDIGITS, @CURRENCYROUNDINGTYPECODE);
end
end
else
begin
set @MATCHINGGIFTAMOUNT = dbo.UFN_CURRENCY_ROUND(@AMOUNT * @MATCHINGGIFTFACTOR, @CURRENCYDECIMALDIGITS, @CURRENCYROUNDINGTYPECODE);
end
-- determine if the matching gift needs to be adjusted based on the conditions of the MG organization
set @MATCHINGGIFTAMOUNT = dbo.UFN_MATCHINGGIFTPLEDGE_CALCULATEMGAMOUNTINCURRENCY(@CONSTITUENTID,@MGORGID,@MATCHINGGIFTAMOUNT,@DATE,@MATCHINGGIFTMAXAMOUNT,@MATCHINGGIFTMAXMATCHANNUAL,@MATCHINGGIFTMAXMATCHTOTAL,@TRANSACTIONCURRENCYID);
if (@MATCHINGGIFTAMOUNT >= @MATCHINGGIFTMINAMOUNT) and @MATCHINGGIFTAMOUNT > 0 and @GENERATECLAIMS = 1
begin
-- Get new MG splits
-- get the splits for the current type code
select @SPLITS = (
select sum(TRANSACTIONAMOUNT) AMOUNT, DESIGNATIONID, TYPECODE, @TRANSACTIONCURRENCYID [TRANSACTIONCURRENCYID], REVENUESPLIT.APPLICATIONCODE
from dbo.REVENUESPLIT
where REVENUEID = @GIFTID and REVENUESPLIT.TYPECODE = @REVENUETYPECODE
group by DESIGNATIONID, REVENUESPLIT.TYPECODE, REVENUESPLIT.APPLICATIONCODE
for xml raw('ITEM'),type,elements,root('SPLITS'),binary base64
);
set @MGSPLITS = dbo.UFN_MATCHINGGIFT_GETAUTOADDSPLITS_3(@AMOUNT,@MATCHINGGIFTAMOUNT,@SPLITS,@REVENUETYPECODE)
-- add matching gift
exec dbo.USP_MATCHINGGIFTCLAIM_READD @REVENUEMATCHINGGIFTID, @CHANGEAGENTID, @GIFTID, @MGORGID, @DATE, @MATCHINGGIFTAMOUNT, @MGSPLITS, @MATCHINGGIFTCONDITIONID, @TRANSACTIONCURRENCYID, @TRANSACTIONCURRENCYID, null;
end
else
begin
if @GENERATECLAIMS = 0
begin
--For some reason, we've decided to not create claims. Flag the record as eligible.
update dbo.REVENUE
set ELIGIBLEFORMATCHINGGIFTCLAIM = 1,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = getdate()
where ID = @GIFTID
end
end
--clean up
set @MATCHINGGIFTCONDITIONID = null;
set @MATCHINGGIFTAMOUNT = 0;
set @APPLICATIONCODE = 0;
fetch next from REVENUEMATCHINGGIFTDEFAULTCURSOR into @REVENUEMATCHINGGIFTID, @MATCHINGGIFTCONDITIONID, @REVENUETYPECODE, @MATCHTYPECODE, @MATCHINGGIFTMINAMOUNT, @MATCHINGGIFTMAXAMOUNT, @MATCHINGGIFTMAXMATCHANNUAL, @MATCHINGGIFTMAXMATCHTOTAL, @MATCHINGGIFTFACTOR, @MGORGID;
end
close REVENUEMATCHINGGIFTDEFAULTCURSOR;
deallocate REVENUEMATCHINGGIFTDEFAULTCURSOR;
return 0;
end