UFN_CONSTITUENT_INTERACTIONS
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONSTITUENTID | uniqueidentifier | IN | |
@STARTDATE | datetime | IN | |
@ENDDATE | datetime | IN | |
@TYPEFILTER | uniqueidentifier | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@SITEFILTERMODE | tinyint | IN | |
@SITESSELECTED | xml | IN | |
@SECURITYFEATUREID | uniqueidentifier | IN | |
@SECURITYFEATURETYPE | tinyint | IN | |
@STATUS | tinyint | IN |
Definition
Copy
CREATE function dbo.UFN_CONSTITUENT_INTERACTIONS
(
@CONSTITUENTID uniqueidentifier,
@STARTDATE datetime = null,
@ENDDATE datetime = null,
@TYPEFILTER uniqueidentifier = null,
@CURRENTAPPUSERID uniqueidentifier = null,
@SITEFILTERMODE tinyint = 0,
@SITESSELECTED xml = null,
@SECURITYFEATUREID uniqueidentifier = null,
@SECURITYFEATURETYPE tinyint = null,
@STATUS tinyint = null
)
returns table
as return
-- Using a union on the four different types of data getting pulled in (instead of a view)
-- allows the compiler to choose a plan that filters on constituent ID first.\
-- Interactions for the constituent
select
INTERACTION.ID,
INTERACTION.DATE,
INTERACTION.STATUS,
OWNERNAME.NAME as OWNER,
INTERACTION.FUNDRAISERID as OWNERID,
INTERACTION.OBJECTIVE,
INTERACTIONTYPECODE.DESCRIPTION as TYPE,
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 as HASDOCUMENTATION,
case
when INTERACTION.PROSPECTPLANID is null then 0
else 1
end as ISMOVE,
EVENT.NAME EVENT,
case
when exists(select 1 from dbo.INTERACTIONRESPONSE where INTERACTIONRESPONSE.INTERACTIONID = INTERACTION.ID) then 1
else 0
end as HASRESPONSES,
INTERACTIONCATEGORY.NAME as CATEGORY,
INTERACTIONSUBCATEGORY.NAME as SUBCATEGORY,
case
when INTERACTION.PROSPECTPLANID is null then 'b525985b-be02-4f02-a9b8-c110411cf936'
else '6ce4b0e8-cfcf-4f57-94c3-00eea94fb499'
end as VIEWFORMID,
case
when INTERACTION.PROSPECTPLANID is null then dbo.UFN_CONSTITUENTINTERACTION_GETSITELIST(INTERACTION.ID)
else dbo.UFN_PROSPECTPLAN_GETSITELIST(INTERACTION.PROSPECTPLANID)
end as SITES,
INTERACTION.STARTTIME as STARTTIME,
INTERACTION.ENDTIME as ENDTIME,
TIMEZONEENTRY.DISPLAYNAME TIMEZONE,
0 as ISSTEWARDSHIPSTEP,
case
when CONSTITUENT.ISGROUP = 1 then 0
when CONSTITUENT.ISORGANIZATION = 1 then 0
else 1
end as ISINDIVIDUALSTEP,
INTERACTION.EXPECTEDDATE,
INTERACTION.ACTUALDATE,
INTERACTION.EXPECTEDSTARTTIME,
INTERACTION.ACTUALSTARTTIME,
INTERACTION.EXPECTEDENDTIME,
INTERACTION.ACTUALENDTIME,
INTERACTION.COMMENT,
case
when exists(select 1 from dbo.INTERACTIONPARTICIPANT where INTERACTIONPARTICIPANT.INTERACTIONID = INTERACTION.ID) then 1
else 0
end as HASPARTICIPANTS,
INTERACTION.LOCATION
from dbo.INTERACTION
left join dbo.INTERACTIONSUBCATEGORY on INTERACTIONSUBCATEGORY.ID = INTERACTION.INTERACTIONSUBCATEGORYID
left join dbo.INTERACTIONCATEGORY on INTERACTIONCATEGORY.ID = INTERACTIONSUBCATEGORY.INTERACTIONCATEGORYID
inner join dbo.INTERACTIONTYPECODE on INTERACTION.INTERACTIONTYPECODEID = INTERACTIONTYPECODE.ID
left join dbo.TIMEZONEENTRY on INTERACTION.TIMEZONEENTRYID = TIMEZONEENTRY.ID
left join dbo.EVENT on EVENT.ID = INTERACTION.EVENTID
left join dbo.CONSTITUENT on CONSTITUENT.ID = INTERACTION.CONSTITUENTID
outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(INTERACTION.FUNDRAISERID) OWNERNAME
where
INTERACTION.ISINTERACTION = 1
and INTERACTION.STATUSCODE <> 0
and INTERACTION.CONSTITUENTID = @CONSTITUENTID
and (
INTERACTION.STATUSCODE = @STATUS or
@STATUS is null
)
and (
(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 (@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.PROSPECTPLANID is null 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.PROSPECTPLANID is not null 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
)
)
)
union all
-- Interactions where the constituent is a participant
select
INTERACTION.ID,
INTERACTION.DATE,
INTERACTION.STATUS,
OWNERNAME.NAME as OWNER,
INTERACTION.FUNDRAISERID as OWNERID,
INTERACTION.OBJECTIVE,
INTERACTIONTYPECODE.DESCRIPTION as TYPE,
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 as HASDOCUMENTATION,
case
when INTERACTION.PROSPECTPLANID is null then 0
else 1
end as ISMOVE,
EVENT.NAME EVENT,
case
when exists(select 1 from dbo.INTERACTIONRESPONSE where INTERACTIONRESPONSE.INTERACTIONID = INTERACTION.ID) then 1
else 0
end as HASRESPONSES,
INTERACTIONCATEGORY.NAME as CATEGORY,
INTERACTIONSUBCATEGORY.NAME as SUBCATEGORY,
case
when INTERACTION.PROSPECTPLANID is null then 'b525985b-be02-4f02-a9b8-c110411cf936'
else '6ce4b0e8-cfcf-4f57-94c3-00eea94fb499'
end as VIEWFORMID,
case
when INTERACTION.PROSPECTPLANID is null then dbo.UFN_CONSTITUENTINTERACTION_GETSITELIST(INTERACTION.ID)
else dbo.UFN_PROSPECTPLAN_GETSITELIST(INTERACTION.PROSPECTPLANID)
end as SITES,
INTERACTION.STARTTIME as STARTTIME,
INTERACTION.ENDTIME as ENDTIME,
TIMEZONEENTRY.DISPLAYNAME TIMEZONE,
0 as ISSTEWARDSHIPSTEP,
case
when CONSTITUENT.ISGROUP = 1 then 0
when CONSTITUENT.ISORGANIZATION = 1 then 0
else 1
end as ISINDIVIDUALSTEP,
INTERACTION.EXPECTEDDATE,
INTERACTION.ACTUALDATE,
INTERACTION.EXPECTEDSTARTTIME,
INTERACTION.ACTUALSTARTTIME,
INTERACTION.EXPECTEDENDTIME,
INTERACTION.ACTUALENDTIME,
INTERACTION.COMMENT,
case
when exists(select 1 from dbo.INTERACTIONPARTICIPANT where INTERACTIONPARTICIPANT.INTERACTIONID = INTERACTION.ID) then 1
else 0
end as HASPARTICIPANTS,
INTERACTION.LOCATION
from dbo.INTERACTION
left join dbo.INTERACTIONSUBCATEGORY on INTERACTIONSUBCATEGORY.ID = INTERACTION.INTERACTIONSUBCATEGORYID
left join dbo.INTERACTIONCATEGORY on INTERACTIONCATEGORY.ID = INTERACTIONSUBCATEGORY.INTERACTIONCATEGORYID
inner join dbo.INTERACTIONTYPECODE on INTERACTION.INTERACTIONTYPECODEID = INTERACTIONTYPECODE.ID
left join dbo.TIMEZONEENTRY on INTERACTION.TIMEZONEENTRYID = TIMEZONEENTRY.ID
left join dbo.EVENT on EVENT.ID = INTERACTION.EVENTID
left join dbo.CONSTITUENT on CONSTITUENT.ID = INTERACTION.CONSTITUENTID
inner join dbo.INTERACTIONPARTICIPANT on INTERACTIONPARTICIPANT.INTERACTIONID = INTERACTION.ID
outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(INTERACTION.FUNDRAISERID) OWNERNAME
where
INTERACTIONPARTICIPANT.CONSTITUENTID = @CONSTITUENTID
and INTERACTION.CONSTITUENTID <> @CONSTITUENTID
and INTERACTION.ISINTERACTION = 1
and INTERACTION.STATUSCODE <> 0
and (
INTERACTION.STATUSCODE = @STATUS or
@STATUS is null
)
and (
(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 (@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.PROSPECTPLANID is null 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.PROSPECTPLANID is not null 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
)
)
)
union all
-- Stewardship plan steps for the constituent
select
STEWARDSHIPPLANSTEP.ID,
STEWARDSHIPPLANSTEP.DATE,
STEWARDSHIPPLANSTEP.STATUS,
OWNERNAME.NAME as OWNER,
STEWARDSHIPPLANSTEP.CONSTITUENTID as OWNERID,
STEWARDSHIPPLANSTEP.OBJECTIVE,
INTERACTIONTYPECODE.DESCRIPTION as TYPE,
case
when exists(select 1 from dbo.STEWARDSHIPNOTE where STEWARDSHIPNOTE.STEPID = STEWARDSHIPPLANSTEP.ID)
or exists(select 1 from dbo.STEWARDSHIPATTACHMENT where STEWARDSHIPATTACHMENT.STEPID = STEWARDSHIPPLANSTEP.ID)
or exists(select 1 from dbo.STEWARDSHIPMEDIALINK where STEWARDSHIPMEDIALINK.STEPID = STEWARDSHIPPLANSTEP.ID) then 1
else 0
end as HASDOCUMENTATION,
0 as ISMOVE,
EVENT.NAME EVENT,
0 as HASRESPONSES,
STEWARDSHIPSTEPCATEGORYCODE.DESCRIPTION as CATEGORY,
null as SUBCATEGORY,
'0a9d7c4b-018d-48b5-aa14-589cf6c0d97b' as VIEWFORMID,
dbo.UFN_STEWARDSHIPPLAN_GETSITELIST(STEWARDSHIPPLANSTEP.PLANID) as SITES,
STEWARDSHIPPLANSTEP.STARTTIME as STARTTIME,
STEWARDSHIPPLANSTEP.ENDTIME as ENDTIME,
TIMEZONEENTRY.DISPLAYNAME TIMEZONE,
1 as ISSTEWARDSHIPSTEP,
case
when CONSTITUENT.ISGROUP = 1 then 0
when CONSTITUENT.ISORGANIZATION = 1 then 0
else 1
end as ISINDIVIDUALSTEP,
STEWARDSHIPPLANSTEP.TARGETDATE as EXPECTEDDATE,
STEWARDSHIPPLANSTEP.ACTUALDATE,
STEWARDSHIPPLANSTEP.TARGETSTARTTIME as EXPECTEDSTARTTIME,
STEWARDSHIPPLANSTEP.ACTUALSTARTTIME,
STEWARDSHIPPLANSTEP.TARGETENDTIME as EXPECTEDENDTIME,
STEWARDSHIPPLANSTEP.ACTUALENDTIME,
null,
case
when exists(select 1 from dbo.INTERACTIONPARTICIPANT where INTERACTIONPARTICIPANT.INTERACTIONID = STEWARDSHIPPLANSTEP.ID) then 1
else 0
end as HASPARTICIPANTS,
null as LOCATION
from
dbo.STEWARDSHIPPLANSTEP
inner join dbo.STEWARDSHIPPLAN on STEWARDSHIPPLAN.ID = STEWARDSHIPPLANSTEP.PLANID
left join dbo.STEWARDSHIPSTEPCATEGORYCODE on STEWARDSHIPSTEPCATEGORYCODE.ID = STEWARDSHIPPLANSTEP.CATEGORYCODEID
inner join dbo.INTERACTIONTYPECODE on STEWARDSHIPPLANSTEP.CONTACTMETHODCODEID = INTERACTIONTYPECODE.ID
left join dbo.TIMEZONEENTRY on STEWARDSHIPPLANSTEP.TIMEZONEENTRYID = TIMEZONEENTRY.ID
left join dbo.EVENT on EVENT.ID = STEWARDSHIPPLANSTEP.EVENTID
left join dbo.CONSTITUENT on CONSTITUENT.ID = STEWARDSHIPPLAN.CONSTITUENTID
outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(STEWARDSHIPPLANSTEP.CONSTITUENTID) OWNERNAME
where
STEWARDSHIPPLANSTEP.ISINTERACTION = 1
and STEWARDSHIPPLAN.CONSTITUENTID = @CONSTITUENTID
and
(
case STEWARDSHIPPLANSTEP.STATUSCODE
when 0 then 1
when 1 then 2
when 2 then 4
when 3 then 5
end = @STATUS
or @STATUS is null
)
and (
(STEWARDSHIPPLANSTEP.DATE between @STARTDATE and @ENDDATE) or
(@STARTDATE is null and @ENDDATE is null) or
(STEWARDSHIPPLANSTEP.DATE >= @STARTDATE and @ENDDATE is null) or
(@STARTDATE is null and STEWARDSHIPPLANSTEP.DATE <= @ENDDATE)
) and
(@TYPEFILTER is null or STEWARDSHIPPLANSTEP.CONTACTMETHODCODEID = @TYPEFILTER) and
exists(
select top 1 STEWARDSHIPPLANSTEPSITE.SITEID from dbo.UFN_SITEID_MAPFROM_INTERACTIONID(STEWARDSHIPPLANSTEP.ID) STEWARDSHIPPLANSTEPSITE
where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=STEWARDSHIPPLANSTEPSITE.[SITEID] or (SITEID is null and STEWARDSHIPPLANSTEPSITE.[SITEID] is null)))
)
and (
@SITEFILTERMODE = 0 or
STEWARDSHIPPLANSTEP.PLANID in
(
select STEWARDSHIPPLANSITE.STEWARDSHIPPLANID
from dbo.UFN_SITE_BUILDDATALISTSITEFILTER (@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) SITEFILTER
inner join dbo.STEWARDSHIPPLANSITE on STEWARDSHIPPLANSITE.SITEID = SITEFILTER.SITEID
)
)
union all
-- Stewardship plan steps where the constituent is the contact person
select
STEWARDSHIPPLANSTEP.ID,
STEWARDSHIPPLANSTEP.DATE,
STEWARDSHIPPLANSTEP.STATUS,
OWNERNAME.NAME as OWNER,
STEWARDSHIPPLANSTEP.CONSTITUENTID as OWNERID,
STEWARDSHIPPLANSTEP.OBJECTIVE,
INTERACTIONTYPECODE.DESCRIPTION as TYPE,
case
when exists(select 1 from dbo.STEWARDSHIPNOTE where STEWARDSHIPNOTE.STEPID = STEWARDSHIPPLANSTEP.ID)
or exists(select 1 from dbo.STEWARDSHIPATTACHMENT where STEWARDSHIPATTACHMENT.STEPID = STEWARDSHIPPLANSTEP.ID)
or exists(select 1 from dbo.STEWARDSHIPMEDIALINK where STEWARDSHIPMEDIALINK.STEPID = STEWARDSHIPPLANSTEP.ID) then 1
else 0
end as HASDOCUMENTATION,
0 as ISMOVE,
EVENT.NAME EVENT,
0 as HASRESPONSES,
STEWARDSHIPSTEPCATEGORYCODE.DESCRIPTION as CATEGORY,
null as SUBCATEGORY,
'0a9d7c4b-018d-48b5-aa14-589cf6c0d97b' as VIEWFORMID,
dbo.UFN_STEWARDSHIPPLAN_GETSITELIST(STEWARDSHIPPLANSTEP.PLANID) as SITES,
STEWARDSHIPPLANSTEP.STARTTIME as STARTTIME,
STEWARDSHIPPLANSTEP.ENDTIME as ENDTIME,
TIMEZONEENTRY.DISPLAYNAME TIMEZONE,
1 as ISSTEWARDSHIPSTEP,
case
when CONSTITUENT.ISGROUP = 1 then 0
when CONSTITUENT.ISORGANIZATION = 1 then 0
else 1
end as ISINDIVIDUALSTEP,
STEWARDSHIPPLANSTEP.TARGETDATE as EXPECTEDDATE,
STEWARDSHIPPLANSTEP.ACTUALDATE,
STEWARDSHIPPLANSTEP.TARGETSTARTTIME as EXPECTEDSTARTTIME,
STEWARDSHIPPLANSTEP.ACTUALSTARTTIME,
STEWARDSHIPPLANSTEP.TARGETENDTIME as EXPECTEDENDTIME,
STEWARDSHIPPLANSTEP.ACTUALENDTIME,
null,
case
when exists(select 1 from dbo.INTERACTIONPARTICIPANT where INTERACTIONPARTICIPANT.INTERACTIONID = STEWARDSHIPPLANSTEP.ID) then 1
else 0
end as HASPARTICIPANTS,
null as LOCATION
from dbo.STEWARDSHIPPLANSTEP
inner join dbo.STEWARDSHIPPLAN on STEWARDSHIPPLAN.ID = STEWARDSHIPPLANSTEP.PLANID
left join dbo.STEWARDSHIPSTEPCATEGORYCODE on STEWARDSHIPSTEPCATEGORYCODE.ID = STEWARDSHIPPLANSTEP.CATEGORYCODEID
inner join dbo.INTERACTIONTYPECODE on STEWARDSHIPPLANSTEP.CONTACTMETHODCODEID = INTERACTIONTYPECODE.ID
left join dbo.TIMEZONEENTRY on STEWARDSHIPPLANSTEP.TIMEZONEENTRYID = TIMEZONEENTRY.ID
left join dbo.EVENT on EVENT.ID = STEWARDSHIPPLANSTEP.EVENTID
left join dbo.CONSTITUENT on CONSTITUENT.ID = STEWARDSHIPPLAN.CONSTITUENTID
outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(STEWARDSHIPPLANSTEP.CONSTITUENTID) OWNERNAME
where
STEWARDSHIPPLANSTEP.ISINTERACTION = 1
and STEWARDSHIPPLANSTEP.CONTACTPERSONID = @CONSTITUENTID
and STEWARDSHIPPLAN.CONSTITUENTID <> @CONSTITUENTID
and
(
case STEWARDSHIPPLANSTEP.STATUSCODE
when 0 then 1
when 1 then 2
when 2 then 4
when 3 then 5
end = @STATUS
or @STATUS is null
)
and (
(STEWARDSHIPPLANSTEP.DATE between @STARTDATE and @ENDDATE) or
(@STARTDATE is null and @ENDDATE is null) or
(STEWARDSHIPPLANSTEP.DATE >= @STARTDATE and @ENDDATE is null) or
(@STARTDATE is null and STEWARDSHIPPLANSTEP.DATE <= @ENDDATE)
) and
(@TYPEFILTER is null or STEWARDSHIPPLANSTEP.CONTACTMETHODCODEID = @TYPEFILTER) and
exists(
select top 1 STEWARDSHIPPLANSTEPSITE.SITEID from dbo.UFN_SITEID_MAPFROM_INTERACTIONID(STEWARDSHIPPLANSTEP.ID) STEWARDSHIPPLANSTEPSITE
where (dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID) = 1 or exists (select 1 from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where SITEID=STEWARDSHIPPLANSTEPSITE.[SITEID] or (SITEID is null and STEWARDSHIPPLANSTEPSITE.[SITEID] is null)))
)
and (
@SITEFILTERMODE = 0 or
STEWARDSHIPPLANSTEP.PLANID in
(
select STEWARDSHIPPLANSITE.STEWARDSHIPPLANID
from dbo.UFN_SITE_BUILDDATALISTSITEFILTER (@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED) SITEFILTER
inner join dbo.STEWARDSHIPPLANSITE on STEWARDSHIPPLANSITE.SITEID = SITEFILTER.SITEID
)
)