USP_DATALIST_CONSTITUENTDATAREVIEW
This datalist returns changes to email and addresses.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@TYPECODEID | int | IN | Type |
@CHANGEAGENT | nvarchar(128) | IN | User |
@DATERANGE | int | IN | Date |
@INCLUDEUNASSIGNED | bit | IN | Include unassigned |
@STARTDATE | datetime | IN | From |
@ENDDATE | datetime | IN | To |
@CURRENTAPPUSERID | uniqueidentifier | IN | Input parameter indicating the ID of the current user. |
@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. |
@MAXROWS | int | IN | Input parameter indicating the maximum number of rows to return. |
@RECORDID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_DATALIST_CONSTITUENTDATAREVIEW
(
@TYPECODEID int = null,
@CHANGEAGENT nvarchar(128) = null,
@DATERANGE int = null,
@INCLUDEUNASSIGNED bit = 0,
@STARTDATE datetime = null,
@ENDDATE datetime = null,
@CURRENTAPPUSERID uniqueidentifier = null,
@SECURITYFEATUREID uniqueidentifier = null,
@SECURITYFEATURETYPE tinyint = null,
@MAXROWS int,
@RECORDID uniqueidentifier = null
)
with execute as owner
as
set nocount on;
declare @ISADMIN bit;
set @ISADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID);
if @MAXROWS > 500 set @MAXROWS = 500;
declare @FUNDRAISERID uniqueidentifier;
set @FUNDRAISERID = dbo.UFN_CONSTITUENT_GETIDFROMAPPUSERID(@CURRENTAPPUSERID);
-- turn off all filters if viewing record history
if @RECORDID is not null
begin
set @DATERANGE = 10;
set @CHANGEAGENT = null;
end
declare @APPLYDATEFILTER bit = 1;
if @DATERANGE = 0
begin
set @STARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(@STARTDATE);
set @ENDDATE = dbo.UFN_DATE_GETLATESTTIME(@ENDDATE);
end
else
begin
if @DATERANGE = 10
set @APPLYDATEFILTER = 0;
else
exec dbo.USP_RESOLVEDATEFILTER @DATERANGE, @STARTDATE output, @ENDDATE output;
end
declare @EMAILSQL nvarchar(max)
if coalesce(@TYPECODEID, 1) = 1
set @EMAILSQL = dbo.UFN_CONSTITUENT_BUILDRECENTCHANGESQUERY('EMAILADDRESS',
'<DISPLAYTABLE>.EMAILADDRESS',
@RECORDID,
@CHANGEAGENT,
@INCLUDEUNASSIGNED,
@FUNDRAISERID,
'Email',
'Email',
'B1569ADE-ACEA-40EC-A52B-F9D5DBD9AA33',
'5B4DB500-90D5-4FAD-BD8D-ABB14D35D5AC',
'5B4DB500-90D5-4FAD-BD8D-ABB14D35D5AC',
'69520774-D096-49FE-BD4D-FF26B7D83658',
@ISADMIN,
@APPLYDATEFILTER)
declare @ADDRESSSQL nvarchar(max)
if coalesce(@TYPECODEID, 2) = 2
set @ADDRESSSQL = dbo.UFN_CONSTITUENT_BUILDRECENTCHANGESQUERY( 'ADDRESS',
'replace(replace(dbo.UFN_BUILDFULLADDRESS(null, <DISPLAYTABLE>.ADDRESSBLOCK, <DISPLAYTABLE>.CITY, <DISPLAYTABLE>.STATEID, <DISPLAYTABLE>.POSTCODE, <DISPLAYTABLE>.COUNTRYID), char(10), '' ''), char(13), '''')',
@RECORDID,
@CHANGEAGENT,
@INCLUDEUNASSIGNED,
@FUNDRAISERID,
'Address',
'Address',
'110E4587-C7E4-442D-BF18-9502E02C3976',
'1AF9ED37-36D8-4B82-A6C7-29747D49757D',
'1AF9ED37-36D8-4B82-A6C7-29747D49757D',
'1C3F93CF-B73C-47F4-BAF2-305DF944812C',
@ISADMIN,
@APPLYDATEFILTER)
declare @PHONESQL nvarchar(max)
if coalesce(@TYPECODEID, 3) = 3
set @PHONESQL = dbo.UFN_CONSTITUENT_BUILDRECENTCHANGESQUERY('PHONE',
'<DISPLAYTABLE>.NUMBER',
@RECORDID,
@CHANGEAGENT,
@INCLUDEUNASSIGNED,
@FUNDRAISERID,
'Phone',
'Phone',
'748CCA16-4A1F-475D-BD94-150AD804ADCF',
'3925553C-FA64-4BB1-ABAB-6BD2552B1FB9',
'3925553C-FA64-4BB1-ABAB-6BD2552B1FB9',
'7796E11E-F191-4B2B-86F5-3BAC29FD527E',
@ISADMIN,
@APPLYDATEFILTER)
-- Make sure at least one section is included
if @EMAILSQL is not null or @ADDRESSSQL is not null or @PHONESQL is not null
begin
declare @COMBINEDSQL nvarchar(max) = '
select top(@MAXROWS)
RECORDID,
AUDITID,
VIEWFORMID,
coalesce(AUDITKEY, RECORDID) as VIEWCONTEXTID,
[UPDATES].CONSTITUENTID,
CONSTITUENT.NAME + '' ('' + CONSTITUENT.LOOKUPID + '')'' NAME,
[TYPE],
CHANGEAGENT.USERNAME,
CHANGEDATE,
case EDITTYPECODE
when 1 then ''Edit''
when 2 then ''Delete''
else ''Add'' end as EDITTYPE,
[DISPLAY],
LASTCHANGE,
ROWEXISTS,
ROLLBACKTODATE,
ROLLBACKREASON
from
( ' + char(13)
declare @NEEDSUNIONALL bit = 0
if @EMAILSQL is not null
begin
set @COMBINEDSQL = @COMBINEDSQL + @EMAILSQL + char(13)
set @NEEDSUNIONALL = 1
end
if @ADDRESSSQL is not null
begin
if @NEEDSUNIONALL = 1
set @COMBINEDSQL = @COMBINEDSQL + ' union all ' + char(13)
set @COMBINEDSQL = @COMBINEDSQL + @ADDRESSSQL + char(13)
set @NEEDSUNIONALL = 1
end
if @PHONESQL is not null
begin
if @NEEDSUNIONALL = 1
set @COMBINEDSQL = @COMBINEDSQL + ' union all ' + char(13)
set @COMBINEDSQL = @COMBINEDSQL + @PHONESQL + char(13)
end
set @COMBINEDSQL = @COMBINEDSQL + ') as UPDATES
inner join dbo.CONSTITUENT on UPDATES.CONSTITUENTID = CONSTITUENT.ID
inner join dbo.CHANGEAGENT on UPDATES.CHANGEAGENTID = CHANGEAGENT.ID
order by CHANGEDATE desc
option (recompile)'
declare @SQLCOMMONJOINS nvarchar(max) = '';
declare @SQLCOMMONPREDICATES nvarchar(max) = '';
if @RECORDID is null
begin
set @SQLCOMMONJOINS = ' left join dbo.RELATIONSHIPMANAGER on RELATIONSHIPMANAGER.CONSTITUENTID = CONSTITUENT.ID ' + char(13);
end
if coalesce(@CHANGEAGENT, '') <> ''
begin
set @SQLCOMMONJOINS = @SQLCOMMONJOINS + ' left join dbo.CHANGEAGENT on CHANGEAGENT.ID = BASETABLE.AUDITCHANGEAGENTID ' + char(13);
set @SQLCOMMONPREDICATES = ' and CHANGEAGENT.ID in (select ID from dbo.CHANGEAGENT where USERNAME = @CHANGEAGENT) ' + char(13)
end
if @APPLYDATEFILTER = 1
begin
set @SQLCOMMONPREDICATES = @SQLCOMMONPREDICATES + ' and BASETABLE.AUDITDATE between @STARTDATE and @ENDDATE' + char(13);
end
if @ISADMIN = 0
begin
set @SQLCOMMONPREDICATES = @SQLCOMMONPREDICATES + '
and
(
dbo.UFN_SECURITY_APPUSER_GRANTED_DATALIST_FORCONSTIT(@CURRENTAPPUSERID, @SECURITYFEATUREID, BASETABLE.CONSTITUENTID) = 1 and
exists
(
select 1 from dbo.UFN_SITEID_MAPFROM_CONSTITUENTID(BASETABLE.CONSTITUENTID) as CONSTITUENTSITE
where
exists
(
select 1
from dbo.UFN_SITESFORUSERONFEATURE(@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE)
where
SITEID= CONSTITUENTSITE.[SITEID] or
(
SITEID is null and CONSTITUENTSITE.[SITEID] is null
)
)
)
) ' + char(13)
end
if @RECORDID is not null
begin
set @SQLCOMMONPREDICATES = @SQLCOMMONPREDICATES + ' and BASETABLE.AUDITRECORDID = @RECORDID ' + char(13);
end
else
begin
if @FUNDRAISERID is not null and @INCLUDEUNASSIGNED = 1
set @SQLCOMMONPREDICATES = @SQLCOMMONPREDICATES + '
and
(
RELATIONSHIPMANAGER.FUNDRAISERID = @FUNDRAISERID or
RELATIONSHIPMANAGER.ID is null
) ' + char(13);
else if @FUNDRAISERID is not null
set @SQLCOMMONPREDICATES = @SQLCOMMONPREDICATES + ' and RELATIONSHIPMANAGER.FUNDRAISERID = @FUNDRAISERID ' + char(13);
else if @INCLUDEUNASSIGNED = 1
set @SQLCOMMONPREDICATES = @SQLCOMMONPREDICATES + ' and RELATIONSHIPMANAGER.ID is null ' + char(13);
end
--This is used when looking for edits to address/email/phone records. Using a temp table rather than a sub-select improves performance.
declare @TEMPTABLESQL nvarchar(max) = '
declare @<BASETABLE>EDITBASETABLE table (
AUDITRECORDID uniqueidentifier,
AUDITID uniqueidentifier,
AUDITKEY uniqueidentifier,
CONSTITUENTID uniqueidentifier,
AUDITCHANGEAGENTID uniqueidentifier,
AUDITDATE datetime
);
insert into @<BASETABLE>EDITBASETABLE
select top(@MAXROWS)
BASETABLE.AUDITRECORDID,
BASETABLE.AUDITID,
BASETABLE.AUDITKEY,
BASETABLE.CONSTITUENTID,
BASETABLE.AUDITCHANGEAGENTID,
BASETABLE.AUDITDATE
from
dbo.<BASETABLE>AUDIT as BASETABLE
inner join dbo.CONSTITUENT on BASETABLE.CONSTITUENTID = CONSTITUENT.ID '
+ @SQLCOMMONJOINS + '
where
BASETABLE.AUDITTYPECODE = 0
and CONSTITUENT.ISCONSTITUENT = 1 '
+ @SQLCOMMONPREDICATES + char(13) + '
order by
BASETABLE.AUDITDATE desc;
'
if @ADDRESSSQL is not null
begin
declare @ADDRESSTEMPTABLESQL nvarchar(max) = replace(@TEMPTABLESQL, '<BASETABLE>', 'ADDRESS');
set @COMBINEDSQL = @ADDRESSTEMPTABLESQL + char(13) + @COMBINEDSQL;
end
if @EMAILSQL is not null
begin
declare @EMAILADDRESSTEMPTABLESQL nvarchar(max) = replace(@TEMPTABLESQL, '<BASETABLE>', 'EMAILADDRESS');
set @COMBINEDSQL = @EMAILADDRESSTEMPTABLESQL + char(13) + @COMBINEDSQL;
end
if @PHONESQL is not null
begin
declare @PHONETEMPTABLESQL nvarchar(max) = replace(@TEMPTABLESQL, '<BASETABLE>', 'PHONE');
set @COMBINEDSQL = @PHONETEMPTABLESQL + char(13) + @COMBINEDSQL;
end
exec sp_executesql @COMBINEDSQL,
N'@CHANGEAGENT nvarchar(128) = null,
@DATERANGE int,
@INCLUDEUNASSIGNED bit,
@STARTDATE datetime,
@ENDDATE datetime,
@CURRENTAPPUSERID uniqueidentifier,
@SECURITYFEATUREID uniqueidentifier,
@SECURITYFEATURETYPE tinyint,
@MAXROWS int,
@RECORDID uniqueidentifier,
@FUNDRAISERID uniqueidentifier',
@CHANGEAGENT,
@DATERANGE,
@INCLUDEUNASSIGNED,
@STARTDATE,
@ENDDATE,
@CURRENTAPPUSERID,
@SECURITYFEATUREID,
@SECURITYFEATURETYPE,
@MAXROWS,
@RECORDID,
@FUNDRAISERID
end