USP_MANAGEGIFTAIDFORSPLITS
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@REVENUEID | uniqueidentifier | IN | |
@ORGANIZATIONCURRENCYID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN | |
@DATE | datetime | IN | |
@SPLITSDECLININGGIFTAIDTBLXML | xml | IN | |
@GIFTAIDSPONSORSHIPSPLITSTBLXML | xml | IN | |
@DELETEDANDCHANGEDSPLITSINFOXML | xml | IN |
Definition
Copy
create procedure USP_MANAGEGIFTAIDFORSPLITS
(
@REVENUEID uniqueidentifier,
@ORGANIZATIONCURRENCYID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@CURRENTDATE datetime,
@DATE datetime,
@SPLITSDECLININGGIFTAIDTBLXML xml,
@GIFTAIDSPONSORSHIPSPLITSTBLXML xml,
@DELETEDANDCHANGEDSPLITSINFOXML xml
)
as
--Gift Aid Code pulled from USP_REVENUE_UPDATEREVENUESTREAMS so that it can be reused.
--Gift Aid is for UK only
declare @PRODUCTISUK bit = dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('9568A6C2-F7AA-45fd-8F54-21FE9654EE2D');
declare @GBPCURRENCYID uniqueidentifier = (select CURRENCY.ID from dbo.CURRENCY where CURRENCY.ISO4217 = 'GBP');
if @PRODUCTISUK = 1
begin
declare @SPLITSDECLININGGIFTAIDTBL table (REVENUESPLITID uniqueidentifier);
insert into @SPLITSDECLININGGIFTAIDTBL (REVENUESPLITID)
select T.c.value('(REVENUESPLITID)[1]','uniqueidentifier')
from @SPLITSDECLININGGIFTAIDTBLXML.nodes('/SPLITSDECLININGGIFTAID/ITEM') T(c);
declare @GIFTAIDSPONSORSHIPSPLITSTBL table (REVENUESPLITID uniqueidentifier);
insert into @GIFTAIDSPONSORSHIPSPLITSTBL (REVENUESPLITID)
select T.c.value('(REVENUESPLITID)[1]','uniqueidentifier')
from @GIFTAIDSPONSORSHIPSPLITSTBLXML.nodes('/GIFTAIDSPONSORSHIPSPLITS/ITEM') T(c);
declare @DELETEDANDCHANGEDSPLITSINFO table ( REVENUESPLITID uniqueidentifier,
CONSTITUENTID uniqueidentifier,
TAXCLAIMNUMBER nvarchar(10),
CHARITYCLAIMREFERENCENUMBER nvarchar(20),
GIFTDATE datetime,
GIFTAMOUNT money,
BASETAXCLAIMAMOUNT money,
TRANSITIONALTAXCLAIMAMOUNT money,
INCLUDETRANSITIONALAMOUNTCODE tinyint,
CLAIMEDASSPONSORSHIP bit,
TRANSACTIONBASETAXCLAIMAMOUNT money,
TRANSACTIONCURRENCYID uniqueidentifier,
TRANSACTIONTRANSITIONALTAXCLAIMAMOUNT money,
ORGANIZATIONBASETAXCLAIMAMOUNT money,
ORGANIZATIONEXCHANGERATEID uniqueidentifier,
ORGANIZATIONTRANSITIONALTAXCLAIMAMOUNT money,
BASECURRENCYID uniqueidentifier,
BASEEXCHANGERATEID uniqueidentifier,
TRANSACTIONGIFTAMOUNT money,
ORGANIZATIONGIFTAMOUNT money,
ISSPONSORSHIP bit,
ISDELETED bit,
BASERATE numeric(30,6),
TRANSITIONALRATE numeric(30,6),
AMOUNTTOSUM money)
insert into @DELETEDANDCHANGEDSPLITSINFO(REVENUESPLITID,
CONSTITUENTID,
TAXCLAIMNUMBER,
CHARITYCLAIMREFERENCENUMBER,
GIFTDATE,
GIFTAMOUNT,
BASETAXCLAIMAMOUNT,
TRANSITIONALTAXCLAIMAMOUNT,
INCLUDETRANSITIONALAMOUNTCODE,
CLAIMEDASSPONSORSHIP,
TRANSACTIONBASETAXCLAIMAMOUNT,
TRANSACTIONCURRENCYID,
TRANSACTIONTRANSITIONALTAXCLAIMAMOUNT,
ORGANIZATIONBASETAXCLAIMAMOUNT,
ORGANIZATIONEXCHANGERATEID,
ORGANIZATIONTRANSITIONALTAXCLAIMAMOUNT,
BASECURRENCYID,
BASEEXCHANGERATEID,
TRANSACTIONGIFTAMOUNT,
ORGANIZATIONGIFTAMOUNT,
ISSPONSORSHIP,
ISDELETED,
BASERATE,
TRANSITIONALRATE,
AMOUNTTOSUM)
select T.c.value('(REVENUESPLITID)[1]', 'uniqueidentifier') as REVENUESPLITID,
T.c.value('(CONSTITUENTID)[1]', 'uniqueidentifier') as CONSTITUENTID,
T.c.value('(TAXCLAIMNUMBER)[1]', 'nvarchar(10)') as TAXCLAIMNUMBER,
T.c.value('(CHARITYCLAIMREFERENCENUMBER)[1]', 'nvarchar(20)') as CHARITYCLAIMREFERENCENUMBER,
T.c.value('(GIFTDATE)[1]', 'datetime') as GIFTDATE,
T.c.value('(GIFTAMOUNT)[1]', 'money') as GIFTAMOUNT,
T.c.value('(BASETAXCLAIMAMOUNT)[1]', 'money') as BASETAXCLAIMAMOUNT,
T.c.value('(TRANSITIONALTAXCLAIMAMOUNT)[1]', 'money') as TRANSITIONALTAXCLAIMAMOUNT,
T.c.value('(INCLUDETRANSITIONALAMOUNTCODE)[1]', 'tinyint') as INCLUDETRANSITIONALAMOUNTCODE,
T.c.value('(CLAIMEDASSPONSORSHIP)[1]', 'bit') as CLAIMEDASSPONSORSHIP,
T.c.value('(TRANSACTIONBASETAXCLAIMAMOUNT)[1]', 'money') as TRANSACTIONBASETAXCLAIMAMOUNT,
T.c.value('(TRANSACTIONCURRENCYID)[1]', 'uniqueidentifier') as TRANSACTIONCURRENCYID,
T.c.value('(TRANSACTIONTRANSITIONALTAXCLAIMAMOUNT)[1]', 'money') as TRANSACTIONTRANSITIONALTAXCLAIMAMOUNT,
T.c.value('(ORGANIZATIONBASETAXCLAIMAMOUNT)[1]', 'money') as ORGANIZATIONBASETAXCLAIMAMOUNT,
T.c.value('(ORGANIZATIONEXCHANGERATEID)[1]', 'uniqueidentifier') as ORGANIZATIONEXCHANGERATEID,
T.c.value('(ORGANIZATIONTRANSITIONALTAXCLAIMAMOUNT)[1]', 'money') as ORGANIZATIONTRANSITIONALTAXCLAIMAMOUNT,
T.c.value('(BASECURRENCYID)[1]', 'uniqueidentifier') as BASECURRENCYID,
T.c.value('(BASEEXCHANGERATEID)[1]', 'uniqueidentifier') as BASEEXCHANGERATEID,
T.c.value('(TRANSACTIONGIFTAMOUNT)[1]', 'money') as TRANSACTIONGIFTAMOUNT,
T.c.value('(ORGANIZATIONGIFTAMOUNT)[1]', 'money') as ORGANIZATIONGIFTAMOUNT,
T.c.value('(ISSPONSORSHIP)[1]', 'bit') as ISSPONSORSHIP,
T.c.value('(ISDELETED)[1]', 'bit') as ISDELETED,
T.c.value('(BASERATE)[1]', 'numeric(30,6)') as BASERATE,
T.c.value('(TRANSITIONALRATE)[1]', 'numeric(30,6)') as TRANSITIONALRATE,
T.c.value('(AMOUNTTOSUM)[1]', 'money') as AMOUNTTOSUM
from @DELETEDANDCHANGEDSPLITSINFOXML.nodes('/DELETEDANDCHANGEDSPLITSINFO/ITEM') T(c);
--New splits that aren't declined. Not including CCRN until the actual line item is created.
declare @NEWGIFTAIDSPLITS table (NEWREVENUESPLITID uniqueidentifier,
AMOUNT money,
CHARITYCLAIMREFERENCENUMBER nvarchar(20),
ISSPONSORSHIP bit,
TRANSACTIONAMOUNT money
);
insert into @NEWGIFTAIDSPLITS (NEWREVENUESPLITID,AMOUNT,CHARITYCLAIMREFERENCENUMBER,ISSPONSORSHIP,TRANSACTIONAMOUNT)
select FINANCIALTRANSACTIONLINEITEM.ID,
case when @ORGANIZATIONCURRENCYID = @GBPCURRENCYID then FINANCIALTRANSACTIONLINEITEM.ORGAMOUNT
when FINANCIALTRANSACTION.TRANSACTIONCURRENCYID = @GBPCURRENCYID then FINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT
when V.BASECURRENCYID = @GBPCURRENCYID then FINANCIALTRANSACTIONLINEITEM.BASEAMOUNT
else 0
end as AMOUNT,
(select CHARITYCLAIMREFERENCENUMBER.REFERENCENUMBER from dbo.CHARITYCLAIMREFERENCENUMBER
where ID = (dbo.UFN_CHARITYCLAIMREFERENCENUMBER_GETBYSITE((select top 1 SITEID from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(FINANCIALTRANSACTIONLINEITEM.ID))))),
0,
FINANCIALTRANSACTIONLINEITEM.TRANSACTIONAMOUNT
from dbo.FINANCIALTRANSACTIONLINEITEM
inner join dbo.FINANCIALTRANSACTION on FINANCIALTRANSACTION.ID = FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID
left outer join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V with (noexpand) on FINANCIALTRANSACTION.ID = V.FINANCIALTRANSACTIONID
where FINANCIALTRANSACTIONLINEITEM.FINANCIALTRANSACTIONID = @REVENUEID
and FINANCIALTRANSACTIONLINEITEM.ID not in (select REVENUESPLITID from @SPLITSDECLININGGIFTAIDTBL)
and FINANCIALTRANSACTIONLINEITEM.DELETEDON is null
and FINANCIALTRANSACTIONLINEITEM.TYPECODE not in (1,8)
and dbo.UFN_GIFTAIDSTATUS_GETBASEDONRULES(FINANCIALTRANSACTIONLINEITEM.ID) = 1; --Qualified
update @NEWGIFTAIDSPLITS
set NEWGIFTAIDSPLITS.ISSPONSORSHIP = 1
from @NEWGIFTAIDSPLITS NEWGIFTAIDSPLITS
inner join @GIFTAIDSPONSORSHIPSPLITSTBL GIFTAIDSPONSORSHIPSPLITSTBL on GIFTAIDSPONSORSHIPSPLITSTBL.REVENUESPLITID = NEWGIFTAIDSPLITS.NEWREVENUESPLITID;
declare @SPLITSTOUPDATE table (NEWREVENUESPLITID uniqueidentifier,
TAXCLAIMNUMBER nvarchar(10),
CHARITYCLAIMREFERENCENUMBER nvarchar(20),
OLDREVENUESPLITID uniqueidentifier,
ISDELETED bit,
OLDBASERATE numeric(30,6),
OLDTRANSITIONALRATE numeric(30,6)
);
--Build a old and new splits table and include the CCRN, group by CCRN,sum(transactionamount) and ISSPONSORSHIP. For any CCRNS where the sum's/sponsorships
--match we should copy the TAXCLAIMNUMBER of the old split to the new split and not create a refund.
--This will prevent the R68 process from picking these new splits up or refunding them when there is no reason as it is still the same amount and CCRN.
with OLDSPLITSCTE as
(
select sum(DELETEDANDCHANGEDSPLITSINFO.AMOUNTTOSUM) as AMOUNTSUM,
DELETEDANDCHANGEDSPLITSINFO.CHARITYCLAIMREFERENCENUMBER,
DELETEDANDCHANGEDSPLITSINFO.ISSPONSORSHIP
from @DELETEDANDCHANGEDSPLITSINFO as DELETEDANDCHANGEDSPLITSINFO
group by DELETEDANDCHANGEDSPLITSINFO.CHARITYCLAIMREFERENCENUMBER,DELETEDANDCHANGEDSPLITSINFO.ISSPONSORSHIP
)
,NEWSPLITSCTE as
(
select sum(NEWGIFTAIDSPLITS.AMOUNT) as AMOUNTSUM,
NEWGIFTAIDSPLITS.CHARITYCLAIMREFERENCENUMBER,
NEWGIFTAIDSPLITS.ISSPONSORSHIP
from @NEWGIFTAIDSPLITS as NEWGIFTAIDSPLITS
group by NEWGIFTAIDSPLITS.CHARITYCLAIMREFERENCENUMBER,NEWGIFTAIDSPLITS.ISSPONSORSHIP
)
insert into @SPLITSTOUPDATE
select NEWGIFTAIDSPLITS.NEWREVENUESPLITID,
DELETEDANDCHANGEDSPLITSINFO.TAXCLAIMNUMBER,
CCRN.CHARITYCLAIMREFERENCENUMBER,
DELETEDANDCHANGEDSPLITSINFO.REVENUESPLITID,
DELETEDANDCHANGEDSPLITSINFO.ISDELETED,
DELETEDANDCHANGEDSPLITSINFO.BASERATE,
DELETEDANDCHANGEDSPLITSINFO.TRANSITIONALRATE
from (
select
OLDSPLITSCTE.CHARITYCLAIMREFERENCENUMBER,
OLDSPLITSCTE.ISSPONSORSHIP
from OLDSPLITSCTE,NEWSPLITSCTE
where OLDSPLITSCTE.AMOUNTSUM = NEWSPLITSCTE.AMOUNTSUM
and OLDSPLITSCTE.CHARITYCLAIMREFERENCENUMBER = NEWSPLITSCTE.CHARITYCLAIMREFERENCENUMBER
and NEWSPLITSCTE.ISSPONSORSHIP = OLDSPLITSCTE.ISSPONSORSHIP) as CCRN
inner join @NEWGIFTAIDSPLITS NEWGIFTAIDSPLITS on NEWGIFTAIDSPLITS.CHARITYCLAIMREFERENCENUMBER = CCRN.CHARITYCLAIMREFERENCENUMBER and NEWGIFTAIDSPLITS.ISSPONSORSHIP = CCRN.ISSPONSORSHIP
inner join @DELETEDANDCHANGEDSPLITSINFO DELETEDANDCHANGEDSPLITSINFO on DELETEDANDCHANGEDSPLITSINFO.CHARITYCLAIMREFERENCENUMBER = CCRN.CHARITYCLAIMREFERENCENUMBER and DELETEDANDCHANGEDSPLITSINFO.ISSPONSORSHIP = CCRN.ISSPONSORSHIP
where dbo.UFN_GIFTAIDSTATUS_GETBASEDONRULES(NEWGIFTAIDSPLITS.NEWREVENUESPLITID) = 1; --Qualified
--Generate Gift Aid refunds for splits that were claimed on the R68 report and are now being deleted
--and not being re-claimed by a same amount/CCRN split(s).
--If the split existed before and still does but under a different CCRN, don't create the refund record.
insert into dbo.REVENUESPLITGIFTAIDREFUND
(
ID,
CONSTITUENTID,
REVENUESPLITID,
ORIGINALTAXCLAIMNUMBER,
ORIGINALCHARITYCLAIMREFERENCENUMBER,
ORIGINALGIFTDATE,
ORIGINALGIFTAMOUNT,
ORIGINALBASETAXCLAIMAMOUNT,
ORIGINALTRANSITIONALTAXCLAIMAMOUNT,
INCLUDETRANSITIONALAMOUNTCODE,
DATEREFUNDED,
REFUNDSOURCECODE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED,
ORIGINALCLAIMEDASSPONSORSHIP,
ORIGINALTRANSACTIONBASETAXCLAIMAMOUNT,
ORIGINALTRANSACTIONCURRENCYID,
ORIGINALTRANSACTIONTRANSITIONALTAXCLAIMAMOUNT,
ORIGINALORGANIZATIONBASETAXCLAIMAMOUNT,
ORIGINALORGANIZATIONEXCHANGERATEID,
ORIGINALORGANIZATIONTRANSITIONALTAXCLAIMAMOUNT,
ORIGINALBASECURRENCYID,
ORIGINALBASEEXCHANGERATEID,
ORIGINALTRANSACTIONGIFTAMOUNT,
ORIGINALORGANIZATIONGIFTAMOUNT
)
select
newID(),
DELETEDANDCHANGEDSPLITSINFO.CONSTITUENTID,
DELETEDANDCHANGEDSPLITSINFO.REVENUESPLITID,
DELETEDANDCHANGEDSPLITSINFO.TAXCLAIMNUMBER,
DELETEDANDCHANGEDSPLITSINFO.CHARITYCLAIMREFERENCENUMBER,
cast(DELETEDANDCHANGEDSPLITSINFO.GIFTDATE as datetime) as DATE,
DELETEDANDCHANGEDSPLITSINFO.GIFTAMOUNT,
DELETEDANDCHANGEDSPLITSINFO.BASETAXCLAIMAMOUNT,
DELETEDANDCHANGEDSPLITSINFO.TRANSITIONALTAXCLAIMAMOUNT,
DELETEDANDCHANGEDSPLITSINFO.INCLUDETRANSITIONALAMOUNTCODE,
@CURRENTDATE,
case when DELETEDANDCHANGEDSPLITSINFO.ISDELETED = 1 then 3 --Application deleted
else 2 -- Application amount changed
end,
@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE,
DELETEDANDCHANGEDSPLITSINFO.CLAIMEDASSPONSORSHIP,
DELETEDANDCHANGEDSPLITSINFO.TRANSACTIONBASETAXCLAIMAMOUNT,
DELETEDANDCHANGEDSPLITSINFO.TRANSACTIONCURRENCYID,
DELETEDANDCHANGEDSPLITSINFO.TRANSACTIONTRANSITIONALTAXCLAIMAMOUNT,
DELETEDANDCHANGEDSPLITSINFO.ORGANIZATIONBASETAXCLAIMAMOUNT,
DELETEDANDCHANGEDSPLITSINFO.ORGANIZATIONEXCHANGERATEID,
DELETEDANDCHANGEDSPLITSINFO.ORGANIZATIONTRANSITIONALTAXCLAIMAMOUNT,
DELETEDANDCHANGEDSPLITSINFO.BASECURRENCYID,
DELETEDANDCHANGEDSPLITSINFO.BASEEXCHANGERATEID,
DELETEDANDCHANGEDSPLITSINFO.TRANSACTIONGIFTAMOUNT,
DELETEDANDCHANGEDSPLITSINFO.ORGANIZATIONGIFTAMOUNT
from @DELETEDANDCHANGEDSPLITSINFO DELETEDANDCHANGEDSPLITSINFO
left join @NEWGIFTAIDSPLITS NEWGIFTAIDSPLITS on NEWGIFTAIDSPLITS.NEWREVENUESPLITID = DELETEDANDCHANGEDSPLITSINFO.REVENUESPLITID
where DELETEDANDCHANGEDSPLITSINFO.REVENUESPLITID not in (select OLDREVENUESPLITID from @SPLITSTOUPDATE)
and( (NEWGIFTAIDSPLITS.NEWREVENUESPLITID is null) or (NEWGIFTAIDSPLITS.TRANSACTIONAMOUNT <> DELETEDANDCHANGEDSPLITSINFO.TRANSACTIONGIFTAMOUNT and DELETEDANDCHANGEDSPLITSINFO.ISDELETED = 0))
and not exists (select REVENUESPLITID from dbo.REVENUESPLITGIFTAIDREFUND where REVENUESPLITGIFTAIDREFUND.REFUNDTAXCLAIMNUMBER = ''
and REVENUESPLITGIFTAIDREFUND.REVENUESPLITID = DELETEDANDCHANGEDSPLITSINFO.REVENUESPLITID);
--Handle refund creation for non-deleted, amount changed splits.
--Pulled from USP_REVENUESPLIT_CREATEREFUND
update dbo.REVENUESPLITGIFTAID set
TAXCLAIMNUMBER = '',
CHARITYCLAIMREFERENCENUMBER = '',
INCLUDETRANSITIONALAMOUNTCODE = 0
from dbo.REVENUESPLITGIFTAID
inner join @DELETEDANDCHANGEDSPLITSINFO DELETEDANDCHANGEDSPLITSINFO on DELETEDANDCHANGEDSPLITSINFO.REVENUESPLITID = REVENUESPLITGIFTAID.ID
left join @NEWGIFTAIDSPLITS NEWGIFTAIDSPLITS on NEWGIFTAIDSPLITS.NEWREVENUESPLITID = DELETEDANDCHANGEDSPLITSINFO.REVENUESPLITID
where DELETEDANDCHANGEDSPLITSINFO.REVENUESPLITID not in (select OLDREVENUESPLITID from @SPLITSTOUPDATE)
and DELETEDANDCHANGEDSPLITSINFO.ISDELETED = 0
and (NEWGIFTAIDSPLITS.NEWREVENUESPLITID is not null and (NEWGIFTAIDSPLITS.TRANSACTIONAMOUNT <> DELETEDANDCHANGEDSPLITSINFO.TRANSACTIONGIFTAMOUNT));
--Passing in null for APPEALID,PAYMENTMETHODCODE and CREDITTYPECODEID. The USP never uses them.
--Passing in @SPLITSTOTRANSFERGIFTAID to include additional information about splits that don't need to be re-claimed because
--there already exists a claim for the same amount/ccrn on the revenue.
declare @SPLITSTOTRANSFERGIFTAID xml = (select NEWREVENUESPLITID as REVENUESPLITID,
TAXCLAIMNUMBER,
CHARITYCLAIMREFERENCENUMBER,
OLDBASERATE as BASERATE,
OLDTRANSITIONALRATE as TRANSITIONALRATE
from @SPLITSTOUPDATE SPLITSTOUPDATE
for xml raw('ITEM'), type, elements, root('SPLITSTOTRANSFERGIFTAID'), binary base64);
exec dbo.USP_GIFTAIDREVENUESPLIT_ADDUPDATESPLITS @ID=@REVENUEID,
@APPEALID=null,
@PAYMENTMETHODCODE =null,
@CREDITTYPECODEID = null,
@CHANGEAGENTID=@CHANGEAGENTID,
@DATE=@DATE,
@TRANSACTIONTYPECODE = 0, --revenue transaction type code of payment is 0
@SPLITSDECLININGGIFTAID = @SPLITSDECLININGGIFTAIDTBLXML,
@COVENANTGIFTSPLITS = null,
@GIFTAIDSPONSORSHIPSPLITS=@GIFTAIDSPONSORSHIPSPLITSTBLXML,
@SPLITSTOTRANSFERGIFTAID=@SPLITSTOTRANSFERGIFTAID;
end