USP_MATCHINGGIFTPLEDGE_ADD
Stored procedure for adding a matching gift claim.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@ORIGINALGIFTID | uniqueidentifier | IN | |
@MATCHINGORGANIZATIONID | uniqueidentifier | IN | |
@DATE | datetime | IN | |
@AMOUNT | money | IN | |
@SPLITS | xml | IN | |
@MATCHINGGIFTCONDITIONID | uniqueidentifier | IN | |
@RELATIONSHIPID | uniqueidentifier | IN | |
@TRANSACTIONCURRENCYID | uniqueidentifier | IN | |
@BASECURRENCYID | uniqueidentifier | IN | |
@BASEEXCHANGERATEID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_MATCHINGGIFTPLEDGE_ADD
(
@ID uniqueidentifier = null output,
@CHANGEAGENTID uniqueidentifier,
@ORIGINALGIFTID uniqueidentifier,
@MATCHINGORGANIZATIONID uniqueidentifier,
@DATE datetime,
@AMOUNT money,
@SPLITS xml,
@MATCHINGGIFTCONDITIONID uniqueidentifier = null,
@RELATIONSHIPID uniqueidentifier = null,
@TRANSACTIONCURRENCYID uniqueidentifier = null,
@BASECURRENCYID uniqueidentifier = null,
@BASEEXCHANGERATEID uniqueidentifier = null
)
as
set nocount on;
declare @CURRENTDATE datetime;
declare @SOURCECONSTITUENTID uniqueidentifier;
declare @PDACCOUNTSYSTEMID uniqueidentifier = '4B121C2C-CCE6-440D-894C-EA0DEF80D50B';
declare @STARTDATE datetime;
declare @FREQUENCYCODE tinyint;
declare @NUMBEROFINSTALLMENTS int;
declare @INSTALLMENTSEQUENCE int;
set @STARTDATE = @DATE;
set @FREQUENCYCODE = 5; --Single Installment
set @NUMBEROFINSTALLMENTS = 1;
set @INSTALLMENTSEQUENCE = 1;
if @ID is null
set @ID = newid();
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
set @CURRENTDATE = getdate();
--Set currency parameters for backwards compatibility
if @TRANSACTIONCURRENCYID is null
set @TRANSACTIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
if @BASECURRENCYID is null
set @BASECURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
declare @SUM money;
declare @COUNT int;
begin try
exec dbo.USP_REVENUESPLIT_VALIDATESPLITS @SPLITS, @AMOUNT, 3, default, @TRANSACTIONCURRENCYID;
select
@COUNT = count(FINANCIALTRANSACTION.ID)
from dbo.FINANCIALTRANSACTION
inner join dbo.REVENUEMATCHINGGIFT RMG on FINANCIALTRANSACTION.ID = RMG.ID
where FINANCIALTRANSACTION.CONSTITUENTID = @MATCHINGORGANIZATIONID
and RMG.MGSOURCEREVENUEID = @ORIGINALGIFTID;
--if @COUNT > 0
--raiserror('An organization cannot match a single gift more than once.', 13, 1);
declare @paymentid uniqueidentifier;
set @paymentid=NewID();
declare @MAILINGID uniqueidentifier;
declare @APPEALID uniqueidentifier;
declare @SOURCECODE nvarchar(50);
select @MAILINGID = MAILINGID, @APPEALID = APPEALID, @SOURCECODE = SOURCECODE
from dbo.REVENUE_EXT R
where R.ID = @ORIGINALGIFTID;
--Multicurrency - AdamBu 5/7/10 - Retrieve and calculate the necessary multicurrency values.
declare @BASEAMOUNT money;
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
declare @ORGANIZATIONAMOUNT money;
declare @ORGANIZATIONEXCHANGERATEID uniqueidentifier;
exec dbo.USP_CURRENCY_GETCURRENCYVALUES @AMOUNT, @DATE, @BASECURRENCYID, @BASEEXCHANGERATEID output, @TRANSACTIONCURRENCYID output, @BASEAMOUNT output, @ORGANIZATIONCURRENCYID output, @ORGANIZATIONAMOUNT output, @ORGANIZATIONEXCHANGERATEID output, 1;
insert into dbo.FINANCIALTRANSACTION (ID, CONSTITUENTID, DATE, POSTSTATUSCODE, POSTDATE, BASEAMOUNT, TYPECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, ORGAMOUNT, ORGEXCHANGERATEID, TRANSACTIONAMOUNT, TRANSACTIONCURRENCYID, BASEEXCHANGERATEID, PDACCOUNTSYSTEMID)
values (@ID, @MATCHINGORGANIZATIONID, @DATE, 3, null, @BASEAMOUNT, 3, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE, @ORGANIZATIONAMOUNT, @ORGANIZATIONEXCHANGERATEID, @AMOUNT, @TRANSACTIONCURRENCYID, @BASEEXCHANGERATEID, @PDACCOUNTSYSTEMID);
insert into dbo.REVENUE_EXT (ID, DONOTRECEIPT, RECEIPTAMOUNT, NONPOSTABLEBASECURRENCYID, MAILINGID, APPEALID, SOURCECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (@ID, 1, 0, @BASECURRENCYID, @MAILINGID, @APPEALID, @SOURCECODE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE ,@CURRENTDATE)
--Add origination source
exec dbo.USP_REVENUE_ADDORIGIN @ID, @MATCHINGORGANIZATIONID, @CHANGEAGENTID, @CURRENTDATE;
insert into dbo.REVENUEPAYMENTMETHOD (REVENUEID, PAYMENTMETHODCODE, AMOUNT, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (@ID, 9, @BASEAMOUNT, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE ,@CURRENTDATE);
insert into dbo.REVENUEMATCHINGGIFT (ID, MATCHINGGIFTCONDITIONID, MGSOURCEREVENUEID, RELATIONSHIPID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (@ID, @MATCHINGGIFTCONDITIONID, @ORIGINALGIFTID, @RELATIONSHIPID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
insert into dbo.REVENUESCHEDULE (ID, STARTDATE, FREQUENCYCODE, NUMBEROFINSTALLMENTS, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (@ID, @STARTDATE, @FREQUENCYCODE, @NUMBEROFINSTALLMENTS, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
insert into dbo.INSTALLMENT (ID, REVENUEID, AMOUNT, DATE, SEQUENCE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED,BASECURRENCYID,ORGANIZATIONAMOUNT,ORGANIZATIONEXCHANGERATEID,TRANSACTIONAMOUNT,TRANSACTIONCURRENCYID,BASEEXCHANGERATEID)
values (newid(), @ID, @BASEAMOUNT, @DATE, @INSTALLMENTSEQUENCE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE,@BASECURRENCYID,@ORGANIZATIONAMOUNT,@ORGANIZATIONEXCHANGERATEID,@AMOUNT,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID);
--Multicurrency - AdamBu 3/30/10 - Process the splits xml to calculate the base and organization amounts and place them in proper nodes.
set @SPLITS = dbo.UFN_REVENUESPLIT_CONVERTAMOUNTSINXML(@SPLITS,@BASECURRENCYID,@ORGANIZATIONEXCHANGERATEID,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID)
exec dbo.USP_REVENUE_GETSPLITS_2_ADDFROMXML @ID, @SPLITS, @CHANGEAGENTID, @CURRENTDATE;
exec dbo.USP_PLEDGE_GENERATEINSTALLMENTSPLITS @ID, @CHANGEAGENTID, @CURRENTDATE;
if dbo.UFN_PLEDGE_INSTALLMENTSPLITSBALANCE(@ID) = 0
raiserror('INSTALLMENTSPLITSBALANCE', 13, 10);
--If recognition credits should be added automatically when a MG claim is created, add them.
declare @AUTOADDMGCLAIMCREDIT bit;
declare @CLAIMDEFAULTCREDITTYPEID uniqueidentifier;
declare @AUTOADDMGCLAIMCREDITFORORG bit;
declare @CLAIMDEFAULTCREDITTYPEIDFORORG uniqueidentifier;
select
@AUTOADDMGCLAIMCREDIT = ADDRECOGNITIONCREDITSONMGCLAIMADD,
@CLAIMDEFAULTCREDITTYPEID =
case MGCLAIMADDRECOGNITIONTYPECODE
when 0 then CLAIMREVENUERECOGNITIONTYPECODEID
when 1 then null
end,
@AUTOADDMGCLAIMCREDITFORORG = ADDRECOGNITIONCREDITSTOMATCHINGORGONMGCLAIMADD,
@CLAIMDEFAULTCREDITTYPEIDFORORG = MATCHINGORGCLAIMREVENUERECOGNITIONTYPECODEID
from MATCHINGGIFTPREFERENCEINFO;
declare @MGSPLITS xml;
set @MGSPLITS = dbo.UFN_REVENUE_GETSPLITS_2_TOITEMLISTXML(@ID);
set @MGSPLITS = dbo.UFN_REVENUESPLIT_CONVERTAMOUNTSINXML(@MGSPLITS,@BASECURRENCYID,@ORGANIZATIONEXCHANGERATEID,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID);
declare @DEFAULTANONYMOUSRECOGNITION bit = 0;
--Select the value for default anonymous recognition setting
select @DEFAULTANONYMOUSRECOGNITION = DEFAULTANONYMOUSRECOGNITION
from dbo.RECOGNITIONDEFAULT
if @AUTOADDMGCLAIMCREDIT = 1
begin
declare @ORIGINALDONORID uniqueidentifier
declare @ORIGINALDONATIONDATE datetime
select
@ORIGINALDONORID=FINANCIALTRANSACTION.CONSTITUENTID,
@ORIGINALDONATIONDATE=FINANCIALTRANSACTION.DATE
from dbo.REVENUE_EXT
inner join dbo.FINANCIALTRANSACTION on REVENUE_EXT.ID = FINANCIALTRANSACTION.ID
where
REVENUE_EXT.ID = @ORIGINALGIFTID
and (REVENUE_EXT.GIVENANONYMOUSLY = 0 or @DEFAULTANONYMOUSRECOGNITION = 1)
if @ORIGINALDONORID is not null
begin
if (select count(*) from dbo.MATCHINGGIFTPREFERENCEINFO
where MGCLAIMADDRECOGNITIONTYPECODE = 0) > 0
begin
exec dbo.USP_RECOGNITIONCREDIT_ADDDEFAULTSFORMGSPLITS @MGSPLITS, @ORIGINALDONORID, @ORIGINALDONATIONDATE, @CLAIMDEFAULTCREDITTYPEID, @CHANGEAGENTID, @CURRENTDATE;
end
if (select count(*) from dbo.MATCHINGGIFTPREFERENCEINFO
where MGCLAIMADDRECOGNITIONTYPECODE = 1) > 0
begin
exec dbo.USP_RECOGNITIONCREDIT_ADDTOGROUPMEMBERS @MGSPLITS, @ORIGINALDONORID, @ORIGINALDONATIONDATE, @ORIGINALGIFTID, @CLAIMDEFAULTCREDITTYPEID, @CHANGEAGENTID, @CURRENTDATE, 1;
end
end
end
declare @GIFTISANONYMOUS bit = 0;
select @GIFTISANONYMOUS = GIVENANONYMOUSLY from dbo.REVENUE_EXT where ID = @ID
if @AUTOADDMGCLAIMCREDITFORORG = 1 and (@GIFTISANONYMOUS = 0 or @DEFAULTANONYMOUSRECOGNITION = 1)
exec dbo.USP_RECOGNITIONCREDIT_ADDDEFAULTSFORMGSPLITS @MGSPLITS, @MATCHINGORGANIZATIONID, @DATE, @CLAIMDEFAULTCREDITTYPEIDFORORG, @CHANGEAGENTID, @CURRENTDATE;
declare @MATCHINGFACTOR decimal(5, 2) = 0
select
@MATCHINGFACTOR = MATCHINGFACTOR
from
dbo.MATCHINGGIFTCONDITION
where
MATCHINGGIFTCONDITION.ID = @MATCHINGGIFTCONDITIONID
insert into dbo.REVENUESOLICITOR
(
ID,
REVENUESPLITID,
CONSTITUENTID,
AMOUNT,
BUSINESSUNITCODEID,
BASECURRENCYID,
ORGANIZATIONAMOUNT,
ORGANIZATIONEXCHANGERATEID,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED
)
select
newid(),
MGSPLITS.ID,
CONSTITUENTID,
MGSPLITS.AMOUNT,
BUSINESSUNITCODEID,
REVENUESOLICITOR.BASECURRENCYID,
MGSPLITS.ORGANIZATIONAMOUNT,
REVENUESOLICITOR.ORGANIZATIONEXCHANGERATEID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
dbo.REVENUESOLICITOR
inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.ID = REVENUESOLICITOR.REVENUESPLITID
inner join dbo.REVENUESPLIT_EXT RSE on RSE.ID = LI.ID
inner join dbo.UFN_REVENUE_GETSPLITS_2_FROMITEMLISTXML(@MGSPLITS) as MGSPLITS on RSE.DESIGNATIONID = MGSPLITS.DESIGNATIONID
where
LI.FINANCIALTRANSACTIONID = @ORIGINALGIFTID
group by
MGSPLITS.ID,
MGSPLITS.DESIGNATIONID,
MGSPLITS.AMOUNT,
MGSPLITS.ORGANIZATIONAMOUNT,
REVENUESOLICITOR.CONSTITUENTID,
BUSINESSUNITCODEID,
REVENUESOLICITOR.BASECURRENCYID,
REVENUESOLICITOR.ORGANIZATIONEXCHANGERATEID
insert into dbo.REVENUECATEGORY(ID, GLREVENUECATEGORYMAPPINGID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
SPLITS.ID, REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from
dbo.FINANCIALTRANSACTIONLINEITEM
inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
inner join dbo.REVENUECATEGORY on REVENUESPLIT_EXT.ID = REVENUECATEGORY.ID
inner join dbo.UFN_REVENUE_GETSPLITS_2_FROMITEMLISTXML(@MGSPLITS) as SPLITS on REVENUESPLIT_EXT.DESIGNATIONID = SPLITS.DESIGNATIONID and REVENUESPLIT_EXT.APPLICATIONCODE = SPLITS.APPLICATIONCODE
where
FINANCIALTRANSACTIONLINEITEM.DELETEDON is NULL and FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ORIGINALGIFTID
declare CUR_MGCAMPAIGNS cursor local fast_forward
for
with UNIQUEORIGINALGIFTSPLITDESIGNATION
as
(
select
--Because of the group by and having clauses there wil be only
--one ID per designation returned and the aggregator does not matter
cast(max(cast(REVENUESPLIT_EXT.ID as binary(16))) as uniqueidentifier) as ID,
REVENUESPLIT_EXT.DESIGNATIONID
from
dbo.FINANCIALTRANSACTIONLINEITEM
inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
where
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ORIGINALGIFTID
and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1
group by
REVENUESPLIT_EXT.DESIGNATIONID
having
count(*) = 1
)
select
FINANCIALTRANSACTIONLINEITEM.ID MGSPLITID,
case
when UNIQUEORIGINALGIFTSPLITDESIGNATION.DESIGNATIONID is null then(
select CAMPAIGNID,CAMPAIGNSUBPRIORITYID
from dbo.UFN_DESIGNATION_GETCAMPAIGNSTODEFAULT(REVENUESPLIT_EXT.DESIGNATIONID, @DATE)
for xml raw('ITEM'),type,elements,root('CAMPAIGNS'),BINARY BASE64
)
else(
select CAMPAIGNID,CAMPAIGNSUBPRIORITYID
from dbo.UFN_REVENUESPLIT_GETCAMPAIGNS(UNIQUEORIGINALGIFTSPLITDESIGNATION.ID)
for xml raw('ITEM'),type,elements,root('CAMPAIGNS'),BINARY BASE64
)
end
from
dbo.FINANCIALTRANSACTIONLINEITEM
inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
left join UNIQUEORIGINALGIFTSPLITDESIGNATION on REVENUESPLIT_EXT.DESIGNATIONID = UNIQUEORIGINALGIFTSPLITDESIGNATION.DESIGNATIONID
where
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
and FINANCIALTRANSACTIONLINEITEM.TYPECODE != 1;
open CUR_MGCAMPAIGNS
declare @SPLITID uniqueidentifier
declare @CAMPAIGNS xml
fetch next from CUR_MGCAMPAIGNS into @SPLITID, @CAMPAIGNS
while @@fetch_status <> -1
begin
if @@fetch_status <> -2
begin
exec dbo.USP_REVENUESPLIT_GETCAMPAIGNS_ADDFROMXML @SPLITID, @CAMPAIGNS, @CHANGEAGENTID;
end
fetch next from CUR_MGCAMPAIGNS into @SPLITID, @CAMPAIGNS
end
close CUR_MGCAMPAIGNS
deallocate CUR_MGCAMPAIGNS
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;