UFN_ADDRESSPROCESS_ADDRESSES_2
Returns addresses according to address processing rules.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ADDRESSPROCESSINGOPTIONID | uniqueidentifier | IN | |
@MAILTYPE | tinyint | IN | |
@PARAMETERSETID | uniqueidentifier | IN | |
@DATE | datetime | IN | |
@INCLUDEHOUSEHOLDPROCESSING | bit | IN | |
@INDUSESEASONALADDRESS | bit | IN | |
@ORGMAILINGPREFERENCE | tinyint | IN | |
@INDALTADDRESS1TYPECODEID | uniqueidentifier | IN | |
@INDALTADDRESS1ISPRIMARY | bit | IN | |
@INDALTADDRESS2TYPECODEID | uniqueidentifier | IN | |
@INDALTADDRESS2ISPRIMARY | bit | IN | |
@ORGALTADDRESS1TYPECODEID | uniqueidentifier | IN | |
@ORGALTADDRESS1ISPRIMARY | bit | IN | |
@ORGALTADDRESS2TYPECODEID | uniqueidentifier | IN | |
@ORGALTADDRESS2ISPRIMARY | bit | IN | |
@INDINCLUDEWITHNOADDRESS | bit | IN | |
@ORGINCLUDEWITHNOADDRESS | bit | IN | |
@ORGINCLUDEWITHNOCONTACT | bit | IN | |
@ORGSENDTOALLCONTACTS | bit | IN | |
@INDUSECONSTITUENTPREFS | bit | IN | |
@ORGUSECONSTITUENTPREFS | bit | IN | |
@GROUPALTADDRESS1TYPECODEID | uniqueidentifier | IN | |
@GROUPALTADDRESS1ISPRIMARY | bit | IN | |
@GROUPALTADDRESS2TYPECODEID | uniqueidentifier | IN | |
@GROUPALTADDRESS2ISPRIMARY | bit | IN | |
@GROUPINCLUDEWITHNOADDRESS | bit | IN | |
@GROUPUSECONSTITUENTPREFS | tinyint | IN |
Definition
Copy
CREATE function dbo.UFN_ADDRESSPROCESS_ADDRESSES_2
(
@ADDRESSPROCESSINGOPTIONID uniqueidentifier,
@MAILTYPE tinyint,
@PARAMETERSETID uniqueidentifier,
@DATE datetime,
@INCLUDEHOUSEHOLDPROCESSING bit,
@INDUSESEASONALADDRESS bit,
@ORGMAILINGPREFERENCE tinyint,
@INDALTADDRESS1TYPECODEID uniqueidentifier,
@INDALTADDRESS1ISPRIMARY bit,
@INDALTADDRESS2TYPECODEID uniqueidentifier,
@INDALTADDRESS2ISPRIMARY bit,
@ORGALTADDRESS1TYPECODEID uniqueidentifier,
@ORGALTADDRESS1ISPRIMARY bit,
@ORGALTADDRESS2TYPECODEID uniqueidentifier,
@ORGALTADDRESS2ISPRIMARY bit,
@INDINCLUDEWITHNOADDRESS bit,
@ORGINCLUDEWITHNOADDRESS bit,
@ORGINCLUDEWITHNOCONTACT bit,
@ORGSENDTOALLCONTACTS bit,
@INDUSECONSTITUENTPREFS bit,
@ORGUSECONSTITUENTPREFS bit,
@GROUPALTADDRESS1TYPECODEID uniqueidentifier,
@GROUPALTADDRESS1ISPRIMARY bit,
@GROUPALTADDRESS2TYPECODEID uniqueidentifier,
@GROUPALTADDRESS2ISPRIMARY bit,
@GROUPINCLUDEWITHNOADDRESS bit,
@GROUPUSECONSTITUENTPREFS tinyint
)
returns table
as
return
(
select distinct C.ID as CONSTITUENTID,
coalesce(MP.ADDRESSID,
case when @INDUSESEASONALADDRESS = 1 and C.ISORGANIZATION = 0 then
(select top 1 ADDRESS.ID from dbo.ADDRESS where ADDRESS.CONSTITUENTID = C.ID and ADDRESS.DONOTMAIL = 0 and ADDRESS.STARTDATE <> '0000' and ((cast((right('0' + cast(month(@DATE) as varchar(2)), 2) + right('0' + cast(day(@DATE) as varchar(2)), 2)) as int) - cast(ADDRESS.STARTDATE as int)) + 1231) % 1231 between 0 and ((cast(ADDRESS.ENDDATE as int) - cast(ADDRESS.STARTDATE as int)) + 1231) % 1231 order by ADDRESS.SEQUENCE)
else null end
,CA.ADDRESSID,
case when C.ISORGANIZATION = 0 AND C.ISGROUP = 0 then
(select top 1 ADDRESS.ID from dbo.ADDRESS where ADDRESS.CONSTITUENTID = C.ID and ADDRESS.DONOTMAIL = 0 and (ADDRESS.ADDRESSTYPECODEID = @INDALTADDRESS1TYPECODEID or (ADDRESS.ISPRIMARY = 1 and @INDALTADDRESS1ISPRIMARY = 1)) order by ADDRESS.SEQUENCE)
else null end
,case when c.ISORGANIZATION = 0 AND C.ISGROUP = 0 then
(select top 1 ADDRESS.ID from dbo.ADDRESS where ADDRESS.CONSTITUENTID = C.ID and ADDRESS.DONOTMAIL = 0 and (ADDRESS.ADDRESSTYPECODEID = @INDALTADDRESS2TYPECODEID or (ADDRESS.ISPRIMARY = 1 and @INDALTADDRESS2ISPRIMARY = 1)) order by ADDRESS.SEQUENCE)
else null end
,case when c.ISORGANIZATION = 1 and (@ORGMAILINGPREFERENCE = 1) then
(select top 1 ADDRESS.ID from dbo.ADDRESS where ADDRESS.CONSTITUENTID = C.ID and ADDRESS.DONOTMAIL = 0 and (ADDRESS.ADDRESSTYPECODEID = @ORGALTADDRESS1TYPECODEID or (ADDRESS.ISPRIMARY = 1 and @ORGALTADDRESS1ISPRIMARY = 1)) order by ADDRESS.SEQUENCE)
else null end
,case when c.ISORGANIZATION = 1 and (@ORGMAILINGPREFERENCE = 1) then
(select top 1 ADDRESS.ID from dbo.ADDRESS where ADDRESS.CONSTITUENTID = C.ID and ADDRESS.DONOTMAIL = 0 and (ADDRESS.ADDRESSTYPECODEID = @ORGALTADDRESS2TYPECODEID or (ADDRESS.ISPRIMARY = 1 and @ORGALTADDRESS2ISPRIMARY = 1)) order by ADDRESS.SEQUENCE) else null end
,case when C.ISGROUP = 1 then
(select top 1 ADDRESS.ID from dbo.ADDRESS where ADDRESS.CONSTITUENTID = C.ID and ADDRESS.DONOTMAIL = 0 and (ADDRESS.ADDRESSTYPECODEID = @GROUPALTADDRESS1TYPECODEID or (ADDRESS.ISPRIMARY = 1 and @GROUPALTADDRESS1ISPRIMARY = 1)) order by ADDRESS.SEQUENCE) else null end
,case when C.ISGROUP = 1 then
(select top 1 ADDRESS.ID from dbo.ADDRESS where ADDRESS.CONSTITUENTID = C.ID and ADDRESS.DONOTMAIL = 0 and (ADDRESS.ADDRESSTYPECODEID = @GROUPALTADDRESS2TYPECODEID or (ADDRESS.ISPRIMARY = 1 and @GROUPALTADDRESS2ISPRIMARY = 1)) order by ADDRESS.SEQUENCE)
else null end
) as ADDRESSID,
coalesce(MP.CONTACTID,CA.CONTACTID) as CONTACTID,
coalesce(MP.POSITION,CA.POSITION) as POSITION,
C.HOUSEHOLDID,
C.RETURNEDASHOUSEHOLDMEMBER,
case
when (C.RETURNEDASHOUSEHOLDMEMBER = 1) then coalesce(MP.GROUPCONTACTID, C.HOUSEHOLDID)
when (C.ISGROUP = 1 and C.HOUSEHOLDID is not null) then coalesce(MP.GROUPCONTACTID, C.HOUSEHOLDID)
else null
end as GROUPCONTACTID
from dbo.UFN_ADDRESSPROCESS_GETCONSTITUENTS(@DATE, @INCLUDEHOUSEHOLDPROCESSING) C
--left join dbo.UFN_ADDRESSPROCESS_MAILPREFERENCES_bez(@ADDRESSPROCESSINGOPTIONID,@MAILTYPE,@PARAMETERSETID,@DATE,@INDUSECONSTITUENTPREFS, @ORGUSECONSTITUENTPREFS, @GROUPUSECONSTITUENTPREFS) as MP on C.ID = MP.CONSTITUENTID
left join dbo.UFN_ADDRESSPROCESS_MAILPREFERENCES(@ADDRESSPROCESSINGOPTIONID,@MAILTYPE,@PARAMETERSETID,@DATE) as MP on C.ID = MP.CONSTITUENTID
--left join dbo.UFN_ADDRESSPROCESS_CONTACTADDRESSES_bez(@ADDRESSPROCESSINGOPTIONID,@MAILTYPE,@PARAMETERSETID,@ORGINCLUDEWITHNOCONTACT,@ORGUSECONSTITUENTPREFS,@ORGSENDTOALLCONTACTS) CA on C.ID = CA.CONSTITUENTID and (@ORGMAILINGPREFERENCE = 0)
left join dbo.UFN_ADDRESSPROCESS_CONTACTADDRESSES(@ADDRESSPROCESSINGOPTIONID,@MAILTYPE,@PARAMETERSETID) CA on C.ID = CA.CONSTITUENTID and (@ORGMAILINGPREFERENCE = 0)
where
(C.ISORGANIZATION = 1 and
(@ORGMAILINGPREFERENCE = 0 and --if a valid mail pref is found, keep the record despite contact option
((@ORGINCLUDEWITHNOCONTACT = 0 and (MP.ADDRESSID is not null or CA.CONTACTID is not null)) or
@ORGINCLUDEWITHNOCONTACT = 1)) or
(@ORGMAILINGPREFERENCE = 1 and
((@ORGINCLUDEWITHNOADDRESS = 0 and coalesce(MP.ADDRESSID,CA.ADDRESSID,
case when c.ISORGANIZATION = 1 and (@ORGMAILINGPREFERENCE = 1) then (select top 1 ADDRESS.ID from dbo.ADDRESS where ADDRESS.CONSTITUENTID = C.ID and ADDRESS.DONOTMAIL = 0 and (ADDRESS.ADDRESSTYPECODEID = @ORGALTADDRESS1TYPECODEID or (ADDRESS.ISPRIMARY = 1 and @ORGALTADDRESS1ISPRIMARY = 1)) order by ADDRESS.SEQUENCE) else null end
,case when c.ISORGANIZATION = 1 and (@ORGMAILINGPREFERENCE = 1) then
(select top 1 ADDRESS.ID from dbo.ADDRESS where ADDRESS.CONSTITUENTID = C.ID and ADDRESS.DONOTMAIL = 0 and (ADDRESS.ADDRESSTYPECODEID = @ORGALTADDRESS2TYPECODEID or (ADDRESS.ISPRIMARY = 1 and @ORGALTADDRESS2ISPRIMARY = 1)) order by ADDRESS.SEQUENCE)
else null end
) is not null) or
@ORGINCLUDEWITHNOADDRESS = 1))
or
(C.ISORGANIZATION = 0 and C.ISGROUP = 0 and
((@INDINCLUDEWITHNOADDRESS = 0 and coalesce(MP.ADDRESSID,
case when @INDUSESEASONALADDRESS = 1 and C.ISORGANIZATION = 0 then
(select top 1 ADDRESS.ID from dbo.ADDRESS where ADDRESS.CONSTITUENTID = C.ID and ADDRESS.DONOTMAIL = 0 and ADDRESS.STARTDATE <> '0000' and ((cast((right('0' + cast(month(@DATE) as varchar(2)), 2) + right('0' + cast(day(@DATE) as varchar(2)), 2)) as int) - cast(ADDRESS.STARTDATE as int)) + 1231) % 1231 between 0 and ((cast(ADDRESS.ENDDATE as int) - cast(ADDRESS.STARTDATE as int)) + 1231) % 1231 order by ADDRESS.SEQUENCE)
else null end,
case when C.ISORGANIZATION = 0 AND C.ISGROUP = 0 then
(select top 1 ADDRESS.ID from dbo.ADDRESS where ADDRESS.CONSTITUENTID = C.ID and ADDRESS.DONOTMAIL = 0 and (ADDRESS.ADDRESSTYPECODEID = @INDALTADDRESS1TYPECODEID or (ADDRESS.ISPRIMARY = 1 and @INDALTADDRESS1ISPRIMARY = 1)) order by ADDRESS.SEQUENCE) else null end,
case when c.ISORGANIZATION = 0 AND C.ISGROUP = 0 then (select top 1 ADDRESS.ID from dbo.ADDRESS where ADDRESS.CONSTITUENTID = C.ID and ADDRESS.DONOTMAIL = 0 and (ADDRESS.ADDRESSTYPECODEID = @INDALTADDRESS2TYPECODEID or (ADDRESS.ISPRIMARY = 1 and @INDALTADDRESS2ISPRIMARY = 1)) order by ADDRESS.SEQUENCE) else null end) is not null) or
@INDINCLUDEWITHNOADDRESS = 1))
or
(C.ISGROUP = 1 and
((@GROUPINCLUDEWITHNOADDRESS = 0 and coalesce(MP.ADDRESSID,
case when @INDUSESEASONALADDRESS = 1 and C.ISORGANIZATION = 0 then
(select top 1 ADDRESS.ID from dbo.ADDRESS where ADDRESS.CONSTITUENTID = C.ID and ADDRESS.DONOTMAIL = 0 and ADDRESS.STARTDATE <> '0000' and ((cast((right('0' + cast(month(@DATE) as varchar(2)), 2) + right('0' + cast(day(@DATE) as varchar(2)), 2)) as int) - cast(ADDRESS.STARTDATE as int)) + 1231) % 1231 between 0 and ((cast(ADDRESS.ENDDATE as int) - cast(ADDRESS.STARTDATE as int)) + 1231) % 1231 order by ADDRESS.SEQUENCE)
else null end,
case when C.ISGROUP = 1 then
(select top 1 ADDRESS.ID from dbo.ADDRESS where ADDRESS.CONSTITUENTID = C.ID and ADDRESS.DONOTMAIL = 0 and (ADDRESS.ADDRESSTYPECODEID = @GROUPALTADDRESS1TYPECODEID or (ADDRESS.ISPRIMARY = 1 and @GROUPALTADDRESS1ISPRIMARY = 1)) order by ADDRESS.SEQUENCE) else null end
,case when C.ISGROUP = 1 then
(select top 1 ADDRESS.ID from dbo.ADDRESS where ADDRESS.CONSTITUENTID = C.ID and ADDRESS.DONOTMAIL = 0 and (ADDRESS.ADDRESSTYPECODEID = @GROUPALTADDRESS2TYPECODEID or (ADDRESS.ISPRIMARY = 1 and @GROUPALTADDRESS2ISPRIMARY = 1)) order by ADDRESS.SEQUENCE) else null end
) is not null) or
@GROUPINCLUDEWITHNOADDRESS = 1)))
and (
coalesce((
select SUPPRESSMAILING from
(
select top 1
case
when (SENDMAIL = 0
or (SENDMAIL = 1 and DELIVERYMETHODCODE = 1
and (
case
when exists(
select * from
dbo.[INSTALLEDPRODUCTLIST]
where [ID] = '42c15648-749e-4859-a56d-3a6474814cc7'
and ([EXPIREDATE] = ''
or [EXPIREDATE] >= getdate()
)
) then DONOTSENDOTHERCHANNEL
else 1
end
) = 1
)
) then 1
else 0
end as SUPPRESSMAILING,
case when @MAILTYPE = 0 and ACKNOWLEDGEMENTID is not null then 1 -- Revenue acknowledgements
when @MAILTYPE = 1 and (SITEID is not null and BUSINESSUNITCODEID is not null and CATEGORYCODEID is not null) then 3 -- Appeals
when @MAILTYPE = 1 and (SITEID is not null and BUSINESSUNITCODEID is not null) then 2 -- Appeals
when @MAILTYPE = 1 and (SITEID is not null and CATEGORYCODEID is not null) then 2 -- Appeals
when @MAILTYPE = 1 and (BUSINESSUNITCODEID is not null and CATEGORYCODEID is not null) then 2 -- Appeals
when @MAILTYPE = 1 and (SITEID is not null or BUSINESSUNITCODEID is not null or CATEGORYCODEID is not null) then 1 -- Appeals
when @MAILTYPE = 2 and EVENTCATEGORYCODEID is not null and SITEID is not null then 2 -- Events
when @MAILTYPE = 2 and (EVENTCATEGORYCODEID is not null or SITEID is not null) then 1 -- Events
when @MAILTYPE = 3 and CORRESPONDENCECODEID is not null and CORRESPONDENCEID is not null then 2 -- Correspondence
when @MAILTYPE = 3 and (CORRESPONDENCECODEID is not null or CORRESPONDENCEID is not null) then 1 -- Correspondence
when @MAILTYPE = 4 and PLEDGEREMINDERID is not null then 1 -- Reminders
when @MAILTYPE = 8 and PURPOSEID is not null then 1 -- Stewardship
else 0
end as CRITERIAMATCHSCORE
from
dbo.MAILPREFERENCE
where
CONSTITUENTID = C.ID and
MAILTYPECODE = @MAILTYPE and
(
(C.ISORGANIZATION = 0 and C.ISGROUP = 0 and @INDUSECONSTITUENTPREFS = 1) or
(C.ISORGANIZATION = 1 and @ORGUSECONSTITUENTPREFS = 1) or
(C.ISGROUP = 1 and @GROUPUSECONSTITUENTPREFS = 1)
) and
(
(@PARAMETERSETID = case @MAILTYPE
when 0 then ACKNOWLEDGEMENTID
when 3 then CORRESPONDENCEID
when 4 then PLEDGEREMINDERID
else null
end) or
(case @MAILTYPE when 0 then ACKNOWLEDGEMENTID
when 3 then CORRESPONDENCEID
when 4 then PLEDGEREMINDERID
else null
end is null)
) and
((CORRESPONDENCECODEID is null) or (@MAILTYPE = 3 and CORRESPONDENCECODEID = (select CORRESPONDENCECODEID from dbo.CORRESPONDENCEPROCESS where ID = @PARAMETERSETID))) and
((EVENTCATEGORYCODEID is null) or (@MAILTYPE = 2 and EVENTCATEGORYCODEID = (select E.EVENTCATEGORYCODEID from dbo.EVENT E inner join dbo.INVITATION I on E.ID = I.EVENTID where I.ID = @PARAMETERSETID))) and
(
(SITEID is null) or
(@MAILTYPE = 1 and SITEID = (select SITEID from dbo.APPEAL where ID = @PARAMETERSETID)) or
(@MAILTYPE = 2 and SITEID in (select E.SITEID from dbo.EVENTSITE E inner join dbo.INVITATION I on E.EVENTID = I.EVENTID where I.ID = @PARAMETERSETID))
) and
((PURPOSEID is null) or (@MAILTYPE = 8 and PURPOSEID = @PARAMETERSETID)) and
((BUSINESSUNITCODEID is null) or (@MAILTYPE = 1 and BUSINESSUNITCODEID in (select BUSINESSUNITCODEID from dbo.APPEALBUSINESSUNIT where APPEALID = @PARAMETERSETID))) and
((CATEGORYCODEID is null) or (@MAILTYPE = 1 and CATEGORYCODEID = (select APPEALCATEGORYCODEID from dbo.APPEAL where ID = @PARAMETERSETID)))
order by
CRITERIAMATCHSCORE desc, SUPPRESSMAILING desc
) as MATCHEDPREFERENCES
), 0) = 0 -- Verify that the comm prefs allow the user to receive mailings
)
)