USP_EMAILLIST_PROCESSAPPEALLIST

Processes an appeal-based email list and places the members in the temporary table #APPEALEMAILLISTMEMBER.

Parameters

Parameter Parameter Type Mode Description
@ID int IN

Definition

Copy


CREATE procedure dbo.USP_EMAILLIST_PROCESSAPPEALLIST
(
    @ID int
)
as
begin

    ------------------------------------------------------------------------------------------------------------------------

    ------------------------Add index to ignore dup entries-----------------------------------------------------------------

    ------------------------------------------------------------------------------------------------------------------------

    CREATE UNIQUE NONCLUSTERED INDEX [APPEALEMAILLISTMEMBER_CONSTIT] on #APPEALEMAILLISTMEMBER
    (
        CONSTITUENTID,
        EMAILADDRESS
    )
    with (IGNORE_DUP_KEY = ON)

    ------------------------------------------------------------------------------------------------------------------------

    ------------------------Declare some variables for mail pref data-------------------------------------------------------

    ------------------------------------------------------------------------------------------------------------------------

    declare @APPEALID uniqueidentifier
    declare @APPEALBUSINESSUNITCODEIDS table ([ID] uniqueidentifier primary key);
    declare @APPEALCATEGORYCODEID uniqueidentifier
    declare @APPEALSITEID uniqueidentifier


    ------------------------------------------------------------------------------------------------------------------------

    ------------------------Populate mail pref data based on selected list--------------------------------------------------

    ------------------------------------------------------------------------------------------------------------------------

    select @APPEALID = IM.APPEALID
    from dbo.EmailList EL
    inner join dbo.BBNCAPPEALIDMAP IM on CAST(EL.OPTIONS as nvarchar(20)) = IM.ID
    where El.ID = @ID

    select
    @APPEALCATEGORYCODEID = APPEALCATEGORYCODEID,
    @APPEALSITEID = SITEID
    from dbo.APPEAL
    where ID = @APPEALID

    insert into @APPEALBUSINESSUNITCODEIDS ([ID])
    select BUSINESSUNITCODEID
    from dbo.APPEALBUSINESSUNIT
    where APPEALID = @APPEALID;    


    ------------------------------------------------------------------------------------------------------------------------

    ------------------------Select the valid mail preferences (ones that use emails for appeals)----------------------------

    ------------------------------------------------------------------------------------------------------------------------

    create table #TEMPAPPEALEMAILPREFERENCE (
    [ID] uniqueidentifier not null,
    [CONSTITUENTID] uniqueidentifier not null,
    [EMAILADDRESSID] uniqueidentifier,
    [USEPRIMARYEMAIL] bit not null,
    [CATEGORYCODEID] uniqueidentifier,
    [BUSINESSUNITCODEID] uniqueidentifier,
    [SITEID] uniqueidentifier
    );

    insert into #TEMPAPPEALEMAILPREFERENCE ([ID], [CONSTITUENTID], [EMAILADDRESSID], [USEPRIMARYEMAIL], [CATEGORYCODEID], [BUSINESSUNITCODEID], [SITEID])
    select
        MP.[ID],
        MP.[CONSTITUENTID],
        MP.[EMAILADDRESSID],
        MP.[USEPRIMARYEMAIL],
        MP.[CATEGORYCODEID],
        MP.[BUSINESSUNITCODEID],
        MP.[SITEID]
    from dbo.[MAILPREFERENCE] as MP 
    where MP.[SENDMAIL] = 1 and MP.[DELIVERYMETHODCODE] = 1 and MP.[MAILTYPECODE] = 1;

    create nonclustered index [IX_#TEMPAPPEALEMAILPREFERENCE_CONSTITUENTID] on #TEMPAPPEALEMAILPREFERENCE ([CONSTITUENTID])
    include ([ID], [EMAILADDRESSID], [USEPRIMARYEMAIL], [CATEGORYCODEID], [BUSINESSUNITCODEID], [SITEID]);


    ------------------------------------------------------------------------------------------------------------------------

    ------------------------Select the constits/email addresses that match this appeal--------------------------------------

    ------------------------------------------------------------------------------------------------------------------------


    -- TWG  07/17/2013

    -- Using a common table expression to break and a union of the joins to EMAILADDRESS so that the OR is not needed in the join to EMAILADDRESS

    with APPEALEMAILLISTCONSTITUENTS_CTE as (
        select
            MP.[CONSTITUENTID],
            MP.[EMAILADDRESSID],
            MP.[USEPRIMARYEMAIL]
        from #TEMPAPPEALEMAILPREFERENCE MP
        inner join dbo.CONSTITUENT as C on MP.[CONSTITUENTID] = C.[ID]
        where
        (
            (
                --Where the Mail Preference is for all appeals and we don't have a closer match

                MP.BUSINESSUNITCODEID is null and
                MP.CATEGORYCODEID is null and
                MP.SITEID is null and
                not exists(select *
                            from dbo.MAILPREFERENCE sub, dbo.APPEAL
                            left join dbo.APPEALBUSINESSUNIT AB on AB.APPEALID = APPEAL.ID
                            where APPEAL.ID = @APPEALID and sub.ID <> MP.ID
                            and sub.CONSTITUENTID = MP.CONSTITUENTID
                            and ((sub.SITEID = APPEAL.SITEID and sub.CATEGORYCODEID = APPEAL.APPEALCATEGORYCODEID and sub.BUSINESSUNITCODEID = AB.BUSINESSUNITCODEID)
                            or (sub.SITEID is null and sub.CATEGORYCODEID = APPEAL.APPEALCATEGORYCODEID and sub.BUSINESSUNITCODEID = AB.BUSINESSUNITCODEID)
                            or (sub.SITEID = APPEAL.SITEID and sub.CATEGORYCODEID is null and sub.BUSINESSUNITCODEID = AB.BUSINESSUNITCODEID)
                            or (sub.SITEID = APPEAL.SITEID and sub.CATEGORYCODEID = APPEAL.APPEALCATEGORYCODEID and sub.BUSINESSUNITCODEID is null)
                            or (sub.SITEID is null and sub.CATEGORYCODEID is null and sub.BUSINESSUNITCODEID = AB.BUSINESSUNITCODEID)
                            or (sub.SITEID is null and sub.CATEGORYCODEID = APPEAL.APPEALCATEGORYCODEID and sub.BUSINESSUNITCODEID is null)
                            or (sub.SITEID = APPEAL.SITEID and sub.CATEGORYCODEID is null and sub.BUSINESSUNITCODEID is null)))
            )
            or
            (
                --Where we have a good match

                (MP.BUSINESSUNITCODEID in (select [ID] from @APPEALBUSINESSUNITCODEIDS) or MP.BUSINESSUNITCODEID is null) and
                (MP.CATEGORYCODEID = @APPEALCATEGORYCODEID or MP.CATEGORYCODEID is null) and
                (MP.SITEID = @APPEALSITEID or MP.SITEID is null) and
                not (MP.CATEGORYCODEID is null and MP.SITEID is null)
            )
        )
        and
        (
            isnull(
                    (
                        select SUPPRESSMAILING from
                        (
                            select top 1
                                case when (SENDMAIL = 0 or (SENDMAIL = 1 and DELIVERYMETHODCODE = 0)) then 1 else 0 end SUPPRESSMAILING,
                                case              
                                    when (SITEID is not null and BUSINESSUNITCODEID is not null and CATEGORYCODEID is not null) then 3
                                    when (SITEID is not null and BUSINESSUNITCODEID is not null) then 2
                                    when (SITEID is not null and CATEGORYCODEID is not null) then 2
                                    when (BUSINESSUNITCODEID is not null and CATEGORYCODEID is not null) then 2
                                    when (SITEID is not null or BUSINESSUNITCODEID is not null or CATEGORYCODEID is not null) then 1
                                    else 0
                                end as CRITERIAMATCHSCORE    
                            from dbo.MAILPREFERENCE
                            where
                                MAILTYPECODE = 1
                                and CONSTITUENTID = C.ID
                                and (SITEID is null or SITEID = @APPEALSITEID)
                                and (CATEGORYCODEID is null or CATEGORYCODEID = @APPEALCATEGORYCODEID)
                            order by CRITERIAMATCHSCORE desc, SUPPRESSMAILING desc
                        ) as MATCHEDPREFERENCES
                    )
            , 0) = 0
        )
    )
    insert into #APPEALEMAILLISTMEMBER (CONSTITUENTID, EMAILADDRESS)
    select
        AELC.CONSTITUENTID,
        EA.EMAILADDRESS
    from APPEALEMAILLISTCONSTITUENTS_CTE AELC
    inner join dbo.EMAILADDRESS EA on AELC.[EMAILADDRESSID] = EA.[ID]
    union all
    select
        AELC.CONSTITUENTID,
        EA.EMAILADDRESS
    from APPEALEMAILLISTCONSTITUENTS_CTE AELC
    inner join dbo.EMAILADDRESS EA on AELC.[CONSTITUENTID] = EA.[CONSTITUENTID] and AELC.[USEPRIMARYEMAIL] = 1 and EA.[ISPRIMARY] = 1 AND EA.[DONOTEMAIL] = 0;

    drop table #TEMPAPPEALEMAILPREFERENCE

    ------------------------------------------------------------------------------------------------------------------------

    ------------------------Select the anonymous subscriber email addresses that match this appeal---------------------------------------------------------

    ------------------------------------------------------------------------------------------------------------------------  

    insert into #APPEALEMAILLISTMEMBER (CONSTITUENTID, ANONYMOUSEMAILSUBSCRIBERID, EMAILADDRESS)
    select EA.CONSTITUENTID, AES.ID, AES.EMAILADDRESS
    from dbo.ANONYMOUSEMAILPREFERENCE AEP
    inner join dbo.ANONYMOUSEMAILSUBSCRIBER AES on AES.ID = AEP.ANONYMOUSEMAILSUBSCRIBERID
    left outer join @APPEALBUSINESSUNITCODEIDS BU on BU.ID = AEP.BUSINESSUNITCODEID
    left outer join dbo.EMAILADDRESS EA on EA.EMAILADDRESS = AES.EMAILADDRESS
    left outer join #APPEALEMAILLISTMEMBER AEM on AEM.CONSTITUENTID = EA.CONSTITUENTID
    where AEP.OPTEDOUT = 0
    and (AEP.APPEALCATEGORYCODEID is null OR AEP.APPEALCATEGORYCODEID = @APPEALCATEGORYCODEID)
    and (AEP.BUSINESSUNITCODEID is null or BU.ID is not null)
    and (AEP.SITEID is null or AEP.SITEID = @APPEALSITEID)
    and AEM.CONSTITUENTID is null


end