USP_R68PROCESS_COMMIT_WITHOUTPUT
Commits changes from an R68 process by updating tax claim numbers and creating tax claim refunds.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@ROWSPROCESSED | int | INOUT |
Definition
Copy
CREATE procedure dbo.USP_R68PROCESS_COMMIT_WITHOUTPUT
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier,
@ROWSPROCESSED int output
)
as
set nocount on;
begin try
declare @SQL nvarchar(4000);
declare @CHANGEDATE datetime = getDate();
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
-- Retrieve Tax claim number and output table names
declare @CHARITYCLAIMREFERENCENUMBER nvarchar(20);
declare @RUNGIFTAIDSPONSORSHIPSONLY bit = 0;
declare @TAXCLAIMNUMBER nvarchar(10);
declare @R68DETAILTABLENAME nvarchar(255);
declare @REFUNDDETAILTABLENAME nvarchar(255);
-- Retrieve most recent tax claim number
-- Allow user to change the tax claim number before committing without having to rerun the process
select
@TAXCLAIMNUMBER = R68ARCHIVEDPARAMETERS.TAXCLAIMNUMBER,
@R68DETAILTABLENAME = BUSINESSPROCESSOUTPUT.TABLENAME,
@ROWSPROCESSED = BUSINESSPROCESSSTATUS.NUMBERPROCESSED
from dbo.BUSINESSPROCESSSTATUS
inner join dbo.BUSINESSPROCESSOUTPUT
on BUSINESSPROCESSSTATUS.ID = BUSINESSPROCESSOUTPUT.BUSINESSPROCESSSTATUSID
inner join dbo.R68STATUS
on BUSINESSPROCESSSTATUS.ID= R68STATUS.ID
inner join dbo.R68
on R68STATUS.PARAMETERSETID = R68.ID
inner join R68ONLINESUBMISSIONPARAMETERS on
R68.ID = R68ONLINESUBMISSIONPARAMETERS.R68PROCESSID
inner join dbo.R68ARCHIVEDPARAMETERS
on R68ARCHIVEDPARAMETERS.ID = R68ONLINESUBMISSIONPARAMETERS.ID
where BUSINESSPROCESSSTATUS.ID = @ID
AND BUSINESSPROCESSOUTPUT.TABLEKEY = 'R68_OUTPUT'
AND R68ARCHIVEDPARAMETERS.ID = @ID;
declare @GLVALIDATIONSQL nvarchar(2000);
set @GLVALIDATIONSQL = '
if exists (select PD.PDACCOUNTSYSTEMID from dbo.' + @R68DETAILTABLENAME + ' as output
inner join dbo.REVENUESPLIT RS on output.REVENUESPLITID = RS.ID
inner join dbo.PDACCOUNTSYSTEMFORREVENUE PD on PD.ID = RS.REVENUEID
where NOT exists (select PDACCOUNTSYSTEMID from dbo.PDACCOUNTCODEMAPPING PDAC where OFFICEID = 12 and PDAC.PDACCOUNTSYSTEMID = PD.PDACCOUNTSYSTEMID)
and not exists (select * from dbo.PDACCOUNTSYSTEM where PDACCOUNTSYSTEM.ID = PD.PDACCOUNTSYSTEMID and DEFAULTGLACCOUNTID is not null)
and dbo.UFN_PDACCOUNTSYSTEM_ALLOWGLDISTRIBUTIONS(PD.PDACCOUNTSYSTEMID) = 1)
begin
declare @ACCOUNTSYSTEM nvarchar(100);
select top 1 @ACCOUNTSYSTEM = A.NAME
from dbo.' + @R68DETAILTABLENAME + ' as output
inner join dbo.REVENUESPLIT RS on output.REVENUESPLITID = RS.ID
inner join dbo.PDACCOUNTSYSTEMFORREVENUE PD on PD.ID = RS.REVENUEID
inner join dbo.PDACCOUNTSYSTEM A on PD.PDACCOUNTSYSTEMID = A.ID
where NOT exists (select PDACCOUNTSYSTEMID from dbo.PDACCOUNTCODEMAPPING PDAC where OFFICEID = 12 and PDAC.PDACCOUNTSYSTEMID = PD.PDACCOUNTSYSTEMID)
and not exists (select * from dbo.PDACCOUNTSYSTEM where PDACCOUNTSYSTEM.ID = PD.PDACCOUNTSYSTEMID and DEFAULTGLACCOUNTID is not null);
raiserror(''GLMAPPING_%s'',13,1, @ACCOUNTSYSTEM);
end'
exec sp_executesql @GLVALIDATIONSQL
-- Retrieve the Charity claim reference number from the archived parameters table
-- As if user changes this value the process must be restarted to retrieve updated data
-- If they commit the latest history, data will have been produced using archived Charity claim reference number
select
@CHARITYCLAIMREFERENCENUMBER = REFERENCENUMBER,
@RUNGIFTAIDSPONSORSHIPSONLY = RUNGIFTAIDSPONSORSHIPSONLY
from dbo.R68ARCHIVEDPARAMETERS
where ID = @ID;
-- Check to make sure the current Tax claim number has not already been used to commit
-- results for this Charity claim reference number
if dbo.UFN_R68_CLAIMNUMBERHASBEENCOMMITTED(@CHARITYCLAIMREFERENCENUMBER, @TAXCLAIMNUMBER) = 1
begin
declare @MSG nvarchar(255) = 'The current tax claim number (' + @TAXCLAIMNUMBER + ') has already been committed for this charity claim reference number (' + @CHARITYCLAIMREFERENCENUMBER + ').' + char(13) + char(10) + 'Please alter the tax claim number and attempt to commit the results again.';
raiserror(@MSG, 13, 1);
end
select
@REFUNDDETAILTABLENAME = BUSINESSPROCESSOUTPUT.TABLENAME
from dbo.BUSINESSPROCESSSTATUS
inner join dbo.BUSINESSPROCESSOUTPUT
on BUSINESSPROCESSSTATUS.ID = BUSINESSPROCESSOUTPUT.BUSINESSPROCESSSTATUSID
where BUSINESSPROCESSSTATUS.ID = @ID
AND BUSINESSPROCESSOUTPUT.TABLEKEY = 'R68REFUNDS_OUTPUT';
-- create/update refunds
set @SQL =
'merge dbo.REVENUESPLITGIFTAIDREFUND as refunds
using (select * from dbo.'
+ @REFUNDDETAILTABLENAME
+ ') as newRefunds
on refunds.ID = newRefunds.ID
when matched then update
set refunds.REFUNDTAXCLAIMNUMBER = @REFUNDTAXCLAIMNUMBER,
refunds.PENDINGR68STATUSID = null,
refunds.CHANGEDBYID = @CHANGEAGENTIDIN,
refunds.DATECHANGED = @CHANGEDATEIN
when not matched by target then
insert (ID, REVENUESPLITID, CONSTITUENTID, ORIGINALTAXCLAIMNUMBER, ORIGINALCHARITYCLAIMREFERENCENUMBER, ORIGINALGIFTDATE, ORIGINALGIFTAMOUNT, ORIGINALBASETAXCLAIMAMOUNT, ORIGINALTRANSITIONALTAXCLAIMAMOUNT, INCLUDETRANSITIONALAMOUNTCODE, REFUNDTAXCLAIMNUMBER, DATEREFUNDED, REFUNDSOURCECODE, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, ORIGINALCLAIMEDASSPONSORSHIP, ORIGINALBASECURRENCYID, ORIGINALTRANSACTIONGIFTAMOUNT, ORIGINALTRANSACTIONBASETAXCLAIMAMOUNT, ORIGINALTRANSACTIONTRANSITIONALTAXCLAIMAMOUNT, ORIGINALTRANSACTIONCURRENCYID, ORIGINALORGANIZATIONGIFTAMOUNT, ORIGINALORGANIZATIONBASETAXCLAIMAMOUNT, ORIGINALORGANIZATIONTRANSITIONALTAXCLAIMAMOUNT, ORIGINALBASEEXCHANGERATEID, ORIGINALORGANIZATIONEXCHANGERATEID)
values (newRefunds.ID, newRefunds.REVENUESPLITID, newRefunds.CONSTITUENTID, newRefunds.ORIGINALTAXCLAIMNUMBER, newRefunds.ORIGINALCHARITYCLAIMREFERENCENUMBER, newRefunds.ORIGINALGIFTDATE, newRefunds.BASEGIFTAMOUNT, newRefunds.BASEBASETAXCLAIMAMOUNT, newRefunds.BASETRANSITIONALTAXCLAIMAMOUNT, newRefunds.INCLUDETRANSITIONALAMOUNTCODE, @REFUNDTAXCLAIMNUMBER, @CHANGEDATEIN, newRefunds.REFUNDSOURCECODE, @CHANGEAGENTIDIN, @CHANGEAGENTIDIN, @CHANGEDATEIN, @CHANGEDATEIN, coalesce(newRefunds.ORIGINALCLAIMEDASSPONSORSHIP, 0), newRefunds.BASECURRENCYID, newRefunds.TRANSACTIONGIFTAMOUNT, newRefunds.TRANSACTIONBASETAXCLAIMAMOUNT, newRefunds.TRANSACTIONTRANSITIONALTAXCLAIMAMOUNT, newRefunds.TRANSACTIONCURRENCYID, newRefunds.ORGANIZATIONGIFTAMOUNT, newRefunds.ORGANIZATIONBASETAXCLAIMAMOUNT, newRefunds.ORGANIZATIONTRANSITIONALTAXCLAIMAMOUNT, newRefunds.BASEEXCHANGERATEID, newRefunds.ORGANIZATIONEXCHANGERATEID);'
exec sp_executesql @SQL, N'@REFUNDTAXCLAIMNUMBER nvarchar(10), @CHANGEAGENTIDIN uniqueidentifier, @CHANGEDATEIN datetime', @REFUNDTAXCLAIMNUMBER = @TAXCLAIMNUMBER, @CHANGEAGENTIDIN = @CHANGEAGENTID, @CHANGEDATEIN = @CHANGEDATE;
-- remove tax claim number from original applications
set @SQL =
'update rsga set
TAXCLAIMNUMBER = '''',
CHARITYCLAIMREFERENCENUMBER = '''',
INCLUDETRANSITIONALAMOUNTCODE = 0,
PENDINGR68STATUSID = null,
CHANGEDBYID = @CHANGEAGENTIDIN,
DATECHANGED = @CHANGEDATEIN,
CLAIMEDASSPONSORSHIP = case when @RUNGIFTAIDSPONSORSHIPSONLYIN = 1 then 0 else CLAIMEDASSPONSORSHIP end
from dbo.REVENUESPLITGIFTAID rsga
inner join dbo.'
+ @REFUNDDETAILTABLENAME
+ ' refunds on rsga.ID = refunds.REVENUESPLITID'
exec sp_executesql @SQL, N'@CHANGEAGENTIDIN uniqueidentifier, @CHANGEDATEIN datetime, @RUNGIFTAIDSPONSORSHIPSONLYIN bit', @CHANGEAGENTIDIN = @CHANGEAGENTID, @CHANGEDATEIN = @CHANGEDATE, @RUNGIFTAIDSPONSORSHIPSONLYIN = @RUNGIFTAIDSPONSORSHIPSONLY;
-- Update tax claim numbers
-- after handling refunds as it's possible to refund and claim the same application during the same R68 process...
set @SQL =
'update rsga set
TAXCLAIMNUMBER = @TAXCLAIMNUMBERIN,
CHARITYCLAIMREFERENCENUMBER = @CHARITYCLAIMREFERENCENUMBERIN,
PENDINGR68STATUSID = null,
CHANGEDBYID = @CHANGEAGENTIDIN,
DATECHANGED = @CHANGEDATEIN,
INCLUDETRANSITIONALAMOUNTCODE = case when dbo.UFN_REVENUESPLITGIFTAID_TRANSITIONALREFLIEFEXPIRED(rsga.ID, 0) = 0 then 1 else 2 end,
CLAIMEDASSPONSORSHIP = ISSPONSORSHIP
from dbo.REVENUESPLITGIFTAID rsga
inner join dbo.' + @R68DETAILTABLENAME
+ ' details on rsga.ID = details.REVENUESPLITID'
exec sp_executesql @SQL, N'@TAXCLAIMNUMBERIN nvarchar(10), @CHARITYCLAIMREFERENCENUMBERIN nvarchar(20), @CHANGEAGENTIDIN uniqueidentifier, @CHANGEDATEIN datetime', @TAXCLAIMNUMBERIN = @TAXCLAIMNUMBER, @CHARITYCLAIMREFERENCENUMBERIN = @CHARITYCLAIMREFERENCENUMBER, @CHANGEAGENTIDIN = @CHANGEAGENTID, @CHANGEDATEIN = @CHANGEDATE;
exec dbo.USP_R68_SAVEGIFTAIDGLDISTRIBUTIONS @ID, @CHANGEAGENTID;
-- Mark archived parameters as having been committed and set Tax claim number used
update dbo.R68ARCHIVEDPARAMETERS set
TAXCLAIMNUMBER = @TAXCLAIMNUMBER,
COMMITTED = 1,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
where ID = @ID;
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch