USP_R68_PROCESSREFUNDS
Process the refunds for the given R68 business process.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@R68ID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_R68_PROCESSREFUNDS
(
@R68ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@CHANGEDATE datetime = null,
@CURRENTAPPUSERID uniqueidentifier = null
)
as
begin
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CHANGEDATE is null
set @CHANGEDATE = getdate();
declare @CHARITYCLAIMREFERENCENUMBER nvarchar(10) = '';
declare @PREVIEWONLY bit = 0;
declare @IDSETREGISTERID uniqueidentifier;
declare @STARTDATE datetime;
declare @ENDDATE datetime;
declare @REFUNDTAXCLAIMNUMBER nvarchar(10) = '';
declare @INCLUDEPOSTEDGIFTS bit = 0;
begin try
-- retrieve the process parameters
select
@CHARITYCLAIMREFERENCENUMBER = REFERENCENUMBER,
@PREVIEWONLY = PREVIEWONLY,
@IDSETREGISTERID = IDSETREGISTERID,
@STARTDATE = STARTDATE,
@ENDDATE = ENDDATE,
@REFUNDTAXCLAIMNUMBER = TAXCLAIMNUMBER,
@INCLUDEPOSTEDGIFTS = INCLUDEPOSTEDGIFTS
from dbo.R68
where ID = @R68ID;
-- Populate site list table based on Charity Claim Number
declare @R68SITES table (SITEID uniqueidentifier);
insert into @R68SITES
select SITEID
from dbo.UFN_R68_SITESBYREFERENCENUMBER(@CHARITYCLAIMREFERENCENUMBER);
if not @IDSETREGISTERID is null
begin
-- Refunds based on altered declarations
insert into dbo.R68REFUNDDETAIL
(R68ID, REVENUESPLITID, CONSTITUENTID, ORIGINALGIFTAMOUNT, ORIGINALTAXCLAIMNUMBER, ORIGINALBASETAXCLAIMAMOUNT, ORIGINALTRANSITIONALTAXCLAIMAMOUNT, INCLUDETRANSITIONALAMOUNTCODE, REFUNDSOURCECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
@R68ID,
REVENUESPLIT.ID,
REVENUE.CONSTITUENTID,
REVENUESPLIT.AMOUNT,
REVENUESPLITGIFTAID.TAXCLAIMNUMBER,
REVENUESPLITGIFTAID.BASETAXCLAIMAMOUNT,
REVENUESPLITGIFTAID.TRANSITIONALTAXCLAIMAMOUNT,
REVENUESPLITGIFTAID.INCLUDETRANSITIONALAMOUNTCODE,
0,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE
from dbo.REVENUESPLITGIFTAID
inner join dbo.UFN_IDSETREADER_GETRESULTS_GUID(@IDSETREGISTERID) SELECTION
on REVENUESPLITGIFTAID.ID = SELECTION.ID
inner join dbo.REVENUESPLIT
on REVENUESPLITGIFTAID.ID = REVENUESPLIT.ID
inner join dbo.REVENUE
on REVENUESPLIT.REVENUEID = REVENUE.ID
left outer join dbo.REVENUEPOSTED
on REVENUE.ID = REVENUEPOSTED.ID
left outer join dbo.EVENTREGISTRANTPAYMENT
on REVENUESPLIT.ID = EVENTREGISTRANTPAYMENT.PAYMENTID
left outer join dbo.MEMBERSHIPTRANSACTION
on REVENUESPLIT.ID = MEMBERSHIPTRANSACTION.REVENUESPLITID
where len(REVENUESPLITGIFTAID.TAXCLAIMNUMBER) > 0
and (@STARTDATE is null or REVENUE.DATE >= @STARTDATE )
and (@ENDDATE is null or REVENUE.DATE <= @ENDDATE)
and (@INCLUDEPOSTEDGIFTS = 1 or REVENUEPOSTED.ID is null)
and exists (
select REVSITES.SITEID
from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT.ID) REVSITES
inner join @R68SITES R68SITES
on (R68SITES.SITEID = REVSITES.SITEID) or (R68SITES.SITEID is null and REVSITES.SITEID is null)
/* where clause is #SITEEXTENTION code*/
where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1)
or exists (
select 1
from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID, '5F83E4C6-7CAD-4b2c-95A6-506BB18130AB', 4) userSites
where userSites.SITEID=[REVSITES].[SITEID]
or (userSites.SITEID is null and [REVSITES].[SITEID] is null)
)
)
and (dbo.UFN_VALIDYESDECLARATION(REVENUE.DATE, REVENUE.CONSTITUENTID, REVENUESPLIT.DESIGNATIONID, EVENTREGISTRANTPAYMENT.REGISTRANTID, MEMBERSHIPTRANSACTION.MEMBERSHIPID) = 0);
-- manual refunds and adjustment refunds that have not been claimed and fit criteria
insert into dbo.R68REFUNDDETAIL
(R68ID, REVENUESPLITID, CONSTITUENTID, ORIGINALGIFTAMOUNT, ORIGINALTAXCLAIMNUMBER, ORIGINALBASETAXCLAIMAMOUNT, ORIGINALTRANSITIONALTAXCLAIMAMOUNT, INCLUDETRANSITIONALAMOUNTCODE, REFUNDSOURCECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
@R68ID,
REVENUESPLITGIFTAIDREFUND.REVENUESPLITID,
REVENUE.CONSTITUENTID,
REVENUESPLITGIFTAIDREFUND.ORIGINALGIFTAMOUNT,
REVENUESPLITGIFTAIDREFUND.ORIGINALTAXCLAIMNUMBER,
REVENUESPLITGIFTAIDREFUND.ORIGINALBASETAXCLAIMAMOUNT,
REVENUESPLITGIFTAIDREFUND.ORIGINALTRANSITIONALTAXCLAIMAMOUNT,
REVENUESPLITGIFTAIDREFUND.INCLUDETRANSITIONALAMOUNTCODE,
REVENUESPLITGIFTAIDREFUND.REFUNDSOURCECODE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE
from dbo.REVENUESPLITGIFTAIDREFUND
inner join dbo.UFN_IDSETREADER_GETRESULTS_GUID(@IDSETREGISTERID) SELECTION
on REVENUESPLITGIFTAIDREFUND.REVENUESPLITID = SELECTION.ID
inner join dbo.REVENUESPLIT
on REVENUESPLITGIFTAIDREFUND.REVENUESPLITID = REVENUESPLIT.ID
inner join dbo.REVENUE
on REVENUESPLIT.REVENUEID = REVENUE.ID
left outer join dbo.REVENUEPOSTED
on REVENUE.ID = REVENUEPOSTED.ID
left outer join dbo.EVENTREGISTRANTPAYMENT
on REVENUESPLIT.ID = EVENTREGISTRANTPAYMENT.PAYMENTID
left outer join dbo.MEMBERSHIPTRANSACTION
on REVENUESPLIT.ID = MEMBERSHIPTRANSACTION.REVENUESPLITID
where REVENUESPLITGIFTAIDREFUND.REFUNDTAXCLAIMNUMBER = ''
and REFUNDSOURCECODE in (1,2)
and (@STARTDATE is null or REVENUE.DATE >= @STARTDATE )
and (@ENDDATE is null or REVENUE.DATE <= @ENDDATE)
and (@INCLUDEPOSTEDGIFTS = 1 or REVENUEPOSTED.ID is null)
and exists (
select REVSITES.SITEID
from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT.ID) REVSITES
inner join @R68SITES R68SITES
on (R68SITES.SITEID = REVSITES.SITEID) or (R68SITES.SITEID is null and REVSITES.SITEID is null)
/* where clause is #SITEEXTENTION code*/
where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1)
or exists (
select 1
from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID, '5F83E4C6-7CAD-4b2c-95A6-506BB18130AB', 4) userSites
where userSites.SITEID=[REVSITES].[SITEID]
or (userSites.SITEID is null and [REVSITES].[SITEID] is null)
)
)
end
else
begin
-- Refunds based on altered declarations
insert into dbo.R68REFUNDDETAIL
(R68ID, REVENUESPLITID, CONSTITUENTID, ORIGINALGIFTAMOUNT, ORIGINALTAXCLAIMNUMBER, ORIGINALBASETAXCLAIMAMOUNT, ORIGINALTRANSITIONALTAXCLAIMAMOUNT, INCLUDETRANSITIONALAMOUNTCODE, REFUNDSOURCECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
@R68ID,
REVENUESPLIT.ID,
REVENUE.CONSTITUENTID,
REVENUESPLIT.AMOUNT,
REVENUESPLITGIFTAID.TAXCLAIMNUMBER,
REVENUESPLITGIFTAID.BASETAXCLAIMAMOUNT,
REVENUESPLITGIFTAID.TRANSITIONALTAXCLAIMAMOUNT,
REVENUESPLITGIFTAID.INCLUDETRANSITIONALAMOUNTCODE,
0,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE
from dbo.REVENUESPLITGIFTAID
inner join dbo.REVENUESPLIT
on REVENUESPLITGIFTAID.ID = REVENUESPLIT.ID
inner join dbo.REVENUE
on REVENUESPLIT.REVENUEID = REVENUE.ID
left outer join dbo.REVENUEPOSTED
on REVENUE.ID = REVENUEPOSTED.ID
left outer join dbo.EVENTREGISTRANTPAYMENT
on REVENUESPLIT.ID = EVENTREGISTRANTPAYMENT.PAYMENTID
left outer join dbo.MEMBERSHIPTRANSACTION
on REVENUESPLIT.ID = MEMBERSHIPTRANSACTION.REVENUESPLITID
where len(REVENUESPLITGIFTAID.TAXCLAIMNUMBER) > 0
and (@STARTDATE is null or REVENUE.DATE >= @STARTDATE)
and (@ENDDATE is null or REVENUE.DATE <= @ENDDATE)
and (@INCLUDEPOSTEDGIFTS = 1 or REVENUEPOSTED.ID is null)
and exists (
select REVSITES.SITEID
from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT.ID) REVSITES
inner join @R68SITES R68SITES
on (R68SITES.SITEID = REVSITES.SITEID) or (R68SITES.SITEID is null and REVSITES.SITEID is null)
/* where clause is #SITEEXTENTION code*/
where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1)
or exists (
select 1
from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID, '5F83E4C6-7CAD-4b2c-95A6-506BB18130AB', 4) userSites
where userSites.SITEID=[REVSITES].[SITEID]
or (userSites.SITEID is null and [REVSITES].[SITEID] is null)
)
)
and (dbo.UFN_VALIDYESDECLARATION(REVENUE.DATE, REVENUE.CONSTITUENTID, REVENUESPLIT.DESIGNATIONID, EVENTREGISTRANTPAYMENT.REGISTRANTID, MEMBERSHIPTRANSACTION.MEMBERSHIPID) = 0);
-- manual refunds and adjustment refunds that have not been claimed and fit criteria
insert into dbo.R68REFUNDDETAIL
(R68ID, REVENUESPLITID, CONSTITUENTID, ORIGINALGIFTAMOUNT, ORIGINALTAXCLAIMNUMBER, ORIGINALBASETAXCLAIMAMOUNT, ORIGINALTRANSITIONALTAXCLAIMAMOUNT, INCLUDETRANSITIONALAMOUNTCODE, REFUNDSOURCECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
@R68ID,
REVENUESPLITGIFTAIDREFUND.REVENUESPLITID,
REVENUE.CONSTITUENTID,
REVENUESPLITGIFTAIDREFUND.ORIGINALGIFTAMOUNT,
REVENUESPLITGIFTAIDREFUND.ORIGINALTAXCLAIMNUMBER,
REVENUESPLITGIFTAIDREFUND.ORIGINALBASETAXCLAIMAMOUNT,
REVENUESPLITGIFTAIDREFUND.ORIGINALTRANSITIONALTAXCLAIMAMOUNT,
REVENUESPLITGIFTAIDREFUND.INCLUDETRANSITIONALAMOUNTCODE,
REVENUESPLITGIFTAIDREFUND.REFUNDSOURCECODE,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE
from dbo.REVENUESPLITGIFTAIDREFUND
inner join dbo.REVENUESPLIT
on REVENUESPLITGIFTAIDREFUND.REVENUESPLITID = REVENUESPLIT.ID
inner join dbo.REVENUE
on REVENUESPLIT.REVENUEID = REVENUE.ID
left outer join dbo.REVENUEPOSTED
on REVENUE.ID = REVENUEPOSTED.ID
left outer join dbo.EVENTREGISTRANTPAYMENT
on REVENUESPLIT.ID = EVENTREGISTRANTPAYMENT.PAYMENTID
left outer join dbo.MEMBERSHIPTRANSACTION
on REVENUESPLIT.ID = MEMBERSHIPTRANSACTION.REVENUESPLITID
where REVENUESPLITGIFTAIDREFUND.REFUNDTAXCLAIMNUMBER = ''
and REFUNDSOURCECODE in (1,2)
and (@STARTDATE is null or REVENUE.DATE >= @STARTDATE )
and (@ENDDATE is null or REVENUE.DATE <= @ENDDATE)
and (@INCLUDEPOSTEDGIFTS = 1 or REVENUEPOSTED.ID is null)
and exists (
select REVSITES.SITEID
from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT.ID) REVSITES
inner join @R68SITES R68SITES
on (R68SITES.SITEID = REVSITES.SITEID) or (R68SITES.SITEID is null and REVSITES.SITEID is null)
/* where clause is #SITEEXTENTION code*/
where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1)
or exists (
select 1
from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID, '5F83E4C6-7CAD-4b2c-95A6-506BB18130AB', 4) userSites
where userSites.SITEID=[REVSITES].[SITEID]
or (userSites.SITEID is null and [REVSITES].[SITEID] is null)
)
)
end
-- process report summary values (MaxDate, TotalGiftAmount, TotalClaimAmount)
declare DATA_CURSOR cursor LOCAL FAST_FORWARD READ_ONLY for
select
CONSTITUENTID,
ORIGINALTAXCLAIMNUMBER
from dbo.R68REFUNDDETAIL
where R68ID = @R68ID
and coalesce(TOTALGIFTAMOUNTFROMORIGINALCLAIM, 0) = 0;
declare @MAXREVENUEDATE datetime;
declare @TOTALAMOUNT money;
declare @TOTALAMOUNT_REFUNDED money;
declare @TOTALCLAIM money;
declare @TOTALCLAIM_REFUNDED money;
declare @CONSTITUENTID uniqueidentifier;
declare @TAXCLAIMNUMBER nvarchar(10);
open DATA_CURSOR;
fetch next from DATA_CURSOR into @CONSTITUENTID, @TAXCLAIMNUMBER;
while @@FETCH_STATUS = 0
begin
select
@MAXREVENUEDATE = max(REVENUE.DATE),
@TOTALAMOUNT = coalesce(sum(REVENUESPLIT.AMOUNT), 0),
@TOTALCLAIM = coalesce(sum(REVENUESPLITGIFTAID.BASETAXCLAIMAMOUNT), 0)
from dbo.REVENUE
inner join dbo.REVENUESPLIT
on REVENUE.ID = REVENUESPLIT.REVENUEID
inner join dbo.REVENUESPLITGIFTAID
on REVENUESPLIT.ID = REVENUESPLITGIFTAID.ID
where REVENUE.CONSTITUENTID = @CONSTITUENTID
and REVENUESPLITGIFTAID.TAXCLAIMNUMBER = @TAXCLAIMNUMBER;
-- include refunds in total gift and claim amounts
select
@TOTALAMOUNT_REFUNDED = coalesce(sum(REVENUESPLITGIFTAIDREFUND.ORIGINALGIFTAMOUNT), 0),
@TOTALCLAIM_REFUNDED = coalesce(sum(REVENUESPLITGIFTAIDREFUND.ORIGINALBASETAXCLAIMAMOUNT), 0)
from dbo.REVENUE
inner join dbo.REVENUESPLIT
on REVENUE.ID = REVENUESPLIT.REVENUEID
inner join dbo.REVENUESPLITGIFTAIDREFUND
on REVENUESPLIT.ID = REVENUESPLITGIFTAIDREFUND.REVENUESPLITID
where REVENUE.CONSTITUENTID = @CONSTITUENTID
and REVENUESPLITGIFTAIDREFUND.ORIGINALTAXCLAIMNUMBER = @TAXCLAIMNUMBER;
update dbo.R68REFUNDDETAIL set
MAXGIFTDATEFROMORIGINALCLAIM = @MAXREVENUEDATE,
TOTALGIFTAMOUNTFROMORIGINALCLAIM = @TOTALAMOUNT + @TOTALAMOUNT_REFUNDED,
TOTALTAXCLAIMAMOUNTFROMORIGINALCLAIM = @TOTALCLAIM + @TOTALCLAIM_REFUNDED
where R68ID = @R68ID
and CONSTITUENTID = @CONSTITUENTID
and ORIGINALTAXCLAIMNUMBER = @TAXCLAIMNUMBER;
fetch next from DATA_CURSOR into @CONSTITUENTID, @TAXCLAIMNUMBER;
end
close DATA_CURSOR;
deallocate DATA_CURSOR;
-- if not previewing the report, merge new refunds into refund table
-- merging because you may have to update if an application was refunded, re-claimed, and refunded again...
if @PREVIEWONLY = 0
begin
merge dbo.REVENUESPLITGIFTAIDREFUND as refunds
using (select * from dbo.R68REFUNDDETAIL where R68ID = @R68ID) as newRefunds
on refunds.REVENUESPLITID = newRefunds.REVENUESPLITID and refunds.REFUNDTAXCLAIMNUMBER = ''
when matched then update
set refunds.ORIGINALTAXCLAIMNUMBER = newRefunds.ORIGINALTAXCLAIMNUMBER,
refunds.ORIGINALGIFTAMOUNT = newRefunds.ORIGINALGIFTAMOUNT,
refunds.ORIGINALBASETAXCLAIMAMOUNT = newRefunds.ORIGINALBASETAXCLAIMAMOUNT,
refunds.ORIGINALTRANSITIONALTAXCLAIMAMOUNT = newRefunds.ORIGINALTRANSITIONALTAXCLAIMAMOUNT,
refunds.INCLUDETRANSITIONALAMOUNTCODE = newRefunds.INCLUDETRANSITIONALAMOUNTCODE,
refunds.REFUNDSOURCECODE = newRefunds.REFUNDSOURCECODE,
refunds.REFUNDTAXCLAIMNUMBER = @REFUNDTAXCLAIMNUMBER,
refunds.DATEREFUNDED = @CHANGEDATE,
refunds.CHANGEDBYID = @CHANGEAGENTID,
refunds.DATECHANGED = @CHANGEDATE
when not matched by target then
insert (ID, REVENUESPLITID, ORIGINALTAXCLAIMNUMBER, ORIGINALGIFTAMOUNT, ORIGINALBASETAXCLAIMAMOUNT, ORIGINALTRANSITIONALTAXCLAIMAMOUNT, INCLUDETRANSITIONALAMOUNTCODE, REFUNDTAXCLAIMNUMBER, DATEREFUNDED, REFUNDSOURCECODE, R68ID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
values (newID(), newRefunds.REVENUESPLITID, newRefunds.ORIGINALTAXCLAIMNUMBER, newRefunds.ORIGINALGIFTAMOUNT, newRefunds.ORIGINALBASETAXCLAIMAMOUNT, newRefunds.ORIGINALTRANSITIONALTAXCLAIMAMOUNT, newRefunds.INCLUDETRANSITIONALAMOUNTCODE, @REFUNDTAXCLAIMNUMBER, @CHANGEDATE, newRefunds.REFUNDSOURCECODE, newRefunds.R68ID, @CHANGEAGENTID, @CHANGEAGENTID, @CHANGEDATE, @CHANGEDATE);
-- turn off nocount, so the #records updated can be returned
set nocount off;
-- remove tax claim number from original applications
update dbo.REVENUESPLITGIFTAID set
TAXCLAIMNUMBER = '',
INCLUDETRANSITIONALAMOUNTCODE = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
where ID in (
select REVENUESPLITID
from dbo.R68REFUNDDETAIL
where R68ID = @R68ID
);
end
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0;
end