UFN_EMAILFINDER_GETMATCHINGHOUSEHOLDS
Returns matching household address for the EmailFinder submit process.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ISPRIMARY | bit | IN | |
@ADDRESSTYPECODEID | uniqueidentifier | IN | |
@SELECTIONID | uniqueidentifier | IN | |
@OWNERID | uniqueidentifier | IN | |
@INCLUDEINACTIVE | bit | IN | |
@INCLUDEINCOMPLETEADDRESSES | bit | IN |
Definition
Copy
CREATE function dbo.UFN_EMAILFINDER_GETMATCHINGHOUSEHOLDS
(
@ISPRIMARY bit,
@ADDRESSTYPECODEID uniqueidentifier,
@SELECTIONID uniqueidentifier,
@OWNERID uniqueidentifier,
@INCLUDEINACTIVE bit,
@INCLUDEINCOMPLETEADDRESSES bit
) returns
@MATCHING table
(
ADDRESSID uniqueidentifier,
CONSTITUENTID uniqueidentifier,
GROUPID uniqueidentifier,
ISPRIMARY bit,
ADDRESSBLOCK nvarchar(150),
CITY nvarchar(100),
POSTCODE nvarchar(12),
STATEID uniqueidentifier,
ADDRESSTYPECODEID uniqueidentifier
)as
begin
declare @CURRENTDATE datetime;
set @CURRENTDATE = dbo.UFN_DATE_GETEARLIESTTIME(getdate());
declare @SELECTION table (ADDRESSID uniqueidentifier, CONSTITUENTID uniqueidentifier, groupid uniqueidentifier);
declare @BYPASSSECURITY bit;
declare @BPID uniqueidentifier;
declare @BYPASSSITESECURITY bit;
set @BPID = '2be9f4ad-5f54-444c-9176-1807e7a895d9';
set @BYPASSSECURITY = 0;
set @BYPASSSITESECURITY = 0;
declare @ISADMIN bit;
set @ISADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@OWNERID);
declare @APPUSER_IN_NONSITEROLE bit;
set @APPUSER_IN_NONSITEROLE = dbo.UFN_SECURITY_APPUSER_IN_NONSITEROLE(@OWNERID);
declare @APPUSER_IN_NOSITEROLE bit;
set @APPUSER_IN_NOSITEROLE = dbo.UFN_SECURITY_APPUSER_IN_NO_SITE_ROLE(@OWNERID);
if @OWNERID is not null
begin
select @BYPASSSECURITY = dbo.UFN_APPUSER_ISSYSADMIN(@OWNERID);
if @BYPASSSECURITY = 0
begin
select @BYPASSSECURITY = dbo.UFN_SECURITY_APPUSER_GRANTED_BUSINESSPROCESS_IN_NONRACROLE(@OWNERID, @BPID);
select @BYPASSSITESECURITY = dbo.UFN_SECURITY_APPUSER_GRANTED_BUSINESSPROCESS_IN_NONSITEROLE(@OWNERID, @BPID);
end
else
set @BYPASSSITESECURITY = 1;
end
else
begin
set @BYPASSSECURITY = 1;
set @BYPASSSITESECURITY = 1;
end
-- create selection of addresses
if @BYPASSSECURITY = 0 or @BYPASSSITESECURITY = 0
begin
if @SELECTIONID is null or @SELECTIONID = '00000000-0000-0000-0000-000000000000'
insert into @SELECTION(ADDRESSID, CONSTITUENTID, GROUPID)
(
select
ADDRESS.ID,
CONSTITUENT.ID,
GROUPMEMBER.GROUPID
from
dbo.CONSTITUENT
left join
dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITIDS_FORBUSINESSPROCESS(@OWNERID, @BPID) as CONSTIT_RACS on CONSTITUENT.ID = CONSTIT_RACS.ID
left join
dbo.GROUPMEMBER on GROUPMEMBER.MEMBERID = CONSTITUENT.ID
inner join
dbo.ADDRESS on CONSTITUENT.ID = ADDRESS.CONSTITUENTID
inner join
dbo.COUNTRY on ADDRESS.COUNTRYID = COUNTRY.ID
left join
dbo.STATE on ADDRESS.STATEID = STATE.ID
where
(ADDRESS.ISPRIMARY = @ISPRIMARY or @ISPRIMARY = 0)
and (ADDRESS.ADDRESSTYPECODEID = @ADDRESSTYPECODEID or @ADDRESSTYPECODEID is null)
and (CONSTITUENT.ID not in(select ID from dbo.DECEASEDCONSTITUENT))
and (CONSTITUENT.ISINACTIVE = @INCLUDEINACTIVE or @INCLUDEINACTIVE = 1)
and (@BYPASSSECURITY = 1 or CONSTIT_RACS.ID is not null)
and (@BYPASSSITESECURITY = 1 or dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT_BYSITE(@OWNERID, CONSTITUENT.ID, @APPUSER_IN_NOSITEROLE) = 1)
and (((ADDRESS.ADDRESSBLOCK <> '') and (ADDRESS.STATEID is not null) and (ADDRESS.CITY <> '')) or @INCLUDEINCOMPLETEADDRESSES = 1)
);
else
insert into @SELECTION(ADDRESSID, CONSTITUENTID, GROUPID)
(
select
ADDRESS.ID,
CONSTITUENT.ID,
GROUPMEMBER.GROUPID
from
dbo.CONSTITUENT
inner join
dbo.UFN_IDSETREADER_GETRESULTS_GUID(@SELECTIONID) SELECTION on CONSTITUENT.ID = SELECTION.ID
left join
dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITIDS_FORBUSINESSPROCESS(@OWNERID, @BPID) as CONSTIT_RACS on CONSTITUENT.ID = CONSTIT_RACS.ID
left join
dbo.GROUPMEMBER on GROUPMEMBER.MEMBERID = CONSTITUENT.ID
inner join
dbo.ADDRESS on CONSTITUENT.ID = ADDRESS.CONSTITUENTID
inner join
dbo.COUNTRY on ADDRESS.COUNTRYID = COUNTRY.ID
left join
dbo.STATE on ADDRESS.STATEID = STATE.ID
where
(ADDRESS.ISPRIMARY = @ISPRIMARY or @ISPRIMARY = 0)
and (CONSTITUENT.ID not in(select ID from dbo.DECEASEDCONSTITUENT))
and (CONSTITUENT.ISINACTIVE = @INCLUDEINACTIVE or @INCLUDEINACTIVE = 1)
and (@BYPASSSECURITY = 1 or CONSTIT_RACS.ID is not null)
and (@BYPASSSITESECURITY = 1 or dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT_BYSITE(@OWNERID, CONSTITUENT.ID, @APPUSER_IN_NOSITEROLE) = 1)
and (((ADDRESS.ADDRESSBLOCK <> '') and (ADDRESS.STATEID is not null) and (ADDRESS.CITY <> '')) or @INCLUDEINCOMPLETEADDRESSES = 1)
);
end
else
begin
if @SELECTIONID is null or @SELECTIONID = '00000000-0000-0000-0000-000000000000'
insert into @SELECTION(ADDRESSID, CONSTITUENTID, GROUPID)
(
select
ADDRESS.ID,
CONSTITUENT.ID,
GROUPMEMBER.GROUPID
from
dbo.CONSTITUENT
left join
dbo.GROUPMEMBER on GROUPMEMBER.MEMBERID = CONSTITUENT.ID
inner join
dbo.ADDRESS on CONSTITUENT.ID = ADDRESS.CONSTITUENTID
inner join
dbo.COUNTRY on ADDRESS.COUNTRYID = COUNTRY.ID
left join
dbo.STATE on ADDRESS.STATEID = STATE.ID
where
(ADDRESS.ISPRIMARY = @ISPRIMARY or @ISPRIMARY = 0)
and (ADDRESS.ADDRESSTYPECODEID = @ADDRESSTYPECODEID or @ADDRESSTYPECODEID is null)
and (CONSTITUENT.ID not in(select ID from dbo.DECEASEDCONSTITUENT))
and (CONSTITUENT.ISINACTIVE = @INCLUDEINACTIVE or @INCLUDEINACTIVE = 1)
and (((ADDRESS.ADDRESSBLOCK <> '') and (ADDRESS.STATEID is not null) and (ADDRESS.CITY <> '')) or @INCLUDEINCOMPLETEADDRESSES = 1)
);
else
insert into @SELECTION(ADDRESSID, CONSTITUENTID, GROUPID)
(
select
ADDRESS.ID,
CONSTITUENT.ID,
GROUPMEMBER.GROUPID
from
dbo.CONSTITUENT
inner join
dbo.UFN_IDSETREADER_GETRESULTS_GUID(@SELECTIONID) SELECTION on CONSTITUENT.ID = SELECTION.ID
left join
dbo.GROUPMEMBER on GROUPMEMBER.MEMBERID = CONSTITUENT.ID
inner join
dbo.ADDRESS on CONSTITUENT.ID = ADDRESS.CONSTITUENTID
inner join
dbo.COUNTRY on ADDRESS.COUNTRYID = COUNTRY.ID
left join
dbo.STATE on ADDRESS.STATEID = STATE.ID
where
(ADDRESS.ISPRIMARY = @ISPRIMARY or @ISPRIMARY = 0)
and (ADDRESS.ADDRESSTYPECODEID = @ADDRESSTYPECODEID or @ADDRESSTYPECODEID is null)
and (CONSTITUENT.ID not in(select ID from dbo.DECEASEDCONSTITUENT))
and (CONSTITUENT.ISINACTIVE = @INCLUDEINACTIVE or @INCLUDEINACTIVE = 1)
and (((ADDRESS.ADDRESSBLOCK <> '') and (ADDRESS.STATEID is not null) and (ADDRESS.CITY <> '')) or @INCLUDEINCOMPLETEADDRESSES = 1)
);
end
-- find all group members and household records in address selection
declare @MEMBER table (ADDRESSID uniqueidentifier, CONSTITUENTID uniqueidentifier, GROUPID uniqueidentifier, ISPRIMARY bit, ADDRESSBLOCK nvarchar(150), CITY nvarchar(100), POSTCODE nvarchar(12), STATEID uniqueidentifier, ADDRESSTYPECODEID uniqueidentifier);
insert into @MEMBER
(ADDRESSID, CONSTITUENTID, GROUPID, ISPRIMARY, ADDRESSBLOCK, CITY, POSTCODE, STATEID, ADDRESSTYPECODEID)
(
select
ADDRESS.ID,
ADDRESS.CONSTITUENTID,
SELECTION.GROUPID,
GROUPMEMBER.ISPRIMARY,
ADDRESS.ADDRESSBLOCK,
ADDRESS.CITY,
ADDRESS.POSTCODE,
ADDRESS.STATEID,
ADDRESS.ADDRESSTYPECODEID
from
dbo.ADDRESS
inner join
@SELECTION SELECTION on SELECTION.ADDRESSID = ADDRESS.ID
inner join
dbo.GROUPMEMBER on ADDRESS.CONSTITUENTID = GROUPMEMBER.MEMBERID
left outer join
dbo.GROUPMEMBERDATERANGE GMDR on GMDR.GROUPMEMBERID = GROUPMEMBER.ID
where
(GROUPMEMBER.GROUPID = SELECTION.GROUPID)
and
(
(GMDR.DATEFROM is null and (GMDR.DATETO is null or GMDR.DATETO > @CURRENTDATE) )
or (GMDR.DATETO is null and (GMDR.DATEFROM is null or GMDR.DATEFROM <= @CURRENTDATE) )
or (GMDR.DATEFROM <= @CURRENTDATE and GMDR.DATETO > @CURRENTDATE)
)
union all
select
ADDRESS.ID,
ADDRESS.CONSTITUENTID,
SELECTION.GROUPID,
0,
ADDRESS.ADDRESSBLOCK,
ADDRESS.CITY,
ADDRESS.POSTCODE,
ADDRESS.STATEID,
ADDRESS.ADDRESSTYPECODEID
from
dbo.ADDRESS
inner join
@SELECTION SELECTION on ADDRESS.ID = SELECTION.ADDRESSID
inner join
dbo.CONSTITUENT on ADDRESS.CONSTITUENTID = CONSTITUENT.ID
where
CONSTITUENT.ISGROUP = 1
);
-- all matching household records
insert into @MATCHING
(ADDRESSID, CONSTITUENTID, GROUPID, ISPRIMARY, ADDRESSBLOCK, CITY, POSTCODE, STATEID, ADDRESSTYPECODEID)
(
select distinct
ADDRESS.ID,
ADDRESS.CONSTITUENTID,
coalesce(SELECTION.GROUPID, ADDRESS.CONSTITUENTID),
MEMBER.ISPRIMARY,
ADDRESS.ADDRESSBLOCK,
ADDRESS.CITY,
ADDRESS.POSTCODE,
ADDRESS.STATEID,
ADDRESS.ADDRESSTYPECODEID
from
@SELECTION SELECTION
inner join
dbo.ADDRESS on SELECTION.ADDRESSID = ADDRESS.ID
inner join
@MEMBER MEMBER on (SELECTION.GROUPID = MEMBER.GROUPID or SELECTION.CONSTITUENTID = MEMBER.GROUPID)
where
( (ADDRESS.ADDRESSBLOCK = MEMBER.ADDRESSBLOCK)
and (ADDRESS.CITY = MEMBER.CITY)
and ( (ADDRESS.STATEID = MEMBER.STATEID) or (ADDRESS.STATEID is null and MEMBER.STATEID is null) )
and (ADDRESS.POSTCODE = MEMBER.POSTCODE)
and ( (ADDRESS.ADDRESSTYPECODEID = MEMBER.ADDRESSTYPECODEID) or (ADDRESS.ADDRESSTYPECODEID is null and MEMBER.ADDRESSTYPECODEID is null) ))
and (ADDRESS.CONSTITUENTID <> MEMBER.CONSTITUENTID)
);
return;
end