USP_DONORCHALLENGEENCUMBEREDFUND_MATCH
Executes the "Donor Challenge Encumbered Fund: Match" record operation.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | Input parameter indicating the ID of the record being updated. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the update. |
Definition
Copy
CREATE procedure dbo.USP_DONORCHALLENGEENCUMBEREDFUND_MATCH
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier
)
as
set nocount on
begin try
declare @CURRENTDATE datetime = getdate();
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @REVID uniqueidentifier;
declare @REVSPLITID uniqueidentifier;
declare @RECOGNITIONCREDITID uniqueidentifier;
declare @SPONSORID uniqueidentifier;
declare @DONORCHALLENGETYPECODE int;
declare @DONORID uniqueidentifier;
declare @DESIGNATIONID uniqueidentifier;
declare @REVENUERECOGNITIONTYPECODEID uniqueidentifier;
declare @AMOUNT money;
declare @DATE datetime;
declare @DONORCHALLENGEID uniqueidentifier;
declare @MATCHTHRESHOLD money;
declare @BASECURRENCYID uniqueidentifier;
set @DATE = dbo.UFN_DATE_GETEARLIESTTIME(@CURRENTDATE);
select
@SPONSORID = DONORCHALLENGE.EXTERNALSPONSORID,
@AMOUNT = DONORCHALLENGEENCUMBERED.AMOUNT,
@DESIGNATIONID = DONORCHALLENGEENCUMBERED.DESIGNATIONID,
@REVENUERECOGNITIONTYPECODEID = DONORCHALLENGEENCUMBERED.REVENUERECOGNITIONTYPECODEID,
@DONORID = REVENUE.CONSTITUENTID,
@DONORCHALLENGETYPECODE = DONORCHALLENGE.TYPECODE,
@DONORCHALLENGEID = DONORCHALLENGE.ID,
@MATCHTHRESHOLD = case when DONORCHALLENGE.TYPECODE = 1 then DONORCHALLENGE.MATCHTHRESHOLD else DONORCHALLENGE.TOTALFUNDS end,
@BASECURRENCYID = DONORCHALLENGEENCUMBERED.BASECURRENCYID
from
dbo.DONORCHALLENGEENCUMBERED
inner join
dbo.DONORCHALLENGE on DONORCHALLENGE.ID = DONORCHALLENGEENCUMBERED.DONORCHALLENGEID
inner join
dbo.REVENUESPLIT on REVENUESPLIT.ID = DONORCHALLENGEENCUMBERED.REVENUESPLITID
inner join
dbo.REVENUE on REVENUE.ID = REVENUESPLIT.REVENUEID
where
DONORCHALLENGEENCUMBERED.ID = @ID and
DONORCHALLENGEENCUMBERED.STATUSTYPECODE = 0;
declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@BASECURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENTDATE, 0, null);
if @SPONSORID is not null and @DONORCHALLENGETYPECODE = 0
begin
exec dbo.USP_DONORCHALLENGE_ADDREVENUE @REVID output, @REVSPLITID output, @SPONSORID, @DESIGNATIONID,
@AMOUNT, @DATE, @CHANGEAGENTID, @CURRENTDATE, @BASECURRENCYID;
--Add recognition credits for externally sponsored challenge
set @RECOGNITIONCREDITID = newid();
insert into dbo.REVENUERECOGNITION
(
ID,
REVENUESPLITID,
CONSTITUENTID,
AMOUNT,
EFFECTIVEDATE,
REVENUERECOGNITIONTYPECODEID,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED,
BASECURRENCYID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID
)
select
@RECOGNITIONCREDITID,
@REVSPLITID,
REVENUE.CONSTITUENTID,
DONORCHALLENGEENCUMBERED.AMOUNT,
@DATE,
@REVENUERECOGNITIONTYPECODEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE,
DONORCHALLENGEENCUMBERED.BASECURRENCYID,
dbo.UFN_CURRENCY_CONVERT(DONORCHALLENGEENCUMBERED.AMOUNT, @ORGANIZATIONEXCHANGERATEID),
@ORGANIZATIONEXCHANGERATEID
from
dbo.REVENUESPLIT
inner join
dbo.REVENUE on REVENUE.ID = REVENUESPLIT.REVENUEID
inner join
dbo.DONORCHALLENGEENCUMBERED on REVENUESPLIT.ID = DONORCHALLENGEENCUMBERED.REVENUESPLITID
where
DONORCHALLENGEENCUMBERED.ID = @ID;
end
--add recognition credit to internal sponsors
if @DONORCHALLENGETYPECODE = 0 and @SPONSORID is null
begin
insert into dbo.RECOGNITIONCREDIT
(
ID,
CONSTITUENTID,
AMOUNT,
EFFECTIVEDATE,
USERRECOGNITIONTYPECODEID,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED,
BASECURRENCYID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID,
DESIGNATIONID,
RECOGNITIONCREDITTYPECODE,
DONORCHALLENGEENCUMBEREDID
)
select
newid(),
REVENUE.CONSTITUENTID,
DONORCHALLENGEENCUMBERED.AMOUNT,
@DATE,
@REVENUERECOGNITIONTYPECODEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE,
DONORCHALLENGEENCUMBERED.BASECURRENCYID,
dbo.UFN_CURRENCY_CONVERT(DONORCHALLENGEENCUMBERED.AMOUNT, @ORGANIZATIONEXCHANGERATEID),
@ORGANIZATIONEXCHANGERATEID,
DONORCHALLENGEENCUMBERED.DESIGNATIONID,
1, --donor challenge
DONORCHALLENGEENCUMBERED.ID
from
dbo.REVENUESPLIT
inner join
dbo.REVENUE on REVENUE.ID = REVENUESPLIT.REVENUEID
inner join
dbo.DONORCHALLENGEENCUMBERED on REVENUESPLIT.ID = DONORCHALLENGEENCUMBERED.REVENUESPLITID
where
DONORCHALLENGEENCUMBERED.ID = @ID;
end
update
dbo.DONORCHALLENGEENCUMBERED
set
STATUSTYPECODE = 1,
MATCHEDREVENUEID = @REVID,
MATCHEDREVENUERECOGNITIONID = @RECOGNITIONCREDITID,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
where
ID = @ID;
if dbo.UFN_DONORCHALLENGE_MATCHEDAMOUNT(@DONORCHALLENGEID) >= @MATCHTHRESHOLD
begin
update
dbo.DONORCHALLENGE
set
STATUSTYPECODE = 1,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
where
ID = @DONORCHALLENGEID and
STATUSTYPECODE <> 1;
if @DONORCHALLENGETYPECODE = 1
exec dbo.USP_DONORCHALLENGE_ADDLUMPSUM @DONORCHALLENGEID, @CHANGEAGENTID;
end
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch