UFN_ADDRESSPROCESS_ADDRESSES

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

Definition

Copy


            CREATE function dbo.UFN_ADDRESSPROCESS_ADDRESSES
                (
                @ADDRESSPROCESSINGOPTIONID uniqueidentifier,
                @MAILTYPE tinyint,
                @PARAMETERSETID uniqueidentifier,
                @DATE datetime,
                @INCLUDEHOUSEHOLDPROCESSING bit
                )
            returns table
            as
            return
                (
                with AP_CTE as (
                        select INDUSESEASONALADDRESS,
                            ORGMAILINGPREFERENCE,
                            INDALTADDRESS1TYPECODEID,
                            INDALTADDRESS1ISPRIMARY,
                            INDALTADDRESS2TYPECODEID,
                            INDALTADDRESS2ISPRIMARY,
                            ORGALTADDRESS1TYPECODEID,
                            ORGALTADDRESS1ISPRIMARY,
                            ORGALTADDRESS2TYPECODEID,
                            ORGALTADDRESS2ISPRIMARY,
                            INDINCLUDEWITHNOADDRESS,
                            ORGINCLUDEWITHNOADDRESS,
                            ORGINCLUDEWITHNOCONTACT,
                            INDUSECONSTITUENTPREFS,
                            ORGUSECONSTITUENTPREFS,
                            GROUPALTADDRESS1TYPECODEID,
                            GROUPALTADDRESS1ISPRIMARY,
                            GROUPALTADDRESS2TYPECODEID,
                            GROUPALTADDRESS2ISPRIMARY,
                            GROUPINCLUDEWITHNOADDRESS,
                            GROUPUSECONSTITUENTPREFS
                        from 
                            dbo.ADDRESSPROCESSINGOPTION
                        where 
                            ID = @ADDRESSPROCESSINGOPTIONID
                    )
                    select distinct 
                        C.CONSTITUENTID as CONSTITUENTID,
                        coalesce(MP.ADDRESSID,SA.ADDRESSID,CA.ADDRESSID,A1.ADDRESSID,A2.ADDRESSID,O1.ADDRESSID,O2.ADDRESSID, G1.ADDRESSID, G2.ADDRESSID) 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(@ADDRESSPROCESSINGOPTIONID,@MAILTYPE,@PARAMETERSETID,@DATE) as MP on C.ID = MP.CONSTITUENTID
                        left join dbo.UFN_ADDRESSPROCESS_SEASONALADDRESSES(@DATE) SA on C.ID = SA.CONSTITUENTID and (select INDUSESEASONALADDRESS from AP_CTE) = 1
                        left join dbo.UFN_ADDRESSPROCESS_CONTACTADDRESSES(@ADDRESSPROCESSINGOPTIONID,@MAILTYPE,@PARAMETERSETID) CA on C.ID = CA.CONSTITUENTID and ((select ORGMAILINGPREFERENCE from AP_CTE) = 0
                        left join dbo.UFN_ADDRESSPROCESS_ALTERNATEADDRESSES((select INDALTADDRESS1TYPECODEID from AP_CTE),(select INDALTADDRESS1ISPRIMARY from AP_CTE)) as A1 on C.ID = A1.CONSTITUENTID AND C.ISORGANIZATION = 0 AND C.ISGROUP = 0
                        left join dbo.UFN_ADDRESSPROCESS_ALTERNATEADDRESSES((select INDALTADDRESS2TYPECODEID from AP_CTE),(select INDALTADDRESS2ISPRIMARY from AP_CTE)) as a2 on C.ID = a2.constituentid AND c.isorganization = 0 AND C.ISGROUP = 0
                        left join dbo.UFN_ADDRESSPROCESS_ALTERNATEADDRESSES((select ORGALTADDRESS1TYPECODEID from AP_CTE),(select ORGALTADDRESS1ISPRIMARY from AP_CTE)) as O1 on C.ID = O1.constituentid AND c.isorganization = 1 and ((select ORGMAILINGPREFERENCE from AP_CTE) = 1)
                        left join dbo.UFN_ADDRESSPROCESS_ALTERNATEADDRESSES((select ORGALTADDRESS2TYPECODEID from AP_CTE),(select ORGALTADDRESS2ISPRIMARY from AP_CTE)) as O2 on C.ID = O2.constituentid AND c.isorganization = 1 and ((select ORGMAILINGPREFERENCE from AP_CTE) = 1)
                        left join dbo.UFN_ADDRESSPROCESS_ALTERNATEADDRESSES((select GROUPALTADDRESS1TYPECODEID from AP_CTE),(select GROUPALTADDRESS1ISPRIMARY from AP_CTE)) as G1 on C.ID = G1.CONSTITUENTID AND C.ISGROUP = 1
                        left join dbo.UFN_ADDRESSPROCESS_ALTERNATEADDRESSES((select GROUPALTADDRESS2TYPECODEID from AP_CTE),(select GROUPALTADDRESS2ISPRIMARY from AP_CTE)) as G2 on C.ID = G2.CONSTITUENTID AND C.ISGROUP = 1                                   
                    where 
                        (C.ISORGANIZATION = 1 and
                        ((select ORGMAILINGPREFERENCE from AP_CTE) = 0 and --if a valid mail pref is found, keep the record despite contact option

                        (((select ORGINCLUDEWITHNOCONTACT from AP_CTE) = 0 and (MP.ADDRESSID is not null or CA.CONTACTID is not null)) or
                        (select ORGINCLUDEWITHNOCONTACT from AP_CTE) = 1)) or
                        ((select ORGMAILINGPREFERENCE from AP_CTE) = 1 and
                        (((select ORGINCLUDEWITHNOADDRESS from AP_CTE) = 0 and coalesce(MP.ADDRESSID,CA.ADDRESSID,O1.ADDRESSID,O2.ADDRESSID) is not null) or
                        (select ORGINCLUDEWITHNOADDRESS from AP_CTE) = 1))
                        or
                        (C.ISORGANIZATION = 0 and C.ISGROUP = 0 and
                        (((select INDINCLUDEWITHNOADDRESS from AP_CTE) = 0 and coalesce(MP.ADDRESSID,SA.ADDRESSID,A1.ADDRESSID,A2.ADDRESSID) is not null) or
                        (select INDINCLUDEWITHNOADDRESS from AP_CTE) = 1))
                        or
                        (C.ISGROUP = 1 and
                        (((select GROUPINCLUDEWITHNOADDRESS from AP_CTE) = 0 and coalesce(MP.ADDRESSID,SA.ADDRESSID,G1.ADDRESSID,G2.ADDRESSID) is not null) or
                        (select GROUPINCLUDEWITHNOADDRESS from AP_CTE) = 1)))
                        and 
                        (
                            coalesce((
                                select SUPPRESSMAILING from 
                                (
                                    select top 1
                                        case when  (SENDMAIL = 0 or (SENDMAIL = 1 and DELIVERYMETHODCODE = 1)) then 1 else 0 end 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 (select INDUSECONSTITUENTPREFS 
                                                                    from AP_CTE) = 1)
                                        or
                                        (C.ISORGANIZATION = 1 and (select ORGUSECONSTITUENTPREFS 
                                                                    from AP_CTE) = 1)
                                        or
                                        (C.ISGROUP = 1 and (select GROUPUSECONSTITUENTPREFS
                                                                    from AP_CTE) = 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

                        )
                )