USP_DATALIST_CONSTITUENT_PENDINGINTERACTIONS
List of pending interactions for a given constituent.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONSTITUENTID | uniqueidentifier | IN | Input parameter indicating the context ID for the data list. |
@DATEFILTER | tinyint | IN | Date |
@STARTDATE | datetime | IN | Start date |
@ENDDATE | datetime | IN | End date |
@TYPEFILTER | uniqueidentifier | IN | Contact method |
@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. |
@SHOWCOMPLETED | bit | IN | Show completed interactions |
Definition
Copy
CREATE procedure dbo.USP_DATALIST_CONSTITUENT_PENDINGINTERACTIONS(
@CONSTITUENTID uniqueidentifier,
@DATEFILTER tinyint = 0,
@STARTDATE datetime = null,
@ENDDATE datetime = null,
@TYPEFILTER uniqueidentifier = null,
@CURRENTAPPUSERID uniqueidentifier = null,
@SITEFILTERMODE tinyint = 0,
@SITESSELECTED xml = null,
@SECURITYFEATUREID uniqueidentifier = null,
@SECURITYFEATURETYPE tinyint = null,
@SHOWCOMPLETED bit = 0
)
as begin
set nocount on;
declare @DATE datetime;
set @DATE = getdate();
if @DATEFILTER = 0 -- all
begin
set @STARTDATE = null;
set @ENDDATE = null;
end
else if @DATEFILTER = 1 -- this year
begin
set @STARTDATE = dbo.UFN_DATE_THISCALENDARYEAR_FIRSTDAY(@DATE, 0);
set @ENDDATE = dbo.UFN_DATE_THISCALENDARYEAR_LASTDAY(@DATE, 0);
end
else if @DATEFILTER = 2 -- this quarter
begin
set @STARTDATE = dbo.UFN_DATE_THISQUARTER_FIRSTDAY(@DATE, 0);
set @ENDDATE = dbo.UFN_DATE_THISQUARTER_LASTDAY(@DATE, 0);
end
else if @DATEFILTER = 3 -- this month
begin
set @STARTDATE = dbo.UFN_DATE_THISMONTH_FIRSTDAY(@DATE, 0);
set @ENDDATE = dbo.UFN_DATE_THISMONTH_LASTDAY(@DATE, 0);
end
else if @DATEFILTER = 4 -- this week
begin
set @STARTDATE = dbo.UFN_DATE_THISWEEK_FIRSTDAY(@DATE, 0);
set @ENDDATE = dbo.UFN_DATE_THISWEEK_LASTDAY(@DATE, 0);
end
else if @DATEFILTER = 5 -- next week
begin
set @STARTDATE = dbo.UFN_DATE_NEXTWEEK_FIRSTDAY(@DATE, 0);
set @ENDDATE = dbo.UFN_DATE_NEXTWEEK_LASTDAY(@DATE, 0);
end
else if @DATEFILTER = 6 -- next month
begin
set @STARTDATE = dbo.UFN_DATE_NEXTMONTH_FIRSTDAY(@DATE, 0);
set @ENDDATE = dbo.UFN_DATE_NEXTMONTH_LASTDAY(@DATE, 0);
end
else if @DATEFILTER = 7 -- next quarter
begin
set @STARTDATE = dbo.UFN_DATE_NEXTQUARTER_FIRSTDAY(@DATE, 0);
set @ENDDATE = dbo.UFN_DATE_NEXTQUARTER_LASTDAY(@DATE, 0);
end
else if @DATEFILTER = 8 -- next year
begin
set @STARTDATE = dbo.UFN_DATE_NEXTCALENDARYEAR_FIRSTDAY(@DATE, 0);
set @ENDDATE = dbo.UFN_DATE_NEXTCALENDARYEAR_LASTDAY(@DATE, 0);
end;
-- 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,
0 as ISSTEWARDSHIPSTEP,
case
when CONSTITUENT.ISGROUP = 1 then 0
when CONSTITUENT.ISORGANIZATION = 1 then 0
else 1
end as ISINDIVIDUALSTEP
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.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
(
(@STARTDATE is null or INTERACTION.DATE >= @STARTDATE)
and (@ENDDATE is null or INTERACTION.DATE <= @ENDDATE)
) and
(@TYPEFILTER is null or INTERACTION.INTERACTIONTYPECODEID = @TYPEFILTER) and
(
@SHOWCOMPLETED = 1
or INTERACTION.STATUSCODE <> 2 -- Completed
) 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 not 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 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,
0 as ISSTEWARDSHIPSTEP,
case
when CONSTITUENT.ISGROUP = 1 then 0
when CONSTITUENT.ISORGANIZATION = 1 then 0
else 1
end as ISINDIVIDUALSTEP
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.EVENT on EVENT.ID = INTERACTION.EVENTID
left join dbo.CONSTITUENT on CONSTITUENT.ID = INTERACTION.CONSTITUENTID
outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(INTERACTION.FUNDRAISERID) OWNERNAME
inner join dbo.INTERACTIONPARTICIPANT on INTERACTIONPARTICIPANT.INTERACTIONID = INTERACTION.ID
where
INTERACTION.ISINTERACTION = 1 and
INTERACTION.STATUSCODE <> 0 and
INTERACTIONPARTICIPANT.CONSTITUENTID = @CONSTITUENTID and
INTERACTION.CONSTITUENTID <> @CONSTITUENTID and
(
(@STARTDATE is null or INTERACTION.DATE >= @STARTDATE)
and (@ENDDATE is null or INTERACTION.DATE <= @ENDDATE)
) and
(@TYPEFILTER is null or INTERACTION.INTERACTIONTYPECODEID = @TYPEFILTER) and
(
@SHOWCOMPLETED = 1
or INTERACTION.STATUSCODE <> 2 -- Completed
) 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 not 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 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,
1 as ISSTEWARDSHIPSTEP,
case
when CONSTITUENT.ISGROUP = 1 then 0
when CONSTITUENT.ISORGANIZATION = 1 then 0
else 1
end as ISINDIVIDUALSTEP
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.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
(
(@STARTDATE is null or STEWARDSHIPPLANSTEP.DATE >= @STARTDATE)
and (@ENDDATE is null or STEWARDSHIPPLANSTEP.DATE <= @ENDDATE)
) and
(@TYPEFILTER is null or STEWARDSHIPPLANSTEP.CONTACTMETHODCODEID = @TYPEFILTER) and
(
@SHOWCOMPLETED = 1
or STEWARDSHIPPLANSTEP.STATUSCODE <> 1 -- Completed (Different for stewardship plans and interactions)
) 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,
1 as ISSTEWARDSHIPSTEP,
case
when CONSTITUENT.ISGROUP = 1 then 0
when CONSTITUENT.ISORGANIZATION = 1 then 0
else 1
end as ISINDIVIDUALSTEP
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.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
(
(@STARTDATE is null or STEWARDSHIPPLANSTEP.DATE >= @STARTDATE)
and (@ENDDATE is null or STEWARDSHIPPLANSTEP.DATE <= @ENDDATE)
) and
(@TYPEFILTER is null or STEWARDSHIPPLANSTEP.CONTACTMETHODCODEID = @TYPEFILTER) and
(
@SHOWCOMPLETED = 1
or STEWARDSHIPPLANSTEP.STATUSCODE <> 1 -- Completed (Different for stewardship plans and interactions)
) 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
)
)
)
order by
[DATE];
end