USP_ADDPLANNEDGIFTREVENUE
This stored procedure handles adding a planned gift as revenue.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@AMOUNT | money | IN | |
@DATE | datetime | IN | |
@RECEIPTAMOUNT | money | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@ANONYMOUS | bit | IN | |
@NEWREVENUEID | uniqueidentifier | IN | |
@GENERATEGLDISTRIBUTIONS | bit | IN | |
@PDACCOUNTSYSTEMID | uniqueidentifier | IN | |
@TRANSACTIONCURRENCYID | uniqueidentifier | IN | |
@BASECURRENCYID | uniqueidentifier | IN | |
@BASEEXCHANGERATEID | uniqueidentifier | IN | |
@DONOTRECEIPT | bit | IN |
Definition
Copy
CREATE procedure dbo.USP_ADDPLANNEDGIFTREVENUE(
@ID uniqueidentifier,
@AMOUNT money,
@DATE datetime,
@RECEIPTAMOUNT money,
@CHANGEAGENTID uniqueidentifier,
@ANONYMOUS bit,
@NEWREVENUEID uniqueidentifier = null,
@GENERATEGLDISTRIBUTIONS bit,
@PDACCOUNTSYSTEMID uniqueidentifier = null,
@TRANSACTIONCURRENCYID uniqueidentifier = null,
@BASECURRENCYID uniqueidentifier = null,
@BASEEXCHANGERATEID uniqueidentifier = null,
@DONOTRECEIPT bit = null
)
as begin
set nocount on;
declare @CONSTITUENTID uniqueidentifier;
declare @GIFTAMOUNT money;
declare @RECOGNITIONAMOUNT money;
declare @SPLITS xml;
if @PDACCOUNTSYSTEMID is null
set @PDACCOUNTSYSTEMID = '4B121C2C-CCE6-440D-894C-EA0DEF80D50B'
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @DONOTRECEIPT is null
set @DONOTRECEIPT = 1
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
--JamesWill WI197067 2012-03-08 Ensure that the date used does not have a timestamp
if not @DATE is null
set @DATE = dbo.UFN_DATE_GETEARLIESTTIME(@DATE);
select
@CONSTITUENTID = CONSTITUENTID,
@GIFTAMOUNT = TRANSACTIONGIFTAMOUNT,
@RECOGNITIONAMOUNT = RECOGNITIONAMOUNT
from dbo.PLANNEDGIFT
where ID = @ID;
--Get current designations
set @SPLITS = dbo.UFN_PLANNEDGIFT_DESIGNATION_2_TOITEMLISTXML(@ID);
--Splits with the same designation need to be combined
set @SPLITS = (
select sum(TRANSACTIONAMOUNT) as AMOUNT, DESIGNATIONID, TRANSACTIONCURRENCYID
from dbo.UFN_PLANNEDGIFT_DESIGNATION_2_FROMITEMLISTXML(@SPLITS)
group by DESIGNATIONID, TRANSACTIONCURRENCYID
for xml raw('ITEM'),type,elements,root('DESIGNATION'),binary base64
)
--Need to prorate splits if using amount other than gift amount
set @SPLITS = dbo.UFN_PLANNEDGIFTGETSPLITS_XML(@GIFTAMOUNT, @AMOUNT, @SPLITS);
declare @COUNT int;
begin try
exec dbo.USP_PLANNEDGIFT_VALIDATESPLITS @SPLITS, @AMOUNT;
select
@COUNT = count(ID)
from dbo.PLANNEDGIFTREVENUE PGR
where PGR.ID = @ID;
if @COUNT > 0
raiserror('A planned gift can only be linked to one revenue record.', 13, 1);
declare @REVENUEID uniqueidentifier;
if @NEWREVENUEID is null
set @REVENUEID=NewID();
else
set @REVENUEID = @NEWREVENUEID;
--Multicurrency - AdamBu 5/19/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;
-- Check GL business rule for this account system and set to 'Do not post' if needed.
-- ****
if @GENERATEGLDISTRIBUTIONS = 1
set @GENERATEGLDISTRIBUTIONS = dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(@PDACCOUNTSYSTEMID);
-- ****
-- Determine Receipt Type Preference
declare @RECEIPTTYPECODE bit;
set @RECEIPTTYPECODE = dbo.UFN_CONSTITUENT_GETRECEIPTPREFERENCE(@CONSTITUENTID, null)
if @GENERATEGLDISTRIBUTIONS = 0
insert into dbo.REVENUE (ID, CONSTITUENTID, DATE, DONOTPOST, POSTDATE, DONOTRECEIPT, AMOUNT, TRANSACTIONTYPECODE, RECEIPTAMOUNT, GIVENANONYMOUSLY, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED,BASECURRENCYID,ORGANIZATIONAMOUNT,ORGANIZATIONEXCHANGERATEID,TRANSACTIONAMOUNT,TRANSACTIONCURRENCYID,BASEEXCHANGERATEID,RECEIPTTYPECODE)
values (@REVENUEID, @CONSTITUENTID, @DATE, 1, null, @DONOTRECEIPT, @BASEAMOUNT, 4, @RECEIPTAMOUNT, @ANONYMOUS, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE,@BASECURRENCYID,@ORGANIZATIONAMOUNT,@ORGANIZATIONEXCHANGERATEID,@AMOUNT,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID,@RECEIPTTYPECODE);
else
insert into dbo.REVENUE (ID, CONSTITUENTID, DATE, DONOTPOST, POSTDATE, DONOTRECEIPT, AMOUNT, TRANSACTIONTYPECODE, RECEIPTAMOUNT, GIVENANONYMOUSLY, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED,BASECURRENCYID,ORGANIZATIONAMOUNT,ORGANIZATIONEXCHANGERATEID,TRANSACTIONAMOUNT,TRANSACTIONCURRENCYID,BASEEXCHANGERATEID,RECEIPTTYPECODE)
values (@REVENUEID, @CONSTITUENTID, @DATE, 0, @DATE, @DONOTRECEIPT, @BASEAMOUNT, 4, @RECEIPTAMOUNT, @ANONYMOUS, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE,@BASECURRENCYID,@ORGANIZATIONAMOUNT,@ORGANIZATIONEXCHANGERATEID,@AMOUNT,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID,@RECEIPTTYPECODE);
declare @PAYMENTMETHODID uniqueidentifier;
set @PAYMENTMETHODID = newid();
insert into dbo.REVENUEPAYMENTMETHOD (ID, REVENUEID, PAYMENTMETHODCODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (@PAYMENTMETHODID, @REVENUEID, 9, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
insert into dbo.PLANNEDGIFTREVENUE (ID, REVENUEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (@ID, @REVENUEID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);
declare @FREQUENCYCODE tinyint;
declare @NUMBEROFINSTALLMENTS int;
declare @INSTALLMENTSEQUENCE int;
set @FREQUENCYCODE = 5; --Single Installment
set @NUMBEROFINSTALLMENTS = 1;
set @INSTALLMENTSEQUENCE = 1;
insert into dbo.REVENUESCHEDULE (ID, STARTDATE, FREQUENCYCODE, NUMBEROFINSTALLMENTS, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (@REVENUEID, @DATE, @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(), @REVENUEID, @BASEAMOUNT, @DATE, @INSTALLMENTSEQUENCE, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE,@BASECURRENCYID,@ORGANIZATIONAMOUNT,@ORGANIZATIONEXCHANGERATEID,@AMOUNT,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID);
--Multicurrency - AdamBu 5/19/10 - Process the splits xml to calculate the base and organization amounts and place them in proper nodes.
set @SPLITS = dbo.UFN_PLANNEDGIFTDESIGNATION_CONVERTAMOUNTSINXML(@SPLITS,@BASECURRENCYID,@ORGANIZATIONEXCHANGERATEID,@TRANSACTIONCURRENCYID,@BASEEXCHANGERATEID)
exec dbo.USP_PLANNEDGIFT_GETSPLITS_ADDFROMXML_2 @REVENUEID, @SPLITS, @CHANGEAGENTID, @CURRENTDATE;
-- create recognitions
exec dbo.USP_REVENUE_CREATERECOGNITIONS_WITHAMOUNT @REVENUEID, @RECOGNITIONAMOUNT, @CHANGEAGENTID, @CURRENTDATE;
exec dbo.USP_PLEDGE_GENERATEINSTALLMENTSPLITS @REVENUEID, @CHANGEAGENTID, @CURRENTDATE;
if dbo.UFN_PLEDGE_INSTALLMENTSPLITSBALANCE(@ID) = 0
raiserror('INSTALLMENTSPLITSBALANCE', 13, 2);
-- Link revenue to Account System
exec dbo.USP_PDACCOUNTSYSTEM_LINKTOREVENUE @REVENUEID, @PDACCOUNTSYSTEMID, @CURRENTDATE, @CHANGEAGENTID;
--Save the GL distributions
if @GENERATEGLDISTRIBUTIONS = 1
exec dbo.USP_SAVE_REVENUEGLDISTRIBUTION @REVENUEID, @CHANGEAGENTID, @CURRENTDATE;
-- Copy campaigns from planned gift
insert into dbo.REVENUESPLITCAMPAIGN (REVENUESPLITID, CAMPAIGNID, CAMPAIGNSUBPRIORITYID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select distinct
REVENUESPLIT.ID,
PLANNEDGIFTDESIGNATIONCAMPAIGN.CAMPAIGNID,
PLANNEDGIFTDESIGNATIONCAMPAIGN.CAMPAIGNSUBPRIORITYID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from dbo.PLANNEDGIFTDESIGNATION
inner join dbo.PLANNEDGIFTDESIGNATIONCAMPAIGN on PLANNEDGIFTDESIGNATION.ID = PLANNEDGIFTDESIGNATIONCAMPAIGN.PLANNEDGIFTDESIGNATIONID
inner join dbo.REVENUESPLIT on REVENUESPLIT.REVENUEID = @REVENUEID and REVENUESPLIT.DESIGNATIONID = PLANNEDGIFTDESIGNATION.DESIGNATIONID
where PLANNEDGIFTDESIGNATION.PLANNEDGIFTID = @ID
exec dbo.USP_PLANNEDGIFTREVENUE_DEFAULTSOLICITORS @ID, @REVENUEID, @CHANGEAGENTID, @CURRENTDATE
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;
end