USP_REPORT_ACTIVITYSUMMARY
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@STARTDATE | datetime | IN | |
@ENDDATE | datetime | IN | |
@REVENUETRANSACTIONQUERY | uniqueidentifier | IN | |
@CONSTITUENTID | uniqueidentifier | IN | |
@REPORTUSERID | nvarchar(128) | IN | |
@CURRENCYCODE | tinyint | IN | |
@ALTREPORTUSERID | nvarchar(128) | IN |
Definition
Copy
create procedure dbo.USP_REPORT_ACTIVITYSUMMARY
(
@STARTDATE datetime = null,
@ENDDATE datetime = null,
@REVENUETRANSACTIONQUERY uniqueidentifier = null,
@CONSTITUENTID uniqueidentifier = null,
@REPORTUSERID nvarchar(128) = null,
@CURRENCYCODE tinyint = null, -- (null, 1) = Organization, 0 = Base, 2 = Transaction
@ALTREPORTUSERID nvarchar(128) = null
)
with execute as owner
as
set nocount on;
set transaction isolation level read uncommitted;
declare @STARTDATEEARLIEST datetime = dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE);
declare @ENDDATELATEST datetime = dbo.UFN_DATE_GETLATESTTIME(@ENDDATE);
declare @CURRENTAPPUSERID uniqueidentifier;
declare @ISADMIN bit;
declare @APPUSER_IN_NONRACROLE bit;
declare @APPUSER_IN_NOSECGROUPROLE bit;
set @CURRENTAPPUSERID = dbo.UFN_APPUSER_GETREPORTAPPUSERID(@REPORTUSERID, @ALTREPORTUSERID);
set @ISADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID);
set @APPUSER_IN_NONRACROLE = dbo.UFN_SECURITY_APPUSER_IN_NONRACROLE(@CURRENTAPPUSERID);
set @APPUSER_IN_NOSECGROUPROLE = dbo.UFN_SECURITY_APPUSER_IN_NO_SECURITY_GROUP_ROLE(@CURRENTAPPUSERID);
declare @SQLTOEXEC nvarchar(max);
declare @DBOBJECTNAME nvarchar(128);
declare @DBOBJECTTYPE smallint;
if @REVENUETRANSACTIONQUERY is not null begin
if not exists(select ID from dbo.IDSETREGISTER where ID = @REVENUETRANSACTIONQUERY) raiserror('ID set does not exist in the database.', 15, 1);
select @DBOBJECTNAME = DBOBJECTNAME, @DBOBJECTTYPE = OBJECTTYPE from dbo.IDSETREGISTER where ID = @REVENUETRANSACTIONQUERY;
if @DBOBJECTTYPE = 1 set @DBOBJECTNAME = @DBOBJECTNAME + '()';
else if @DBOBJECTTYPE = 2 set @DBOBJECTNAME = @DBOBJECTNAME + '(''' + convert(nvarchar(36), @REVENUETRANSACTIONQUERY) + ''')';
end
declare @ORGANIZATIONCURRENCYID as uniqueidentifier = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
declare @ORIGINCODE tinyint;
select @ORIGINCODE = coalesce(ORGANIZATIONAMOUNTORIGINCODE, 0) from dbo.MULTICURRENCYCONFIGURATION;
declare @CURRENCYID uniqueidentifier;
declare @DECIMALDIGITS tinyint;
declare @ROUNDINGTYPECODE tinyint;
if @CURRENCYCODE not in (0,2)
select
@CURRENCYID = CURRENCY.ID,
@DECIMALDIGITS = CURRENCY.DECIMALDIGITS,
@ROUNDINGTYPECODE = CURRENCY.ROUNDINGTYPECODE
from dbo.CURRENCY where CURRENCY.ID = @ORGANIZATIONCURRENCYID;
if object_id('tempdb..#POTENTIALREVENUE') is not null
drop table #POTENTIALREVENUE;
create table #POTENTIALREVENUE
(
REVPARENTID uniqueidentifier,
PAYMENTDATE datetime,
REVENUEID uniqueidentifier,
REVENUEAMOUNT money,
REVENUETRANSACTIONAMOUNT money,
TOTALREVENUESPLITORGANIZATIONAMOUNT money,
TOTALREVENUESPLITTRANSACTIONAMOUNT money,
TOTALREVENUESPLITAMOUNT money,
TRANSACTIONCURRENCYID uniqueidentifier,
BASECURRENCYID uniqueidentifier
)
declare @POPULATENOPAYMENTSPOTENTIALREVENUETABLESQL as nvarchar(max) = '
insert into #POTENTIALREVENUE
(
REVPARENTID,
PAYMENTDATE,
REVENUEID,
REVENUEAMOUNT,
REVENUETRANSACTIONAMOUNT,
TOTALREVENUESPLITORGANIZATIONAMOUNT,
TOTALREVENUESPLITTRANSACTIONAMOUNT,
TOTALREVENUESPLITAMOUNT,
TRANSACTIONCURRENCYID,
BASECURRENCYID
)
select
REVPARENT.ID as REVPARENTID,
null PAYMENTDATE,
null REVENUEID,
null as REVENUEAMOUNT,
null as REVENUETRANSACTIONAMOUNT,
null as TOTALREVENUESPLITORGANIZATIONAMOUNT,
null as TOTALREVENUESPLITTRANSACTIONAMOUNT,
null as TOTALREVENUESPLITAMOUNT,
null as TRANSACTIONCURRENCYID,
null as BASECURRENCYID
from dbo.FINANCIALTRANSACTION REVPARENT ' +
case when @REVENUETRANSACTIONQUERY is not null then 'inner join dbo.' + @DBOBJECTNAME + ' as SELECTION on REVPARENT.[ID] = SELECTION.[ID]' else '' end +
'
left outer join RECURRINGGIFTACTIVITY RGA on RGA.SOURCEREVENUEID = REVPARENT.ID
left outer join INSTALLMENTPAYMENT IP on IP.PLEDGEID = REVPARENT.ID
left outer join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on
(
REVENUESPLIT.ID = coalesce(RGA.PAYMENTREVENUEID,IP.PAYMENTID)
and
( -- Only rev splits within date range
exists(select
R.ID
from
dbo.FINANCIALTRANSACTIONLINEITEM as RS
inner join
dbo.FINANCIALTRANSACTION AS R on R.ID = RS.FINANCIALTRANSACTIONID
where
R.TYPECODE in (0,1,2,3,4,5,6,7,8,9,15) and RS.DELETEDON is null and RS.TYPECODE != 1 and RS.ID = REVENUESPLIT.ID
' +
case when @STARTDATEEARLIEST is not null then ' and cast(R.DATE as datetime) >= @STARTDATEEARLIEST ' else '' end +
case when @ENDDATELATEST is not null then ' and cast(R.DATE as datetime) <= @ENDDATELATEST ' else '' end +
'
)
)
)
left outer join dbo.FINANCIALTRANSACTION REVENUE with (nolock) on REVENUE.ID = REVENUESPLIT.FINANCIALTRANSACTIONID
where REVPARENT.TYPECODE in (1, 2, 3, 6, 8,15) and REVPARENT.DELETEDON is null and REVENUE.ID is null ' +
case when @STARTDATEEARLIEST is not null then ' and (cast(REVPARENT.DATE as datetime) >= @STARTDATEEARLIEST) ' else '' end +
case when @ENDDATELATEST is not null then ' and (cast(REVPARENT.DATE as datetime) <= @ENDDATELATEST) ' else '' end +
case when @CONSTITUENTID is not null then ' and (REVPARENT.CONSTITUENTID = @CONSTITUENTID) ' else '' end;
exec sp_executesql @POPULATENOPAYMENTSPOTENTIALREVENUETABLESQL, N'@STARTDATEEARLIEST datetime, @ENDDATELATEST datetime, @CONSTITUENTID uniqueidentifier',
@STARTDATEEARLIEST=@STARTDATEEARLIEST,@ENDDATELATEST=@ENDDATELATEST,@CONSTITUENTID=@CONSTITUENTID;
declare @POPULATERECURRINGGIFTPAYMENTSPOTENTIALREVENUETABLESQL as nvarchar(max) = '
insert into #POTENTIALREVENUE
(
REVPARENTID,
PAYMENTDATE,
REVENUEID,
REVENUEAMOUNT,
REVENUETRANSACTIONAMOUNT,
TOTALREVENUESPLITORGANIZATIONAMOUNT,
TOTALREVENUESPLITTRANSACTIONAMOUNT,
TOTALREVENUESPLITAMOUNT,
TRANSACTIONCURRENCYID,
BASECURRENCYID
)
select
REVPARENT.ID as REVPARENTID,
cast(REVENUE.DATE as datetime) PAYMENTDATE,
REVENUE.ID as REVENUEID,
REVENUE.BASEAMOUNT as REVENUEAMOUNT,
REVENUE.TRANSACTIONAMOUNT as REVENUETRANSACTIONAMOUNT,
Sum(REVENUESPLIT.ORGAMOUNT) as TOTALREVENUESPLITORGANIZATIONAMOUNT,
Sum(REVENUESPLIT.TRANSACTIONAMOUNT) as TOTALREVENUESPLITTRANSACTIONAMOUNT,
Sum(REVENUESPLIT.BASEAMOUNT) as TOTALREVENUESPLITAMOUNT,
REVENUE.TRANSACTIONCURRENCYID,
REVENUE_EXT.NONPOSTABLEBASECURRENCYID
from dbo.FINANCIALTRANSACTION REVENUE
inner join dbo.REVENUE_EXT on REVENUE.ID = REVENUE_EXT.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on REVENUE.ID = REVENUESPLIT.FINANCIALTRANSACTIONID
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
inner join RECURRINGGIFTACTIVITY RGA on RGA.PAYMENTREVENUEID = REVENUESPLIT.ID
inner join FINANCIALTRANSACTION as REVPARENT with (nolock) on REVPARENT.ID = RGA.SOURCEREVENUEID ' +
case when @REVENUETRANSACTIONQUERY is not null then 'inner join dbo.' + @DBOBJECTNAME + ' as SELECTION on REVPARENT.[ID] = SELECTION.[ID]' else '' end +
'
where REVPARENT.TYPECODE in (1, 2, 3, 6, 8, 15) and REVENUE.TYPECODE in (0,1,2,3,4,5,6,7,8,9,15) and REVENUESPLIT.DELETEDON is null and REVPARENT.DELETEDON is null
and not (REVENUESPLIT_EXT.TYPECODE = 2 and REVENUESPLIT_EXT.APPLICATIONCODE = 3) ' +
case when @STARTDATEEARLIEST is not null then ' and (cast(REVENUE.DATE as datetime) >= @STARTDATEEARLIEST) ' else '' end +
case when @ENDDATELATEST is not null then ' and (cast(REVENUE.DATE as datetime) <= @ENDDATELATEST) ' else '' end +
case when @CONSTITUENTID is not null then ' and (REVENUE.CONSTITUENTID = @CONSTITUENTID or REVPARENT.CONSTITUENTID = @CONSTITUENTID) ' else '' end +
'group by REVENUE.ID, REVPARENT.ID, REVENUE.BASEAMOUNT, REVENUE.TRANSACTIONAMOUNT, REVENUE.DATE, REVENUE.TRANSACTIONCURRENCYID, REVENUE_EXT.NONPOSTABLEBASECURRENCYID';
exec sp_executesql @POPULATERECURRINGGIFTPAYMENTSPOTENTIALREVENUETABLESQL, N'@STARTDATEEARLIEST datetime, @ENDDATELATEST datetime, @CONSTITUENTID uniqueidentifier',
@STARTDATEEARLIEST=@STARTDATEEARLIEST,@ENDDATELATEST=@ENDDATELATEST,@CONSTITUENTID=@CONSTITUENTID;
declare @POPULATEPLEDGEPAYMENTSPOTENTIALREVENUETABLESQL as nvarchar(max) = '
insert into #POTENTIALREVENUE
(
REVPARENTID,
PAYMENTDATE,
REVENUEID,
REVENUEAMOUNT,
REVENUETRANSACTIONAMOUNT,
TOTALREVENUESPLITORGANIZATIONAMOUNT,
TOTALREVENUESPLITTRANSACTIONAMOUNT,
TOTALREVENUESPLITAMOUNT,
TRANSACTIONCURRENCYID,
BASECURRENCYID
)
select
REVPARENT.ID as REVPARENTID,
cast(REVENUE.DATE as datetime) PAYMENTDATE,
REVENUE.ID as REVENUEID,
REVENUE.BASEAMOUNT as REVENUEAMOUNT,
REVENUE.TRANSACTIONAMOUNT as REVENUETRANSACTIONAMOUNT,
Sum(REVENUESPLIT.ORGAMOUNT) as TOTALREVENUESPLITORGANIZATIONAMOUNT,
Sum(REVENUESPLIT.TRANSACTIONAMOUNT) as TOTALREVENUESPLITTRANSACTIONAMOUNT,
Sum(REVENUESPLIT.BASEAMOUNT) as TOTALREVENUESPLITAMOUNT,
REVENUE.TRANSACTIONCURRENCYID,
V.BASECURRENCYID
from dbo.FINANCIALTRANSACTION REVENUE
inner join dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I V with (noexpand) on REVENUE.ID = V.FINANCIALTRANSACTIONID
inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on REVENUE.ID = REVENUESPLIT.FINANCIALTRANSACTIONID
inner join INSTALLMENTPAYMENT IP on IP.PAYMENTID = REVENUESPLIT.ID
inner join FINANCIALTRANSACTION as REVPARENT with (nolock) on REVPARENT.ID = IP.PLEDGEID ' +
case when @REVENUETRANSACTIONQUERY is not null then 'inner join dbo.' + @DBOBJECTNAME + ' as SELECTION on REVPARENT.[ID] = SELECTION.[ID]' else '' end +
'
where REVPARENT.TYPECODE in (1, 2, 3, 6, 8, 15) and REVENUE.TYPECODE in (0,1,2,3,4,5,6,7,8,9,15) and REVENUESPLIT.DELETEDON is null and REVPARENT.DELETEDON is null ' +
case when @STARTDATEEARLIEST is not null then ' and (cast(REVENUE.DATE as datetime) >= @STARTDATEEARLIEST) ' else '' end +
case when @ENDDATELATEST is not null then ' and (cast(REVENUE.DATE as datetime) <= @ENDDATELATEST) ' else '' end +
case when @CONSTITUENTID is not null then ' and (REVENUE.CONSTITUENTID = @CONSTITUENTID or REVPARENT.CONSTITUENTID = @CONSTITUENTID) ' else '' end +
'group by REVENUE.ID, REVPARENT.ID, REVENUE.BASEAMOUNT, REVENUE.TRANSACTIONAMOUNT, REVENUE.DATE, REVENUE.TRANSACTIONCURRENCYID, V.BASECURRENCYID';
exec sp_executesql @POPULATEPLEDGEPAYMENTSPOTENTIALREVENUETABLESQL, N'@STARTDATEEARLIEST datetime, @ENDDATELATEST datetime, @CONSTITUENTID uniqueidentifier',
@STARTDATEEARLIEST=@STARTDATEEARLIEST,@ENDDATELATEST=@ENDDATELATEST,@CONSTITUENTID=@CONSTITUENTID;
if object_id('tempdb..#REVPARENT') is not null
drop table #REVPARENT;
create table #REVPARENT
(
ID uniqueidentifier,
BALANCEINCURRENCY money,
TRANSACTIONBALANCE money,
CURRENCYID uniqueidentifier,
TRANSACTIONCURRENCYID uniqueidentifier,
BASECURRENCYID uniqueidentifier,
DATE datetime,
TRANSACTIONTYPECODE int,
TRANSACTIONTYPE nvarchar(100) collate database_default,
APPEALID uniqueidentifier,
CONSTITUENTID uniqueidentifier,
AMOUNT money,
TRANSACTIONAMOUNT money,
ORGANIZATIONAMOUNT money,
AMOUNTINCURRENCY money,
INTERMEDIATEBALANCE money
);
declare @POPULATEREVPARENTTABLESQL as nvarchar(max) = '
insert into #REVPARENT
(
ID,
BALANCEINCURRENCY,
TRANSACTIONBALANCE,
CURRENCYID,
TRANSACTIONCURRENCYID,
BASECURRENCYID,
DATE,
TRANSACTIONTYPECODE,
TRANSACTIONTYPE,
APPEALID,
CONSTITUENTID,
AMOUNT,
TRANSACTIONAMOUNT,
ORGANIZATIONAMOUNT,
AMOUNTINCURRENCY,
INTERMEDIATEBALANCE
)
select
REVPARENT.ID,
REVPARENT.BALANCEINCURRENCY,
REVPARENT.TRANSACTIONBALANCE,
REVPARENT.CURRENCYID,
REVPARENT.TRANSACTIONCURRENCYID,
REVPARENT.BASECURRENCYID,
REVPARENT.DATE,
REVPARENT.TRANSACTIONTYPECODE,
REVPARENT.TRANSACTIONTYPE,
REVPARENT.APPEALID,
REVPARENT.CONSTITUENTID,
REVPARENT.AMOUNT,
REVPARENT.TRANSACTIONAMOUNT,
REVPARENT.ORGANIZATIONAMOUNT,
REVPARENT.AMOUNTINCURRENCY,
REVPARENT.INTERMEDIATEBALANCE
from
#PotentialRevenue POTENTIALREVENUE
outer apply
dbo.UFN_PLEDGE_GETREVALUEDBALANCEINCURRENCY_BULK3
(
@CURRENCYID,
@ORGANIZATIONCURRENCYID,
@DECIMALDIGITS,
@ROUNDINGTYPECODE,
null,
@ENDDATE,
@ORIGINCODE,
@CURRENCYCODE,
POTENTIALREVENUE.REVPARENTID
) as REVPARENT
group by REVPARENT.ID,
REVPARENT.BALANCEINCURRENCY,
REVPARENT.TRANSACTIONBALANCE,
REVPARENT.CURRENCYID,
REVPARENT.TRANSACTIONCURRENCYID,
REVPARENT.BASECURRENCYID,
REVPARENT.DATE,
REVPARENT.TRANSACTIONTYPECODE,
REVPARENT.TRANSACTIONTYPE,
REVPARENT.APPEALID,
REVPARENT.CONSTITUENTID,
REVPARENT.AMOUNT,
REVPARENT.TRANSACTIONAMOUNT,
REVPARENT.ORGANIZATIONAMOUNT,
REVPARENT.AMOUNTINCURRENCY,
REVPARENT.INTERMEDIATEBALANCE '
exec sp_executesql @POPULATEREVPARENTTABLESQL, N'@CURRENCYID uniqueidentifier, @ORGANIZATIONCURRENCYID uniqueidentifier, @DECIMALDIGITS tinyint, @ROUNDINGTYPECODE tinyint, @ENDDATE datetime, @ORIGINCODE tinyint, @CURRENCYCODE tinyint',
@CURRENCYID=@CURRENCYID, @ORGANIZATIONCURRENCYID=@ORGANIZATIONCURRENCYID, @DECIMALDIGITS=@DECIMALDIGITS, @ROUNDINGTYPECODE=@ROUNDINGTYPECODE, @ENDDATE=@ENDDATE, @ORIGINCODE=@ORIGINCODE, @CURRENCYCODE=@CURRENCYCODE;
set @SQLTOEXEC =
'declare @REVENUETOTALSBYCURRENCY as table
(
PLEDGEBALANCE money,
RECURRINGBALANCE money,
MATCHBALANCE money,
GRANTAWARDBALANCE money,
DONORCHALLENGEBALANCE money,
INSTALLMENTBALANCE money,
CURRENCYID uniqueidentifier,
PLEDGECOUNT int,
RECURRINGCOUNT int,
MATCHCOUNT int,
GRANTAWARDCOUNT int,
DONORCHALLENGECOUNT int,
INSTALLMENTCOUNT int
)' + char(13)
set @SQLTOEXEC = @SQLTOEXEC +
'insert into @REVENUETOTALSBYCURRENCY(PLEDGEBALANCE, RECURRINGBALANCE, MATCHBALANCE, GRANTAWARDBALANCE, DONORCHALLENGEBALANCE, INSTALLMENTBALANCE, CURRENCYID, PLEDGECOUNT, RECURRINGCOUNT, MATCHCOUNT, GRANTAWARDCOUNT, DONORCHALLENGECOUNT, INSTALLMENTCOUNT)
select sum(PLEDGEBALANCE) PLEDGEBALANCE, sum(RECURRINGBALANCE) RECURRINGBALANCE, sum(MATCHBALANCE) MATCHBALANCE, sum(GRANTAWARDBALANCE) GRANTAWARDBALANCE, sum(DONORCHALLENGEBALANCE) DONORCHALLENGEBALANCE, sum(INSTALLMENTBALANCE) INSTALLMENTBALANCE, CURRENCYID, sum(ISPLEDGE) PLEDGECOUNT, sum(ISRECURRING) RECURRINGCOUNT, sum(ISMATCH) MATCHCOUNT, sum(ISGRANTAWARD) GRANTAWARDCOUNT, sum(ISDONORCHALLENGE) DONORCHALLENGECOUNT, sum(ISINSTALLMENT) INSTALLMENTCOUNT
from (
select distinct
REVPARENT.ID,
case when REVPARENT.TRANSACTIONTYPECODE = 1
then REVPARENT.BALANCEINCURRENCY
else 0.00 end PLEDGEBALANCE,
case when REVPARENT.TRANSACTIONTYPECODE = 2
then dbo.UFN_RECURRINGGIFT_GETBALANCEASOFINCURRENCY(REVPARENT.ID, @ENDDATE, ' + case @CURRENCYCODE when 0 then 'REVPARENT.BASECURRENCYID' when 2 then 'REVPARENT.TRANSACTIONCURRENCYID' else '@ORGANIZATIONCURRENCYID' end + ')
else 0.00 end RECURRINGBALANCE,
case when REVPARENT.TRANSACTIONTYPECODE = 3
then REVPARENT.BALANCEINCURRENCY
else 0.00 end MATCHBALANCE,
case when REVPARENT.TRANSACTIONTYPECODE = 6
then REVPARENT.BALANCEINCURRENCY
else 0.00 end GRANTAWARDBALANCE,
case when REVPARENT.TRANSACTIONTYPECODE = 8
then REVPARENT.BALANCEINCURRENCY
else 0.00 end DONORCHALLENGEBALANCE,
case when REVPARENT.TRANSACTIONTYPECODE = 15
then REVPARENT.BALANCEINCURRENCY
else 0.00 end INSTALLMENTBALANCE,
' + case @CURRENCYCODE when 0 then 'REVPARENT.BASECURRENCYID' when 2 then 'REVPARENT.TRANSACTIONCURRENCYID' else '@ORGANIZATIONCURRENCYID' end + ' CURRENCYID,
case when REVPARENT.TRANSACTIONTYPECODE = 1
then 1
else 0 end ISPLEDGE,
case when REVPARENT.TRANSACTIONTYPECODE = 2
then 1
else 0 end ISRECURRING,
case when REVPARENT.TRANSACTIONTYPECODE = 3
then 1
else 0 end ISMATCH,
case when REVPARENT.TRANSACTIONTYPECODE = 6
then 1
else 0 end ISGRANTAWARD,
case when REVPARENT.TRANSACTIONTYPECODE = 8
then 1
else 0 end ISDONORCHALLENGE,
case when REVPARENT.TRANSACTIONTYPECODE = 15
then 1
else 0 end ISINSTALLMENT
from #PotentialRevenue POTENTIALREVENUE
inner join #REVPARENT REVPARENT on POTENTIALREVENUE.REVPARENTID = REVPARENT.ID
left outer join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on REVENUESPLIT.FINANCIALTRANSACTIONID = REVPARENT.ID and REVENUESPLIT.DELETEDON is null and REVENUESPLIT.TYPECODE != 1' + nchar(13);
if @REVENUETRANSACTIONQUERY is not null
set @SQLTOEXEC = @SQLTOEXEC + 'inner join dbo.' + @DBOBJECTNAME + ' as SELECTION on REVPARENT.[ID] = SELECTION.[ID]' + nchar(13);
set @SQLTOEXEC = @SQLTOEXEC +
'where (not (REVPARENT.AMOUNT = 0 and REVPARENT.TRANSACTIONAMOUNT > 0))
and (POTENTIALREVENUE.REVENUEID is null or (not (POTENTIALREVENUE.REVENUEAMOUNT = 0 and POTENTIALREVENUE.REVENUETRANSACTIONAMOUNT > 0))) '
+ case when @ISADMIN = 0 and @APPUSER_IN_NONRACROLE = 0 then 'and (dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT(@CURRENTAPPUSERID, REVPARENT.CONSTITUENTID, @APPUSER_IN_NOSECGROUPROLE) = 1) ' else '' end
+ 'and exists
(
select HASPERMISSION
from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT.ID) REVSITES
cross apply dbo.UFN_REPORT_HASUSERSITEPERMISSION(@CURRENTAPPUSERID, ''C99B9784-809E-489E-B46D-715543ECA82F'', REVSITES.SITEID)
)'
set @SQLTOEXEC = @SQLTOEXEC +
'union
select distinct
REVPARENT.ID,
case when REVPARENT.TRANSACTIONTYPECODE = 1
then REVPARENT.BALANCEINCURRENCY
else 0.00 end PLEDGEBALANCE,
0.00 as RECURRINGBALANCE,
0.00 as MATCHBALANCE,
case when REVPARENT.TRANSACTIONTYPECODE = 6
then REVPARENT.BALANCEINCURRENCY
else 0.00 end GRANTAWARDBALANCE,
0.00 as DONORCHALLENGEBALANCE,
0.00 as INSTALLMENTBALANCE,
' + case @CURRENCYCODE when 0 then 'coalesce(REVENUE_EXT.NONPOSTABLEBASECURRENCYID, REVPARENT.BASECURRENCYID)' when 2 then 'REVPARENT.TRANSACTIONCURRENCYID' else '@ORGANIZATIONCURRENCYID' end + ' CURRENCYID,
case when REVPARENT.TRANSACTIONTYPECODE = 1
then 1
else 0 end ISPLEDGE,
0 ISRECURRING,
0 ISMATCH,
case when REVPARENT.TRANSACTIONTYPECODE = 6
then 1
else 0 end ISGRANTAWARD,
0 ISDONORCHALLENGE,
0 ISINSTALLMENT
from dbo.REVENUE_EXT
inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on LI.FINANCIALTRANSACTIONID = REVENUE_EXT.ID
inner join dbo.REVENUESPLIT_EXT REVPARENTSPLIT on LI.ID = REVPARENTSPLIT.ID
inner join DESIGNATION on REVPARENTSPLIT.DESIGNATIONID = DESIGNATION.ID
inner join INSTALLMENT on INSTALLMENT.REVENUEID = REVENUE_EXT.ID
inner join INSTALLMENTWRITEOFF on INSTALLMENTWRITEOFF.INSTALLMENTID = INSTALLMENT.ID
inner join dbo.FINANCIALTRANSACTION WRITEOFF on INSTALLMENTWRITEOFF.WRITEOFFID = WRITEOFF.ID and WRITEOFF.TYPECODE = 20 and WRITEOFF.DELETEDON is null
outer apply dbo.UFN_PLEDGE_GETREVALUEDBALANCEINCURRENCY_BULK3 (@CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE, @STARTDATE, @ENDDATE, @ORIGINCODE, @CURRENCYCODE, REVENUE_EXT.ID) as REVPARENT' + nchar(13);
if @REVENUETRANSACTIONQUERY is not null
set @SQLTOEXEC = @SQLTOEXEC + 'inner join dbo.' + @DBOBJECTNAME + ' as SELECTION on REVENUE_EXT.[ID] = SELECTION.[ID]' + nchar(13);
set @SQLTOEXEC = @SQLTOEXEC +
'where LI.DELETEDON is null and LI.TYPECODE != 1 and
REVPARENT.TRANSACTIONTYPECODE in (1, 2, 3, 6, 8,15) '
+ case when @STARTDATE is not null then 'and (cast(WRITEOFF.DATE as datetime) >= @STARTDATEEARLIEST) ' else '' end
+ case when @ENDDATE is not null then 'and (cast(WRITEOFF.DATE as datetime) <= @ENDDATELATEST) ' else '' end
+ case when @CONSTITUENTID is not null then 'and (REVPARENT.CONSTITUENTID = @CONSTITUENTID) ' else '' end
+ case when @ISADMIN = 0 and @APPUSER_IN_NONRACROLE = 0 then 'and (dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT(@CURRENTAPPUSERID, REVPARENT.CONSTITUENTID, @APPUSER_IN_NOSECGROUPROLE) = 1) ' else '' end
+ 'and exists (select 1 from dbo.REVENUESPLIT where REVENUEID = REVPARENT.ID
and exists
(
select HASPERMISSION
from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT.ID) REVSITES
cross apply dbo.UFN_REPORT_HASUSERSITEPERMISSION(@CURRENTAPPUSERID, ''C99B9784-809E-489E-B46D-715543ECA82F'', REVSITES.SITEID)
))
and (not (REVPARENT.AMOUNT = 0 and REVPARENT.TRANSACTIONAMOUNT > 0))
and exists (select 1 from dbo.CONSTITUENT with (nolock) where CONSTITUENT.ID = REVPARENT.CONSTITUENTID)
) TOTALS
group by CURRENCYID
' + '
declare @APPUSERCURRENCYID uniqueidentifier = dbo.UFN_APPUSER_GETBASECURRENCY(@CURRENTAPPUSERID)
declare @PLEDGEBALANCE money;
declare @PLEDGEISOCURRENCYCODE nvarchar(3);
declare @PLEDGECURRENCYSYMBOL nvarchar(5);
declare @PLEDGESYMBOLDISPLAYSETTINGCODE tinyint;
declare @PLEDGEDECIMALDIGITS tinyint;
if (select count(*) from @REVENUETOTALSBYCURRENCY REVENUETOTALSBYCURRENCY where PLEDGECOUNT > 0) = 1
select
@PLEDGEBALANCE = REVENUETOTALSBYCURRENCY.PLEDGEBALANCE,
@PLEDGEISOCURRENCYCODE = CURRENCYPROPERTIES.ISO4217,
@PLEDGECURRENCYSYMBOL = CURRENCYPROPERTIES.CURRENCYSYMBOL,
@PLEDGESYMBOLDISPLAYSETTINGCODE = CURRENCYPROPERTIES.SYMBOLDISPLAYSETTINGCODE,
@PLEDGEDECIMALDIGITS = CURRENCYPROPERTIES.DECIMALDIGITS
from
@REVENUETOTALSBYCURRENCY REVENUETOTALSBYCURRENCY
outer apply dbo.UFN_CURRENCY_GETPROPERTIES(REVENUETOTALSBYCURRENCY.CURRENCYID) CURRENCYPROPERTIES
where PLEDGECOUNT > 0
declare @RECURRINGBALANCE money;
declare @RECURRINGISOCURRENCYCODE nvarchar(3);
declare @RECURRINGCURRENCYSYMBOL nvarchar(5);
declare @RECURRINGSYMBOLDISPLAYSETTINGCODE tinyint;
declare @RECURRINGDECIMALDIGITS tinyint;
if (select count(*) from @REVENUETOTALSBYCURRENCY REVENUETOTALSBYCURRENCY where RECURRINGCOUNT > 0) = 1
select
@RECURRINGBALANCE = REVENUETOTALSBYCURRENCY.RECURRINGBALANCE,
@RECURRINGISOCURRENCYCODE = CURRENCYPROPERTIES.ISO4217,
@RECURRINGCURRENCYSYMBOL = CURRENCYPROPERTIES.CURRENCYSYMBOL,
@RECURRINGSYMBOLDISPLAYSETTINGCODE = CURRENCYPROPERTIES.SYMBOLDISPLAYSETTINGCODE,
@RECURRINGDECIMALDIGITS = CURRENCYPROPERTIES.DECIMALDIGITS
from
@REVENUETOTALSBYCURRENCY REVENUETOTALSBYCURRENCY
outer apply dbo.UFN_CURRENCY_GETPROPERTIES(REVENUETOTALSBYCURRENCY.CURRENCYID) CURRENCYPROPERTIES
where RECURRINGCOUNT > 0
' + '
declare @MATCHBALANCE money;
declare @MATCHISOCURRENCYCODE nvarchar(3);
declare @MATCHCURRENCYSYMBOL nvarchar(5);
declare @MATCHSYMBOLDISPLAYSETTINGCODE tinyint;
declare @MATCHDECIMALDIGITS tinyint;
if (select count(*) from @REVENUETOTALSBYCURRENCY REVENUETOTALSBYCURRENCY where MATCHCOUNT > 0) = 1
select
@MATCHBALANCE = REVENUETOTALSBYCURRENCY.MATCHBALANCE,
@MATCHISOCURRENCYCODE = CURRENCYPROPERTIES.ISO4217,
@MATCHCURRENCYSYMBOL = CURRENCYPROPERTIES.CURRENCYSYMBOL,
@MATCHSYMBOLDISPLAYSETTINGCODE = CURRENCYPROPERTIES.SYMBOLDISPLAYSETTINGCODE,
@MATCHDECIMALDIGITS = CURRENCYPROPERTIES.DECIMALDIGITS
from
@REVENUETOTALSBYCURRENCY REVENUETOTALSBYCURRENCY
outer apply dbo.UFN_CURRENCY_GETPROPERTIES(REVENUETOTALSBYCURRENCY.CURRENCYID) CURRENCYPROPERTIES
where MATCHCOUNT > 0
' + '
declare @GRANTAWARDBALANCE money;
declare @GRANTAWARDISOCURRENCYCODE nvarchar(3);
declare @GRANTAWARDCURRENCYSYMBOL nvarchar(5);
declare @GRANTAWARDSYMBOLDISPLAYSETTINGCODE tinyint;
declare @GRANTAWARDDECIMALDIGITS tinyint;
if (select count(*) from @REVENUETOTALSBYCURRENCY REVENUETOTALSBYCURRENCY where GRANTAWARDCOUNT > 0) = 1
select
@GRANTAWARDBALANCE = REVENUETOTALSBYCURRENCY.GRANTAWARDBALANCE,
@GRANTAWARDISOCURRENCYCODE = CURRENCYPROPERTIES.ISO4217,
@GRANTAWARDCURRENCYSYMBOL = CURRENCYPROPERTIES.CURRENCYSYMBOL,
@GRANTAWARDSYMBOLDISPLAYSETTINGCODE = CURRENCYPROPERTIES.SYMBOLDISPLAYSETTINGCODE,
@GRANTAWARDDECIMALDIGITS = CURRENCYPROPERTIES.DECIMALDIGITS
from
@REVENUETOTALSBYCURRENCY REVENUETOTALSBYCURRENCY
outer apply dbo.UFN_CURRENCY_GETPROPERTIES(REVENUETOTALSBYCURRENCY.CURRENCYID) CURRENCYPROPERTIES
where GRANTAWARDCOUNT > 0
' + '
declare @DONORCHALLENGEBALANCE money;
declare @DONORCHALLENGEISOCURRENCYCODE nvarchar(3);
declare @DONORCHALLENGECURRENCYSYMBOL nvarchar(5);
declare @DONORCHALLENGESYMBOLDISPLAYSETTINGCODE tinyint;
declare @DONORCHALLENGEDECIMALDIGITS tinyint;
if (select count(*) from @REVENUETOTALSBYCURRENCY REVENUETOTALSBYCURRENCY where DONORCHALLENGECOUNT > 0) = 1
select
@DONORCHALLENGEBALANCE = REVENUETOTALSBYCURRENCY.DONORCHALLENGEBALANCE,
@DONORCHALLENGEISOCURRENCYCODE = CURRENCYPROPERTIES.ISO4217,
@DONORCHALLENGECURRENCYSYMBOL = CURRENCYPROPERTIES.CURRENCYSYMBOL,
@DONORCHALLENGESYMBOLDISPLAYSETTINGCODE = CURRENCYPROPERTIES.SYMBOLDISPLAYSETTINGCODE,
@DONORCHALLENGEDECIMALDIGITS = CURRENCYPROPERTIES.DECIMALDIGITS
from
@REVENUETOTALSBYCURRENCY REVENUETOTALSBYCURRENCY
outer apply dbo.UFN_CURRENCY_GETPROPERTIES(REVENUETOTALSBYCURRENCY.CURRENCYID) CURRENCYPROPERTIES
where DONORCHALLENGECOUNT > 0
' + '
declare @INSTALLMENTBALANCE money;
declare @INSTALLMENTISOCURRENCYCODE nvarchar(3);
declare @INSTALLMENTCURRENCYSYMBOL nvarchar(5);
declare @INSTALLMENTSYMBOLDISPLAYSETTINGCODE tinyint;
declare @INSTALLMENTDECIMALDIGITS tinyint;
if (select count(*) from @REVENUETOTALSBYCURRENCY REVENUETOTALSBYCURRENCY where INSTALLMENTCOUNT > 0) = 1
select
@INSTALLMENTBALANCE = REVENUETOTALSBYCURRENCY.INSTALLMENTBALANCE,
@INSTALLMENTISOCURRENCYCODE = CURRENCYPROPERTIES.ISO4217,
@INSTALLMENTCURRENCYSYMBOL = CURRENCYPROPERTIES.CURRENCYSYMBOL,
@INSTALLMENTSYMBOLDISPLAYSETTINGCODE = CURRENCYPROPERTIES.SYMBOLDISPLAYSETTINGCODE,
@INSTALLMENTDECIMALDIGITS = CURRENCYPROPERTIES.DECIMALDIGITS
from
@REVENUETOTALSBYCURRENCY REVENUETOTALSBYCURRENCY
outer apply dbo.UFN_CURRENCY_GETPROPERTIES(REVENUETOTALSBYCURRENCY.CURRENCYID) CURRENCYPROPERTIES
where INSTALLMENTCOUNT > 0
' + '
select
@PLEDGEBALANCE PLEDGEBALANCE,
@RECURRINGBALANCE RECURRINGBALANCE,
@MATCHBALANCE MATCHBALANCE,
@GRANTAWARDBALANCE GRANTAWARDBALANCE,
@DONORCHALLENGEBALANCE DONORCHALLENGEBALANCE,
@INSTALLMENTBALANCE INSTALLMENTBALANCE,
@PLEDGEISOCURRENCYCODE PLEDGEISOCURRENCYCODE,
@PLEDGECURRENCYSYMBOL PLEDGECURRENCYSYMBOL,
@PLEDGESYMBOLDISPLAYSETTINGCODE PLEDGESYMBOLDISPLAYSETTINGCODE,
@PLEDGEDECIMALDIGITS PLEDGEDECIMALDIGITS,
@RECURRINGISOCURRENCYCODE RECURRINGISOCURRENCYCODE,
@RECURRINGCURRENCYSYMBOL RECURRINGCURRENCYSYMBOL,
@RECURRINGSYMBOLDISPLAYSETTINGCODE RECURRINGSYMBOLDISPLAYSETTINGCODE,
@RECURRINGDECIMALDIGITS RECURRINGDECIMALDIGITS,
@MATCHISOCURRENCYCODE MATCHISOCURRENCYCODE,
@MATCHCURRENCYSYMBOL MATCHCURRENCYSYMBOL,
@MATCHSYMBOLDISPLAYSETTINGCODE MATCHSYMBOLDISPLAYSETTINGCODE,
@MATCHDECIMALDIGITS MATCHDECIMALDIGITS,
@GRANTAWARDISOCURRENCYCODE GRANTAWARDISOCURRENCYCODE,
@GRANTAWARDCURRENCYSYMBOL GRANTAWARDCURRENCYSYMBOL,
@GRANTAWARDSYMBOLDISPLAYSETTINGCODE GRANTAWARDSYMBOLDISPLAYSETTINGCODE,
@GRANTAWARDDECIMALDIGITS GRANTAWARDDECIMALDIGITS,
@DONORCHALLENGEISOCURRENCYCODE DONORCHALLENGEISOCURRENCYCODE,
@DONORCHALLENGECURRENCYSYMBOL DONORCHALLENGECURRENCYSYMBOL,
@DONORCHALLENGESYMBOLDISPLAYSETTINGCODE DONORCHALLENGESYMBOLDISPLAYSETTINGCODE,
@DONORCHALLENGEDECIMALDIGITS DONORCHALLENGEDECIMALDIGITS,
@INSTALLMENTISOCURRENCYCODE INSTALLMENTISOCURRENCYCODE,
@INSTALLMENTCURRENCYSYMBOL INSTALLMENTCURRENCYSYMBOL,
@INSTALLMENTSYMBOLDISPLAYSETTINGCODE INSTALLMENTSYMBOLDISPLAYSETTINGCODE,
@INSTALLMENTDECIMALDIGITS INSTALLMENTDECIMALDIGITS'
exec sp_executesql @SQLTOEXEC,
N'@STARTDATE datetime, @ENDDATE datetime, @CONSTITUENTID uniqueidentifier, @ISADMIN bit, @APPUSER_IN_NONRACROLE bit, @APPUSER_IN_NOSECGROUPROLE bit, @CURRENTAPPUSERID uniqueidentifier, @ORGANIZATIONCURRENCYID as uniqueidentifier, @ORIGINCODE tinyint, @CURRENCYCODE tinyint, @CURRENCYID uniqueidentifier, @DECIMALDIGITS tinyint, @ROUNDINGTYPECODE tinyint, @STARTDATEEARLIEST datetime, @ENDDATELATEST datetime',
@STARTDATE=@STARTDATE, @ENDDATE=@ENDDATE, @CONSTITUENTID=@CONSTITUENTID, @ISADMIN=@ISADMIN, @APPUSER_IN_NONRACROLE=@APPUSER_IN_NONRACROLE, @APPUSER_IN_NOSECGROUPROLE=@APPUSER_IN_NOSECGROUPROLE, @CURRENTAPPUSERID=@CURRENTAPPUSERID,
@ORGANIZATIONCURRENCYID=@ORGANIZATIONCURRENCYID, @ORIGINCODE=@ORIGINCODE, @CURRENCYCODE=@CURRENCYCODE, @CURRENCYID=@CURRENCYID, @DECIMALDIGITS=@DECIMALDIGITS, @ROUNDINGTYPECODE=@ROUNDINGTYPECODE, @STARTDATEEARLIEST=@STARTDATEEARLIEST, @ENDDATELATEST=@ENDDATELATEST;