USP_CONSTITUENTGROUP_INTERACTIONS
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@GROUPID | uniqueidentifier | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@STARTDATE | datetime | IN | |
@ENDDATE | datetime | IN | |
@TYPEFILTER | uniqueidentifier | IN | |
@SITEFILTERMODE | tinyint | IN | |
@SITESSELECTED | xml | IN | |
@SECURITYFEATUREID | uniqueidentifier | IN | |
@SECURITYFEATURETYPE | tinyint | IN | |
@STATUS | tinyint | IN | |
@ROWCOUNT | int | INOUT |
Definition
Copy
CREATE procedure dbo.USP_CONSTITUENTGROUP_INTERACTIONS(
@GROUPID uniqueidentifier,
@CURRENTAPPUSERID uniqueidentifier,
@STARTDATE datetime = null,
@ENDDATE datetime = null,
@TYPEFILTER uniqueidentifier = null,
@SITEFILTERMODE tinyint = 0,
@SITESSELECTED xml = null,
@SECURITYFEATUREID uniqueidentifier = null,
@SECURITYFEATURETYPE tinyint = null,
@STATUS tinyint = null,
@ROWCOUNT int = null output
)
as
begin
set nocount on;
declare @DATALISTID uniqueidentifier = 'DC27B924-D2EC-4865-B5A6-77B52FDAA957';
-- Drop temp table if needed
if object_id('tempdb..#CONSTITUENTGROUPINTERACTION2_GROUPORMEMBERCONSTITUENT') is not null
drop table #CONSTITUENTGROUPINTERACTION2_GROUPORMEMBERCONSTITUENT;
create table #CONSTITUENTGROUPINTERACTION2_GROUPORMEMBERCONSTITUENT(
ID uniqueidentifier,
DATEFROM datetime,
DATETO datetime,
ISGROUP bit,
ISPRIMARY bit
)
create nonclustered index [IX_#CONSTITUENTGROUPINTERACTION2_GROUPORMEMBERCONSTITUENT_ID] on #CONSTITUENTGROUPINTERACTION2_GROUPORMEMBERCONSTITUENT
(ID) include (DATEFROM, DATETO, ISGROUP, ISPRIMARY);
insert into #CONSTITUENTGROUPINTERACTION2_GROUPORMEMBERCONSTITUENT (ID, DATEFROM, DATETO, ISGROUP, ISPRIMARY)
select
CONSTITUENT.ID as ID,
GMDR.DATEFROM,
GMDR.DATETO,
0 as ISGROUP,
GROUPMEMBER.ISPRIMARY
from dbo.GROUPMEMBER
inner join dbo.CONSTITUENT on CONSTITUENT.ID = GROUPMEMBER.MEMBERID
left join dbo.GROUPMEMBERDATERANGE GMDR on GMDR.GROUPMEMBERID = GROUPMEMBER.ID
where
GROUPMEMBER.GROUPID = @GROUPID
union all
select
@GROUPID,
null as DATEFROM,
null as DATETO,
1 as ISGROUP,
0 as ISPRIMARY;
declare @INTERACTIONFORGROUPORMEMBER table
(
ID uniqueidentifier,
LINKEDTHROUGHCONSTITUENTID uniqueidentifier,
unique clustered(ID, LINKEDTHROUGHCONSTITUENTID)
)
insert into @INTERACTIONFORGROUPORMEMBER (ID, LINKEDTHROUGHCONSTITUENTID)
select
V_CONSTITUENT_INTERACTION.ID,
GROUPORMEMBERCONSTITUENT.ID as LINKEDTHROUGHCONSTITUENTID
from dbo.V_CONSTITUENT_INTERACTION
inner join #CONSTITUENTGROUPINTERACTION2_GROUPORMEMBERCONSTITUENT GROUPORMEMBERCONSTITUENT on GROUPORMEMBERCONSTITUENT.ID = V_CONSTITUENT_INTERACTION.CONSTITUENTID
union
select
V_CONSTITUENT_INTERACTION.ID,
GROUPORMEMBERCONSTITUENT.ID as LINKEDTHROUGHCONSTITUENTID
from dbo.V_CONSTITUENT_INTERACTION
inner join #CONSTITUENTGROUPINTERACTION2_GROUPORMEMBERCONSTITUENT GROUPORMEMBERCONSTITUENT on GROUPORMEMBERCONSTITUENT.ID = V_CONSTITUENT_INTERACTION.CONTACTPERSONID
union
select
V_CONSTITUENT_INTERACTION.ID,
GROUPORMEMBERCONSTITUENT.ID as LINKEDTHROUGHCONSTITUENTID
from dbo.V_CONSTITUENT_INTERACTION
inner join dbo.INTERACTIONPARTICIPANT on INTERACTIONPARTICIPANT.INTERACTIONID = V_CONSTITUENT_INTERACTION.ID
inner join #CONSTITUENTGROUPINTERACTION2_GROUPORMEMBERCONSTITUENT GROUPORMEMBERCONSTITUENT on GROUPORMEMBERCONSTITUENT.ID = INTERACTIONPARTICIPANT.CONSTITUENTID;
with INTERACTION_CTE as
(
select
INTERACTION.ID,
INTERACTION.DATE,
INTERACTION.STATUS,
INTERACTION.FUNDRAISERID as OWNERID,
INTERACTION.OBJECTIVE,
INTERACTION.INTERACTIONTYPECODEID,
case
when INTERACTION.INTERACTIONBASETYPE = 2 then
case
when exists(select 1 from dbo.STEWARDSHIPNOTE where STEWARDSHIPNOTE.STEPID = INTERACTION.ID)
or exists(select 1 from dbo.STEWARDSHIPATTACHMENT where STEWARDSHIPATTACHMENT.STEPID = INTERACTION.ID)
or exists(select 1 from dbo.STEWARDSHIPMEDIALINK where STEWARDSHIPMEDIALINK.STEPID = INTERACTION.ID) then 1
else 0
end
else
case
when exists(select 1 from dbo.INTERACTIONNOTE where INTERACTIONNOTE.INTERACTIONID = INTERACTION.ID)
or exists(select 1 from dbo.INTERACTIONATTACHMENT where INTERACTIONATTACHMENT.INTERACTIONID = INTERACTION.ID)
or exists(select 1 from dbo.INTERACTIONMEDIALINK where INTERACTIONMEDIALINK.INTERACTIONID = INTERACTION.ID) then 1
else 0
end
end as HASDOCUMENTATION,
case
when INTERACTION.INTERACTIONBASETYPE = 1 then 1
else 0
end as ISMOVE,
INTERACTION.EVENTID,
coalesce(INTERACTIONCATEGORY.NAME, STEWARDSHIPSTEPCATEGORYCODE.DESCRIPTION) as CATEGORY,
INTERACTIONSUBCATEGORY.NAME as SUBCATEGORY,
INTERACTION.STARTTIME,
INTERACTION.ENDTIME,
INTERACTION.TIMEZONEENTRYID,
case
when INTERACTION.INTERACTIONBASETYPE = 2 then 1
else 0
end as ISSTEWARDSHIPSTEP,
case
when CONSTITUENT.ISGROUP = 1 then '0'
else
case
when CONSTITUENT.ISPRIMARY = 1 then '1'
else '2' + CONSTITUENTDETAIL.KEYNAME + ' ' + CONSTITUENTDETAIL.FIRSTNAME + ' ' + cast(CONSTITUENT.ID as nvarchar(36))
end
end as GROUPORPRIMARYSORT,
CONSTITUENTDETAIL.NAME as GROUPORPRIMARYSORTVALUE,
case
when dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 then 1
else dbo.UFN_SECURITY_APPUSER_GRANTED_DATALIST_FORCONSTIT(@CURRENTAPPUSERID, @DATALISTID, CONSTITUENT.ID)
end HASPERMISSIONS,
INTERACTION.INTERACTIONBASETYPE,
INTERACTION.PROSPECTPLANID,
INTERACTION.STEWARDSHIPPLANID,
case
when INTERACTIONCONSTITUENT.ISGROUP = 1 then 0
when INTERACTIONCONSTITUENT.ISORGANIZATION = 1 then 0
else 1
end as ISINDIVIDUALSTEP
from @INTERACTIONFORGROUPORMEMBER GROUPINTERACTION
inner join dbo.V_CONSTITUENT_INTERACTION INTERACTION on GROUPINTERACTION.ID = INTERACTION.ID
left join dbo.INTERACTIONSUBCATEGORY on INTERACTIONSUBCATEGORY.ID = INTERACTION.INTERACTIONSUBCATEGORYID
left join dbo.INTERACTIONCATEGORY on INTERACTIONCATEGORY.ID = INTERACTIONSUBCATEGORY.INTERACTIONCATEGORYID
left join dbo.STEWARDSHIPSTEPCATEGORYCODE on STEWARDSHIPSTEPCATEGORYCODE.ID = INTERACTION.STEWARDSHIPSTEPCATEGORYCODEID
left join dbo.INTERACTIONPARTICIPANT on INTERACTIONPARTICIPANT.INTERACTIONID = INTERACTION.ID
inner join #CONSTITUENTGROUPINTERACTION2_GROUPORMEMBERCONSTITUENT CONSTITUENT on GROUPINTERACTION.LINKEDTHROUGHCONSTITUENTID = CONSTITUENT.ID
inner join dbo.CONSTITUENT as CONSTITUENTDETAIL on CONSTITUENT.ID = CONSTITUENTDETAIL.ID
left join dbo.CONSTITUENT INTERACTIONCONSTITUENT on INTERACTIONCONSTITUENT.ID = INTERACTION.CONSTITUENTID
where
(
(INTERACTION.DATE between @STARTDATE and @ENDDATE) or
(@STARTDATE is null and @ENDDATE is null) or
(INTERACTION.DATE >= @STARTDATE and @ENDDATE is null) or
(@STARTDATE is null and INTERACTION.DATE <= @ENDDATE)
) and
(
INTERACTION.STATUSCODE = @STATUS or
@STATUS is null
) and
(
(CONSTITUENT.DATEFROM is null and (CONSTITUENT.DATETO is null or CONSTITUENT.DATETO > INTERACTION.DATE)) or
(CONSTITUENT.DATETO is null and (CONSTITUENT.DATEFROM is null or CONSTITUENT.DATEFROM <= INTERACTION.DATE)) or
(CONSTITUENT.DATEFROM <= INTERACTION.DATE and CONSTITUENT.DATETO > INTERACTION.DATE)
) and
(@TYPEFILTER is null or INTERACTION.INTERACTIONTYPECODEID = @TYPEFILTER) and
exists(
select top 1 INTERACTIONSITE.SITEID from dbo.UFN_SITEID_MAPFROM_INTERACTIONID(INTERACTION.ID) INTERACTIONSITE
where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=[INTERACTIONSITE].[SITEID] or (SITEID is null and [INTERACTIONSITE].[SITEID] is null)))
) and
(
@SITEFILTERMODE = 0 or
(INTERACTION.INTERACTIONBASETYPE = 0 and INTERACTION.ID in
(
select INTERACTIONSITE.INTERACTIONID
from dbo.UFN_SITE_BUILDDATALISTSITEFILTER (@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) SITEFILTER
inner join dbo.INTERACTIONSITE on INTERACTIONSITE.SITEID = SITEFILTER.SITEID
)
) or
(INTERACTION.INTERACTIONBASETYPE = 1 and INTERACTION.PROSPECTPLANID in
(
select PROSPECTPLANSITE.PROSPECTPLANID
from dbo.UFN_SITE_BUILDDATALISTSITEFILTER (@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) SITEFILTER
inner join dbo.PROSPECTPLANSITE on PROSPECTPLANSITE.SITEID = SITEFILTER.SITEID
)
) or
(INTERACTION.INTERACTIONBASETYPE = 2 and INTERACTION.STEWARDSHIPPLANID in
(
select STEWARDSHIPPLANSITE.STEWARDSHIPPLANID
from dbo.UFN_SITE_BUILDDATALISTSITEFILTER (@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) SITEFILTER
inner join dbo.STEWARDSHIPPLANSITE on STEWARDSHIPPLANSITE.SITEID = SITEFILTER.SITEID
)
)
)
)
select
I.ID,
I.DATE,
I.GROUPORPRIMARYSORTVALUE,
I.STATUS,
FC.ID OWNERID,
FC.NAME FUNDRAISER,
I.OBJECTIVE,
INTERACTIONTYPECODE.DESCRIPTION INTERACTIONTYPE,
I.ISMOVE ISSTEP,
I.HASDOCUMENTATION,
I.HASPERMISSIONS,
min(I.GROUPORPRIMARYSORT) GROUPORPRIMARYSORT,
I.CATEGORY,
I.SUBCATEGORY,
case
when I.INTERACTIONBASETYPE = 1 then '6ce4b0e8-cfcf-4f57-94c3-00eea94fb499'
when I.INTERACTIONBASETYPE = 2 then '0a9d7c4b-018d-48b5-aa14-589cf6c0d97b'
else 'b525985b-be02-4f02-a9b8-c110411cf936'
end as VIEWFORMID,
case
when I.INTERACTIONBASETYPE = 1 then dbo.UFN_PROSPECTPLAN_GETSITELIST(I.PROSPECTPLANID)
when I.INTERACTIONBASETYPE = 2 then dbo.UFN_STEWARDSHIPPLAN_GETSITELIST(I.STEWARDSHIPPLANID)
else dbo.UFN_CONSTITUENTINTERACTION_GETSITELIST(I.ID)
end as SITES,
I.STARTTIME,
I.ENDTIME,
TIMEZONEENTRY.DISPLAYNAME TIMEZONE,
I.ISSTEWARDSHIPSTEP,
I.ISINDIVIDUALSTEP
from INTERACTION_CTE I
inner join dbo.INTERACTIONTYPECODE on I.INTERACTIONTYPECODEID = INTERACTIONTYPECODE.ID
left outer join dbo.CONSTITUENT FC on FC.ID = I.OWNERID
left outer join dbo.TIMEZONEENTRY on I.TIMEZONEENTRYID = TIMEZONEENTRY.ID
group by I.ID, I.DATE, I.GROUPORPRIMARYSORTVALUE, I.STATUS, FC.ID, FC.NAME, I.OBJECTIVE, I.INTERACTIONTYPECODEID,
I.ISMOVE, I.HASDOCUMENTATION, I.HASPERMISSIONS, I.CATEGORY, I.SUBCATEGORY, I.INTERACTIONBASETYPE,
I.PROSPECTPLANID, I.STEWARDSHIPPLANID, INTERACTIONTYPECODE.DESCRIPTION, I.STARTTIME, I.ENDTIME,
TIMEZONEENTRY.DISPLAYNAME, I.ISSTEWARDSHIPSTEP, I.ISINDIVIDUALSTEP
order by GROUPORPRIMARYSORT, I.DATE desc;
set @ROWCOUNT = @@ROWCOUNT
drop table #CONSTITUENTGROUPINTERACTION2_GROUPORMEMBERCONSTITUENT;
end