UFN_SMARTQUERY_CONSTITUENTBYADDRESS
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ADDRESSFIELD | int | IN | |
@VALUES | xml | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@MAXROWS | int | IN |
Definition
Copy
-- WARNING: UFN_CONSTITUENT_ISINCONSTITUENTBYADDRESS is a specialized function
-- used in discounts that mimics the logic of this smart query for a single constituent.
-- If any changes are made here, please make sure UFN_CONSTITUENT_ISINCONSTITUENTBYADDRESS
-- is updated accordingly.
create function dbo.UFN_SMARTQUERY_CONSTITUENTBYADDRESS
(
@ADDRESSFIELD int = null,
@VALUES xml = null,
@CURRENTAPPUSERID uniqueidentifier = null,
@MAXROWS int = 500
)
returns @T table
(
ID uniqueidentifier not null,
KEYNAME nvarchar(154),
FIRSTNAME nvarchar(154),
NAME nvarchar(154),
ADDRESSBLOCK nvarchar(150),
CITY nvarchar(50),
COUNTY nvarchar (100),
STATE nvarchar(50),
POSTCODE nvarchar(12),
LOOKUPID nvarchar(36)
)
as begin
declare @ISADMIN bit;
declare @APPUSER_IN_NONRACROLE bit;
declare @APPUSER_IN_NOSECGROUPROLE bit;
set @ISADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID);
if @ISADMIN = 0
begin
set @APPUSER_IN_NONRACROLE = dbo.UFN_SECURITY_APPUSER_IN_NONRACROLE(@CURRENTAPPUSERID);
if @APPUSER_IN_NONRACROLE = 0
set @APPUSER_IN_NOSECGROUPROLE = dbo.UFN_SECURITY_APPUSER_IN_NO_SECURITY_GROUP_ROLE(@CURRENTAPPUSERID);
end
declare @GUIDFILTERS table (ID uniqueidentifier);
declare @STRINGFILTERS table (VALUE nvarchar(50));
if @ADDRESSFIELD = 0 begin
insert into @GUIDFILTERS
select T.c.value('(COUNTYCODEID)[1]', 'uniqueidentifier') from @VALUES.nodes('/VALUES/ITEM') T(c)
end else if @ADDRESSFIELD = 1 begin
insert into @STRINGFILTERS
select T.c.value('(CITY)[1]', 'nvarchar(50)') from @VALUES.nodes('/VALUES/ITEM') T(c)
end else if @ADDRESSFIELD = 2 begin
insert into @GUIDFILTERS
select T.c.value('(STATEID)[1]', 'uniqueidentifier') from @VALUES.nodes('/VALUES/ITEM') T(c)
end else if @ADDRESSFIELD = 3 begin
insert into @STRINGFILTERS
select T.c.value('(POSTCODE)[1]', 'nvarchar(12)') from @VALUES.nodes('/VALUES/ITEM') T(c)
end
insert into @T
select top (@MAXROWS)
CONSTITUENT.ID,
CONSTITUENT.KEYNAME,
CONSTITUENT.FIRSTNAME,
CONSTITUENT.NAME,
ADDRESS.ADDRESSBLOCK,
ADDRESS.CITY,
COUNTYCODE.DESCRIPTION,
STATE.DESCRIPTION,
ADDRESS.POSTCODE,
CONSTITUENT.LOOKUPID
from dbo.[ADDRESS]
inner join dbo.CONSTITUENT on ADDRESS.CONSTITUENTID = CONSTITUENT.ID
left join dbo.STATE on STATE.ID = ADDRESS.STATEID
left join (dbo.ADDRESSVALIDATIONUPDATE inner join dbo.COUNTYCODE on ADDRESSVALIDATIONUPDATE.COUNTYCODEID = COUNTYCODE.ID) on ADDRESS.ID = ADDRESSVALIDATIONUPDATE.ID
where
ADDRESS.ISPRIMARY = 1
and (
(@ADDRESSFIELD = 0 and ADDRESSVALIDATIONUPDATE.COUNTYCODEID in (select ID from @GUIDFILTERS))
or (@ADDRESSFIELD = 1 and ADDRESS.CITY in (select VALUE from @STRINGFILTERS))
or (@ADDRESSFIELD = 2 and ADDRESS.STATEID in (select ID from @GUIDFILTERS))
or (@ADDRESSFIELD = 3 and ADDRESS.POSTCODE in (select VALUE from @STRINGFILTERS))
)
and (
@ISADMIN = 1 or
@APPUSER_IN_NONRACROLE = 1 or
dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT(@CURRENTAPPUSERID, CONSTITUENT.ID, @APPUSER_IN_NOSECGROUPROLE) = 1
)
order by
CONSTITUENT.KEYNAME,
CONSTITUENT.FIRSTNAME,
CONSTITUENT.LOOKUPID
option (recompile);
return;
end