USP_DATAFORMTEMPLATE_EDIT_MATCHINGGIFTPAYMENT
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@REVENUESTREAMS | xml | IN | |
@REMOVEDREVENUESTREAMS | xml | IN | |
@MATCHINGGIFTCLAIMSPLITS | xml | IN |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_MATCHINGGIFTPAYMENT
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@CURRENTAPPUSERID uniqueidentifier = null,
@REVENUESTREAMS xml,
@REMOVEDREVENUESTREAMS xml,
@MATCHINGGIFTCLAIMSPLITS xml
)
as
set nocount on;
if @REVENUESTREAMS.exist('/REVENUESTREAMS/ITEM') = 0
and @REMOVEDREVENUESTREAMS.exist('/REMOVEDREVENUESTREAMS/ITEM') = 0
and @MATCHINGGIFTCLAIMSPLITS.exist('/MATCHINGGIFTCLAIMSPLITS/ITEM') = 0
begin
--Nothing was changed, so just return.
return 0;
end
declare @CURRENTDATE datetime;
declare @ORIGINALREVENUESTREAMS xml;
--Move @REVENUESTREAMS to @MODIFIEDREVENUESTREAMS so that code copied
-- from payment edit doesn't have to be changed where it references @REVENUESTREAMS.
declare @MODIFIEDREVENUESTREAMS xml;
set @MODIFIEDREVENUESTREAMS = @REVENUESTREAMS;
set @REVENUESTREAMS = null;
declare @CLEARALLGLDISTRIBUTIONS bit;
set @CLEARALLGLDISTRIBUTIONS = 0;
declare
@DATE datetime,
@AMOUNT money,
@RECEIPTAMOUNT money,
@SOURCECODE nvarchar(50),
@POSTSTATUSCODE tinyint,
@APPEALID uniqueidentifier,
@BENEFITS xml,
@BENEFITSWAIVED bit,
@GIVENANONYMOUSLY bit,
@MAILINGID uniqueidentifier,
@CHANNELCODEID uniqueidentifier,
@DONOTRECEIPT bit,
@REFERENCE nvarchar(255),
@DONOTACKNOWLEDGE bit,
@SPLITSDECLININGGIFTAID xml,
@PERCENTAGEBENEFITS xml,
@GIFTAIDSPONSORSHIPSPLITS xml,
@BASEEXCHANGERATEID uniqueidentifier,
@EXCHANGERATE decimal(20,8),
@OLDSPOTRATEID uniqueidentifier;
declare
@PAYMENTMETHODCODE tinyint,
@CREDITTYPECODEID uniqueidentifier;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CURRENTDATE is null
set @CURRENTDATE = getdate();
declare @contextCache varbinary(128);
--cache current context information
set @contextCache = CONTEXT_INFO();
--set CONTEXT_INFO to @CHANGEAGENTID
set CONTEXT_INFO @CHANGEAGENTID;
begin try
/**
* Load current payment details
*/
--Load the original values from the payment; pass in null for anything we don't need.
exec dbo.USP_PAYMENT_LOAD
@ID,
null, --@DATALOADED output,
null, --@CONSTITUENTID output,
null, --@CONSTITUENTNAME output,
@DATE output,
@AMOUNT output,
null, --@APPLICATIONCODE output,
@RECEIPTAMOUNT output,
@ORIGINALREVENUESTREAMS output,
@SOURCECODE output,
@POSTSTATUSCODE output,
null, --@POSTDATE output,
@APPEALID output, @BENEFITS output, @BENEFITSWAIVED output,
@GIVENANONYMOUSLY output, @MAILINGID output, @CHANNELCODEID output,
@DONOTRECEIPT output, @REFERENCE output,
null, --@TSLONG output,
@DONOTACKNOWLEDGE output,
null, --@FINDERNUMBER output,
@PERCENTAGEBENEFITS output,
null, --@BASECURRENCYID output,
null, --@TRANSACTIONCURRENCYID output,
@BASEEXCHANGERATEID output,
@EXCHANGERATE output,
null, --@HADSPOTRATE output,
null, --@BASEDECIMALDIGITS output,
null, --@BASEROUNDINGTYPECODE output,
null; --@TRANSACTIONCURRENCYDESCRIPTION output;
exec dbo.USP_REVENUE_GETPAYMENTDETAILS
@REVENUEID = @ID,
@PAYMENTMETHODCODE = @PAYMENTMETHODCODE output,
@CREDITTYPECODEID = @CREDITTYPECODEID output;
declare @ORIGINALDONOTPOST bit
declare @DONOTPOST bit
select @ORIGINALDONOTPOST = case FINANCIALTRANSACTION.POSTSTATUSCODE when 3 then 1 else 0 end from dbo.FINANCIALTRANSACTION inner join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID where FINANCIALTRANSACTION.ID = @ID and FINANCIALTRANSACTION.DELETEDON is null;
set @DONOTPOST = @ORIGINALDONOTPOST;
/**
* Update matching gift claim splits
*/
--We do this after loading the payment details so that the tweaks
-- we make here don't affect the original values that we load.
declare @MATCHINGGIFTCLAIMLINEITEMMAP xml;
exec dbo.USP_MATCHINGGIFTPAYMENT_UPDATEMATCHINGGIFTCLAIMS
@ID,
@MATCHINGGIFTCLAIMSPLITS,
@CHANGEAGENTID,
@CURRENTDATE,
@MATCHINGGIFTCLAIMLINEITEMMAP output;
/**
* Edit the payment applications
*/
--Build the modified revenue streams by combining the current revenue
-- streams (@ORIGINALREVENUESTREAMS, loaded above) with the revenue
-- streams from this form (@MATCHINGGIFTCLAIMLINEITEMMAP, computed
-- when updating claim splits earlier).
with
MATCHINGGIFTCLAIMLINEITEMMAP as
(
select
MATCHINGGIFTCLAIMLINEITEMMAP.ITEM.value('(FINANCIALTRANSACTIONLINEITEMID)[1]', 'uniqueidentifier') as FINANCIALTRANSACTIONLINEITEMID,
MATCHINGGIFTCLAIMLINEITEMMAP.ITEM.value('(REPLACEMENTFINANCIALTRANSACTIONLINEITEMID)[1]', 'uniqueidentifier') as REPLACEMENTFINANCIALTRANSACTIONLINEITEMID
from
@MATCHINGGIFTCLAIMLINEITEMMAP.nodes('/MATCHINGGIFTCLAIMLINEITEMMAP/ITEM') as MATCHINGGIFTCLAIMLINEITEMMAP(ITEM)
)
select @MODIFIEDREVENUESTREAMS =
(
select
MODIFIEDREVENUESTREAMS.ITEM.query('./*[local-name() != "APPLICATIONSPLITS"]'),
(
select
coalesce(MATCHINGGIFTCLAIMLINEITEMMAP.REPLACEMENTFINANCIALTRANSACTIONLINEITEMID, APPLICATIONSPLITS.ITEM.value('(ID)[1]', 'uniqueidentifier')) as ID,
APPLICATIONSPLITS.ITEM.value('(AMOUNT)[1]', 'money') as AMOUNT
from
MODIFIEDREVENUESTREAMS.ITEM.nodes('./APPLICATIONSPLITS/ITEM') as APPLICATIONSPLITS(ITEM)
left join MATCHINGGIFTCLAIMLINEITEMMAP on APPLICATIONSPLITS.ITEM.value('(ID)[1]', 'uniqueidentifier') = MATCHINGGIFTCLAIMLINEITEMMAP.FINANCIALTRANSACTIONLINEITEMID
for xml raw('ITEM'),type,elements,root('APPLICATIONSPLITS'), binary base64
)
from
@MODIFIEDREVENUESTREAMS.nodes('/REVENUESTREAMS/ITEM') as MODIFIEDREVENUESTREAMS(ITEM)
for xml raw('ITEM'),type,elements,root('REVENUESTREAMS'), binary base64
);
set @REVENUESTREAMS =
(
select
MERGEDREVENUESTREAMS.ITEMXML.query('ITEM/*')
from
(
select
--Use the modified revenue stream item if one was supplied for this ID, otherwise fall back to the
-- original revenue stream item.
coalesce(MODIFIEDREVENUESTREAMS.ITEM.query('.'), ORIGINALREVENUESTREAMS.ITEM.query('.')) as ITEMXML
from
@ORIGINALREVENUESTREAMS.nodes('/REVENUESTREAMS/ITEM') as ORIGINALREVENUESTREAMS(ITEM)
full join @MODIFIEDREVENUESTREAMS.nodes('/REVENUESTREAMS/ITEM') as MODIFIEDREVENUESTREAMS(ITEM) on
ORIGINALREVENUESTREAMS.ITEM.value('ID[1]', 'uniqueidentifier') = MODIFIEDREVENUESTREAMS.ITEM.value('ID[1]', 'uniqueidentifier')
full join @REMOVEDREVENUESTREAMS.nodes('/REMOVEDREVENUESTREAMS/ITEM') as REMOVEDREVENUESTREAMS(ITEM) on
REMOVEDREVENUESTREAMS.ITEM.value('ID[1]','uniqueidentifier') = ORIGINALREVENUESTREAMS.ITEM.value('ID[1]', 'uniqueidentifier')
where
isnull(MODIFIEDREVENUESTREAMS.ITEM.exist('(ID)[1]'), 0) = 1
or
(
isnull(ORIGINALREVENUESTREAMS.ITEM.exist('(ID)[1]'), 0) = 1
and
REMOVEDREVENUESTREAMS.ITEM.query('.') is null
)
) as MERGEDREVENUESTREAMS
for xml raw('ITEM'),type,elements,root('REVENUESTREAMS'), binary base64
);
/* Check if revenue streams changed */
if @CLEARALLGLDISTRIBUTIONS = 0
if dbo.UFN_CHECKDETAIL_STREAMSCHANGED(@ID, @REVENUESTREAMS) = 1
begin
set @CLEARALLGLDISTRIBUTIONS = 1;
end
declare @OLDAUCTIONPURCHASES xml;
--Remove conditional because we can't know yet if multicurrency fields will change, clearing GL distributions.
--if @CLEARALLGLDISTRIBUTIONS = 1 or @CLEARAUCTIONPURCHASEGLDISTRIBUTION = 1
set @OLDAUCTIONPURCHASES = (
select AUCTIONITEM.ID as AUCTIONITEMID,AUCTIONITEM.REVENUEAUCTIONDONATIONID,REVENUESPLIT.ID,REVENUESPLIT.BASEAMOUNT as AMOUNT
from dbo.AUCTIONITEM inner join dbo.AUCTIONITEMPURCHASE on AUCTIONITEM.ID = AUCTIONITEMPURCHASE.AUCTIONITEMID
inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on REVENUESPLIT.ID = AUCTIONITEMPURCHASE.PURCHASEID
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
where REVENUESPLIT.FINANCIALTRANSACTIONID = @ID and REVENUESPLIT_EXT.APPLICATIONCODE = 12 and REVENUESPLIT.DELETEDON is null and REVENUESPLIT.TYPECODE != 1
for xml raw('ITEM'),type,elements,root('AUCTIONPURCHASES'),BINARY BASE64
)
declare @OLDGIFTAID xml;
set @OLDGIFTAID = (
select REVENUESPLIT.ID, REVENUESPLIT_EXT.DESIGNATIONID, coalesce(REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID, '00000000-0000-0000-0000-000000000000') as GLREVENUECATEGORYMAPPINGID, dbo.UFN_GIFTAIDREVENUESPLIT_GETQUALIFICATIONSTATUS(REVENUESPLIT.ID) as STATUS
from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
inner join dbo.REVENUESPLITGIFTAID on REVENUESPLIT.ID = REVENUESPLITGIFTAID.ID
left join dbo.REVENUECATEGORY on REVENUESPLIT.ID = REVENUECATEGORY.ID
where REVENUESPLIT.FINANCIALTRANSACTIONID = @ID and REVENUESPLIT.DELETEDON is null and REVENUESPLIT.TYPECODE != 1
for xml raw('ITEM'),type,elements,root('GIFTAIDQUALIFICATIONSTATUS'),BINARY BASE64
)
exec dbo.USP_PAYMENT_EDIT_2
@ID, @CHANGEAGENTID, @CURRENTDATE, @DATE, @AMOUNT, @RECEIPTAMOUNT,
@REVENUESTREAMS, @SOURCECODE, @APPEALID,@BENEFITS, @BENEFITSWAIVED,
@GIVENANONYMOUSLY, @MAILINGID, @CHANNELCODEID, @DONOTRECEIPT, @REFERENCE, @DONOTACKNOWLEDGE,
@SPLITSDECLININGGIFTAID output, @PERCENTAGEBENEFITS, @GIFTAIDSPONSORSHIPSPLITS output,
@BASEEXCHANGERATEID output, @EXCHANGERATE, @OLDSPOTRATEID output, @CURRENTAPPUSERID;
-- clear the user-defined gl distributions
if @CLEARALLGLDISTRIBUTIONS = 1
begin
-- Clear GL
delete from dbo.REVENUEGLDISTRIBUTION where REVENUEID = @ID and OUTDATED = 0;
delete from dbo.STOCKSALEGLDISTRIBUTION where REVENUEID = @ID and OUTDATED = 0;
delete from dbo.GIFTINKINDSALEGLDISTRIBUTION where REVENUEID = @ID and OUTDATED = 0;
delete from dbo.PROPERTYDETAILGLDISTRIBUTION where REVENUEID = @ID and OUTDATED = 0;
delete from dbo.BENEFITGLDISTRIBUTION where REVENUEID = @ID and OUTDATED = 0;
-- Add new GL distributions
if @POSTSTATUSCODE <> 2
begin
-- Add new GL distributions
exec dbo.USP_SAVE_REVENUEGLDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE;
-- Add new stock detail GL distributions
exec dbo.USP_SAVE_STOCKDETAILGLDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE;
-- Add new gift-in-kind detail GL distributions
exec dbo.USP_SAVE_GIFTINKINDPAYMENTMETHODDETAILGLDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE;
-- Add new property detail GL distributions
exec dbo.USP_SAVE_PROPERTYDETAILGLDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE;
-- add benefit distributions
exec dbo.USP_SAVE_PAYMENT_BENEFITGLDISTRIBUTION @ID, @CHANGEAGENTID, @CURRENTDATE;
declare @DEPOSITID uniqueidentifier;
select @DEPOSITID = DEPOSITID
from dbo.BANKACCOUNTDEPOSITPAYMENT
where ID = @ID;
if @DEPOSITID is not null
exec dbo.USP_BANKACCOUNTDEPOSIT_OVERWRITEPAYMENTDEBITACCOUNTS @ID, @DEPOSITID, @CHANGEAGENTID, @CURRENTDATE;
end
end
--Check to make sure gift amount is more than the gift Fee
--####
declare @GIFTFEE_ENABLED bit;
declare @GIFTFEEAMOUNT money;
set @GIFTFEEAMOUNT = 0.00;
select @GIFTFEE_ENABLED = dbo.UFN_GIFTFEE_ENABLED();
if @GIFTFEE_ENABLED = 1 and exists (select 1 from dbo.REVENUESPLITGIFTFEE inner join dbo.FINANCIALTRANSACTIONLINEITEM on REVENUESPLITGIFTFEE.ID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID and REVENUESPLITGIFTFEE.WAIVED <> 1
and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1)
begin
select @GIFTFEEAMOUNT = coalesce(sum(REVENUESPLITGIFTFEE.TRANSACTIONAMOUNT), 0.00)
from dbo.REVENUESPLITGIFTFEE
inner join dbo.FINANCIALTRANSACTIONLINEITEM on REVENUESPLITGIFTFEE.ID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
and FINANCIALTRANSACTIONLINEITEM.TYPECODE <> 1;
if @GIFTFEEAMOUNT > @AMOUNT
-- The gift fee cannot be greater than the application amount
raiserror('BBERR_AMOUNTLESSTHANGIFTFEE', 13, 1);
--####
end
exec dbo.USP_GIFTAIDREVENUESPLIT_ADDUPDATESPLITS @ID, @APPEALID, @PAYMENTMETHODCODE, @CREDITTYPECODEID, @CHANGEAGENTID, @DATE, 0, @SPLITSDECLININGGIFTAID, null, @GIFTAIDSPONSORSHIPSPLITS; --revenue transaction type code of payment is 0
-- update existing gift aid GL distributions
exec dbo.USP_REVENUESPLITGIFTAID_UPDATEGLDISTRIBUTIONS_FORREVENUE @ID, @OLDGIFTAID, @ORIGINALDONOTPOST, @DONOTPOST, @CHANGEAGENTID, @CURRENTDATE;
/**
* Validate the modified matching gift claims.
* This step comes after editing the payment, since a modified matching
* gift claim designation will be accompanied by an updated payment revenue split.
*/
declare MODIFIEDMATCHINGGIFTCLAIMTOVALIDATECURSOR cursor local fast_forward for
select
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
from
@MATCHINGGIFTCLAIMSPLITS.nodes('/MATCHINGGIFTCLAIMSPLITS/ITEM') as MATCHINGGIFTCLAIMSPLITS(ITEM)
inner join dbo.FINANCIALTRANSACTIONLINEITEM on MATCHINGGIFTCLAIMSPLITS.ITEM.value('REVENUESPLITID[1]', 'uniqueidentifier') = FINANCIALTRANSACTIONLINEITEM.ID
group by
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID;
declare @MODIFIEDMATCHINGGIFTCLAIMTOVALIDATEREVENUEID uniqueidentifier;
open MODIFIEDMATCHINGGIFTCLAIMTOVALIDATECURSOR;
fetch next from MODIFIEDMATCHINGGIFTCLAIMTOVALIDATECURSOR into
@MODIFIEDMATCHINGGIFTCLAIMTOVALIDATEREVENUEID;
while @@FETCH_STATUS = 0
begin
exec dbo.USP_PLEDGE_VALIDATE_2 @MODIFIEDMATCHINGGIFTCLAIMTOVALIDATEREVENUEID, 0;
fetch next from MODIFIEDMATCHINGGIFTCLAIMTOVALIDATECURSOR into
@MODIFIEDMATCHINGGIFTCLAIMTOVALIDATEREVENUEID;
end
close MODIFIEDMATCHINGGIFTCLAIMTOVALIDATECURSOR;
deallocate MODIFIEDMATCHINGGIFTCLAIMTOVALIDATECURSOR;
end try
begin catch
--reset CONTEXT_INFO to previous value
if not @contextCache is null
set CONTEXT_INFO @contextCache;
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
--reset CONTEXT_INFO to previous value
if not @contextCache is null
set CONTEXT_INFO @contextCache;
return 0;