USP_CONSTITUENTGROUP_INTERACTIONCOUNT
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@GROUPID | uniqueidentifier | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@SECURITYFEATUREID | uniqueidentifier | IN | |
@SECURITYFEATURETYPE | tinyint | IN | |
@INTERACTIONCOUNT | int | INOUT |
Definition
Copy
create procedure dbo.USP_CONSTITUENTGROUP_INTERACTIONCOUNT
(
@GROUPID uniqueidentifier,
@CURRENTAPPUSERID uniqueidentifier,
@SECURITYFEATUREID uniqueidentifier = null,
@SECURITYFEATURETYPE tinyint = null,
@INTERACTIONCOUNT int = null output
)
as
begin
-- 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
);
create nonclustered index [IX_#CONSTITUENTGROUPINTERACTION2_GROUPORMEMBERCONSTITUENT_ID]
on #CONSTITUENTGROUPINTERACTION2_GROUPORMEMBERCONSTITUENT (ID) include (DATEFROM, DATETO);
insert into #CONSTITUENTGROUPINTERACTION2_GROUPORMEMBERCONSTITUENT
select
CONSTITUENT.ID as ID,
GROUPMEMBERDATERANGE.DATEFROM,
GROUPMEMBERDATERANGE.DATETO
from dbo.GROUPMEMBER
inner join dbo.CONSTITUENT on CONSTITUENT.ID = GROUPMEMBER.MEMBERID
left join dbo.GROUPMEMBERDATERANGE on GROUPMEMBERDATERANGE.GROUPMEMBERID = GROUPMEMBER.ID
where GROUPMEMBER.GROUPID = @GROUPID
union all
select
@GROUPID,
null as DATEFROM,
null as DATETO;
declare @INTERACTIONFORGROUPORMEMBER table
(
ID uniqueidentifier,
LINKEDTHROUGHCONSTITUENTID uniqueidentifier,
unique clustered(ID, LINKEDTHROUGHCONSTITUENTID)
);
insert into @INTERACTIONFORGROUPORMEMBER
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;
select
@INTERACTIONCOUNT = count(INTERACTION.ID)
from @INTERACTIONFORGROUPORMEMBER GROUPINTERACTION
inner join dbo.V_CONSTITUENT_INTERACTION INTERACTION on GROUPINTERACTION.ID = INTERACTION.ID
inner join #CONSTITUENTGROUPINTERACTION2_GROUPORMEMBERCONSTITUENT CONSTITUENT on GROUPINTERACTION.LINKEDTHROUGHCONSTITUENTID = CONSTITUENT.ID
where
(
(
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
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
)
)
)
);
drop table #CONSTITUENTGROUPINTERACTION2_GROUPORMEMBERCONSTITUENT;
end