USP_MATCHINGGIFTPAYMENT_UPDATEMATCHINGGIFTCLAIMS
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@MATCHINGGIFTCLAIMSPLITS | xml | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN | |
@MATCHINGGIFTCLAIMLINEITEMMAP | xml | INOUT |
Definition
Copy
CREATE procedure dbo.USP_MATCHINGGIFTPAYMENT_UPDATEMATCHINGGIFTCLAIMS
(
@ID uniqueidentifier,
@MATCHINGGIFTCLAIMSPLITS xml,
@CHANGEAGENTID uniqueidentifier = null,
@CURRENTDATE datetime = null,
@MATCHINGGIFTCLAIMLINEITEMMAP xml = null output
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CURRENTDATE is null
set @CURRENTDATE = getdate();
--Determine which claims were edited and grab information about other splits on
-- that claim so we can avoid creating claim splits with duplicate designations.
declare @MODIFIEDMATCHINGGIFTCLAIM table
(
FINANCIALTRANSACTIONID uniqueidentifier,
FINANCIALTRANSACTIONLINEITEMID uniqueidentifier,
REPLACEMENTFINANCIALTRANSACTIONLINEITEMID uniqueidentifier,
AMOUNT money,
DESIGNATIONID uniqueidentifier,
DESIGNATIONIDCHANGED bit,
ROWNUMBER int
);
--Record edited claim splits
insert into @MODIFIEDMATCHINGGIFTCLAIM
(
FINANCIALTRANSACTIONLINEITEMID,
DESIGNATIONID,
DESIGNATIONIDCHANGED
)
select distinct
MATCHINGGIFTCLAIMSPLITS.ITEM.value('(REVENUESPLITID)[1]', 'uniqueidentifier'),
MATCHINGGIFTCLAIMSPLITS.ITEM.value('(DESIGNATIONID)[1]', 'uniqueidentifier') as DESIGNATIONID,
1 as DESIGNATIONIDCHANGED
from
@MATCHINGGIFTCLAIMSPLITS.nodes('/MATCHINGGIFTCLAIMSPLITS/ITEM') as MATCHINGGIFTCLAIMSPLITS(ITEM);
if exists
(
select
1
from
@MODIFIEDMATCHINGGIFTCLAIM as MODIFIEDMATCHINGGIFTCLAIM
group by
MODIFIEDMATCHINGGIFTCLAIM.FINANCIALTRANSACTIONLINEITEMID,
MODIFIEDMATCHINGGIFTCLAIM.DESIGNATIONID
having
count(*) > 1
)
begin
raiserror('BBERR_MATCHINGGIFTCLAIMSPLITASSIGNEDMULTIPLEDESIGNATIONS: When changing a designation on a matching gift claim, the designations must match for all portions of the payment that were originally applied the same designation.',13,1);
return 1;
end
update @MODIFIEDMATCHINGGIFTCLAIM set
FINANCIALTRANSACTIONID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID,
AMOUNT = FINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT
from
@MODIFIEDMATCHINGGIFTCLAIM as MODIFIEDMATCHINGGIFTCLAIM
inner join dbo.FINANCIALTRANSACTIONLINEITEM on MODIFIEDMATCHINGGIFTCLAIM.FINANCIALTRANSACTIONLINEITEMID = FINANCIALTRANSACTIONLINEITEM.ID;
--Record non-edited claim splits that match the edited claims
insert into @MODIFIEDMATCHINGGIFTCLAIM
(
FINANCIALTRANSACTIONID,
FINANCIALTRANSACTIONLINEITEMID,
AMOUNT,
DESIGNATIONID,
DESIGNATIONIDCHANGED
)
select
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID,
FINANCIALTRANSACTIONLINEITEM.ID,
FINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT,
REVENUESPLIT_EXT.DESIGNATIONID,
0 as DESIGNATIONIDCHANGED
from
(
select distinct
MODIFIEDMATCHINGGIFTCLAIM.FINANCIALTRANSACTIONID
from
@MODIFIEDMATCHINGGIFTCLAIM as MODIFIEDMATCHINGGIFTCLAIM
) as MODIFIEDMATCHINGGIFTCLAIM
inner join dbo.FINANCIALTRANSACTIONLINEITEM on MODIFIEDMATCHINGGIFTCLAIM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
inner join dbo.REVENUESPLIT_EXT on FINANCIALTRANSACTIONLINEITEM.ID = REVENUESPLIT_EXT.ID
left join @MODIFIEDMATCHINGGIFTCLAIM as ALREADYACCOUNTEDFORCLAIM on FINANCIALTRANSACTIONLINEITEM.ID = ALREADYACCOUNTEDFORCLAIM.FINANCIALTRANSACTIONLINEITEMID
where
ALREADYACCOUNTEDFORCLAIM.FINANCIALTRANSACTIONLINEITEMID is null;
with
ORDEREDMODIFIEDMATCHINGGIFTCLAIM as
(
select
MODIFIEDMATCHINGGIFTCLAIM.FINANCIALTRANSACTIONLINEITEMID,
row_number() over
(
partition by
MODIFIEDMATCHINGGIFTCLAIM.FINANCIALTRANSACTIONID,
MODIFIEDMATCHINGGIFTCLAIM.DESIGNATIONID
order by
MODIFIEDMATCHINGGIFTCLAIM.DESIGNATIONIDCHANGED
) as ROWNUMBER
from
@MODIFIEDMATCHINGGIFTCLAIM as MODIFIEDMATCHINGGIFTCLAIM
)
update @MODIFIEDMATCHINGGIFTCLAIM set
ROWNUMBER = ORDEREDMODIFIEDMATCHINGGIFTCLAIM.ROWNUMBER
from
@MODIFIEDMATCHINGGIFTCLAIM as MODIFIEDMATCHINGGIFTCLAIM
inner join ORDEREDMODIFIEDMATCHINGGIFTCLAIM on MODIFIEDMATCHINGGIFTCLAIM.FINANCIALTRANSACTIONLINEITEMID = ORDEREDMODIFIEDMATCHINGGIFTCLAIM.FINANCIALTRANSACTIONLINEITEMID;
update @MODIFIEDMATCHINGGIFTCLAIM set
REPLACEMENTFINANCIALTRANSACTIONLINEITEMID =
(
select
SELECTEDMODIFIEDMATCHINGGIFTCLAIM.FINANCIALTRANSACTIONLINEITEMID
from
@MODIFIEDMATCHINGGIFTCLAIM as SELECTEDMODIFIEDMATCHINGGIFTCLAIM
where
SELECTEDMODIFIEDMATCHINGGIFTCLAIM.ROWNUMBER = 1
and MODIFIEDMATCHINGGIFTCLAIM.FINANCIALTRANSACTIONID = SELECTEDMODIFIEDMATCHINGGIFTCLAIM.FINANCIALTRANSACTIONID
and MODIFIEDMATCHINGGIFTCLAIM.DESIGNATIONID = SELECTEDMODIFIEDMATCHINGGIFTCLAIM.DESIGNATIONID
)
from
@MODIFIEDMATCHINGGIFTCLAIM as MODIFIEDMATCHINGGIFTCLAIM;
set @MATCHINGGIFTCLAIMLINEITEMMAP =
(
select
MODIFIEDMATCHINGGIFTCLAIM.FINANCIALTRANSACTIONLINEITEMID,
MODIFIEDMATCHINGGIFTCLAIM.REPLACEMENTFINANCIALTRANSACTIONLINEITEMID
from
@MODIFIEDMATCHINGGIFTCLAIM as MODIFIEDMATCHINGGIFTCLAIM
where
MODIFIEDMATCHINGGIFTCLAIM.FINANCIALTRANSACTIONLINEITEMID <> MODIFIEDMATCHINGGIFTCLAIM.REPLACEMENTFINANCIALTRANSACTIONLINEITEMID
for xml raw('ITEM'),type,elements,root('MATCHINGGIFTCLAIMLINEITEMMAP'),BINARY BASE64
);
--Clear references from this payment to matching gift claim line items we
-- are going to delete. This avoids foreign key violations. We will
-- restore the link when editing the payment.
update dbo.FINANCIALTRANSACTIONLINEITEM set
SOURCELINEITEMID = REPLACEMENTFINANCIALTRANSACTIONLINEITEMID,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CURRENTDATE
from
dbo.FINANCIALTRANSACTIONLINEITEM
inner join @MODIFIEDMATCHINGGIFTCLAIM as MODIFIEDMATCHINGGIFTCLAIM on FINANCIALTRANSACTIONLINEITEM.SOURCELINEITEMID = MODIFIEDMATCHINGGIFTCLAIM.FINANCIALTRANSACTIONLINEITEMID
where
MODIFIEDMATCHINGGIFTCLAIM.FINANCIALTRANSACTIONLINEITEMID <> MODIFIEDMATCHINGGIFTCLAIM.REPLACEMENTFINANCIALTRANSACTIONLINEITEMID
and FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID;
delete from dbo.INSTALLMENTSPLITPAYMENT
from
dbo.INSTALLMENTSPLITPAYMENT
inner join dbo.FINANCIALTRANSACTIONLINEITEM on INSTALLMENTSPLITPAYMENT.PAYMENTID = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.INSTALLMENTSPLIT on INSTALLMENTSPLITPAYMENT.INSTALLMENTSPLITID = INSTALLMENTSPLIT.ID
inner join @MODIFIEDMATCHINGGIFTCLAIM as MODIFIEDMATCHINGGIFTCLAIM on INSTALLMENTSPLIT.REVENUESPLITID = MODIFIEDMATCHINGGIFTCLAIM.FINANCIALTRANSACTIONLINEITEMID
where
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @ID
and MODIFIEDMATCHINGGIFTCLAIM.DESIGNATIONIDCHANGED = 1;
--Multiple splits may be edited, group them by matching gift claim revenue record
declare MODIFIEDMATCHINGGIFTCLAIMCURSOR cursor local fast_forward for
select
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID,
CURRENCYSET.BASECURRENCYID,
FINANCIALTRANSACTION.ORGEXCHANGERATEID,
FINANCIALTRANSACTION.TRANSACTIONCURRENCYID,
FINANCIALTRANSACTION.BASEEXCHANGERATEID
from
@MATCHINGGIFTCLAIMSPLITS.nodes('/MATCHINGGIFTCLAIMSPLITS/ITEM') as MATCHINGGIFTCLAIMSPLITS(ITEM)
inner join dbo.FINANCIALTRANSACTIONLINEITEM on MATCHINGGIFTCLAIMSPLITS.ITEM.value('REVENUESPLITID[1]', 'uniqueidentifier') = FINANCIALTRANSACTIONLINEITEM.ID
inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
inner join dbo.PDACCOUNTSYSTEM on FINANCIALTRANSACTION.PDACCOUNTSYSTEMID = PDACCOUNTSYSTEM.ID
inner join dbo.CURRENCYSET on PDACCOUNTSYSTEM.CURRENCYSETID = CURRENCYSET.ID
group by
FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID,
CURRENCYSET.BASECURRENCYID,
FINANCIALTRANSACTION.ORGEXCHANGERATEID,
FINANCIALTRANSACTION.TRANSACTIONCURRENCYID,
FINANCIALTRANSACTION.BASEEXCHANGERATEID;
declare @MODIFIEDMATCHINGGIFTCLAIMREVENUEID uniqueidentifier;
declare @MATCHINGGIFTCLAIMBASECURRENCYID uniqueidentifier;
declare @MATCHINGGIFTCLAIMORGANIZATIONEXCHANGERATEID uniqueidentifier;
declare @MATCHINGGIFTCLAIMTRANSACTIONCURRENCYID uniqueidentifier;
declare @MATCHINGGIFTCLAIMBASEEXCHANGERATEID uniqueidentifier;
open MODIFIEDMATCHINGGIFTCLAIMCURSOR;
fetch next from MODIFIEDMATCHINGGIFTCLAIMCURSOR into
@MODIFIEDMATCHINGGIFTCLAIMREVENUEID,
@MATCHINGGIFTCLAIMBASECURRENCYID,
@MATCHINGGIFTCLAIMORGANIZATIONEXCHANGERATEID,
@MATCHINGGIFTCLAIMTRANSACTIONCURRENCYID,
@MATCHINGGIFTCLAIMBASEEXCHANGERATEID;
while @@FETCH_STATUS = 0
begin
-- Cache current values for recognition updates.
declare @OLDSPLITS xml = dbo.UFN_REVENUE_GETSPLITS_2_TOITEMLISTXML(@MODIFIEDMATCHINGGIFTCLAIMREVENUEID);
declare @OLDRECOGNITIONS xml = dbo.UFN_REVENUE_GETRECOGNITIONS_FORREVENUE_TOITEMLISTXML(@MODIFIEDMATCHINGGIFTCLAIMREVENUEID);
declare @SPLITS xml;
with
AGGREGATESPLITSITEM as
(
select
MODIFIEDMATCHINGGIFTCLAIM.FINANCIALTRANSACTIONLINEITEMID,
MODIFIEDMATCHINGGIFTCLAIM.DESIGNATIONID,
(
select
sum(AMOUNT)
from
@MODIFIEDMATCHINGGIFTCLAIM as SAMEDESIGNATIONMODIFIEDMATCHINGGIFTCLAIM
where
SAMEDESIGNATIONMODIFIEDMATCHINGGIFTCLAIM.DESIGNATIONID = MODIFIEDMATCHINGGIFTCLAIM.DESIGNATIONID
and SAMEDESIGNATIONMODIFIEDMATCHINGGIFTCLAIM.FINANCIALTRANSACTIONID = @MODIFIEDMATCHINGGIFTCLAIMREVENUEID
) as AMOUNT
from
@MODIFIEDMATCHINGGIFTCLAIM as MODIFIEDMATCHINGGIFTCLAIM
where
MODIFIEDMATCHINGGIFTCLAIM.FINANCIALTRANSACTIONID = @MODIFIEDMATCHINGGIFTCLAIMREVENUEID
and MODIFIEDMATCHINGGIFTCLAIM.ROWNUMBER = 1
)
select @SPLITS =
(
select
OLDSPLITS.ITEM.query('./*[local-name() != "DESIGNATIONID" and local-name() != "AMOUNT"]'),
AGGREGATESPLITSITEM.DESIGNATIONID,
AGGREGATESPLITSITEM.AMOUNT
from
@OLDSPLITS.nodes('/SPLITS/ITEM') as OLDSPLITS(ITEM)
inner join AGGREGATESPLITSITEM on OLDSPLITS.ITEM.value('(ID)[1]', 'uniqueidentifier') = AGGREGATESPLITSITEM.FINANCIALTRANSACTIONLINEITEMID
order by
OLDSPLITS.ITEM.value('(ID)[1]', 'uniqueidentifier')
for xml raw('ITEM'),type,elements,root('SPLITS'),BINARY BASE64
);
set @SPLITS = dbo.UFN_REVENUESPLIT_CONVERTAMOUNTSINXML(@SPLITS,@MATCHINGGIFTCLAIMBASECURRENCYID,@MATCHINGGIFTCLAIMORGANIZATIONEXCHANGERATEID,@MATCHINGGIFTCLAIMTRANSACTIONCURRENCYID,@MATCHINGGIFTCLAIMBASEEXCHANGERATEID);
exec dbo.USP_REVENUE_GETSPLITS_2_UPDATEFROMXML @MODIFIEDMATCHINGGIFTCLAIMREVENUEID, @SPLITS, @CHANGEAGENTID, @CURRENTDATE;
exec dbo.USP_REVENUE_UPDATERECOGNITION
@MODIFIEDMATCHINGGIFTCLAIMREVENUEID,
@OLDSPLITS,
0, --@UPDATERECOGNITIONOPTION, --0 = no update
@CHANGEAGENTID,
@CURRENTDATE,
@OLDRECOGNITIONS,
null,
null,
3;
exec dbo.USP_REVENUE_UPDATESOLICITORS @MODIFIEDMATCHINGGIFTCLAIMREVENUEID, @CHANGEAGENTID, @CURRENTDATE;
--assume one installment
declare @INSTALLMENTSPLITS xml;
set @INSTALLMENTSPLITS = (
select distinct
INSTALLMENTSPLIT.ID,
INSTALLMENT.ID
INSTALLMENTID,
REVENUESPLIT.DESIGNATIONID,
REVENUESPLIT.AMOUNT,
REVENUESPLIT.BASECURRENCYID,
REVENUESPLIT.ORGANIZATIONAMOUNT,
REVENUESPLIT.ORGANIZATIONEXCHANGERATEID,
REVENUESPLIT.TRANSACTIONAMOUNT,
REVENUESPLIT.TRANSACTIONCURRENCYID,
REVENUESPLIT.BASEEXCHANGERATEID,
REVENUESPLIT.ID as REVENUESPLITID
from REVENUESPLIT
inner join INSTALLMENT on INSTALLMENT.REVENUEID = REVENUESPLIT.REVENUEID
left outer join INSTALLMENTSPLIT
on REVENUESPLIT.ID = INSTALLMENTSPLIT.REVENUESPLITID
and REVENUESPLIT.DESIGNATIONID = INSTALLMENTSPLIT.DESIGNATIONID
where REVENUESPLIT.REVENUEID = @MODIFIEDMATCHINGGIFTCLAIMREVENUEID
for xml raw('ITEM'),type,elements,root('INSTALLMENTSPLITS'),BINARY BASE64
);
exec dbo.USP_PLEDGE_GETINSTALLMENTSPLITS_2_UPDATEFROMXML @MODIFIEDMATCHINGGIFTCLAIMREVENUEID, @INSTALLMENTSPLITS, @CHANGEAGENTID, @CURRENTDATE;
exec dbo.USP_REVENUE_CLEARANDADDCAMPAIGNS @REVENUEID = @MODIFIEDMATCHINGGIFTCLAIMREVENUEID,
@CHANGEAGENTID = @CHANGEAGENTID,
@CHANGEDATE = @CURRENTDATE;
fetch next from MODIFIEDMATCHINGGIFTCLAIMCURSOR into
@MODIFIEDMATCHINGGIFTCLAIMREVENUEID,
@MATCHINGGIFTCLAIMBASECURRENCYID,
@MATCHINGGIFTCLAIMORGANIZATIONEXCHANGERATEID,
@MATCHINGGIFTCLAIMTRANSACTIONCURRENCYID,
@MATCHINGGIFTCLAIMBASEEXCHANGERATEID;
end
close MODIFIEDMATCHINGGIFTCLAIMCURSOR;
deallocate MODIFIEDMATCHINGGIFTCLAIMCURSOR;