USP_GROUP_RECOGNITIONCREDITS
Returns all revenue records for a constituent group.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@GROUPID | uniqueidentifier | IN | |
@TYPECODES | xml | IN | |
@DESIGNATIONS | xml | IN | |
@CAMPAIGNS | xml | IN | |
@RECOGNITIONTYPECODES | xml | IN | |
@FILTERUNCERTAINGIFTSFORHISTORICALMEMBERS | bit | IN | |
@ASOF | datetime | IN | |
@INCLUDEGROUPSWITHNORECOGNITIONS | bit | IN | |
@GROUPTYPECODE | tinyint | IN | |
@APPLICATIONTYPECODES | xml | IN | |
@REVENUESELECTIONID | uniqueidentifier | IN | |
@CURRENCYID | uniqueidentifier | IN | |
@SITES | xml | IN |
Definition
Copy
CREATE procedure dbo.USP_GROUP_RECOGNITIONCREDITS
(
@GROUPID uniqueidentifier,
@TYPECODES xml,
@DESIGNATIONS xml,
@CAMPAIGNS xml,
@RECOGNITIONTYPECODES xml,
@FILTERUNCERTAINGIFTSFORHISTORICALMEMBERS bit,
@ASOF datetime = null,
@INCLUDEGROUPSWITHNORECOGNITIONS bit,
@GROUPTYPECODE tinyint,
@APPLICATIONTYPECODES xml,
@REVENUESELECTIONID uniqueidentifier,
@CURRENCYID uniqueidentifier = null,
@SITES xml = null
)
with execute as owner
as
begin
declare @TODAY datetime;
set @TODAY = getdate();
declare @DECIMALDIGITS tinyint;
declare @ROUNDINGTYPECODE tinyint;
declare @ORGANIZATIONCURRENCYID uniqueidentifier = dbo.[UFN_CURRENCY_GETORGANIZATIONCURRENCY]();
if @CURRENCYID is null
set @CURRENCYID = @ORGANIZATIONCURRENCYID;
select
@DECIMALDIGITS = [CURRENCY].[DECIMALDIGITS],
@ROUNDINGTYPECODE = [CURRENCY].[ROUNDINGTYPECODE]
from dbo.[CURRENCY]
where [CURRENCY].[ID] = @CURRENCYID;
if object_id('tempdb..#TMP_CONSTITUENTFILTER_GROUP_RECOGNITIONCREDITS') is not null
drop table #TMP_CONSTITUENTFILTER_GROUP_RECOGNITIONCREDITS
create table #TMP_CONSTITUENTFILTER_GROUP_RECOGNITIONCREDITS
(ID uniqueidentifier,
INCLUDESMEMBERGIVING bit not null);
declare @SPLITTYPECODESFILTER table (TYPECODE tinyint primary key);
declare @DESIGNATIONSFILTER table (DESIGNATIONID uniqueidentifier primary key);
declare @CAMPAIGNSFILTER table (CAMPAIGNID uniqueidentifier primary key);
declare @RECOGNITIONTYPECODESFILTER table (RECOGNITIONTYPECODEID uniqueidentifier primary key);
declare @APPLICATIONTYPECODESFILTER table (APPLICATIONCODE tinyint, TRANSACTIONTYPECODE tinyint);
if @TYPECODES is not null
begin
insert into @SPLITTYPECODESFILTER(TYPECODE)
select distinct T.c.value('(REVENUETYPES)[1]','tinyint')
from @TYPECODES.nodes('/REVENUETYPECODES/ITEM') T(c);
if not exists (select 1 from @SPLITTYPECODESFILTER)
set @TYPECODES = null;
end
if @APPLICATIONTYPECODES is not null
begin
insert into @APPLICATIONTYPECODESFILTER(APPLICATIONCODE, TRANSACTIONTYPECODE)
select
T.c.value('(APPLICATION)[1]','tinyint'),
T.c.value('(TRANSACTIONTYPE)[1]','tinyint')
from @APPLICATIONTYPECODES.nodes('/SELECTIONS/ITEM') T(c)
where T.c.value('(TRANSACTIONTYPE)[1]','tinyint') is not null;
if not exists (select 1 from @APPLICATIONTYPECODESFILTER)
set @APPLICATIONTYPECODES = null;
end
if @DESIGNATIONS is not null
begin
insert into @DESIGNATIONSFILTER(DESIGNATIONID)
select T.c.value('(ID)[1]','uniqueidentifier')
from @DESIGNATIONS.nodes('/DESIGNATIONS/ITEM') T(c);
if not exists (select 1 from @DESIGNATIONSFILTER)
set @DESIGNATIONS = null;
end
if @CAMPAIGNS is not null
begin
insert into @CAMPAIGNSFILTER(CAMPAIGNID)
select T.c.value('(ID)[1]','uniqueidentifier')
from @CAMPAIGNS.nodes('/CAMPAIGNS/ITEM') T(c);
if not exists (select 1 from @CAMPAIGNSFILTER)
set @CAMPAIGNS = null;
end
if @RECOGNITIONTYPECODES is not null
begin
insert into @RECOGNITIONTYPECODESFILTER(RECOGNITIONTYPECODEID)
select T.c.value('(RECOGNITIONTYPECODEID)[1]','uniqueidentifier')
from @RECOGNITIONTYPECODES.nodes('/RECOGNITIONTYPES/ITEM') T(c);
if not exists (select 1 from @RECOGNITIONTYPECODESFILTER)
set @RECOGNITIONTYPECODES = null;
end
declare @SITESFILTER table(ID uniqueidentifier primary key);
insert into
@SITESFILTER(ID)
select distinct
T.c.value('(SITEID)[1]','uniqueidentifier')
FROM
@SITES.nodes('/SITES/ITEM') T(c)
create table #CONSTITUENTSITEFILTER (ID uniqueidentifier primary key);
insert into
#CONSTITUENTSITEFILTER(ID)
select distinct
CONSTITUENTSITE.CONSTITUENTID
from
CONSTITUENTSITE
inner join
@SITESFILTER as SITES on SITES.ID = CONSTITUENTSITE.SITEID
--JamesWill WI60704. There are too many complexities to use the @ASOF filter, so this will simply return all gifts
--(Complexities include: want to return the same gifts for all household members; want to return households without revenue;
--want to return individuals without households; etc. I was running into issues where some gifts were not getting counted
--because of the @ASOF and things were inconsistent. This will be a little slower, but it will also be correct.
insert into #TMP_CONSTITUENTFILTER_GROUP_RECOGNITIONCREDITS(ID, INCLUDESMEMBERGIVING)
select CONSTITUENT.ID,
case when GROUPDATA.GROUPTYPECODE = 0 then 1 else coalesce(GROUPTYPE.INCLUDEMEMBERGIVING, 0) end
from dbo.CONSTITUENT
inner join dbo.GROUPDATA on GROUPDATA.ID = CONSTITUENT.ID and (@GROUPTYPECODE is null or GROUPDATA.GROUPTYPECODE = @GROUPTYPECODE)
left join dbo.GROUPTYPE on GROUPTYPE.ID = GROUPDATA.GROUPTYPEID
where CONSTITUENT.ISGROUP = 1 and CONSTITUENT.ISINACTIVE=0
and @GROUPID is null or CONSTITUENT.ID = @GROUPID;
create index IX_TMP_CONSTITUENTFILTER_GROUP_RECOGNITIONCREDITS_ID on #TMP_CONSTITUENTFILTER_GROUP_RECOGNITIONCREDITS (ID)
if object_id('tempdb..#TMP_MEMBERS_GROUP_RECOGNITIONCREDITS') is not null
drop table #TMP_MEMBERS_GROUP_RECOGNITIONCREDITS
create table #TMP_MEMBERS_GROUP_RECOGNITIONCREDITS
(GROUPID uniqueidentifier,
CONSTITUENTID uniqueidentifier,
ISGROUP bit,
DATEFROM datetime,
DATETO datetime,
ISHISTORICAL bit,
GROUPTYPECODE tinyint
)
if @SITES is null
begin
insert into #TMP_MEMBERS_GROUP_RECOGNITIONCREDITS
select
CONSTITUENT.ID as [GROUPID],
GROUPMEMBER.MEMBERID as [CONSTITUENTID],
0 as [ISGROUP],
GROUPMEMBERDATERANGE.DATEFROM,
GROUPMEMBERDATERANGE.DATETO,
case when GROUPMEMBERDATERANGE.DATETO is not null and GROUPMEMBERDATERANGE.DATETO < @TODAY then 1 else 0 end as [ISHISTORICAL],
GROUPDATA.GROUPTYPECODE
from #TMP_CONSTITUENTFILTER_GROUP_RECOGNITIONCREDITS as [FILTER]
inner join dbo.CONSTITUENT on CONSTITUENT.ID = [FILTER].ID
inner join dbo.GROUPMEMBER on GROUPMEMBER.GROUPID = CONSTITUENT.ID and [FILTER].INCLUDESMEMBERGIVING = 1
inner join dbo.GROUPDATA on GROUPDATA.ID = GROUPMEMBER.GROUPID
left join dbo.GROUPMEMBERDATERANGE on GROUPMEMBERDATERANGE.GROUPMEMBERID = GROUPMEMBER.ID
union /*Also include giving by the group itself*/
select
CONSTITUENT.ID as [GROUPID],
CONSTITUENT.ID as [CONSTITUENTID],
1 as [ISGROUP],
null as [DATEFROM],
null as [DATETO],
0 as [ISHISTORICAL],
GROUPDATA.GROUPTYPECODE
from #TMP_CONSTITUENTFILTER_GROUP_RECOGNITIONCREDITS as [FILTER]
inner join dbo.CONSTITUENT on CONSTITUENT.ID = [FILTER].ID
inner join dbo.GROUPDATA on GROUPDATA.ID = CONSTITUENT.ID
end
else
begin
insert into #TMP_MEMBERS_GROUP_RECOGNITIONCREDITS
select
CONSTITUENT.ID as [GROUPID],
GROUPMEMBER.MEMBERID as [CONSTITUENTID],
0 as [ISGROUP],
GROUPMEMBERDATERANGE.DATEFROM,
GROUPMEMBERDATERANGE.DATETO,
case when GROUPMEMBERDATERANGE.DATETO is not null and GROUPMEMBERDATERANGE.DATETO < @TODAY then 1 else 0 end as [ISHISTORICAL],
GROUPDATA.GROUPTYPECODE
from #TMP_CONSTITUENTFILTER_GROUP_RECOGNITIONCREDITS as [FILTER]
inner join dbo.CONSTITUENT on CONSTITUENT.ID = [FILTER].ID
inner join dbo.GROUPMEMBER on GROUPMEMBER.GROUPID = CONSTITUENT.ID and [FILTER].INCLUDESMEMBERGIVING = 1
inner join #CONSTITUENTSITEFILTER as CONSTITUENTSITEFILTER on CONSTITUENTSITEFILTER.ID = GROUPMEMBER.MEMBERID
inner join dbo.GROUPDATA on GROUPDATA.ID = GROUPMEMBER.GROUPID
left join dbo.GROUPMEMBERDATERANGE on GROUPMEMBERDATERANGE.GROUPMEMBERID = GROUPMEMBER.ID
union /*Also include giving by the group itself*/
select
CONSTITUENT.ID as [GROUPID],
CONSTITUENT.ID as [CONSTITUENTID],
1 as [ISGROUP],
null as [DATEFROM],
null as [DATETO],
0 as [ISHISTORICAL],
GROUPDATA.GROUPTYPECODE
from #TMP_CONSTITUENTFILTER_GROUP_RECOGNITIONCREDITS as [FILTER]
inner join dbo.CONSTITUENT on CONSTITUENT.ID = [FILTER].ID
inner join #CONSTITUENTSITEFILTER as CONSTITUENTSITEFILTER on CONSTITUENTSITEFILTER.ID = CONSTITUENT.ID
inner join dbo.GROUPDATA on GROUPDATA.ID = CONSTITUENT.ID
end
drop table #CONSTITUENTSITEFILTER;
create index IX_TMP_MEMBERS_GROUP_RECOGNITIONCREDITS_CONSTITUENTID on #TMP_MEMBERS_GROUP_RECOGNITIONCREDITS (CONSTITUENTID);
if object_id('tempdb..#TMP_REVENUE_GROUP_RECOGNITIONCREDITS') is not null
drop table #TMP_REVENUE_GROUP_RECOGNITIONCREDITS
create table #TMP_REVENUE_GROUP_RECOGNITIONCREDITS
(REVENUEID uniqueidentifier,
REVENUEDATE datetime,
REVENUECONSTITUENTID uniqueidentifier,
REVENUESPLITID uniqueidentifier,
RECOGNITIONID uniqueidentifier,
DATEADDED datetime,
EFFECTIVEDATE datetime,
RECOGNITIONCONSTITUENTID uniqueidentifier,
REVENUERECOGNITIONTYPECODEID uniqueidentifier,
AMOUNT money,
REVENUEDATEADDED datetime,
TSLONG bigint)
declare @declaressql as nvarchar(max) = ''
set @declaressql = 'declare @TODAY datetime;
set @TODAY = getdate();
declare @SPLITTYPECODESFILTER table (TYPECODE tinyint primary key);
declare @DESIGNATIONSFILTER table (DESIGNATIONID uniqueidentifier primary key);
declare @CAMPAIGNSFILTER table (CAMPAIGNID uniqueidentifier primary key);
declare @APPLICATIONTYPECODESFILTER table (APPLICATIONCODE tinyint, TRANSACTIONTYPECODE tinyint);
declare @RECOGNITIONTYPECODESFILTER table (RECOGNITIONTYPECODEID uniqueidentifier primary key);
declare @TYPECODES xml = ' + coalesce('''' + cast(@TYPECODES as nvarchar(max)) + '''', 'null') + '
if @TYPECODES is not null
begin
insert into @SPLITTYPECODESFILTER(TYPECODE)
select distinct T.c.value(''(REVENUETYPES)[1]'',''tinyint'')
from @TYPECODES.nodes(''/REVENUETYPECODES/ITEM'') T(c);
if not exists (select 1 from @SPLITTYPECODESFILTER)
set @TYPECODES = null;
end
declare @APPLICATIONTYPECODES xml = ' + coalesce('''' + cast(@APPLICATIONTYPECODES as nvarchar(max)) + '''', 'null') + '
if @APPLICATIONTYPECODES is not null
begin
insert into @APPLICATIONTYPECODESFILTER(APPLICATIONCODE, TRANSACTIONTYPECODE)
select
T.c.value(''(APPLICATION)[1]'',''tinyint''),
T.c.value(''(TRANSACTIONTYPE)[1]'',''tinyint'')
from @APPLICATIONTYPECODES.nodes(''/SELECTIONS/ITEM'') T(c)
where T.c.value(''(TRANSACTIONTYPE)[1]'',''tinyint'') is not null;
if not exists (select 1 from @APPLICATIONTYPECODESFILTER)
set @APPLICATIONTYPECODES = null;
end
declare @DESIGNATIONS xml = ' + coalesce('''' + cast(@DESIGNATIONS as nvarchar(max)) + '''', 'null') + '
if @DESIGNATIONS is not null
begin
insert into @DESIGNATIONSFILTER(DESIGNATIONID)
select T.c.value(''(ID)[1]'',''uniqueidentifier'')
from @DESIGNATIONS.nodes(''/DESIGNATIONS/ITEM'') T(c);
if not exists (select 1 from @DESIGNATIONSFILTER)
set @DESIGNATIONS = null;
end
declare @CAMPAIGNS xml = ' + coalesce('''' + cast(@CAMPAIGNS as nvarchar(max)) + '''', 'null') + '
if @CAMPAIGNS is not null
begin
insert into @CAMPAIGNSFILTER(CAMPAIGNID)
select T.c.value(''(ID)[1]'',''uniqueidentifier'')
from @CAMPAIGNS.nodes(''/CAMPAIGNS/ITEM'') T(c);
if not exists (select 1 from @CAMPAIGNSFILTER)
set @CAMPAIGNS = null;
end
declare @RECOGNITIONTYPECODES xml = ' + coalesce('''' + cast(@RECOGNITIONTYPECODES as nvarchar(max)) + '''', 'null') + '
if @RECOGNITIONTYPECODES is not null
begin
insert into @RECOGNITIONTYPECODESFILTER(RECOGNITIONTYPECODEID)
select T.c.value(''(RECOGNITIONTYPECODEID)[1]'',''uniqueidentifier'')
from @RECOGNITIONTYPECODES.nodes(''/RECOGNITIONTYPES/ITEM'') T(c);
if not exists (select 1 from @RECOGNITIONTYPECODESFILTER)
set @RECOGNITIONTYPECODES = null;
end
declare @REVENUESELECTIONID uniqueidentifier = ' + coalesce('''' + cast(@REVENUESELECTIONID as nvarchar(36)) + '''', 'null')
if object_id('tempdb..#TMP_REVENUE_SELECTION') is not null
drop table #TMP_REVENUE_SELECTION
create table #TMP_REVENUE_SELECTION
(ID uniqueidentifier)
if @REVENUESELECTIONID is not null or @REVENUESELECTIONID <> '00000000-0000-0000-0000-000000000000'
begin
declare @ISSTATIC bit = 0
declare @DBOBJECTTYPE tinyint = 0
declare @DBOBJECTNAME nvarchar(128)
declare @ADHOCQUERYID uniqueidentifier
select @DBOBJECTNAME = IDSETREGISTER.DBOBJECTNAME, @DBOBJECTTYPE = IDSETREGISTER.OBJECTTYPE, @ISSTATIC = IDSETREGISTER.STATIC, @ADHOCQUERYID=IDSETREGISTERADHOCQUERY.ADHOCQUERYID from dbo.IDSETREGISTER
left join dbo.IDSETREGISTERADHOCQUERY on IDSETREGISTER.ID = IDSETREGISTERADHOCQUERY.IDSETREGISTERID
where IDSETREGISTER.ID = @REVENUESELECTIONID
if @DBOBJECTTYPE > 0
begin
if @DBOBJECTTYPE = 1 and @ISSTATIC = 1 and @ADHOCQUERYID is not null
select @DBOBJECTNAME = dbo.UFN_ADHOCQUERY_MAKEIDSETSTATICTABLENAME(@ADHOCQUERYID)
else
set @DBOBJECTNAME = 'UFN_IDSETREADER_GETRESULTS_GUID(''' + cast(@REVENUESELECTIONID as nvarchar(36)) + ''')'
DECLARE @sqlCommand varchar(1000)
SET @sqlCommand = 'insert #TMP_REVENUE_SELECTION select distinct * from dbo.' + @DBOBJECTNAME
EXEC (@sqlCommand)
end
end
if object_id('tempdb..#TMP_REVENUESPLITSITEFILTER') is not null
drop table #TMP_REVENUESPLITSITEFILTER
create table #TMP_REVENUESPLITSITEFILTER(ID uniqueidentifier);
if @SITES is not null
begin
insert into #TMP_REVENUESPLITSITEFILTER
select distinct
REVENUERECOGNITION.ID
from
REVENUERECOGNITION
inner join
REVENUESPLIT on REVENUESPLIT.ID = REVENUERECOGNITION.REVENUESPLITID
cross apply
dbo.UFN_SITEID_MAPFROM_REVENUESPLITID(REVENUESPLIT.ID) as SITES
inner join
@SITESFILTER as SITESFILTER on SITESFILTER.ID = SITES.SITEID
end
declare @recognitionsql nvarchar(max) = ''
set @recognitionsql = '
select
[REVENUERECOGNITIONAMOUNTINCURRENCY].[REVENUEID],
[REVENUERECOGNITIONAMOUNTINCURRENCY].[DATE] as [REVENUEDATE],
[REVENUERECOGNITIONAMOUNTINCURRENCY].[CONSTITUENTID] as [REVENUECONSTITUENTID],
[REVENUERECOGNITIONAMOUNTINCURRENCY].[REVENUESPLITID],
[REVENUERECOGNITIONAMOUNTINCURRENCY].[ID] as [RECOGNITIONID],
[REVENUERECOGNITIONAMOUNTINCURRENCY].[DATEADDED],
[REVENUERECOGNITIONAMOUNTINCURRENCY].[EFFECTIVEDATE],
[REVENUERECOGNITIONAMOUNTINCURRENCY].[CONSTITUENTID] as [RECOGNITIONCONSTITUENTID],
[REVENUERECOGNITIONAMOUNTINCURRENCY].[REVENUERECOGNITIONTYPECODEID],
[REVENUERECOGNITIONAMOUNTINCURRENCY].[AMOUNTINCURRENCY],
[REVENUERECOGNITIONAMOUNTINCURRENCY].[REVENUEDATEADDED],
[REVENUERECOGNITIONAMOUNTINCURRENCY].[REVENUESPLITTSLONG] as [TSLONG]
from dbo.[UFN_REVENUERECOGNITION_GETAMOUNTINCURRENCY_BULK](@CURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE) as [REVENUERECOGNITIONAMOUNTINCURRENCY] '
if @SITES is not null
begin
set @recognitionsql = @recognitionsql + ' inner join #TMP_REVENUESPLITSITEFILTER as [REVENUESITEFILTER] on [REVENUESITEFILTER].[ID] = [REVENUERECOGNITIONAMOUNTINCURRENCY].[ID]'
end
if @TYPECODES is not null
set @recognitionsql = @recognitionsql + ' inner join @SPLITTYPECODESFILTER [SPLITTYPECODESFILTER] on [SPLITTYPECODESFILTER].TYPECODE = [REVENUERECOGNITIONAMOUNTINCURRENCY].[REVENUESPLITTYPECODE]'
if @APPLICATIONTYPECODES is not null
set @recognitionsql = @recognitionsql + ' inner join @APPLICATIONTYPECODESFILTER [FILTER] on [FILTER].TRANSACTIONTYPECODE = [REVENUERECOGNITIONAMOUNTINCURRENCY].[TRANSACTIONTYPECODE] and [FILTER].APPLICATIONCODE = [REVENUERECOGNITIONAMOUNTINCURRENCY].[APPLICATIONCODE]'
if @RECOGNITIONTYPECODES is not null
set @recognitionsql = @recognitionsql + ' inner join @RECOGNITIONTYPECODESFILTER as [RFILTER] on [RFILTER].RECOGNITIONTYPECODEID = [REVENUERECOGNITIONAMOUNTINCURRENCY].[REVENUERECOGNITIONTYPECODEID] '
if @REVENUESELECTIONID is not null or @REVENUESELECTIONID <> '00000000-0000-0000-0000-000000000000'
set @recognitionsql = @recognitionsql + ' inner join #TMP_REVENUE_SELECTION ADH on ADH.ID = [REVENUERECOGNITIONAMOUNTINCURRENCY].[REVENUESPLITID] '
declare @wheresql nvarchar(max) = ''
if @DESIGNATIONS is not null
begin
if LEN(@wheresql) > 0 set @wheresql = @wheresql + ' and '
set @wheresql = @wheresql + ' ([REVENUERECOGNITIONAMOUNTINCURRENCY].[DESIGNATIONID] in (select [DESIGNATIONSFILTER].DESIGNATIONID from @DESIGNATIONSFILTER as [DESIGNATIONSFILTER])) '
end
if @CAMPAIGNS is not null
begin
if LEN(@wheresql) > 0 set @wheresql = @wheresql + ' and '
set @wheresql = @wheresql + ' ([REVENUERECOGNITIONAMOUNTINCURRENCY].[REVENUESPLITID] in (select REVENUESPLITCAMPAIGN.REVENUESPLITID from dbo.REVENUESPLITCAMPAIGN inner join @CAMPAIGNSFILTER as [CAMPAIGNSFILTER] on [CAMPAIGNSFILTER].CAMPAIGNID = REVENUESPLITCAMPAIGN.CAMPAIGNID))'
end
if LEN(@wheresql) > 0 set @wheresql = ' where ' + @wheresql
set @recognitionsql = @recognitionsql + @wheresql
set @recognitionsql = @declaressql + @recognitionsql
insert into #TMP_REVENUE_GROUP_RECOGNITIONCREDITS
exec sp_executesql @recognitionsql, N'@CURRENCYID uniqueidentifier, @ORGANIZATIONCURRENCYID uniqueidentifier, @DECIMALDIGITS tinyint, @ROUNDINGTYPECODE tinyint',
@CURRENCYID = @CURRENCYID,
@ORGANIZATIONCURRENCYID = @ORGANIZATIONCURRENCYID,
@DECIMALDIGITS = @DECIMALDIGITS,
@ROUNDINGTYPECODE = @ROUNDINGTYPECODE;
if object_id('tempdb..#TMP_REVENUE_SELECTION') is not null
drop table #TMP_REVENUE_SELECTION
create index IX_TMP_REVENUE_GROUP_RECOGNITIONCREDITS_RECOGNITIONCONSTITUENTID on #TMP_REVENUE_GROUP_RECOGNITIONCREDITS (RECOGNITIONCONSTITUENTID)
insert into #TMP_GROUP_RECOGNITIONCREDITS
select
[CTE_MEMBERS].GROUPID,
[CTE_MEMBERS].GROUPTYPECODE,
[CTE_MEMBERS].CONSTITUENTID as [GROUPMEMBERID],
[CTE_MEMBERS].ISGROUP,
[CTE_MEMBERS].DATEFROM as [GROUPMEMBERSHIPSTARTDATE],
[CTE_MEMBERS].DATETO as [GROUPMEMBERSHIPENDDATE],
[CTE_MEMBERS].ISHISTORICAL as [GROUPMEMBERSHIPISHISTORICAL],
[CTE_RECOGNITION].RECOGNITIONID,
[CTE_RECOGNITION].REVENUEID,
[CTE_RECOGNITION].REVENUESPLITID,
[CTE_RECOGNITION].REVENUEDATE,
[CTE_RECOGNITION].REVENUEDATEADDED,
[CTE_RECOGNITION].REVENUECONSTITUENTID,
[CTE_RECOGNITION].EFFECTIVEDATE as [RECOGNITIONDATE],
[CTE_RECOGNITION].REVENUERECOGNITIONTYPECODEID,
[CTE_RECOGNITION].AMOUNT as [RECOGNITIONAMOUNT],
[CTE_RECOGNITION].DATEADDED as [RECOGNITIONDATEADDED],
[CTE_RECOGNITION].TSLONG as [TSLONG]
from #TMP_REVENUE_GROUP_RECOGNITIONCREDITS [CTE_RECOGNITION]
inner join #TMP_MEMBERS_GROUP_RECOGNITIONCREDITS [CTE_MEMBERS] on [CTE_MEMBERS].CONSTITUENTID = [CTE_RECOGNITION].RECOGNITIONCONSTITUENTID
where
[CTE_MEMBERS].ISGROUP = 1 or [CTE_MEMBERS].ISHISTORICAL = 0
or
([CTE_MEMBERS].ISHISTORICAL = 1 and (@FILTERUNCERTAINGIFTSFORHISTORICALMEMBERS = 0 or ([CTE_RECOGNITION].EFFECTIVEDATE < [CTE_MEMBERS].DATETO)))
union /*Include individuals who are not in the selected groups */
select
null,
null,
CONSTITUENT.ID,
0,
null,
null,
0,
[CTE_RECOGNITION].RECOGNITIONID,
[CTE_RECOGNITION].REVENUEID,
[CTE_RECOGNITION].REVENUESPLITID,
[CTE_RECOGNITION].REVENUEDATE,
[CTE_RECOGNITION].REVENUEDATEADDED,
[CTE_RECOGNITION].REVENUECONSTITUENTID,
[CTE_RECOGNITION].EFFECTIVEDATE as [RECOGNITIONDATE],
[CTE_RECOGNITION].REVENUERECOGNITIONTYPECODEID,
[CTE_RECOGNITION].AMOUNT as [RECOGNITIONAMOUNT],
[CTE_RECOGNITION].DATEADDED as [RECOGNITIONDATEADDED],
[CTE_RECOGNITION].TSLONG as [TSLONG]
from #TMP_REVENUE_GROUP_RECOGNITIONCREDITS [CTE_RECOGNITION]
inner join dbo.CONSTITUENT on CONSTITUENT.ID = [CTE_RECOGNITION].RECOGNITIONCONSTITUENTID
where CONSTITUENT.ID not in (select ID from dbo.GROUPDATA)
and CONSTITUENT.ID not in (select CONSTITUENTID from #TMP_MEMBERS_GROUP_RECOGNITIONCREDITS where #TMP_MEMBERS_GROUP_RECOGNITIONCREDITS.ISHISTORICAL = 0)
and @GROUPID is null;
if @INCLUDEGROUPSWITHNORECOGNITIONS = 1
begin
insert into #TMP_GROUP_RECOGNITIONCREDITS
select
CONSTITUENT.ID as [GROUPID],
GROUPDATA.GROUPTYPECODE,
CONSTITUENT.ID as [GROUPMEMBERID],
1 as [ISGROUP],
null as [GROUPMEMBERSHIPSTARTDATE],
null as [GROUPMEMBERSHIPENDDATE],
0 as [ISHISTORICAL],
null as [RECOGNITIONID],
null as [REVENUEID],
null as [REVENUESPLITID],
null as [REVENUEDATE],
null as [REVENUEDATEADDED],
null as [REVENUECONSTITUENTID],
null as [RECOGNITIONDATE],
null as [REVENUERECOGNITIONTYPECODEID],
null as [RECOGNITIONAMOUNT],
null as [RECOGNITIONDATEADDED],
0 as [TSLONG]
from dbo.CONSTITUENT
inner join dbo.GROUPDATA on GROUPDATA.ID = CONSTITUENT.ID
left join #TMP_GROUP_RECOGNITIONCREDITS as [RESULTS] on [RESULTS].GROUPID = CONSTITUENT.ID
where [RESULTS].GROUPID is null and (CONSTITUENT.ID = @GROUPID or @GROUPID is null);
end
end