UFN_COAUPDATE_GETMATCHINGHOUSEHOLDS
Returns matching household address for the AddressFinder submit process.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@INCLUDECONSTITUENTDNM | bit | IN | |
@ISPRIMARY | bit | IN | |
@ADDRESSTYPECODEID | uniqueidentifier | IN | |
@INCLUDEADDRESSESDNM | bit | IN | |
@SELECTIONID | uniqueidentifier | IN | |
@OWNERID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_COAUPDATE_GETMATCHINGHOUSEHOLDS
(
@INCLUDECONSTITUENTDNM bit,
@ISPRIMARY bit,
@ADDRESSTYPECODEID uniqueidentifier,
@INCLUDEADDRESSESDNM bit,
@SELECTIONID uniqueidentifier,
@OWNERID uniqueidentifier
) 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 = '113412a7-daa5-4ef6-9c0d-8aaa9024e06a';
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 and COUNTRY.USEFORCOAUPDATE = 1
left join dbo.STATE on ADDRESS.STATEID = STATE.ID
where (CONSTITUENT.DONOTMAIL = @INCLUDECONSTITUENTDNM or CONSTITUENT.DONOTMAIL = 0)
and (ADDRESS.ISPRIMARY = @ISPRIMARY or @ISPRIMARY = 0)
and (ADDRESS.ADDRESSTYPECODEID = @ADDRESSTYPECODEID or @ADDRESSTYPECODEID is null)
and (ADDRESS.DONOTMAIL = @INCLUDEADDRESSESDNM or ADDRESS.DONOTMAIL = 0)
and (CONSTITUENT.ID not in(select ID from dbo.DECEASEDCONSTITUENT))
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)
);
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 and COUNTRY.USEFORCOAUPDATE = 1
left join dbo.STATE on ADDRESS.STATEID = STATE.ID
where (CONSTITUENT.DONOTMAIL = @INCLUDECONSTITUENTDNM or CONSTITUENT.DONOTMAIL = 0)
and (ADDRESS.ISPRIMARY = @ISPRIMARY or @ISPRIMARY = 0)
and (ADDRESS.ADDRESSTYPECODEID = @ADDRESSTYPECODEID or @ADDRESSTYPECODEID is null)
and (ADDRESS.DONOTMAIL = @INCLUDEADDRESSESDNM or ADDRESS.DONOTMAIL = 0)
and (CONSTITUENT.ID not in(select ID from dbo.DECEASEDCONSTITUENT))
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)
);
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 and COUNTRY.USEFORCOAUPDATE = 1
left join dbo.STATE on ADDRESS.STATEID = STATE.ID
where (CONSTITUENT.DONOTMAIL = @INCLUDECONSTITUENTDNM or CONSTITUENT.DONOTMAIL = 0)
and (ADDRESS.ISPRIMARY = @ISPRIMARY or @ISPRIMARY = 0)
and (ADDRESS.ADDRESSTYPECODEID = @ADDRESSTYPECODEID or @ADDRESSTYPECODEID is null)
and (ADDRESS.DONOTMAIL = @INCLUDEADDRESSESDNM or ADDRESS.DONOTMAIL = 0)
and (CONSTITUENT.ID not in(select ID from dbo.DECEASEDCONSTITUENT)));
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 and COUNTRY.USEFORCOAUPDATE = 1
left join dbo.STATE on ADDRESS.STATEID = STATE.ID
where (CONSTITUENT.DONOTMAIL = @INCLUDECONSTITUENTDNM or CONSTITUENT.DONOTMAIL = 0)
and (ADDRESS.ISPRIMARY = @ISPRIMARY or @ISPRIMARY = 0)
and (ADDRESS.ADDRESSTYPECODEID = @ADDRESSTYPECODEID or @ADDRESSTYPECODEID is null)
and (ADDRESS.DONOTMAIL = @INCLUDEADDRESSESDNM or ADDRESS.DONOTMAIL = 0)
and (CONSTITUENT.ID not in(select ID from dbo.DECEASEDCONSTITUENT)));
end
-- AaronCr 04/24/15 - WI#490340: The code below that used to return all household member addresses now only includes
-- shared household addresses. These are only used to filter out addresses that will be submitted as a single address.
-- find all household records in address selection
declare @SELECTIONHOUSEHOLDS table (CONSTITUENTID uniqueidentifier, ADDRESSBLOCK nvarchar(150), CITY nvarchar(100), POSTCODE nvarchar(12), STATEID uniqueidentifier, ADDRESSTYPECODEID uniqueidentifier);
insert into @SELECTIONHOUSEHOLDS
(CONSTITUENTID, ADDRESSBLOCK, CITY, POSTCODE, STATEID, ADDRESSTYPECODEID)
(select
ADDRESS.CONSTITUENTID,
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)
-- Now add all shared addresses with the 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),
ADDRESS.ISPRIMARY,
ADDRESS.ADDRESSBLOCK,
ADDRESS.CITY,
ADDRESS.POSTCODE,
ADDRESS.STATEID,
ADDRESS.ADDRESSTYPECODEID
from @SELECTIONHOUSEHOLDS HOUSEHOLD
inner join @SELECTION SELECTION on (SELECTION.GROUPID = HOUSEHOLD.CONSTITUENTID or SELECTION.CONSTITUENTID = HOUSEHOLD.CONSTITUENTID)
inner join dbo.ADDRESS on SELECTION.ADDRESSID = ADDRESS.ID
where ( (ADDRESS.ADDRESSBLOCK = HOUSEHOLD.ADDRESSBLOCK)
and (ADDRESS.CITY = HOUSEHOLD.CITY)
and ( (ADDRESS.STATEID = HOUSEHOLD.STATEID) or (ADDRESS.STATEID is null and HOUSEHOLD.STATEID is null) )
and (ADDRESS.POSTCODE = HOUSEHOLD.POSTCODE)
and ( (ADDRESS.ADDRESSTYPECODEID = HOUSEHOLD.ADDRESSTYPECODEID) or (ADDRESS.ADDRESSTYPECODEID is null and HOUSEHOLD.ADDRESSTYPECODEID is null) ))
);
return;
end