USP_DONORCHALLENGEENCUMBEREDFUND_MATCHPLEDGEPAYMENT
Executes the "Donor Challenge Encumbered Fund: Match Pledge Payment" record operation.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | nvarchar(72) | 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_MATCHPLEDGEPAYMENT
(
@ID nvarchar(72),
@CHANGEAGENTID uniqueidentifier
)
as
set nocount on
begin try
declare @CURRENTDATE datetime = getdate();
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @DONORCHALLENGEID uniqueidentifier;
declare @PAYMENTSPLITID uniqueidentifier;
declare @PLEDGESPLITID uniqueidentifier;
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 @MATCHTYPECODE tinyint;
declare @ENCUMBEREDAMOUNT money;
declare @DATE datetime;
declare @MATCHTHRESHOLD money;
declare @MATCHINGFACTOR money;
declare @DONORCHALLENGEENCUMBEREDID uniqueidentifier;
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
declare @BASECURRENCYID uniqueidentifier;
declare @BASECURRENCYDECIMALDIGITS tinyint;
declare @BASECURRENCYROUNDINGTYPECODE tinyint;
set @DATE = dbo.UFN_DATE_GETEARLIESTTIME(@CURRENTDATE);
set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
set @DONORCHALLENGEID = cast(left(@ID, 36) as uniqueidentifier);
set @PAYMENTSPLITID = cast(right(@ID, 36) as uniqueidentifier);
--Get the Challenge Info
select
@SPONSORID = DONORCHALLENGE.EXTERNALSPONSORID,
--@REVENUERECOGNITIONTYPECODEID = DONORCHALLENGE.REVENUERECOGNITIONTYPECODEID,
@DONORCHALLENGETYPECODE = DONORCHALLENGE.TYPECODE,
@MATCHTHRESHOLD = case when DONORCHALLENGE.TYPECODE = 1 then DONORCHALLENGE.MATCHTHRESHOLD else DONORCHALLENGE.TOTALFUNDS end,
@MATCHTYPECODE = DONORCHALLENGE.MATCHTYPECODE,
@MATCHINGFACTOR = case when DONORCHALLENGE.TYPECODE = 1 then 1 else DONORCHALLENGE.MATCHINGFACTOR end,
@BASECURRENCYID = DONORCHALLENGE.BASECURRENCYID
from dbo.DONORCHALLENGE
where DONORCHALLENGE.ID = @DONORCHALLENGEID;
select
@BASECURRENCYDECIMALDIGITS = DECIMALDIGITS,
@BASECURRENCYROUNDINGTYPECODE = ROUNDINGTYPECODE
from
dbo.CURRENCY
where
ID = @BASECURRENCYID;
--Find the matching pledge
select @PLEDGESPLITID = REVENUESPLIT.ID,
@DONORID = PAYMENT.CONSTITUENTID,
@AMOUNT = dbo.UFN_CURRENCY_ROUND(
case
when @MATCHTYPECODE = 1
then
case
when PAYMENT.TRANSACTIONAMOUNT = 0
then 0
else PAYMENT.RECEIPTAMOUNT/PAYMENT.TRANSACTIONAMOUNT
* case
when @BASECURRENCYID = PAYMENTSPLIT.TRANSACTIONCURRENCYID
then PAYMENTSPLIT.TRANSACTIONAMOUNT
else dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY(PAYMENTSPLIT.ID, @BASECURRENCYID)
end
end
else
case
when @BASECURRENCYID = PAYMENTSPLIT.TRANSACTIONCURRENCYID
then PAYMENTSPLIT.TRANSACTIONAMOUNT
else dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY(PAYMENTSPLIT.ID, @BASECURRENCYID)
end
end * @MATCHINGFACTOR,
@BASECURRENCYDECIMALDIGITS,
@BASECURRENCYROUNDINGTYPECODE)
from dbo.INSTALLMENTSPLITPAYMENT
inner join dbo.INSTALLMENTSPLIT on INSTALLMENTSPLITPAYMENT.INSTALLMENTSPLITID = INSTALLMENTSPLIT.ID
inner join dbo.REVENUESPLIT on INSTALLMENTSPLIT.PLEDGEID = REVENUESPLIT.REVENUEID and INSTALLMENTSPLIT.DESIGNATIONID = REVENUESPLIT.DESIGNATIONID
inner join dbo.REVENUESPLIT PAYMENTSPLIT on INSTALLMENTSPLITPAYMENT.PAYMENTID = PAYMENTSPLIT.ID
inner join dbo.REVENUE PAYMENT on PAYMENTSPLIT.REVENUEID = PAYMENT.ID
where INSTALLMENTSPLITPAYMENT.PAYMENTID = @PAYMENTSPLITID;
--Get the Encumbered Info
select
@ENCUMBEREDAMOUNT = dbo.UFN_DONORCHALLENGEENCUMBERED_PLEDGEENCUMBEREDAMOUNT(DONORCHALLENGEENCUMBERED.ID),
@DESIGNATIONID = DONORCHALLENGEENCUMBERED.DESIGNATIONID,
@DONORCHALLENGEENCUMBEREDID = DONORCHALLENGEENCUMBERED.ID,
@REVENUERECOGNITIONTYPECODEID = DONORCHALLENGEENCUMBERED.REVENUERECOGNITIONTYPECODEID
from dbo.DONORCHALLENGEENCUMBERED
inner join dbo.REVENUESPLIT on REVENUESPLIT.ID = DONORCHALLENGEENCUMBERED.REVENUESPLITID
inner join dbo.REVENUE on REVENUE.ID = REVENUESPLIT.REVENUEID
where DONORCHALLENGEENCUMBERED.DONORCHALLENGEID = @DONORCHALLENGEID
and DONORCHALLENGEENCUMBERED.REVENUESPLITID = @PLEDGESPLITID;
--make sure we don't exceed the overall encumbered amount for the pledge
if @AMOUNT >= @ENCUMBEREDAMOUNT
begin
set @AMOUNT = @ENCUMBEREDAMOUNT;
--Update the pledge as fully approved
update dbo.DONORCHALLENGEENCUMBERED
set
STATUSTYPECODE = 1,
DATECHANGED = @CURRENTDATE,
CHANGEDBYID = @CHANGEAGENTID
where
DONORCHALLENGEENCUMBERED.DONORCHALLENGEID = @DONORCHALLENGEID
and DONORCHALLENGEENCUMBERED.REVENUESPLITID = @PLEDGESPLITID;
end
declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier = dbo.UFN_CURRENCYEXCHANGERATE_GETLATEST(@BASECURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENTDATE, 0, null);
declare @ORGANIZATIONAMOUNT money = dbo.UFN_CURRENCY_CONVERT(@AMOUNT, @ORGANIZATIONEXCHANGERATEID);
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,
@AMOUNT,
@DATE,
@REVENUERECOGNITIONTYPECODEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE,
@BASECURRENCYID,
@ORGANIZATIONAMOUNT,
@ORGANIZATIONEXCHANGERATEID
from dbo.REVENUESPLIT
inner join dbo.REVENUE on REVENUE.ID = REVENUESPLIT.REVENUEID
where REVENUESPLIT.ID = @PAYMENTSPLITID;
end
declare @PAYMENTENCUMBEREDID uniqueidentifier
set @PAYMENTENCUMBEREDID = newid();
--ADD NEW ROW IN ENCUMBERED FOR PLEDGE PAYMENT
insert into dbo.DONORCHALLENGEENCUMBERED(
ID,
DONORCHALLENGEID,
REVENUESPLITID,
DESIGNATIONID,
METHODTYPECODE,
STATUSTYPECODE,
AMOUNT,
REVENUERECOGNITIONTYPECODEID,
MATCHEDREVENUEID,
MATCHEDREVENUERECOGNITIONID,
BASECURRENCYID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
) values (
@PAYMENTENCUMBEREDID,
@DONORCHALLENGEID,
@PAYMENTSPLITID,
@DESIGNATIONID,
0,
1,
@AMOUNT,
@REVENUERECOGNITIONTYPECODEID,
@REVID,
@RECOGNITIONCREDITID,
@BASECURRENCYID,
@ORGANIZATIONAMOUNT,
@ORGANIZATIONEXCHANGERATEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
)
--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,
@AMOUNT,
@DATE,
@REVENUERECOGNITIONTYPECODEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE,
@BASECURRENCYID,
@ORGANIZATIONAMOUNT,
@ORGANIZATIONEXCHANGERATEID,
@DESIGNATIONID,
1, --donor challenge
@PAYMENTENCUMBEREDID
from dbo.REVENUESPLIT
inner join dbo.REVENUE on REVENUE.ID = REVENUESPLIT.REVENUEID
where REVENUESPLIT.ID = @PAYMENTSPLITID;
end
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