UFN_GROUPAPPEALLIST_QUERY
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONSTITUENTID | uniqueidentifier | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@DATEFILTER | tinyint | IN | |
@SITEFILTERMODE | tinyint | IN | |
@SITESSELECTED | xml | IN | |
@SECURITYFEATUREID | uniqueidentifier | IN | |
@SECURITYFEATURETYPE | tinyint | IN |
Definition
Copy
CREATE function dbo.UFN_GROUPAPPEALLIST_QUERY (
@CONSTITUENTID uniqueidentifier,
@CURRENTAPPUSERID uniqueidentifier,
@DATEFILTER tinyint = null,
@SITEFILTERMODE tinyint = 0,
@SITESSELECTED xml = null,
@SECURITYFEATUREID uniqueidentifier = null,
@SECURITYFEATURETYPE tinyint = null
)
returns @APPEALS table (
ID uniqueidentifier,
APPEALID uniqueidentifier,
APPEAL nvarchar(200),
NAME nvarchar(200),
DESCRIPTION nvarchar(200),
MAILING nvarchar(200),
LETTER nvarchar(200),
DATESENT datetime,
PACKAGE nvarchar(200),
SOURCECODE nvarchar(200),
SEGMENT nvarchar(200),
TESTSEGMENT nvarchar(200),
FINDERNUMBER bigint,
COMMENTS nvarchar(200),
MKTSEGMENTATIONID uniqueidentifier,
MKTSEGMENTATIONSEGMENTID uniqueidentifier,
TIMEFRAMETEXT nvarchar(200),
TIMEFRAMEGROUPSORT nvarchar(200),
HASPERMISSIONS bit,
HASRESPONSES bit
)
as
begin
declare @ISSYSADMIN bit = 0;
select @ISSYSADMIN = ISSYSADMIN
from dbo.APPUSER
where ID = @CURRENTAPPUSERID;
declare @QUERYVIEWID uniqueidentifier;
set @QUERYVIEWID = '066c74da-220b-401e-8948-5f12820b1066';
declare @USERGRANTEDALLCONSTITUENTS bit = 0;
set @USERGRANTEDALLCONSTITUENTS = dbo.UFN_SECURITY_APPUSER_GRANTED_QUERYVIEW_IN_NONRACROLE(@CURRENTAPPUSERID, @QUERYVIEWID);
if @DATEFILTER is null
begin
set @DATEFILTER = 6;-- current month;
end
declare @STARTDATE datetime;
declare @ENDDATE datetime;
declare @ASOFDATE datetime = getdate();
set @STARTDATE = @ASOFDATE;
set @ENDDATE = @STARTDATE;
-- @DATEFILTER=1 is for today only
if @DATEFILTER = 2
begin
-- Next 7 days
set @ENDDATE = dateadd(day, 7, @ENDDATE);
end
else if @DATEFILTER = 3
begin
-- Last 7 days
set @STARTDATE = dateadd(day, - 7, @STARTDATE);
end
else if @DATEFILTER = 4
begin
-- Next 30 days
set @ENDDATE = dateadd(day, 30, @ENDDATE);
end
else if @DATEFILTER = 5
begin
-- Last 30 days
set @STARTDATE = dateadd(day, - 30, @STARTDATE);
end
else if @DATEFILTER = 6
begin
-- Current month
set @STARTDATE = dbo.UFN_DATE_THISMONTH_FIRSTDAY(@STARTDATE, 0);
set @ENDDATE = dbo.UFN_DATE_THISMONTH_LASTDAY(@ENDDATE, 1);
end
else if @DATEFILTER = 7
begin
-- Previous month
set @STARTDATE = dbo.UFN_DATE_LASTMONTH_FIRSTDAY(@STARTDATE, 0);
set @ENDDATE = dbo.UFN_DATE_LASTMONTH_LASTDAY(@ENDDATE, 1);
end
else if @DATEFILTER = 8
begin
-- Next 12 months
set @ENDDATE = dateadd(year, 1, @ENDDATE);
end
else if @DATEFILTER = 9
begin
-- Last 12 months
set @STARTDATE = dateadd(year, - 1, @STARTDATE);
end
else if @DATEFILTER = 10
begin
-- All dates
set @STARTDATE = '17530102';
set @ENDDATE = '99991230';
end
else if @DATEFILTER = 11
begin
-- Current fiscal year
set @STARTDATE = dbo.UFN_DATE_THISFISCALYEAR_FIRSTDAY(@STARTDATE, 0);
set @ENDDATE = dbo.UFN_DATE_THISFISCALYEAR_LASTDAY(@ENDDATE, 1);
end
else if @DATEFILTER = 12
begin
-- Previous fiscal year
set @STARTDATE = dbo.UFN_DATE_THISFISCALYEAR_FIRSTDAY(dateadd(year, - 1, @STARTDATE), 0);
set @ENDDATE = dbo.UFN_DATE_THISFISCALYEAR_LASTDAY(dateadd(year, - 1, @ENDDATE), 1);
end
else if @DATEFILTER = 13
begin
-- Next fiscal year
set @STARTDATE = dbo.UFN_DATE_THISFISCALYEAR_FIRSTDAY(dateadd(year, 1, @STARTDATE), 0);
set @ENDDATE = dbo.UFN_DATE_THISFISCALYEAR_LASTDAY(dateadd(year, 1, @ENDDATE), 1);
end
else if @DATEFILTER = 14
begin
-- Within 7 days
set @STARTDATE = dateadd(day, - 7, @STARTDATE);
set @ENDDATE = dateadd(day, 7, @ENDDATE);
end
else if @DATEFILTER = 15
begin
-- Within 30 days
set @STARTDATE = dateadd(day, - 30, @STARTDATE);
set @ENDDATE = dateadd(day, 30, @ENDDATE);
end
else if @DATEFILTER = 16
begin
-- This calendar year
set @STARTDATE = dbo.UFN_DATE_THISCALENDARYEAR_FIRSTDAY(@STARTDATE, 0);
set @ENDDATE = dbo.UFN_DATE_THISCALENDARYEAR_LASTDAY(@ENDDATE, 1);
end
else if @DATEFILTER = 17
begin
-- Last calendar year
set @STARTDATE = dbo.UFN_DATE_LASTCALENDARYEAR_FIRSTDAY(@STARTDATE, 0);
set @ENDDATE = dbo.UFN_DATE_LASTCALENDARYEAR_LASTDAY(@ENDDATE, 1);
end
else if @DATEFILTER = 18
begin
-- Next calendar year
set @STARTDATE = dbo.UFN_DATE_NEXTCALENDARYEAR_FIRSTDAY(@STARTDATE, 0);
set @ENDDATE = dbo.UFN_DATE_NEXTCALENDARYEAR_LASTDAY(@ENDDATE, 1);
end
else if @DATEFILTER = 19
begin
-- This week
set @STARTDATE = dbo.UFN_DATE_THISWEEK_FIRSTDAY(@STARTDATE, 0);
set @ENDDATE = dbo.UFN_DATE_THISWEEK_LASTDAY(@ENDDATE, 1);
end
else if @DATEFILTER = 20
begin
-- Last week
set @STARTDATE = dbo.UFN_DATE_LASTWEEK_FIRSTDAY(@STARTDATE, 0);
set @ENDDATE = dbo.UFN_DATE_LASTWEEK_LASTDAY(@ENDDATE, 1);
end
else if @DATEFILTER = 21
begin
-- Next week
set @STARTDATE = dbo.UFN_DATE_NEXTWEEK_FIRSTDAY(@STARTDATE, 0);
set @ENDDATE = dbo.UFN_DATE_NEXTWEEK_LASTDAY(@ENDDATE, 1);
end
else if @DATEFILTER = 22
begin
-- Next month
set @STARTDATE = dbo.UFN_DATE_NEXTMONTH_FIRSTDAY(@STARTDATE, 0);
set @ENDDATE = dbo.UFN_DATE_NEXTMONTH_LASTDAY(@ENDDATE, 1);
end
else if @DATEFILTER = 23
begin
-- This quarter
set @STARTDATE = dbo.UFN_DATE_THISQUARTER_FIRSTDAY(@STARTDATE, 0);
set @ENDDATE = dbo.UFN_DATE_THISQUARTER_LASTDAY(@ENDDATE, 1);
end
else if @DATEFILTER = 24
begin
-- Last quarter
set @STARTDATE = dbo.UFN_DATE_LASTQUARTER_FIRSTDAY(@STARTDATE, 0);
set @ENDDATE = dbo.UFN_DATE_LASTQUARTER_LASTDAY(@ENDDATE, 1);
end
else if @DATEFILTER = 25
begin
-- Next quarter
set @STARTDATE = dbo.UFN_DATE_NEXTQUARTER_FIRSTDAY(@STARTDATE, 0);
set @ENDDATE = dbo.UFN_DATE_NEXTQUARTER_LASTDAY(@ENDDATE, 1);
end
else if @DATEFILTER = 26
begin
--No date assigned
set @STARTDATE = null
set @ENDDATE = null
end
else if @DATEFILTER = 27
begin
--Remainder of the month
set @ENDDATE = dbo.UFN_DATE_THISMONTH_LASTDAY(@ENDDATE, 1);
end
else if @DATEFILTER = 28
begin
--Remainder of this fiscal year
set @ENDDATE = dbo.UFN_DATE_THISFISCALYEAR_LASTDAY(@ENDDATE, 1);
end
else if @DATEFILTER = 29
begin
-- Last 6 months
set @STARTDATE = dateadd(month, - 6, @STARTDATE);
end
else if @DATEFILTER = 30
begin
-- Last 24 months
set @STARTDATE = dateadd(year, - 2, @STARTDATE);
end
set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE);
set @ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@ENDDATE);
declare @CURRENTDATE datetime = getdate();
declare @THISMONTHSTART datetime = dbo.UFN_DATE_THISMONTH_FIRSTDAY(@CURRENTDATE, 0);
declare @LASTMONTHSTART datetime = dateadd(month, - 1, @THISMONTHSTART);
declare @TWOMONTHSAGOSTART datetime = dateadd(month, - 2, @THISMONTHSTART);
with APPEALS_CTE
as (
select CONSTITUENTAPPEAL.ID,
CONSTITUENTAPPEAL.APPEALID,
APPEAL.NAME APPEALNAME,
APPEAL.DESCRIPTION,
CONSTITUENTAPPEAL.DATESENT,
CONSTITUENTAPPEAL.SOURCECODE,
case
when CONSTITUENTAPPEAL.FINDERNUMBER = 0
then null
else CONSTITUENTAPPEAL.FINDERNUMBER
end as FINDERNUMBER,
CONSTITUENTAPPEAL.COMMENTS,
CONSTITUENTAPPEAL.MKTSEGMENTATIONID,
CONSTITUENTAPPEAL.MKTSEGMENTATIONSEGMENTID,
MKTPACKAGE.NAME as PACKAGE,
MKTSEGMENTATION.NAME as MAILING,
MKTSEGMENT.NAME as SEGMENT,
isnull(
(case MKTSEGMENTATIONTESTSEGMENT.PREFIXCODE
when 0 then
-- No prefix
MKTSEGMENTATIONTESTSEGMENT.NAME
when 1 then
-- Segment name
[MKTSEGMENT].[NAME] + ' - ' + [MKTSEGMENTATIONTESTSEGMENT].[NAME]
when 2 then
-- Segment code
[MKTSEGMENT].[CODE] + ' - ' + [MKTSEGMENTATIONTESTSEGMENT].[NAME]
end),
''
) as TESTSEGMENT,
CONSTITUENTAPPEAL.CONSTITUENTID as CONSTITUENTID,
case
when exists (
select 1
from dbo.CONSTITUENTAPPEALRESPONSE
where CONSTITUENTAPPEALRESPONSE.CONSTITUENTAPPEALID = CONSTITUENTAPPEAL.ID
)
then convert(bit, 1)
else convert(bit, 0)
end as HASRESPONSES,
case
when MAILLETTER.ID is not null
then MAILLETTER.NAME + ' (Mail)'
when EMAILLETTER.ID is not null
then EMAILLETTER.NAME + ' (Email)'
else ''
end LETTER,
APPEAL.SITEID as SITEID
from dbo.CONSTITUENTAPPEAL
inner join dbo.APPEAL
on APPEAL.ID = CONSTITUENTAPPEAL.APPEALID
left join dbo.MKTPACKAGE
on MKTPACKAGE.ID = CONSTITUENTAPPEAL.MKTPACKAGEID
left join dbo.MKTSEGMENTATION
on MKTSEGMENTATION.ID = CONSTITUENTAPPEAL.MKTSEGMENTATIONID
inner join dbo.GROUPMEMBER GM
on CONSTITUENTAPPEAL.CONSTITUENTID = GM.MEMBERID
left join dbo.GROUPMEMBERDATERANGE GMDR
on GM.ID = GMDR.GROUPMEMBERID
left join dbo.APPEALMAILINGSETUPLETTER MAILLETTER
on CONSTITUENTAPPEAL.MKTSEGMENTATIONID = MAILLETTER.APPEALMAILINGSETUPID
and CONSTITUENTAPPEAL.MKTPACKAGEID = MAILLETTER.MAILPACKAGEID
left join dbo.APPEALMAILINGSETUPLETTER EMAILLETTER
on CONSTITUENTAPPEAL.MKTSEGMENTATIONID = EMAILLETTER.APPEALMAILINGSETUPID
and CONSTITUENTAPPEAL.MKTPACKAGEID = EMAILLETTER.EMAILPACKAGEID
left join dbo.MKTSEGMENTATIONSEGMENT
on MKTSEGMENTATIONSEGMENT.ID = CONSTITUENTAPPEAL.MKTSEGMENTATIONSEGMENTID
left join dbo.MKTSEGMENT
on MKTSEGMENT.ID = MKTSEGMENTATIONSEGMENT.SEGMENTID
left join dbo.MKTSEGMENTATIONTESTSEGMENT
on MKTSEGMENTATIONTESTSEGMENT.ID = CONSTITUENTAPPEAL.MKTSEGMENTATIONTESTSEGMENTID
left join dbo.MKTSEGMENTATIONSEGMENT TESTSEGMENTATIONSEGMENT
on TESTSEGMENTATIONSEGMENT.ID = MKTSEGMENTATIONTESTSEGMENT.SEGMENTID
left join MKTSEGMENT TESTSEGMENT
on TESTSEGMENT.ID = TESTSEGMENTATIONSEGMENT.SEGMENTID
where GM.GROUPID = @CONSTITUENTID
and (
(
GMDR.DATEFROM is null
and (
GMDR.DATETO is null
or GMDR.DATETO >= CONSTITUENTAPPEAL.DATESENT
)
)
or (
GMDR.DATETO is null
and (
GMDR.DATEFROM is null
or GMDR.DATEFROM <= CONSTITUENTAPPEAL.DATESENT
)
)
or (
GMDR.DATEFROM <= CONSTITUENTAPPEAL.DATESENT
and GMDR.DATETO >= CONSTITUENTAPPEAL.DATESENT
)
)
and (
CONSTITUENTAPPEAL.DATESENT between @STARTDATE
and @ENDDATE
or CONSTITUENTAPPEAL.DATESENT is null
)
union all
select CONSTITUENTAPPEAL.ID,
CONSTITUENTAPPEAL.APPEALID,
APPEAL.NAME APPEALNAME,
APPEAL.DESCRIPTION,
CONSTITUENTAPPEAL.DATESENT,
CONSTITUENTAPPEAL.SOURCECODE,
case
when CONSTITUENTAPPEAL.FINDERNUMBER = 0
then null
else CONSTITUENTAPPEAL.FINDERNUMBER
end as FINDERNUMBER,
CONSTITUENTAPPEAL.COMMENTS,
CONSTITUENTAPPEAL.MKTSEGMENTATIONID,
CONSTITUENTAPPEAL.MKTSEGMENTATIONSEGMENTID,
MKTPACKAGE.NAME as PACKAGE,
MKTSEGMENTATION.NAME as MAILING,
MKTSEGMENT.NAME as SEGMENT,
isnull(
(case MKTSEGMENTATIONTESTSEGMENT.PREFIXCODE
when 0 then
-- No prefix
MKTSEGMENTATIONTESTSEGMENT.NAME
when 1 then
-- Segment name
[MKTSEGMENT].[NAME] + ' - ' + [MKTSEGMENTATIONTESTSEGMENT].[NAME]
when 2 then
-- Segment code
[MKTSEGMENT].[CODE] + ' - ' + [MKTSEGMENTATIONTESTSEGMENT].[NAME]
end),
''
) as TESTSEGMENT,
CONSTITUENTAPPEAL.CONSTITUENTID as CONSTITUENTID,
case
when exists (
select 1
from dbo.CONSTITUENTAPPEALRESPONSE
where CONSTITUENTAPPEALRESPONSE.CONSTITUENTAPPEALID = CONSTITUENTAPPEAL.ID
)
then convert(bit, 1)
else convert(bit, 0)
end as HASRESPONSES,
case
when MAILLETTER.ID is not null
then MAILLETTER.NAME + ' (Mail)'
when EMAILLETTER.ID is not null
then EMAILLETTER.NAME + ' (Email)'
else ''
end LETTER,
APPEAL.SITEID as SITEID
from dbo.CONSTITUENTAPPEAL
inner join dbo.APPEAL
on APPEAL.ID = CONSTITUENTAPPEAL.APPEALID
left join dbo.MKTPACKAGE
on MKTPACKAGE.ID = CONSTITUENTAPPEAL.MKTPACKAGEID
left join dbo.MKTSEGMENTATION
on MKTSEGMENTATION.ID = CONSTITUENTAPPEAL.MKTSEGMENTATIONID
left join dbo.APPEALMAILINGSETUPLETTER MAILLETTER
on CONSTITUENTAPPEAL.MKTSEGMENTATIONID = MAILLETTER.APPEALMAILINGSETUPID
and CONSTITUENTAPPEAL.MKTPACKAGEID = MAILLETTER.MAILPACKAGEID
left join dbo.APPEALMAILINGSETUPLETTER EMAILLETTER
on CONSTITUENTAPPEAL.MKTSEGMENTATIONID = EMAILLETTER.APPEALMAILINGSETUPID
and CONSTITUENTAPPEAL.MKTPACKAGEID = EMAILLETTER.EMAILPACKAGEID
left join dbo.MKTSEGMENTATIONSEGMENT
on MKTSEGMENTATIONSEGMENT.ID = CONSTITUENTAPPEAL.MKTSEGMENTATIONSEGMENTID
left join dbo.MKTSEGMENT
on MKTSEGMENT.ID = MKTSEGMENTATIONSEGMENT.SEGMENTID
left join dbo.MKTSEGMENTATIONTESTSEGMENT
on MKTSEGMENTATIONTESTSEGMENT.ID = CONSTITUENTAPPEAL.MKTSEGMENTATIONTESTSEGMENTID
left join dbo.MKTSEGMENTATIONSEGMENT TESTSEGMENTATIONSEGMENT
on TESTSEGMENTATIONSEGMENT.ID = MKTSEGMENTATIONTESTSEGMENT.SEGMENTID
left join MKTSEGMENT TESTSEGMENT
on TESTSEGMENT.ID = TESTSEGMENTATIONSEGMENT.SEGMENTID
where CONSTITUENTAPPEAL.CONSTITUENTID = @CONSTITUENTID
and (
CONSTITUENTAPPEAL.DATESENT between @STARTDATE
and @ENDDATE
or CONSTITUENTAPPEAL.DATESENT is null
)
)
insert into @APPEALS
select C.ID,
APPEALID,
APPEALNAME,
NF.NAME CONSTITUENTNAME,
DESCRIPTION,
MAILING,
LETTER,
DATESENT,
PACKAGE,
SOURCECODE,
SEGMENT,
TESTSEGMENT,
FINDERNUMBER,
COMMENTS,
MKTSEGMENTATIONID,
MKTSEGMENTATIONSEGMENTID,
case
when C.DATESENT >= @THISMONTHSTART
then 'This month'
when C.DATESENT >= @LASTMONTHSTART
then 'Last month'
when C.DATESENT >= @TWOMONTHSAGOSTART
then 'Two months ago'
else 'Older'
end TIMEFRAMETEXT,
case
when C.DATESENT >= @THISMONTHSTART
then '0'
when C.DATESENT >= @LASTMONTHSTART
then '2'
when C.DATESENT >= @TWOMONTHSAGOSTART
then '4'
else '6'
end TIMEFRAMEGROUPSORT,
case
when @ISSYSADMIN = 1
or @USERGRANTEDALLCONSTITUENTS = 1
or CONSTITSECURITY.ID is not null
then 1
else 0
end as 'HASPERMISSIONS',
HASRESPONSES
from APPEALS_CTE C
left join dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITIDS_FORQUERYVIEW(@CURRENTAPPUSERID, @QUERYVIEWID) CONSTITSECURITY
on CONSTITSECURITY.ID = C.CONSTITUENTID
outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(C.CONSTITUENTID) NF
where (
--Apply site filter
(
@ISSYSADMIN = 1
and @SITEFILTERMODE <> 3
)
or @SITEFILTERMODE = 0
or C.SITEID in (
select SITEID
from dbo.UFN_SITE_BUILDDATALISTSITEFILTER(@CURRENTAPPUSERID, @SITEFILTERMODE, @SITESSELECTED)
)
)
order by TIMEFRAMEGROUPSORT asc,
APPEALNAME asc;
return;
end