UFN_SMARTQUERY_CONSTITUENT_LASTINTERACTION
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SELECTIONID | uniqueidentifier | IN | |
@INTERACTIONCATEGORYID | uniqueidentifier | IN | |
@DATEOPTION | tinyint | IN | |
@DATENUMBER | int | IN | |
@DATEFACTOR | tinyint | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@MAXROWS | int | IN |
Definition
Copy
create function dbo.UFN_SMARTQUERY_CONSTITUENT_LASTINTERACTION(
@SELECTIONID uniqueidentifier = null,
@INTERACTIONCATEGORYID uniqueidentifier = null,
@DATEOPTION tinyint = 0, --0=less than , 1=greater than
@DATENUMBER int = null,
@DATEFACTOR tinyint = 0, --0=days, 1=weeks, 2=months, 3=years
@CURRENTAPPUSERID uniqueidentifier=null,
@MAXROWS int=500
)
returns @T table (
ID uniqueidentifier not null,
NAME nvarchar(154),
ADDRESSBLOCK nvarchar(150),
CITY nvarchar(50),
STATE nvarchar(50),
POSTCODE nvarchar(12),
INTERACTIONDATE datetime,
INTERACTIONCATEGORY nvarchar(100),
INTERACTIONOWNER nvarchar(154),
ELAPSEDYEARS int,
ELAPSEDMONTHS int,
ELAPSEDDAYS int
)
as
begin
declare @ISADMIN bit;
set @ISADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID);
declare @CURRENTDATE datetime;
set @CURRENTDATE = getdate();
--build threshold date
declare @BOUNDDATE datetime
select @BOUNDDATE = case @DATEFACTOR
when 0 then dateadd(day, (@DATENUMBER * -1), @CURRENTDATE)
when 1 then dateadd(week, (@DATENUMBER * -1), @CURRENTDATE)
when 2 then dateadd(month, (@DATENUMBER * -1), @CURRENTDATE)
when 3 then dateadd(year, (@DATENUMBER * -1), @CURRENTDATE)
end;
with CTE_INTERACTION(INTERACTIONID,CONSTITUENTID,ACTUALDATE,ROWNUMBER)
as( --All the interactions that the current user has rights to and that meet the query parameters
select
INTERACTION.ID,
CONSTITUENTID,
ACTUALDATE,
row_number() over (partition by CONSTITUENTID order by ACTUALDATE desc) as ROWNUMBER
from
dbo.INTERACTION
left join
dbo.UFN_IDSETREADER_GETRESULTS_GUID(@SELECTIONID) SELECTION on SELECTION.ID = INTERACTION.CONSTITUENTID
where
(@SELECTIONID is null or
SELECTION.ID is not null
) and
INTERACTION.ACTUALDATE <= @CURRENTDATE and
(@INTERACTIONCATEGORYID is null
or exists(
select
sub.ID
from
dbo.INTERACTIONSUBCATEGORY sub
where
sub.INTERACTIONCATEGORYID = @INTERACTIONCATEGORYID and
INTERACTION.INTERACTIONSUBCATEGORYID = sub.ID
)
)
and(
(@DATEOPTION = 0
and INTERACTION.ACTUALDATE >= @BOUNDDATE
)
or(@DATEOPTION = 1
and INTERACTION.ACTUALDATE < @BOUNDDATE
)
)
and
(@ISADMIN = 1
or (
(dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_FORCONSTIT(@CURRENTAPPUSERID, 'D0469653-1429-4287-B521-39700D442831', INTERACTION.CONSTITUENTID) = 1)
and
(dbo.UFN_SECURITY_APPUSER_GRANTED_SMARTQUERY_FORCONSTIT_BYSITE(@CURRENTAPPUSERID, 'D0469653-1429-4287-B521-39700D442831', INTERACTION.CONSTITUENTID) = 1)
and
(
select
count(*)
from
dbo.UFN_SITEID_MAPFROM_INTERACTIONID(INTERACTION.ID) INTERACTIONSITE
where
exists (
select
1
from
dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID, 'D0469653-1429-4287-B521-39700D442831', 9)
where
SITEID=[INTERACTIONSITE].[SITEID]
or
(SITEID is null and [INTERACTIONSITE].[SITEID] is null)
)
) > 0
)
)
)
insert into @T
select top (@MAXROWS)
CONSTITUENT.ID,
CONSTITUENT.NAME,
ADDRESS.ADDRESSBLOCK,
ADDRESS.CITY,
STATE.DESCRIPTION,
ADDRESS.POSTCODE,
INTERACTION.ACTUALDATE,
INTERACTIONCATEGORY.NAME,
dbo.UFN_CONSTITUENT_BUILDNAME(INTERACTION.FUNDRAISERID),
datediff(yy, INTERACTION.ACTUALDATE, @CURRENTDATE),
datediff(m, INTERACTION.ACTUALDATE, @CURRENTDATE),
datediff(d, INTERACTION.ACTUALDATE, @CURRENTDATE)
from CTE_INTERACTION
inner join dbo.CONSTITUENT on CONSTITUENT.ID = CTE_INTERACTION.CONSTITUENTID
inner join dbo.INTERACTION on CTE_INTERACTION.INTERACTIONID = INTERACTION.ID
left outer join dbo.INTERACTIONSUBCATEGORY on INTERACTIONSUBCATEGORY.ID = INTERACTION.INTERACTIONSUBCATEGORYID
left outer join dbo.INTERACTIONCATEGORY on INTERACTIONCATEGORY.ID = INTERACTIONSUBCATEGORY.INTERACTIONCATEGORYID
left outer join dbo.ADDRESS on ADDRESS.CONSTITUENTID = CONSTITUENT.ID and ADDRESS.ISPRIMARY = 1
left outer join dbo.STATE on STATE.ID = ADDRESS.STATEID
where
CTE_INTERACTION.ROWNUMBER = 1
order by
CONSTITUENT.NAME;
return;
end;