UFN_ADDRESSPROCESS_CONTACTADDRESSES
Returns contact addresses based on address processing rules.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ADDRESSPROCESSINGOPTIONID | uniqueidentifier | IN | |
@MAILTYPE | tinyint | IN | |
@PARAMETERSETID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_ADDRESSPROCESS_CONTACTADDRESSES
(
@ADDRESSPROCESSINGOPTIONID uniqueidentifier,
@MAILTYPE tinyint,
@PARAMETERSETID uniqueidentifier = null
)
returns table
as
return
(
with AP_CTE as (
select ORGINCLUDEWITHNOCONTACT,
ORGUSECONSTITUENTPREFS,
ORGSENDTOALLCONTACTS
from dbo.ADDRESSPROCESSINGOPTION
where ID = @ADDRESSPROCESSINGOPTIONID
)
select C.ID as CONSTITUENTID,
coalesce(R.ADDRESSID,OA.ID) as ADDRESSID,
R.RECIPROCALCONSTITUENTID as CONTACTID,
R.POSITION as POSITION
from dbo.CONSTITUENT C
left join dbo.ADDRESS OA on C.ID = OA.CONSTITUENTID and OA.ISPRIMARY = 1 and OA.DONOTMAIL = 0
outer apply
(
select top 1 CT.*
from dbo.UFN_ADDRESSPROCESS_CONTACTTYPEADDRESS(@ADDRESSPROCESSINGOPTIONID) CT
where CT.RELATIONSHIPCONSTITUENTID = C.ID
order by CT.PROCESSORDER
) R
where C.ISORGANIZATION = 1 and
((select ORGSENDTOALLCONTACTS from AP_CTE) = 0 or @MAILTYPE = 5) and --Only send to 1 contact, or this is for receipts
((select ORGINCLUDEWITHNOCONTACT from AP_CTE) = 1 OR
((select ORGINCLUDEWITHNOCONTACT from AP_CTE) = 0 and R.RECIPROCALCONSTITUENTID is not null)) and
not exists
(select ID from dbo.MAILPREFERENCE MP
where CONSTITUENTID = C.ID and
(select ORGUSECONSTITUENTPREFS
from AP_CTE) = 1 and
MP.SENDMAIL = 1 and
MP.DELIVERYMETHODCODE = 0 and
MP.ADDRESSID is not null and
(select count(MPC.ID) from dbo.MAILPREFERENCEORGCONTACTTYPE MPC
where MPC.MAILPREFERENCEID = MP.ID) = 0 and
MP.MAILTYPECODE = @MAILTYPE 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)))
)
union all
select C.ID as CONSTITUENTID,
coalesce(R.ADDRESSID,OA.ID) as ADDRESSID,
R.RECIPROCALCONSTITUENTID as CONTACTID,
R.POSITION as POSITION
from dbo.CONSTITUENT C
left join dbo.ADDRESS OA on C.ID = OA.CONSTITUENTID and OA.ISPRIMARY = 1 and OA.DONOTMAIL = 0
left join dbo.UFN_ADDRESSPROCESS_CONTACTTYPEADDRESS(@ADDRESSPROCESSINGOPTIONID) R on C.ID = R.RELATIONSHIPCONSTITUENTID
where C.ISORGANIZATION = 1 and
@MAILTYPE <> 5 and -- For receipts, only include 1st contact
(select ORGSENDTOALLCONTACTS from AP_CTE) = 1 and
((select ORGINCLUDEWITHNOCONTACT from AP_CTE) = 1 OR
((select ORGINCLUDEWITHNOCONTACT from AP_CTE) = 0 and R.RECIPROCALCONSTITUENTID is not null)) and
not exists
(select ID from dbo.MAILPREFERENCE MP
where CONSTITUENTID = C.ID and
(select ORGUSECONSTITUENTPREFS
from AP_CTE) = 1 and
MP.SENDMAIL = 1 and
MP.DELIVERYMETHODCODE = 0 and
MP.ADDRESSID is not null and
(select count(MPC.ID) from dbo.MAILPREFERENCEORGCONTACTTYPE MPC
where MPC.MAILPREFERENCEID = MP.ID) = 0 and
MP.MAILTYPECODE = @MAILTYPE 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)))
)
)