USP_REVENUELIFECYCLEREVENUECRITERIA_UPDATEVALIDREVENUEFUNCTION
Update UFN_REVENUELIFECYCLE_GETVALIDREVENUE to reflect the current revenue types chosen for Revenue Life Cycle criteria.
Definition
Copy
CREATE procedure dbo.USP_REVENUELIFECYCLEREVENUECRITERIA_UPDATEVALIDREVENUEFUNCTION
as
begin
set nocount on;
declare @FUNCTIONSQL nvarchar(max);
declare @WHERECLAUSE nvarchar(max) = '';
declare @REVENUETYPECODE tinyint;
declare @CONSIDERCLAIMEDAMOUNT bit;
declare @CONSIDERRECOGNITION bit;
select top 1 @CONSIDERRECOGNITION = CONSIDERRECOGNITION from dbo.REVENUELIFECYCLECRITERIA;
begin try
set @FUNCTIONSQL =
'alter function dbo.UFN_REVENUELIFECYCLE_GETVALIDREVENUE() ' + char(13)
+ 'returns table as ' + char(13)
+ ' return ( ' + char(13)
+ ' select ' + char(13)
+ ' REVENUE.ID as REVENUEID, ' + char(13)
+ ' REVENUE.CONSTITUENTID, ' + char(13)
+ ' REVENUESPLIT.ID as REVENUESPLITID, ' + char(13)
+ ' REVENUE.[DATE], ' + char(13)
+ ' REVENUE.TRANSACTIONTYPECODE, ' + char(13)
+ ' REVENUESPLIT.APPLICATIONCODE, ' + char(13)
+ ' REVENUESPLIT.ORGANIZATIONAMOUNT - case when REVENUE.TRANSACTIONTYPECODE in (1,6) then (coalesce((select sum(INSTALLMENTSPLITWRITEOFF.ORGANIZATIONAMOUNT) from dbo.INSTALLMENTSPLITWRITEOFF inner join dbo.INSTALLMENTSPLIT on INSTALLMENTSPLITWRITEOFF.INSTALLMENTSPLITID = INSTALLMENTSPLIT.ID where INSTALLMENTSPLIT.PLEDGEID = REVENUESPLIT.REVENUEID), 0)) else 0 end as AMOUNT ' + char(13)
+ ' from ' + char(13)
+ ' dbo.REVENUE with (nolock) ' + char(13)
+ ' inner join dbo.REVENUESPLIT with (nolock) on REVENUE.ID = REVENUESPLIT.REVENUEID ' + char(13)
+ ' where ' + char(13);
declare REVENUECRITERIACURSOR cursor local fast_forward for
select
REVENUETYPECODE,
CONSIDERCLAIMEDAMOUNT
from dbo.REVENUELIFECYCLEREVENUECRITERIA;
open REVENUECRITERIACURSOR;
fetch next from REVENUECRITERIACURSOR into @REVENUETYPECODE, @CONSIDERCLAIMEDAMOUNT;
while (@@FETCH_STATUS = 0)
begin
if len(@WHERECLAUSE) > 0
set @WHERECLAUSE = @WHERECLAUSE + ' or ';
set @WHERECLAUSE = @WHERECLAUSE +
case
when @REVENUETYPECODE = 0 then
'(REVENUE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE = 0) -- Donations ' + char(13)
+ ' or (REVENUE.TRANSACTIONTYPECODE = 5 and REVENUESPLIT.TYPECODE = 0) -- Order Donations ' + char(13)
when @REVENUETYPECODE = 1 and @CONSIDERCLAIMEDAMOUNT = 0 then
'(REVENUE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE = 2) -- Pledge payments ' + char(13)
when @REVENUETYPECODE = 1 and @CONSIDERCLAIMEDAMOUNT = 1 then
'(REVENUE.TRANSACTIONTYPECODE = 1) -- Pledges ' + char(13)
when @REVENUETYPECODE = 2 then
'(REVENUE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE = 3) -- Recurring gift payments ' + char(13)
when @REVENUETYPECODE = 3 then
'(REVENUE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE = 1) -- Event registrations ' + char(13)
when @REVENUETYPECODE = 4 then
'(REVENUE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE = 9) -- Admissions ' + char(13)
when @REVENUETYPECODE = 5 then
'(REVENUE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE = 5) -- Memberships ' + char(13)
when @REVENUETYPECODE = 6 and @CONSIDERCLAIMEDAMOUNT = 0 then
'(REVENUE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE = 7) -- Matching gift claim payments ' + char(13)
when @REVENUETYPECODE = 6 and @CONSIDERCLAIMEDAMOUNT = 1 then
'(REVENUE.TRANSACTIONTYPECODE = 3 and REVENUESPLIT.APPLICATIONCODE = 0) -- Matching gift claims ' + char(13)
when @REVENUETYPECODE = 7 then
'(REVENUE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE = 4) -- Other ' + char(13)
when @REVENUETYPECODE = 8 and @CONSIDERCLAIMEDAMOUNT = 0 then
'(REVENUE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE = 6) -- Planned gift payments ' + char(13)
when @REVENUETYPECODE = 8 and @CONSIDERCLAIMEDAMOUNT = 1 then
'(REVENUE.TRANSACTIONTYPECODE = 4 and REVENUESPLIT.APPLICATIONCODE = 0) -- Planned gifts ' + char(13)
when @REVENUETYPECODE = 9 and @CONSIDERCLAIMEDAMOUNT = 0 then
'(REVENUE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE = 13) -- Donor challenge claim payments ' + char(13)
when @REVENUETYPECODE = 9 and @CONSIDERCLAIMEDAMOUNT = 1 then
'(REVENUE.TRANSACTIONTYPECODE = 8 and REVENUESPLIT.APPLICATIONCODE = 0) -- Donor challenge claims ' + char(13)
when @REVENUETYPECODE = 10 then
'(REVENUE.TRANSACTIONTYPECODE = 7 and REVENUESPLIT.APPLICATIONCODE = 0) -- Auction item donations ' + char(13)
when @REVENUETYPECODE = 11 then
'(REVENUE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE = 12) -- Auction item purchases ' + char(13)
when @REVENUETYPECODE = 12 and @CONSIDERCLAIMEDAMOUNT = 0 then
'(REVENUE.TRANSACTIONTYPECODE = 0 and REVENUESPLIT.APPLICATIONCODE = 8) -- Grant award payments ' + char(13)
when @REVENUETYPECODE = 12 and @CONSIDERCLAIMEDAMOUNT = 1 then
'(REVENUE.TRANSACTIONTYPECODE = 6 and REVENUESPLIT.APPLICATIONCODE = 8) -- Grant awards ' + char(13)
else ''
end;
fetch next from REVENUECRITERIACURSOR into @REVENUETYPECODE, @CONSIDERCLAIMEDAMOUNT;
end
--When a cursor is used, it should be explicitly closed/deallocated in case of blocking or USP running long
close REVENUECRITERIACURSOR;
deallocate REVENUECRITERIACURSOR;
set @FUNCTIONSQL = @FUNCTIONSQL + @WHERECLAUSE
if @CONSIDERRECOGNITION = 1 begin
set @FUNCTIONSQL = @FUNCTIONSQL
+ ' union ' + char(13)
+ ' select ' + char(13)
+ ' REVENUE.ID as REVENUEID, ' + char(13)
+ ' REVENUERECOGNITION.CONSTITUENTID, ' + char(13)
+ ' REVENUESPLIT.ID as REVENUESPLITID, ' + char(13)
+ ' REVENUE.[DATE], ' + char(13)
+ ' REVENUE.TRANSACTIONTYPECODE, ' + char(13)
+ ' REVENUESPLIT.APPLICATIONCODE, ' + char(13)
+ ' REVENUESPLIT.ORGANIZATIONAMOUNT - case when REVENUE.TRANSACTIONTYPECODE in (1,6) then (coalesce((select sum(INSTALLMENTSPLITWRITEOFF.ORGANIZATIONAMOUNT) from dbo.INSTALLMENTSPLITWRITEOFF inner join dbo.INSTALLMENTSPLIT on INSTALLMENTSPLITWRITEOFF.INSTALLMENTSPLITID = INSTALLMENTSPLIT.ID where INSTALLMENTSPLIT.PLEDGEID = REVENUESPLIT.REVENUEID), 0)) else 0 end as AMOUNT ' + char(13)
+ ' from ' + char(13)
+ ' dbo.REVENUE with (nolock) ' + char(13)
+ ' inner join dbo.REVENUESPLIT with (nolock) on REVENUE.ID = REVENUESPLIT.REVENUEID ' + char(13)
+ ' inner join dbo.REVENUERECOGNITION with (nolock) on REVENUESPLIT.ID = REVENUERECOGNITION.REVENUESPLITID ' + char(13)
+ ' where ' + @WHERECLAUSE + char(13);
end;
set @FUNCTIONSQL = @FUNCTIONSQL + ' )';
exec sp_sqlexec @FUNCTIONSQL;
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
end