USP_DATALIST_CONSTITUENT_EXPANDED_REVENUEHISTORY
This datalist returns a filtered list of revenue associated with a constituent.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONSTITUENTID | uniqueidentifier | IN | Input parameter indicating the context ID for the data list. |
@GROUPBY | tinyint | IN | Group by |
@TRANSACTIONTYPEOPTIONCODE | int | IN | Type |
@REVENUETYPEOPTIONCODE | int | IN | Revenue type |
@DATEFILTER | tinyint | IN | Date range |
@CURRENTAPPUSERID | uniqueidentifier | IN | Input parameter indicating the ID of the current user. |
@SITEFILTERMODE | tinyint | IN | Sites |
@SITESSELECTED | xml | IN | |
@SECURITYFEATUREID | uniqueidentifier | IN | Input parameter indicating the ID of the feature to use for site security checking. |
@SECURITYFEATURETYPE | tinyint | IN | Input parameter indicating the type of the feature to use for site security checking. |
@INCLUDEGROUPMEMBERREVENUE | bit | IN | |
@REVENUEFILTERID | uniqueidentifier | IN | Revenue filter |
@CURRENCYCODE | tinyint | IN | Currency |
@CAMPAIGNFILTERMODE | tinyint | IN | Campaigns |
@CAMPAIGNSSELECTED | xml | IN | |
@STARTDATE | datetime | IN | |
@ENDDATE | datetime | IN |
Definition
Copy
CREATE procedure dbo.USP_DATALIST_CONSTITUENT_EXPANDED_REVENUEHISTORY (
@CONSTITUENTID uniqueidentifier
,@GROUPBY tinyint = 0 -- 0=Commitment, 1=Transaction, null=none
,@TRANSACTIONTYPEOPTIONCODE int = null -- -1=All, otherwise revenue.transactiontypecode
,@REVENUETYPEOPTIONCODE int = null -- -1=All, otherwise revenuesplit.revenuetypecode
,@DATEFILTER tinyint = 16
,@CURRENTAPPUSERID uniqueidentifier = null
,@SITEFILTERMODE tinyint = 0
,@SITESSELECTED xml = null
,@SECURITYFEATUREID uniqueidentifier = null
,@SECURITYFEATURETYPE tinyint = null
,@INCLUDEGROUPMEMBERREVENUE bit = 0
,@REVENUEFILTERID uniqueidentifier = '00000000-0000-0000-0000-000000000000'
,@CURRENCYCODE tinyint = 2
,@CAMPAIGNFILTERMODE tinyint = 0
,@CAMPAIGNSSELECTED xml = null
,@STARTDATE datetime = null
,@ENDDATE datetime = null
)
with execute as owner
as
set nocount on;
declare @ORGANIZATIONCURRENCYID uniqueidentifier = null
,@CURRENCYID uniqueidentifier = null
,@CURRENCYROUNDINGTYPECODE tinyint
,@CURRENCYISOCURRENCYCODE nvarchar(3) = null
,@CURRENCYDECIMALDIGITS tinyint = 0
,@CURRENCYSYMBOL nvarchar(5) = null
,@CURRENCYSYMBOLDISPLAYSETTINGCODE tinyint = 0
,@CONSTITID uniqueidentifier
,@DATEFROM datetime
,@DATETO datetime
,@ISUK bit
,@ISGROUP bit = 0
,@INCLUDEMEMBERGIVING bit = 0;
--The platform does not pass any parameters when resetting datalist filters but this filter has a dynamic default value.
--To get around this use empty guid to signify that the parameter was not passed and set it to the default.
if @REVENUEFILTERID = '00000000-0000-0000-0000-000000000000'
begin
select
@REVENUEFILTERID = ID
from
dbo.REVENUEFILTER
where
ISDEFAULT = 1;
if @REVENUEFILTERID = '00000000-0000-0000-0000-000000000000'
set @REVENUEFILTERID = null;
end
if @TRANSACTIONTYPEOPTIONCODE = - 1
set @TRANSACTIONTYPEOPTIONCODE = null;
if @REVENUETYPEOPTIONCODE = - 1
set @REVENUETYPEOPTIONCODE = null;
if @STARTDATE is null and @ENDDATE is null
exec [dbo].[USP_RESOLVEDATEFILTER] @DATEFILTER, @STARTDATE output, @ENDDATE output;
else
begin
set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE);
set @ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@ENDDATE);
end
set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
declare @ORIGINCODE tinyint
select @ORIGINCODE = ORGANIZATIONAMOUNTORIGINCODE
from dbo.MULTICURRENCYCONFIGURATION;
if @CURRENCYCODE = 1
set @CURRENCYID = @ORGANIZATIONCURRENCYID
if @CURRENCYCODE = 3
begin
set @CURRENCYID = dbo.UFN_APPUSER_GETBASECURRENCY(@CURRENTAPPUSERID);
if @CURRENCYID = @ORGANIZATIONCURRENCYID
set @CURRENCYCODE = 1
end
select @CURRENCYISOCURRENCYCODE = CURRENCY.ISO4217
,@CURRENCYDECIMALDIGITS = CURRENCY.DECIMALDIGITS
,@CURRENCYROUNDINGTYPECODE = CURRENCY.ROUNDINGTYPECODE
,@CURRENCYSYMBOL = CURRENCY.CURRENCYSYMBOL
,@CURRENCYSYMBOLDISPLAYSETTINGCODE = CURRENCY.SYMBOLDISPLAYSETTINGCODE
from dbo.CURRENCY
where ID = @CURRENCYID;
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
set @ISUK = dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('9568A6C2-F7AA-45fd-8F54-21FE9654EE2D');
declare @HASSITES bit = 0;
declare @CHECKSITES bit = 0;
declare @ISADMIN bit = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID);
declare @MULTICURRENCYENABLED bit = dbo.UFN_CONDITIONSETTING_EVALUATEEXISTSCONDITION('Multicurrency');
if (select top 1 1 from dbo.Site) = 1
set @HASSITES = 1
if @HASSITES = 1 and @ISADMIN = 0
set @CHECKSITES = 1;
select @ISGROUP = 1
,@INCLUDEMEMBERGIVING = case
when GROUPDATA.GROUPTYPECODE = 0
or GROUPTYPE.INCLUDEMEMBERGIVING = 1
then 1
else 0
end
from dbo.GROUPDATA
left join dbo.GROUPTYPE on GROUPDATA.GROUPTYPEID = GROUPTYPE.ID
where GROUPDATA.ID = @CONSTITUENTID;
--Only create sites temp tables if needed
if @CHECKSITES = 1
begin
if object_id('tempdb..#TMP_CONSTITUENT_EXPANDED_REVENUEHISTORY_SITEONFEATURE') is not null
drop table #TMP_CONSTITUENT_EXPANDED_REVENUEHISTORY_SITEONFEATURE
create table #TMP_CONSTITUENT_EXPANDED_REVENUEHISTORY_SITEONFEATURE
(
SITEID uniqueidentifier
)
insert into #TMP_CONSTITUENT_EXPANDED_REVENUEHISTORY_SITEONFEATURE (SITEID)
select
SITEID
from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID, @SECURITYFEATUREID, @SECURITYFEATURETYPE)
end
if @HASSITES = 1 and @SITEFILTERMODE != 0
begin
if object_id('tempdb..#TMP_CONSTITUENT_EXPANDED_REVENUEHISTORY_SITEFILTER') is not null
drop table #TMP_CONSTITUENT_EXPANDED_REVENUEHISTORY_SITEFILTER
create table #TMP_CONSTITUENT_EXPANDED_REVENUEHISTORY_SITEFILTER
(
SITEID uniqueidentifier
)
insert into #TMP_CONSTITUENT_EXPANDED_REVENUEHISTORY_SITEFILTER (SITEID)
select
SITEID
from dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED)
end
/* Get RevSplit IDs */
if object_id('tempdb..#TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2') is not null
drop table #TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2;
-- Adding REVENUEID to temp table solely to improve query plans - this value technically can always be grabbed off the FTLI, but having it here can speed things up
create table #TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2 (
ID uniqueidentifier
,REVENUEID uniqueidentifier
,CONSTITUENTID uniqueidentifier
,TRANSACTIONCURRENCYID uniqueidentifier
,[DATE] datetime
,TYPECODE tinyint
,TYPE nvarchar(27) collate database_default
,APPLICATIONCODE tinyint
,APPLICATION nvarchar(50) collate database_default
,TRANSACTIONAMOUNT money
,BASEAMOUNT money
,ORGAMOUNT money
,SPLIT_TYPECODE tinyint
,SPLIT_TYPE nvarchar(50) collate database_default
,DESIGNATIONID uniqueidentifier
,VISIBLE bit
,EXTRA bit
);
CREATE CLUSTERED INDEX IX_TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2_ID ON #TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2(ID);
if object_id('tempdb..#TMP_DATA_REVENUEHISTORY_CONSTITUENTS') is not null
drop table #TMP_DATA_REVENUEHISTORY_CONSTITUENTS;
-- Adding REVENUEID to temp table solely to improve query plans - this value technically can always be grabbed off the FTLI, but having it here can speed things up
if @INCLUDEMEMBERGIVING = 1
create table #TMP_DATA_REVENUEHISTORY_CONSTITUENTS
(CONSTITUENTID uniqueidentifier primary key
,STARTDATE datetime
,ENDDATE datetime);
if object_id('tempdb..#TMP_DATA_REVENUEHISTORY_REVENUE') is not null
drop table #TMP_DATA_REVENUEHISTORY_REVENUE;
create table #TMP_DATA_REVENUEHISTORY_REVENUE
(ID uniqueidentifier primary key
,CONSTITUENTID uniqueidentifier
,TRANSACTIONCURRENCYID uniqueidentifier
,[DATE] datetime
,TYPECODE tinyint
,TYPE nvarchar(27) collate database_default)
declare @SQL nvarchar(max) = '';
if @CAMPAIGNFILTERMODE != 0
begin
set @SQL = '
declare @CAMPAIGNFILTERTABLE table (ID uniqueidentifier)
insert into @CAMPAIGNFILTERTABLE
select T.c.value(''(ID)[1]'',''uniqueidentifier'')
from @CAMPAIGNSSELECTED.nodes(''/CAMPAIGNSSELECTED/ITEM'') T(c);' + char(13);
end
if @INCLUDEMEMBERGIVING = 1
set @SQL = @SQL + '
insert into #TMP_DATA_REVENUEHISTORY_CONSTITUENTS (CONSTITUENTID, STARTDATE, ENDDATE)
select @CONSTITUENTID CONSTITUENTID, @STARTDATE STARTDATE, @ENDDATE ENDDATE
union all
select
GROUPMEMBER.MEMBERID as CONSTITUENTID,
case when GROUPMEMBERDATERANGE.DATEFROM is null or GROUPMEMBERDATERANGE.DATEFROM < @STARTDATE then @STARTDATE else GROUPMEMBERDATERANGE.DATEFROM end STARTDATE,
case when GROUPMEMBERDATERANGE.DATETO is null or GROUPMEMBERDATERANGE.DATETO > @ENDDATE then @ENDDATE else GROUPMEMBERDATERANGE.DATETO end ENDDATE
from dbo.GROUPMEMBER
left join dbo.GROUPMEMBERDATERANGE on GROUPMEMBERDATERANGE.GROUPMEMBERID = GROUPMEMBER.ID
where
GROUPMEMBER.GROUPID = @CONSTITUENTID;
'
set @SQL = @SQL + '
insert into #TMP_DATA_REVENUEHISTORY_REVENUE(
ID
,CONSTITUENTID
,TRANSACTIONCURRENCYID
,[DATE]
,TYPECODE
,TYPE)
select
REVENUE.ID
,REVENUE.CONSTITUENTID
,REVENUE.TRANSACTIONCURRENCYID
,REVENUE.CALCULATEDDATE
,REVENUE.TYPECODE
,REVENUE.TYPE' + char(13);
if @INCLUDEMEMBERGIVING = 1
set @SQL = @SQL + '
from #TMP_DATA_REVENUEHISTORY_CONSTITUENTS CONSTITS
inner join dbo.FINANCIALTRANSACTION REVENUE on CONSTITS.CONSTITUENTID = REVENUE.CONSTITUENTID
where (CONSTITS.STARTDATE is null or REVENUE.CALCULATEDDATE >= CONSTITS.STARTDATE)
and (CONSTITS.ENDDATE is null or REVENUE.CALCULATEDDATE <= CONSTITS.ENDDATE)
and REVENUE.TYPECODE in (0,1,2,3,4,5,6,7,8,9,15)
and REVENUE.CALCULATEDDATE between @STARTDATE and @ENDDATE;' + char(13);
else
set @SQL = @SQL + '
from dbo.FINANCIALTRANSACTION REVENUE
where REVENUE.CONSTITUENTID = @CONSTITUENTID
and REVENUE.TYPECODE in (0,1,2,3,4,5,6,7,8,9,15)
and REVENUE.CALCULATEDDATE between @STARTDATE and @ENDDATE;' + char(13);
set @SQL = @SQL + '
insert into #TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2(
ID
,REVENUEID
,CONSTITUENTID
,TRANSACTIONCURRENCYID
,[DATE]
,TYPECODE
,TYPE
,APPLICATIONCODE
,APPLICATION
,TRANSACTIONAMOUNT
,BASEAMOUNT
,ORGAMOUNT
,SPLIT_TYPECODE
,SPLIT_TYPE
,DESIGNATIONID
,VISIBLE)
select
REVENUESPLIT.ID
,REVENUESPLIT.FINANCIALTRANSACTIONID
,REVENUE.CONSTITUENTID
,REVENUE.TRANSACTIONCURRENCYID
,REVENUE.[DATE]
,REVENUE.TYPECODE
,REVENUE.TYPE
,REVENUESPLIT_EXT.APPLICATIONCODE
,REVENUESPLIT_EXT.APPLICATION
,REVENUESPLIT.TRANSACTIONAMOUNT
,REVENUESPLIT.BASEAMOUNT
,REVENUESPLIT.ORGAMOUNT
,REVENUESPLIT_EXT.TYPECODE
,REVENUESPLIT_EXT.TYPE
,REVENUESPLIT_EXT.DESIGNATIONID
,REVENUESPLIT.VISIBLE
from #TMP_DATA_REVENUEHISTORY_REVENUE REVENUE
inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on REVENUE.ID = REVENUESPLIT.FINANCIALTRANSACTIONID
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT.ID = REVENUESPLIT_EXT.ID' + char(13);
if @REVENUEFILTERID is not null
begin
declare @REVENUEFILTERTABLE nvarchar(250) = dbo.[UFN_REVENUEFILTER_GETFUNCTIONNAME](@REVENUEFILTERID)
set @SQL = @SQL + 'inner join '+ @REVENUEFILTERTABLE +' FILTERED on REVENUESPLIT.ID = FILTERED.ID ' + char(13);
end
set @SQL = @SQL + '
where
REVENUESPLIT.DELETEDON is null' + char(13);
if @CAMPAIGNFILTERMODE != 0
begin
set @SQL = @SQL + 'and exists (
select top 1 1
from dbo.REVENUESPLITCAMPAIGN
inner join @CAMPAIGNFILTERTABLE CAMPAIGNFILTER on REVENUESPLITCAMPAIGN.CAMPAIGNID = CAMPAIGNFILTER.ID
where REVENUESPLITCAMPAIGN.REVENUESPLITID = REVENUESPLIT.ID
)' + char(13);
end
--FILTER FOR SECURITY AND SITEFILTER
if @CHECKSITES = 1
begin
if @SITEFILTERMODE = 0
begin
set @SQL = @SQL + '
and exists (select 1 from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT.ID) REVSITES
inner join #TMP_CONSTITUENT_EXPANDED_REVENUEHISTORY_SITEONFEATURE FEATURE on isnull(FEATURE.SITEID, ''00000000-0000-0000-0000-000000000000'') = isnull(REVSITES.SITEID, ''00000000-0000-0000-0000-000000000000'')) '
end
else
begin
set @SQL = @SQL + '
and exists (select 1 from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT.ID) REVSITES
inner join #TMP_CONSTITUENT_EXPANDED_REVENUEHISTORY_SITEONFEATURE FEATURE on isnull(FEATURE.SITEID, ''00000000-0000-0000-0000-000000000000'') = isnull(REVSITES.SITEID, ''00000000-0000-0000-0000-000000000000'')
inner join #TMP_CONSTITUENT_EXPANDED_REVENUEHISTORY_SITEFILTER FILTER on isnull(FILTER.SITEID, ''00000000-0000-0000-0000-000000000000'') = isnull(REVSITES.SITEID, ''00000000-0000-0000-0000-000000000000'')) '
end
end
if @CHECKSITES = 0 and @HASSITES = 1 and @SITEFILTERMODE != 0
begin
set @SQL = @SQL + '
and exists (select 1 from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT.ID) REVSITES
inner join #TMP_CONSTITUENT_EXPANDED_REVENUEHISTORY_SITEFILTER FILTER on isnull(FILTER.SITEID, ''00000000-0000-0000-0000-000000000000'') = isnull(REVSITES.SITEID, ''00000000-0000-0000-0000-000000000000'')) '
end
exec sp_executesql @SQL
,N'@CONSTITUENTID uniqueidentifier
,@REVENUEFILTERID uniqueidentifier
,@STARTDATE datetime
,@ENDDATE datetime
,@CAMPAIGNSSELECTED xml
,@CURRENTAPPUSERID uniqueidentifier
,@SECURITYFEATUREID uniqueidentifier
,@SECURITYFEATURETYPE tinyint
,@SITEFILTERMODE tinyint
,@SITESSELECTED xml'
,@CONSTITUENTID
,@REVENUEFILTERID
,@STARTDATE
,@ENDDATE
,@CAMPAIGNSSELECTED
,@CURRENTAPPUSERID
,@SECURITYFEATUREID
,@SECURITYFEATURETYPE
,@SITEFILTERMODE
,@SITESSELECTED;
if @GROUPBY = 0
and @REVENUEFILTERID is null
and @TRANSACTIONTYPEOPTIONCODE is null
begin
--Add Other People's Pledge like transactions
set @SQL = '
insert into #TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2 (
ID
,REVENUEID
,EXTRA
,CONSTITUENTID
,TRANSACTIONCURRENCYID
,[DATE]
,TYPECODE
,TYPE
,APPLICATIONCODE
,APPLICATION
,TRANSACTIONAMOUNT
,BASEAMOUNT
,ORGAMOUNT
,SPLIT_TYPECODE
,SPLIT_TYPE
,DESIGNATIONID
,VISIBLE
)
select distinct REVENUESPLIT.ID SPLITID
,REVENUESPLIT.FINANCIALTRANSACTIONID
,1
,REVENUE.CONSTITUENTID
,REVENUE.TRANSACTIONCURRENCYID
,REVENUE.CALCULATEDDATE
,REVENUE.TYPECODE
,REVENUE.TYPE
,REVENUESPLIT_EXT.APPLICATIONCODE
,REVENUESPLIT_EXT.APPLICATION
,REVENUESPLIT.TRANSACTIONAMOUNT
,REVENUESPLIT.BASEAMOUNT
,REVENUESPLIT.ORGAMOUNT
,REVENUESPLIT_EXT.TYPECODE
,REVENUESPLIT_EXT.TYPE
,REVENUESPLIT_EXT.DESIGNATIONID
,REVENUESPLIT.VISIBLE
from #TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2 FILTERED
inner join dbo.INSTALLMENTSPLITPAYMENT on FILTERED.ID = INSTALLMENTSPLITPAYMENT.PAYMENTID
inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on REVENUESPLIT.FINANCIALTRANSACTIONID = INSTALLMENTSPLITPAYMENT.PLEDGEID
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
inner join dbo.FINANCIALTRANSACTION REVENUE on REVENUE.ID = REVENUESPLIT.FINANCIALTRANSACTIONID
where
REVENUESPLIT.ID not in (select INCLUDED.ID from #TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2 INCLUDED)
and REVENUE.CALCULATEDDATE between @STARTDATE and @ENDDATE
and REVENUESPLIT.DELETEDON is null
and REVENUESPLIT.TYPECODE <> 1' + char(13);
if @REVENUETYPEOPTIONCODE is not null
set @SQL = @SQL + '
and REVENUESPLIT_EXT.TYPECODE = @REVENUETYPEOPTIONCODE' + char(13);
if @INCLUDEMEMBERGIVING = 1
set @SQL = @SQL + '
and (
exists (
select G.GROUPMEMBERID
from dbo.GROUPMEMBERDATERANGE G
inner join dbo.GROUPMEMBER GM on G.GROUPMEMBERID = GM.ID
where GM.MEMBERID = REVENUE.CONSTITUENTID
and (
(
G.DATETO is not null
and REVENUE.CALCULATEDDATE < G.DATETO
)
or (G.DATETO is null)
)
)
)' + char(13);
--Add Other People's RG transactions
set @SQL = @SQL + '
insert into #TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2 (
ID
,REVENUEID
,EXTRA
,CONSTITUENTID
,TRANSACTIONCURRENCYID
,[DATE]
,TYPECODE
,TYPE
,APPLICATIONCODE
,APPLICATION
,TRANSACTIONAMOUNT
,BASEAMOUNT
,ORGAMOUNT
,SPLIT_TYPECODE
,SPLIT_TYPE
,DESIGNATIONID
,VISIBLE
)
select distinct REVENUESPLIT.ID SPLITID
,REVENUESPLIT.FINANCIALTRANSACTIONID
,1
,REVENUE.CONSTITUENTID
,REVENUE.TRANSACTIONCURRENCYID
,REVENUE.CALCULATEDDATE
,REVENUE.TYPECODE
,REVENUE.TYPE
,REVENUESPLIT_EXT.APPLICATIONCODE
,REVENUESPLIT_EXT.APPLICATION
,REVENUESPLIT.TRANSACTIONAMOUNT
,REVENUESPLIT.BASEAMOUNT
,REVENUESPLIT.ORGAMOUNT
,REVENUESPLIT_EXT.TYPECODE
,REVENUESPLIT_EXT.TYPE
,REVENUESPLIT_EXT.DESIGNATIONID
,REVENUESPLIT.VISIBLE
from #TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2 FILTERED
inner join dbo.RECURRINGGIFTACTIVITY on FILTERED.ID = RECURRINGGIFTACTIVITY.PAYMENTREVENUEID
inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on REVENUESPLIT.FINANCIALTRANSACTIONID = RECURRINGGIFTACTIVITY.SOURCEREVENUEID
inner join REVENUESPLIT_EXT on REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
inner join dbo.FINANCIALTRANSACTION REVENUE on REVENUE.ID = REVENUESPLIT.FINANCIALTRANSACTIONID
where REVENUESPLIT.ID not in (select INCLUDED.ID from #TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2 INCLUDED)
and REVENUE.CALCULATEDDATE between @STARTDATE and @ENDDATE
and REVENUESPLIT.DELETEDON is null
and REVENUESPLIT.TYPECODE <> 1' + char(13);
if @REVENUETYPEOPTIONCODE is not null
set @SQL = @SQL + '
and REVENUESPLIT_EXT.TYPECODE = @REVENUETYPEOPTIONCODE' + char(13);
if @INCLUDEMEMBERGIVING = 1
set @SQL = @SQL + '
and (
exists (
select G.GROUPMEMBERID
from dbo.GROUPMEMBERDATERANGE G
inner join dbo.GROUPMEMBER GM on G.GROUPMEMBERID = GM.ID
where GM.MEMBERID = REVENUE.CONSTITUENTID
and (
(
G.DATETO is not null
and REVENUE.CALCULATEDDATE < G.DATETO
)
or (G.DATETO is null)
)
)
)' + char(13);
--Add pledge like payments by others
set @SQL = @SQL + '
insert into #TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2 (
ID
,REVENUEID
,EXTRA
,CONSTITUENTID
,TRANSACTIONCURRENCYID
,[DATE]
,TYPECODE
,TYPE
,APPLICATIONCODE
,APPLICATION
,TRANSACTIONAMOUNT
,BASEAMOUNT
,ORGAMOUNT
,SPLIT_TYPECODE
,SPLIT_TYPE
,DESIGNATIONID
,VISIBLE
)
select distinct REVENUESPLIT.ID SPLITID
,REVENUESPLIT.FINANCIALTRANSACTIONID
,1
,REVENUE.CONSTITUENTID
,REVENUE.TRANSACTIONCURRENCYID
,REVENUE.CALCULATEDDATE
,REVENUE.TYPECODE
,REVENUE.TYPE
,REVENUESPLIT_EXT.APPLICATIONCODE
,REVENUESPLIT_EXT.APPLICATION
,REVENUESPLIT.TRANSACTIONAMOUNT
,REVENUESPLIT.BASEAMOUNT
,REVENUESPLIT.ORGAMOUNT
,REVENUESPLIT_EXT.TYPECODE
,REVENUESPLIT_EXT.TYPE
,REVENUESPLIT_EXT.DESIGNATIONID
,REVENUESPLIT.VISIBLE
from #TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2 FILTERED
inner join dbo.INSTALLMENTSPLITPAYMENT on FILTERED.REVENUEID = INSTALLMENTSPLITPAYMENT.PLEDGEID
inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on REVENUESPLIT.ID = INSTALLMENTSPLITPAYMENT.PAYMENTID
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
inner join dbo.FINANCIALTRANSACTION REVENUE on REVENUE.ID = REVENUESPLIT.FINANCIALTRANSACTIONID
where REVENUESPLIT.ID not in (select INCLUDED.ID from #TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2 INCLUDED)
and REVENUE.CALCULATEDDATE between @STARTDATE and @ENDDATE
and REVENUESPLIT.DELETEDON is null
and REVENUESPLIT.TYPECODE <> 1' + char(13);
if @REVENUETYPEOPTIONCODE is not null
set @SQL = @SQL + '
and REVENUESPLIT_EXT.TYPECODE = @REVENUETYPEOPTIONCODE' + char(13);
if @INCLUDEMEMBERGIVING = 1
set @SQL = @SQL + '
and (
exists (
select G.GROUPMEMBERID
from dbo.GROUPMEMBERDATERANGE G
inner join dbo.GROUPMEMBER GM on G.GROUPMEMBERID = GM.ID
where GM.MEMBERID = REVENUE.CONSTITUENTID
and (
(
G.DATETO is not null
and REVENUE.CALCULATEDDATE < G.DATETO
)
or (G.DATETO is null)
)
)
)' + char(13);
--Add RG payments by others
set @SQL = @SQL + '
insert into #TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2 (
ID
,REVENUEID
,EXTRA
,CONSTITUENTID
,TRANSACTIONCURRENCYID
,[DATE]
,TYPECODE
,TYPE
,APPLICATIONCODE
,APPLICATION
,TRANSACTIONAMOUNT
,BASEAMOUNT
,ORGAMOUNT
,SPLIT_TYPECODE
,SPLIT_TYPE
,DESIGNATIONID
,VISIBLE
)
select distinct REVENUESPLIT.ID SPLITID
,REVENUESPLIT.FINANCIALTRANSACTIONID
,1
,REVENUE.CONSTITUENTID
,REVENUE.TRANSACTIONCURRENCYID
,REVENUE.CALCULATEDDATE
,REVENUE.TYPECODE
,REVENUE.TYPE
,REVENUESPLIT_EXT.APPLICATIONCODE
,REVENUESPLIT_EXT.APPLICATION
,REVENUESPLIT.TRANSACTIONAMOUNT
,REVENUESPLIT.BASEAMOUNT
,REVENUESPLIT.ORGAMOUNT
,REVENUESPLIT_EXT.TYPECODE
,REVENUESPLIT_EXT.TYPE
,REVENUESPLIT_EXT.DESIGNATIONID
,REVENUESPLIT.VISIBLE
from #TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2 FILTERED
inner join dbo.RECURRINGGIFTACTIVITY on RECURRINGGIFTACTIVITY.SOURCEREVENUEID = FILTERED.REVENUEID
inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on REVENUESPLIT.ID = RECURRINGGIFTACTIVITY.PAYMENTREVENUEID
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
inner join dbo.FINANCIALTRANSACTION REVENUE on REVENUE.ID = REVENUESPLIT.FINANCIALTRANSACTIONID
where REVENUESPLIT.ID not in (select INCLUDED.ID from #TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2 INCLUDED)
and REVENUE.CALCULATEDDATE between @STARTDATE and @ENDDATE
and REVENUESPLIT.DELETEDON is null
and REVENUESPLIT.TYPECODE <> 1' + char(13);
if @REVENUETYPEOPTIONCODE is not null
set @SQL = @SQL + '
and REVENUESPLIT_EXT.TYPECODE = @REVENUETYPEOPTIONCODE' + char(13);
--FILTER FOR SECURITY AND SITEFILTER
if @CHECKSITES = 1
begin
if @SITEFILTERMODE = 0
begin
set @SQL = @SQL + '
and exists (select 1 from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT.ID) REVSITES
inner join #TMP_CONSTITUENT_EXPANDED_REVENUEHISTORY_SITEONFEATURE FEATURE on isnull(FEATURE.SITEID, ''00000000-0000-0000-0000-000000000000'') = isnull(REVSITES.SITEID, ''00000000-0000-0000-0000-000000000000'')) '
end
else
begin
set @SQL = @SQL + '
and exists (select 1 from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT.ID) REVSITES
inner join #TMP_CONSTITUENT_EXPANDED_REVENUEHISTORY_SITEONFEATURE FEATURE on isnull(FEATURE.SITEID, ''00000000-0000-0000-0000-000000000000'') = isnull(REVSITES.SITEID, ''00000000-0000-0000-0000-000000000000'')
inner join #TMP_CONSTITUENT_EXPANDED_REVENUEHISTORY_SITEFILTER FILTER on isnull(FILTER.SITEID, ''00000000-0000-0000-0000-000000000000'') = isnull(REVSITES.SITEID, ''00000000-0000-0000-0000-000000000000'')) '
end
end
if @CHECKSITES = 0 and @HASSITES = 1 and @SITEFILTERMODE != 0
begin
set @SQL = @SQL + '
and exists (select 1 from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT.ID) REVSITES
inner join #TMP_CONSTITUENT_EXPANDED_REVENUEHISTORY_SITEFILTER FILTER on isnull(FILTER.SITEID, ''00000000-0000-0000-0000-000000000000'') = isnull(REVSITES.SITEID, ''00000000-0000-0000-0000-000000000000'')) '
end
if @INCLUDEMEMBERGIVING = 1
set @SQL = @SQL + '
and (
exists (
select G.GROUPMEMBERID
from dbo.GROUPMEMBERDATERANGE G
inner join dbo.GROUPMEMBER GM on G.GROUPMEMBERID = GM.ID
where GM.MEMBERID = REVENUE.CONSTITUENTID
and (
(
G.DATETO is not null
and REVENUE.CALCULATEDDATE < G.DATETO
)
or (G.DATETO is null)
)
)
);' + char(13);
exec sp_executesql @SQL
,N'@REVENUETYPEOPTIONCODE tinyint
,@STARTDATE datetime
,@ENDDATE datetime
,@CURRENTAPPUSERID uniqueidentifier
,@SECURITYFEATUREID uniqueidentifier
,@SECURITYFEATURETYPE tinyint
,@SITEFILTERMODE tinyint
,@SITESSELECTED xml'
,@REVENUETYPEOPTIONCODE
,@STARTDATE
,@ENDDATE
,@CURRENTAPPUSERID
,@SECURITYFEATUREID
,@SECURITYFEATURETYPE
,@SITEFILTERMODE
,@SITESSELECTED;
end
--Get Write-Offs
if object_id('tempdb..#TMP_DATA_REVENUEHISTORY_WRITEOFFSPLITS') is not null
drop table #TMP_DATA_REVENUEHISTORY_WRITEOFFSPLITS;
create table #TMP_DATA_REVENUEHISTORY_WRITEOFFSPLITS (
WRITEOFFID uniqueidentifier
,WRITEOFFSPLITID uniqueidentifier
,REVENUEID uniqueidentifier
,AMOUNT money
,[DATE] datetime
,DISPLAYCURRENCY uniqueidentifier
,WRITEOFFTYPE tinyint);
if @REVENUETYPEOPTIONCODE is null
and coalesce(@TRANSACTIONTYPEOPTIONCODE, - 1) in (
- 1
,90
)
begin
insert into #TMP_DATA_REVENUEHISTORY_WRITEOFFSPLITS (
WRITEOFFID
,WRITEOFFSPLITID
,REVENUEID
,AMOUNT
,[DATE]
,DISPLAYCURRENCY
,WRITEOFFTYPE)
select distinct WRITEOFFSPLIT.FINANCIALTRANSACTIONID
,WRITEOFFSPLIT.ID
,FILTERED.REVENUEID
,case @CURRENCYCODE
when 0
then WRITEOFFSPLIT.BASEAMOUNT
when 1
then WRITEOFFSPLIT.ORGAMOUNT
when 2
then WRITEOFFSPLIT.TRANSACTIONAMOUNT
else
case when @CURRENCYID = FILTERED.TRANSACTIONCURRENCYID or @MULTICURRENCYENABLED = 0
then WRITEOFFSPLIT.TRANSACTIONAMOUNT
else dbo.UFN_WRITEOFFSPLIT_GETAMOUNTINCURRENCY(WRITEOFFSPLIT.ID, @CURRENCYID)
end
end as AMOUNT
,WRITEOFF.CALCULATEDDATE [DATE]
,case @CURRENCYCODE
when 0
then case when @MULTICURRENCYENABLED = 1
then (select top 1 B.BASECURRENCYID from dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I B where B.FINANCIALTRANSACTIONID = FILTERED.REVENUEID)
else @ORGANIZATIONCURRENCYID
end
when 1
then @ORGANIZATIONCURRENCYID
when 2
then FILTERED.TRANSACTIONCURRENCYID
else @CURRENCYID
end as DISPLAYCURRENCY
,0 -- Pledge
from #TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2 FILTERED
inner join dbo.FINANCIALTRANSACTION as WRITEOFF on WRITEOFF.PARENTID = FILTERED.REVENUEID and WRITEOFF.TYPECODE = 20
inner join dbo.WRITEOFF_EXT on WRITEOFF.ID = WRITEOFF_EXT.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM as WRITEOFFSPLIT on WRITEOFFSPLIT.FINANCIALTRANSACTIONID = WRITEOFF.ID
where WRITEOFF.CALCULATEDDATE between @STARTDATE and @ENDDATE
and WRITEOFFSPLIT.DELETEDON is null
and WRITEOFFSPLIT.TYPECODE != 1
and (
@INCLUDEMEMBERGIVING = 0
or (
@INCLUDEMEMBERGIVING = 1
and ((
exists (
select G.GROUPMEMBERID
from dbo.GROUPMEMBERDATERANGE G
inner join dbo.GROUPMEMBER GM on G.GROUPMEMBERID = GM.ID
where GM.MEMBERID = FILTERED.CONSTITUENTID
and (
(
G.DATETO is not null
and FILTERED.[DATE] < G.DATETO
)
or (G.DATETO is null)
)
)
)
or FILTERED.CONSTITUENTID = @CONSTITUENTID
)
)
);
insert into #TMP_DATA_REVENUEHISTORY_WRITEOFFSPLITS (
WRITEOFFID
,WRITEOFFSPLITID
,REVENUEID
,AMOUNT
,[DATE]
,DISPLAYCURRENCY
,WRITEOFFTYPE
)
select distinct iw.WRITEOFFID
,iw.ID
,FILTERED.REVENUEID
,case
when @CURRENCYCODE = 2 or @MULTICURRENCYENABLED = 0 or (@CURRENCYCODE = 3 and @CURRENCYID = iw.TRANSACTIONCURRENCYID)
then case w.TYPECODE when 0 then iw.TRANSACTIONAMOUNT else i.TRANSACTIONAMOUNT end
when @CURRENCYCODE = 0 or (@CURRENCYCODE = 3 and @CURRENCYID = iw.BASECURRENCYID)
then case w.TYPECODE when 0 then iw.AMOUNT else i.AMOUNT end
when @CURRENCYCODE = 1
then case w.TYPECODE when 0 then iw.ORGANIZATIONAMOUNT else i.ORGANIZATIONAMOUNT end
else -- My base doesn't match any of the record's currencies
isnull(nullif(dbo.UFN_CURRENCY_CONVERT(case w.TYPECODE when 0 then iw.ORGANIZATIONAMOUNT else i.ORGANIZATIONAMOUNT end, dbo.UFN_CURRENCYEXCHANGERATE_GETLATESTINCLUDEEXPIRED(@ORGANIZATIONCURRENCYID, @CURRENCYID, iw.DATEADDED, 1, null)),0),
dbo.UFN_CURRENCY_CONVERTINVERSE(case w.TYPECODE when 0 then iw.ORGANIZATIONAMOUNT else i.ORGANIZATIONAMOUNT end, dbo.UFN_CURRENCYEXCHANGERATE_GETLATESTINCLUDEEXPIRED(@CURRENCYID, @ORGANIZATIONCURRENCYID, iw.DATEADDED, 1, null)))
end as AMOUNT
,w.[DATE]
,case @CURRENCYCODE
when 0
then iw.BASECURRENCYID
when 1
then @ORGANIZATIONCURRENCYID
when 2
then iw.TRANSACTIONCURRENCYID
else @CURRENCYID
end as DISPLAYCURRENCY
,case w.TYPECODE when 0 then 1 else 2 end -- Recurring gift, 1=write-off, 2=skip
from #TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2 FILTERED
inner join dbo.RECURRINGGIFTWRITEOFF w on w.REVENUEID = FILTERED.REVENUEID
inner join dbo.RECURRINGGIFTINSTALLMENTWRITEOFF iw on iw.WRITEOFFID = w.ID
inner join dbo.RECURRINGGIFTINSTALLMENT i on i.ID = iw.RECURRINGGIFTINSTALLMENTID
where cast(w.[DATE] as datetime) between @STARTDATE and @ENDDATE
and (
@INCLUDEMEMBERGIVING = 0
or (
@INCLUDEMEMBERGIVING = 1
and ((
exists (
select G.GROUPMEMBERID
from dbo.GROUPMEMBERDATERANGE G
inner join dbo.GROUPMEMBER GM on G.GROUPMEMBERID = GM.ID
where GM.MEMBERID = FILTERED.CONSTITUENTID
and (
(
G.DATETO is not null
and FILTERED.[DATE] < G.DATETO
)
or (G.DATETO is null)
)
)
)
or FILTERED.CONSTITUENTID = @CONSTITUENTID
)
)
);
end
--Get Refunds
declare @REFUNDSPLITS table (
CREDITID uniqueidentifier
,CREDITITEMID uniqueidentifier
,REVENUESPLITID uniqueidentifier
,PARENTID uniqueidentifier
,AMOUNT money
,[DATE] datetime
,DISPLAYCURRENCY uniqueidentifier
);
if @REVENUETYPEOPTIONCODE is null
and coalesce(@TRANSACTIONTYPEOPTIONCODE, -1) in (-1, 100)
and dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('BB1C17BC-9E0B-4683-B490-EE40D511FA05') = 1 --basic programs is installed
begin
-- refunds only
with CreditItem_Cte as
(
select
C.ID
, C.CREDITID
, C.SALESORDERID
, C.SALESORDERITEMID
, LI.SOURCELINEITEMID [REVENUESPLITID]
, ((LI.QUANTITY * LI.UNITVALUE) - C.DISCOUNTS) [TOTAL]
, C.TYPE
, C.TYPECODE
from dbo.CREDITITEM_EXT C
inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on C.ID = LI.ID
inner join dbo.FINANCIALTRANSACTION FT on FT.ID = LI.FINANCIALTRANSACTIONID
inner join dbo.CREDIT_EXT CREDIT on FT.ID = CREDIT.ID
)
insert into @REFUNDSPLITS (
CREDITID
,CREDITITEMID
,REVENUESPLITID
,PARENTID
,AMOUNT
,[DATE]
,DISPLAYCURRENCY
)
select CREDIT.ID
,CREDITITEM.ID
,CREDITITEM.REVENUESPLITID
,SALESORDER.REVENUEID
,CREDITITEM.TOTAL - coalesce(sum(SALESORDERITEMORDERDISCOUNTDETAIL.AMOUNT), 0.00)
,CREDITFT.DATE [DATE]
,@ORGANIZATIONCURRENCYID /*currency not supported*/
from dbo.SALESORDER
inner join dbo.SALESORDERITEM on SALESORDER.ID = SALESORDERITEM.SALESORDERID
inner join CreditItem_Cte CREDITITEM on CREDITITEM.SALESORDERITEMID = SALESORDERITEM.ID
inner join dbo.CREDIT_EXT CREDIT on CREDITITEM.CREDITID = CREDIT.ID
inner join dbo.FINANCIALTRANSACTION CREDITFT on CREDIT.ID = CREDITFT.ID
left join dbo.SALESORDERITEMORDERDISCOUNTDETAIL on CREDITITEM.SALESORDERITEMID = SALESORDERITEMORDERDISCOUNTDETAIL.SALESORDERITEMID
where SALESORDER.REVENUEID in
(
select REVENUESPLIT.FINANCIALTRANSACTIONID
from dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
inner join #TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2 FILTERED on REVENUESPLIT.ID = FILTERED.ID
where
(
CREDITITEM.TYPE = REVENUESPLIT_EXT.TYPE
or CREDITITEM.TYPECODE = 2
)
and REVENUESPLIT.DELETEDON is null
and REVENUESPLIT.TYPECODE <> 1
)
and CREDITFT.DATE between @STARTDATE and @ENDDATE
and
(
@INCLUDEMEMBERGIVING = 0
or
(
@INCLUDEMEMBERGIVING = 1
and
(
exists
(
select G.GROUPMEMBERID
from dbo.GROUPMEMBERDATERANGE G
inner join dbo.GROUPMEMBER GM on G.GROUPMEMBERID = GM.ID
where GM.MEMBERID = CREDITFT.CONSTITUENTID
and
(
(
G.DATETO is not null
and cast(CREDITFT.[DATE] as datetime) < G.DATETO
)
or G.DATETO is null
)
)
)
)
)
group by CREDIT.ID
,CREDITITEM.ID
,CREDITITEM.REVENUESPLITID
,SALESORDER.REVENUEID
,CREDITITEM.TOTAL
,CREDITFT.DATE
union all -- Group Sales Refunds
select FINANCIALTRANSACTION.ID
,FTLI.ID
,FTLI.SOURCELINEITEMID
,SOURCELI.ID
,FINANCIALTRANSACTION.TRANSACTIONAMOUNT
,FINANCIALTRANSACTION.[DATE]
,@ORGANIZATIONCURRENCYID
from dbo.FINANCIALTRANSACTION
inner join dbo.FINANCIALTRANSACTIONLINEITEM FTLI on FTLI.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM SOURCELI on SOURCELI.ID = FTLI.SOURCELINEITEMID
inner join dbo.REVENUESPLIT_EXT SOURCELI_EXT on SOURCELI_EXT.ID = SOURCELI.ID
inner join dbo.CREDIT_EXT on CREDIT_EXT.ID = FINANCIALTRANSACTION.ID
inner join dbo.SALESORDER on SALESORDER.ID = CREDIT_EXT.SALESORDERID
where FINANCIALTRANSACTION.TYPECODE = 23 -- Refund
and convert(date, FINANCIALTRANSACTION.[DATE]) between @STARTDATE and @ENDDATE
and SOURCELI_EXT.TYPECODE in (13,19) -- Unearned Revenue
and SALESORDER.CONSTITUENTID = @CONSTITUENTID
and FINANCIALTRANSACTION.DELETEDON is null
union all --Memberships don't have a salesorder and aren't unearned so this should pick up refunds not in the two above sections
select FINANCIALTRANSACTION.ID
,FTLI.ID
,FTLI.SOURCELINEITEMID
,SOURCELI.FINANCIALTRANSACTIONID
,FTLI.TRANSACTIONAMOUNT
,FINANCIALTRANSACTION.[DATE]
,@ORGANIZATIONCURRENCYID
from dbo.FINANCIALTRANSACTION
inner join dbo.FINANCIALTRANSACTIONLINEITEM FTLI on FTLI.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
inner join dbo.FINANCIALTRANSACTIONLINEITEM SOURCELI on SOURCELI.ID = FTLI.SOURCELINEITEMID
inner join dbo.REVENUESPLIT_EXT SOURCELI_EXT on SOURCELI_EXT.ID = SOURCELI.ID
where FINANCIALTRANSACTION.TYPECODE = 23 -- Refund
and convert(date, FINANCIALTRANSACTION.[DATE]) between @STARTDATE and @ENDDATE
and FINANCIALTRANSACTION.CONSTITUENTID = @CONSTITUENTID
and FINANCIALTRANSACTION.DELETEDON is null
and not exists (select 1 from dbo.SALESORDER where SALESORDER.REVENUEID = SOURCELI.FINANCIALTRANSACTIONID)
and SOURCELI_EXT.TYPECODE not in (13,19)
end;
--Get Discounts
declare @CREDITSPLITS table (
CREDITID uniqueidentifier
,CREDITITEMID uniqueidentifier
,REVENUESPLITID uniqueidentifier
,REVENUEID uniqueidentifier
,AMOUNT money
,[DATE] datetime
,DISPLAYCURRENCY uniqueidentifier
);
if @REVENUETYPEOPTIONCODE is null
and coalesce(@TRANSACTIONTYPEOPTIONCODE, - 1) in (
- 1
,110
)
and dbo.UFN_INSTALLEDPRODUCTS_PRODUCTIS('BB1C17BC-9E0B-4683-B490-EE40D511FA05') = 1 --basic programs is installed
begin
with CreditItem_Cte as
(
select
C.ID
, C.CREDITID
, C.SALESORDERID
, C.SALESORDERITEMID
, LI.SOURCELINEITEMID [REVENUESPLITID]
, ((LI.QUANTITY * LI.UNITVALUE) - C.DISCOUNTS) [TOTAL]
, C.TYPE
, c.TYPECODE
from dbo.CREDITITEM_EXT C
inner join dbo.FINANCIALTRANSACTIONLINEITEM LI on C.ID = LI.ID
inner join dbo.FINANCIALTRANSACTION FT on LI.FINANCIALTRANSACTIONID = FT.ID
where
LI.TYPECODE = 5 and FT.TYPECODE in (5, 99) -- discounts only
)
insert into @CREDITSPLITS (
CREDITID
,CREDITITEMID
,REVENUESPLITID
,REVENUEID
,AMOUNT
,[DATE]
,DISPLAYCURRENCY
)
select CREDIT.ID
,CREDITITEM.ID
,CREDITITEM.REVENUESPLITID
,REVENUESPLIT.FINANCIALTRANSACTIONID
,CREDITITEM.TOTAL
,REVENUE.[DATE]
,@ORGANIZATIONCURRENCYID /*currency not supported*/
from #TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2 FILTERED
inner join dbo.FINANCIALTRANSACTIONLINEITEM REVENUESPLIT on REVENUESPLIT.ID = FILTERED.ID
inner join dbo.REVENUESPLIT_EXT on REVENUESPLIT.ID = REVENUESPLIT_EXT.ID
inner join dbo.FINANCIALTRANSACTION REVENUE on REVENUE.ID = REVENUESPLIT.FINANCIALTRANSACTIONID
--inner join dbo.REVENUE_EXT on REVENUE.ID = REVENUE_EXT.ID
inner join CreditItem_Cte CREDITITEM on CREDITITEM.REVENUESPLITID = REVENUESPLIT.ID
inner join dbo.CREDIT_EXT CREDIT on CREDITITEM.CREDITID = CREDIT.ID
inner join dbo.FINANCIALTRANSACTION CREDITFT on CREDIT.ID = CREDITFT.ID
where
REVENUE.DELETEDON is null
and REVENUESPLIT.DELETEDON is null
and REVENUESPLIT.TYPECODE <> 1
and (
@INCLUDEMEMBERGIVING = 0
or (
@INCLUDEMEMBERGIVING = 1
and exists (
select G.GROUPMEMBERID
from dbo.GROUPMEMBERDATERANGE G
inner join dbo.GROUPMEMBER GM on G.GROUPMEMBERID = GM.ID
where GM.MEMBERID = REVENUE.CONSTITUENTID
and (
(
G.DATETO is not null
and cast(REVENUE.[DATE] as datetime) < G.DATETO
)
or (G.DATETO is null)
)
)
)
);
end;
if object_id('tempdb..#SPLITS_CTE') is not null
drop table #SPLITS_CTE;
create table #SPLITS_CTE (
SPLITID uniqueidentifier
,REVENUEID uniqueidentifier
,COMMITMENTREVENUEID uniqueidentifier
,AMOUNT money
,GROSSAMOUNT money
,BALANCE money
,TRANSACTIONTYPECODE int
,TRANSACTIONTYPE nvarchar(27) collate database_default
,APPLICATION nvarchar(700) collate database_default
,REVENUETYPE nvarchar(27) collate database_default
,REVENUETYPECODE int
,DESIGNATIONID uniqueidentifier
,REVENUESPLITDESCRIPTION nvarchar(700) collate database_default
,TRANSACTIONCURRENCYID uniqueidentifier
,CONSTITUENTID uniqueidentifier
,[DATE] datetime
,PAYMENTMETHOD nvarchar(100) collate database_default
);
create table #DESIGNATIONS (
DESIGNATIONID uniqueidentifier primary key
,DESIGNATIONNAME nvarchar(512) collate database_default
);
create table #CAMPAIGNSBYSPLIT (
REVENUESPLITID uniqueidentifier primary key
,CAMPAIGNNAME nvarchar(MAX) collate database_default
);
create table #CAMPAIGNSBYREV (
REVENUEID uniqueidentifier primary key
,CAMPAIGNNAME nvarchar(MAX) collate database_default
);
set @SQL = '
insert into #SPLITS_CTE
select FILTERED.ID SPLITID
,FILTERED.REVENUEID as REVENUEID
,case
when @GROUPBY = 0 and FILTERED.APPLICATIONCODE in (0, 1, 4, 5, 9, 11, 12, 15, 16) then null --Values from function below that return null
when @GROUPBY = 0 and FILTERED.APPLICATIONCODE in (2, 3, 6, 7, 8, 10, 13, 19) then dbo.UFN_REVENUESPLIT_GETCOMMITMENTID(FILTERED.ID, FILTERED.APPLICATIONCODE)
else null
end COMMITMENTREVENUEID
,case
when @CURRENCYCODE = 2
then FILTERED.TRANSACTIONAMOUNT
when @CURRENCYCODE = 0
then FILTERED.BASEAMOUNT
when @CURRENCYID = FILTERED.TRANSACTIONCURRENCYID
then FILTERED.TRANSACTIONAMOUNT
when @CURRENCYID = @ORGANIZATIONCURRENCYID
then FILTERED.ORGAMOUNT
else (
select top 1 REVENUESPLITINCURRENCY.AMOUNTINCURRENCY
from dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(@CURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENCYDECIMALDIGITS, @CURRENCYROUNDINGTYPECODE) as REVENUESPLITINCURRENCY
where FILTERED.ID = REVENUESPLITINCURRENCY.ID
)
end AMOUNT' + char(13);
if @ISUK = 1
set @SQL = @SQL + '
,case
when @ISUK = 0
then null
else case @CURRENCYCODE
when 0
then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNTINCURRENCY(FILTERED.ID, 1, isnull(REVENUE_EXT.NONPOSTABLEBASECURRENCYID, (select top 1 B.BASECURRENCYID from dbo.V_BASECURRENCYFORFINANCIALTRANSACTION_I B where B.FINANCIALTRANSACTIONID = FILTERED.REVENUEID)))
when 2
then dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNTINCURRENCY(FILTERED.ID, 1, FILTERED.TRANSACTIONCURRENCYID)
else dbo.UFN_GIFTAIDREVENUESPLIT_CALCULATESPLITGROSSAMOUNTINCURRENCY(FILTERED.ID, 1, @CURRENCYID)
end
end GROSSAMOUNT' + char(13);
else
set @SQL = @SQL + ',null as GROSSAMOUNT' + char(13);
set @SQL = @SQL + '
,case
when FILTERED.TYPECODE in (
1
,--Pledge
3
,--Matching gift claim
4
,--Planned gift
6
,--Grant award
8
,--Donor challenge claim
9
,--Pending Gift
15 --Membership installment plan
)
then
case when @MULTICURRENCYENABLED = 0 or @CURRENCYID = FILTERED.TRANSACTIONCURRENCYID
then dbo.UFN_PLEDGE_GETREVALUEDSPLITBALANCE_NO_MULTICURRENCY(FILTERED.ID, @CURRENTDATE)
else
(
select REVENUESPLITBALANCE.BALANCE
from dbo.UFN_PLEDGE_GETREVALUEDSPLITBALANCESINCURRENCY(FILTERED.REVENUEID, @CURRENCYID, @ORGANIZATIONCURRENCYID, @CURRENCYDECIMALDIGITS, @CURRENCYROUNDINGTYPECODE, @CURRENTDATE, @ORIGINCODE, @CURRENCYCODE) as REVENUESPLITBALANCE
where REVENUESPLITBALANCE.ID = FILTERED.ID
)
end
else null
end as BALANCE
,FILTERED.TYPECODE as TRANSACTIONTYPECODE
,FILTERED.TYPE as TRANSACTIONTYPE
,FILTERED.APPLICATION
,FILTERED.SPLIT_TYPE REVENUETYPE
,FILTERED.SPLIT_TYPECODE REVENUETYPECODE
,FILTERED.DESIGNATIONID
,cast(''('' + FILTERED.APPLICATION + '') '' + cast(FILTERED.TRANSACTIONAMOUNT as nvarchar(20)) + '' '' + coalesce(REVENUEPAYMENTMETHOD.PAYMENTMETHOD, ''None'') + '' - '' + ltrim(rtrim(CONSTITUENT.[NAME])) as nvarchar(700)) as REVENUESPLITDESCRIPTION
,FILTERED.TRANSACTIONCURRENCYID
,FILTERED.CONSTITUENTID
,FILTERED.[DATE]
,REVENUEPAYMENTMETHOD.PAYMENTMETHOD
from #TMP_DATA_REVENUEHISTORY_REVENUESPLITIDS2 FILTERED' + char(13);
if @ISUK = 1
set @SQL = @SQL + '
inner join dbo.REVENUE_EXT on FILTERED.REVENUEID = REVENUE_EXT.ID' + char(13);
set @SQL = @SQL + '
left join dbo.REVENUEPAYMENTMETHOD on REVENUEPAYMENTMETHOD.REVENUEID = FILTERED.REVENUEID
left join dbo.CONSTITUENT on FILTERED.CONSTITUENTID = CONSTITUENT.ID
where (
FILTERED.APPLICATIONCODE <> 10 /*order*/
or FILTERED.VISIBLE = 1
)' + char(13);
if @TRANSACTIONTYPEOPTIONCODE is not null
set @SQL = @SQL + ' and FILTERED.TYPECODE = @TRANSACTIONTYPEOPTIONCODE' + char(13);
if @REVENUETYPEOPTIONCODE is not null
set @SQL = @SQL + ' and FILTERED.SPLIT_TYPECODE = @REVENUETYPEOPTIONCODE' + char(13);
exec sp_executesql @SQL
,N'@GROUPBY tinyint, @CURRENCYCODE tinyint, @CURRENCYID uniqueidentifier, @ORGANIZATIONCURRENCYID uniqueidentifier, @CURRENCYDECIMALDIGITS tinyint, @CURRENCYROUNDINGTYPECODE tinyint, @REVENUETYPEOPTIONCODE tinyint, @TRANSACTIONTYPEOPTIONCODE tinyint, @ISUK bit, @CURRENTDATE datetime, @ORIGINCODE tinyint, @MULTICURRENCYENABLED bit'
,@GROUPBY
,@CURRENCYCODE
,@CURRENCYID
,@ORGANIZATIONCURRENCYID
,@CURRENCYDECIMALDIGITS
,@CURRENCYROUNDINGTYPECODE
,@REVENUETYPEOPTIONCODE
,@TRANSACTIONTYPEOPTIONCODE
,@ISUK
,@CURRENTDATE
,@ORIGINCODE
,@MULTICURRENCYENABLED;
insert into #DESIGNATIONS (DESIGNATIONID, DESIGNATIONNAME)
select DESIGNATIONID, DESIGNATION.NAME
from
(select distinct DESIGNATIONID from #SPLITS_CTE) V1
inner join dbo.DESIGNATION on V1.DESIGNATIONID = DESIGNATION.ID;
insert into #CAMPAIGNSBYSPLIT (REVENUESPLITID, CAMPAIGNNAME)
select T1.SPLITID, dbo.UDA_BUILDLIST(CAMPAIGN.[NAME])
from #SPLITS_CTE T1
inner join dbo.REVENUESPLITCAMPAIGN on REVENUESPLITCAMPAIGN.REVENUESPLITID = T1.SPLITID
inner join dbo.CAMPAIGN on CAMPAIGN.ID = REVENUESPLITCAMPAIGN.CAMPAIGNID
group by T1.SPLITID;
insert into #CAMPAIGNSBYREV (REVENUEID, CAMPAIGNNAME)
select distinct T1.REVENUEID, dbo.UDA_BUILDLIST(CAMPAIGN.[NAME])
from #SPLITS_CTE T1
inner join dbo.REVENUESPLITCAMPAIGN on REVENUESPLITCAMPAIGN.REVENUESPLITID = T1.SPLITID
inner join dbo.CAMPAIGN on CAMPAIGN.ID = REVENUESPLITCAMPAIGN.CAMPAIGNID
group by T1.REVENUEID;
if object_id('tempdb..#REVENUEHISTORY_SUMMEDREVENUE_CTE') is not null
drop table #REVENUEHISTORY_SUMMEDREVENUE_CTE;
create table #REVENUEHISTORY_SUMMEDREVENUE_CTE (
SPLITID uniqueidentifier
,REVENUEID uniqueidentifier
,PARENTID uniqueidentifier
,APPLICATION nvarchar(max) collate database_default
,REVENUETYPE nvarchar(max) collate database_default
,DESIGNATIONS nvarchar(MAX) collate database_default
,REVENUECATEGORIES nvarchar(MAX) collate database_default
,CAMPAIGNS nvarchar(MAX) collate database_default
,SITES nvarchar(MAX) collate database_default
,AMOUNT money
,BALANCE money
,GROSSAMOUNT money
,TRANSACTIONCURRENCYID uniqueidentifier
,CONSTITUENTID uniqueidentifier
,[DATE] datetime
,[TYPE] nvarchar(100) collate database_default
,PAYMENTMETHOD nvarchar(100) collate database_default
,TRANSACTIONTYPE nvarchar(27) collate database_default
);
if @GROUPBY = 1
insert into #REVENUEHISTORY_SUMMEDREVENUE_CTE
select
null as SPLITID
,REVENUEID
,null as PARENTID
,dbo.UDA_BUILDLIST(distinct SPLITS_CTE.APPLICATION) APPLICATION
,dbo.UDA_BUILDLIST(distinct SPLITS_CTE.REVENUETYPE) REVENUETYPE
,null DESIGNATIONS
,null REVENUECATEGORIES
,null CAMPAIGNS
,null SITES
,sum(AMOUNT) AMOUNT
,sum(BALANCE) BALANCE
,sum(GROSSAMOUNT) GROSSAMOUNT
,TRANSACTIONCURRENCYID
,CONSTITUENTID
,SPLITS_CTE.[DATE]
,SPLITS_CTE.REVENUETYPE [TYPE]
,SPLITS_CTE.PAYMENTMETHOD
,SPLITS_CTE.TRANSACTIONTYPE
from #SPLITS_CTE SPLITS_CTE
group by REVENUEID, TRANSACTIONCURRENCYID, CONSTITUENTID,SPLITS_CTE.[DATE],SPLITS_CTE.REVENUETYPE,SPLITS_CTE.PAYMENTMETHOD,SPLITS_CTE.TRANSACTIONTYPE
having COUNT(1) > 1;
if @GROUPBY = 0
insert into #REVENUEHISTORY_SUMMEDREVENUE_CTE
select null as SPLITID
,SPLITS_CTE.REVENUEID
,null as PARENTID
,dbo.UDA_BUILDLIST(distinct SPLITS_CTE.APPLICATION) APPLICATION
,dbo.UDA_BUILDLIST(distinct SPLITS_CTE.REVENUETYPE) REVENUETYPE
,dbo.UDA_BUILDLIST(isnull (#DESIGNATIONS.DESIGNATIONNAME, REVENUESPLITDESCRIPTION)) DESIGNATIONS
,dbo.UDA_BUILDLIST(distinct GLREVENUECATEGORYMAPPING.REVENUECATEGORYNAME) REVENUECATEGORIES
,#CAMPAIGNSBYREV.CAMPAIGNNAME CAMPAIGNS
,
case @HASSITES when 1 then
(select dbo.UDA_BUILDLIST(SITE.[NAME])
from dbo.UFN_SITEID_MAPFROM_REVENUEID(SPLITS_CTE.REVENUEID) RSITE
inner join dbo.SITE on SITE.ID = RSITE.SITEID)
else '' end as SITES
,sum(AMOUNT) AMOUNT
,sum(BALANCE) BALANCE
,sum(GROSSAMOUNT) GROSSAMOUNT
,SPLITS_CTE.TRANSACTIONCURRENCYID
,SPLITS_CTE.CONSTITUENTID
,SPLITS_CTE.[DATE]
,SPLITS_CTE.REVENUETYPE [TYPE]
,SPLITS_CTE.PAYMENTMETHOD
,SPLITS_CTE.TRANSACTIONTYPE
from #SPLITS_CTE SPLITS_CTE
left join #DESIGNATIONS on SPLITS_CTE.DESIGNATIONID = #DESIGNATIONS.DESIGNATIONID
left join #CAMPAIGNSBYREV on SPLITS_CTE.REVENUEID = #CAMPAIGNSBYREV.REVENUEID
left join dbo.REVENUECATEGORY on REVENUECATEGORY.ID = SPLITS_CTE.SPLITID
left join dbo.GLREVENUECATEGORYMAPPING on GLREVENUECATEGORYMAPPING.ID = REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID
where SPLITS_CTE.TRANSACTIONTYPECODE <> 0
group by SPLITS_CTE.REVENUEID, SPLITS_CTE.TRANSACTIONCURRENCYID, SPLITS_CTE.CONSTITUENTID,SPLITS_CTE.[DATE],SPLITS_CTE.REVENUETYPE,SPLITS_CTE.PAYMENTMETHOD, #CAMPAIGNSBYREV.CAMPAIGNNAME,SPLITS_CTE.TRANSACTIONTYPE;
insert into #REVENUEHISTORY_SUMMEDREVENUE_CTE
select
SPLITID
,SPLITS_CTE.REVENUEID
,case @GROUPBY
when 0
then COMMITMENTREVENUEID
when 1
then REVENUEID
else null
end as PARENTID
,SPLITS_CTE.APPLICATION
,SPLITS_CTE.REVENUETYPE
,isnull (#DESIGNATIONS.DESIGNATIONNAME, REVENUESPLITDESCRIPTION) DESIGNATIONS
,GLREVENUECATEGORYMAPPING.REVENUECATEGORYNAME REVENUECATEGORIES
,#CAMPAIGNSBYSPLIT.CAMPAIGNNAME CAMPAIGNS
,case @HASSITES when 1 then
(select dbo.UDA_BUILDLIST(SITE.[NAME])
from dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(SPLITS_CTE.SPLITID) RSITE
inner join dbo.SITE on SITE.ID = RSITE.SITEID)
else '' end as SITES
,SPLITS_CTE.AMOUNT
,BALANCE
,GROSSAMOUNT
,SPLITS_CTE.TRANSACTIONCURRENCYID
,SPLITS_CTE.CONSTITUENTID
,SPLITS_CTE.[DATE]
,SPLITS_CTE.REVENUETYPE [TYPE]
,SPLITS_CTE.PAYMENTMETHOD
,SPLITS_CTE.TRANSACTIONTYPE
from #SPLITS_CTE SPLITS_CTE
left join #DESIGNATIONS on SPLITS_CTE.DESIGNATIONID = #DESIGNATIONS.DESIGNATIONID
left join #CAMPAIGNSBYSPLIT on SPLITS_CTE.SPLITID = #CAMPAIGNSBYSPLIT.REVENUESPLITID
left join dbo.REVENUECATEGORY on REVENUECATEGORY.ID = SPLITS_CTE.SPLITID
left join dbo.GLREVENUECATEGORYMAPPING on GLREVENUECATEGORYMAPPING.ID = REVENUECATEGORY.GLREVENUECATEGORYMAPPINGID
where (
SPLITS_CTE.TRANSACTIONTYPECODE = 0
or coalesce(@GROUPBY, - 1) <> 0
);
select coalesce(a.SPLITID, a.REVENUEID) ID
,a.SPLITID
,a.REVENUEID
,coalesce(a.SPLITID, a.REVENUEID) RECORDID
,a.PARENTID
,case
when REVENUE_EXT.GIVENANONYMOUSLY = 1
then 'catalog:Blackbaud.AppFx.Fundraising.Catalog.dll,Blackbaud.AppFx.Fundraising.Catalog.gift_anonymous_16.png'
else ''
end IMAGEKEY
,case
when a.SPLITID is null
then 'F989EA79-EA4D-4FC7-B3F8-6EA606125CCA'
else '5DBB948F-BE5E-4E85-B652-CA3AEDE26A4F'
end VIEWFORMID
,a.[DATE]
,a.AMOUNT
,a.GROSSAMOUNT
,a.BALANCE
,a.TRANSACTIONTYPE TRANSACTIONTYPE
,a.APPLICATION
,a.REVENUETYPE
,a.DESIGNATIONS
,a.REVENUECATEGORIES
,a.CAMPAIGNS
,a.PAYMENTMETHOD
,NF.[NAME]
,a.SITES
,case @CURRENCYCODE
when 0
then case when @MULTICURRENCYENABLED = 1
then (select isnull(REVENUE_EXT.NONPOSTABLEBASECURRENCYID, I.BASECURRENCYID) from V_BASECURRENCYFORFINANCIALTRANSACTION_I I where I.FINANCIALTRANSACTIONID = REVENUE_EXT.ID)
else @ORGANIZATIONCURRENCYID
end
when 1
then @ORGANIZATIONCURRENCYID
when 2
then a.TRANSACTIONCURRENCYID
else @CURRENCYID
end as DISPLAYCURRENCY
from #REVENUEHISTORY_SUMMEDREVENUE_CTE a
inner join dbo.REVENUE_EXT on a.REVENUEID = REVENUE_EXT.ID
outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(a.CONSTITUENTID) NF
union all
select w.WRITEOFFID ID
,--JamesWill WI166057 2011-07-27 The appropriate ID for a write-off is the write-off ID. Otherwise, the PARENTID is the same as the ID and that really confuses the datalist renderer.
null SPLITID
,W.REVENUEID
,W.WRITEOFFID
,--JamesWill WI166057 2011-07-27 The datalist gets confused if this is W.REVENUEID (and adds extra rows to the datalist). So I've made it the WRITEOFF ID and changed the view form referenced by VIEWFORMID to convert any write-off IDs that come in to revenue IDs
case @GROUPBY
when 0
then W.REVENUEID
else null
end PARENTID
,null
,case
when W.WRITEOFFTYPE = 0
then 'FC475006-22FF-425B-8A2B-D35447215A2D' -- Pledge
else '97EE6E24-CADB-4FC9-AB4E-927780F80E76' -- Recurring gift
end VIEWFORMID
,W.[DATE]
,sum(W.AMOUNT)
,--WRITEOFFSPLIT.AMOUNT,
0 as GROSSAMOUNT
,null
,case W.WRITEOFFTYPE when 2 then 'Skip' else 'Write-off' end TRANSACTIONTYPE
,FINANCIALTRANSACTION.TYPE APPLICATION
,null
,null
,null
,null
,null
,CONSTITUENT.[NAME]
,null
,w.DISPLAYCURRENCY
from #TMP_DATA_REVENUEHISTORY_WRITEOFFSPLITS W
inner join dbo.FINANCIALTRANSACTION on W.REVENUEID = FINANCIALTRANSACTION.ID
left join dbo.CONSTITUENT on CONSTITUENT.ID = FINANCIALTRANSACTION.CONSTITUENTID
group by W.WRITEOFFID
,W.[DATE]
,W.REVENUEID
,w.DISPLAYCURRENCY
,FINANCIALTRANSACTION.TYPE
,CONSTITUENT.[NAME]
,W.WRITEOFFTYPE
union all -- normal (Order) refunds
select c.CREDITID ID
,null SPLITID
,c.PARENTID
,c.CREDITID RECORDID
,case
when @GROUPBY in (0,1)
then c.PARENTID
else null
end PARENTID
,null
,'d66c6daf-3f3f-404e-910b-df792e980293' VIEWFORMID
,c.[DATE]
,- sum(c.AMOUNT)
,--CREDIT.AMOUNT
0 as GROSSAMOUNT
,null
,'Refund' TRANSACTIONTYPE
,FINANCIALTRANSACTION.TYPE APPLICATION
,null
,null
,null
,null
,null
,CONSTITUENT.[NAME]
,null
,c.DISPLAYCURRENCY
from @REFUNDSPLITS c
inner join dbo.FINANCIALTRANSACTION on c.PARENTID = FINANCIALTRANSACTION.ID
inner join dbo.CONSTITUENT on CONSTITUENT.ID = FINANCIALTRANSACTION.CONSTITUENTID
group by c.CREDITID
,c.[DATE]
,c.PARENTID
,FINANCIALTRANSACTION.TYPE
,CONSTITUENT.[NAME]
,c.DISPLAYCURRENCY
union all -- Group Sales refunds
select c.CREDITID ID
,null SPLITID
,c.PARENTID
,c.CREDITID RECORDID
,case
when @GROUPBY in (0,1)
then c.PARENTID
else null
end PARENTID
,null
,'d66c6daf-3f3f-404e-910b-df792e980293' VIEWFORMID
,c.[DATE]
,- sum(c.AMOUNT)
,--CREDIT.AMOUNT
0 as GROSSAMOUNT
,null
,'Refund' TRANSACTIONTYPE
,FINANCIALTRANSACTION.TYPE APPLICATION
,null
,null
,null
,null
,null
,CONSTITUENT.[NAME]
,null
,c.DISPLAYCURRENCY
from @REFUNDSPLITS c
inner join dbo.FINANCIALTRANSACTIONLINEITEM FTLI on C.PARENTID = FTLI.ID
inner join dbo.FINANCIALTRANSACTION on FTLI.FINANCIALTRANSACTIONID = FINANCIALTRANSACTION.ID
inner join dbo.CONSTITUENT on CONSTITUENT.ID = FINANCIALTRANSACTION.CONSTITUENTID
group by c.CREDITID
,c.[DATE]
,c.PARENTID
,FINANCIALTRANSACTION.TYPE
,CONSTITUENT.[NAME]
,c.DISPLAYCURRENCY
union all
select c.CREDITID ID
,null SPLITID
,c.REVENUEID
,c.REVENUEID
,case
when @GROUPBY in (0,1)
then c.REVENUEID
else null
end PARENTID
,null
,'F989EA79-EA4D-4FC7-B3F8-6EA606125CCA' VIEWFORMID
,c.[DATE]
,- sum(c.AMOUNT)
,--CREDIT.AMOUNT
0 as GROSSAMOUNT
,null
,'Discount' TRANSACTIONTYPE
,FINANCIALTRANSACTION.TYPE APPLICATION
,null
,null
,null
,null
,null
,CONSTITUENT.[NAME]
,null
,c.DISPLAYCURRENCY
from @CREDITSPLITS c
left join dbo.FINANCIALTRANSACTION on c.REVENUEID = FINANCIALTRANSACTION.ID
--left join dbo.REVENUE_EXT on FINANCIALTRANSACTION.ID = REVENUE_EXT.ID
left join dbo.CONSTITUENT on CONSTITUENT.ID = FINANCIALTRANSACTION.CONSTITUENTID
group by c.CREDITID
,c.[DATE]
,c.REVENUEID
,FINANCIALTRANSACTION.TYPE
,CONSTITUENT.[NAME]
,c.DISPLAYCURRENCY
order by [DATE] desc
,[NAME]
,AMOUNT;