USP_CMS_MIGRATEANONYMOUSEMAILPREFERENCES

Migrates CMS anonymous email preferences

Parameters

Parameter Parameter Type Mode Description
@NUMRECORDSPROCESSED int INOUT

Definition

Copy


CREATE procedure dbo.USP_CMS_MIGRATEANONYMOUSEMAILPREFERENCES
(
    @NUMRECORDSPROCESSED int OUTPUT
)
as
begin

    declare @CHANGEAGENTID uniqueidentifier = null
    if @CHANGEAGENTID is null  
        exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output

    declare @CURRENTDATE datetime
    set @CURRENTDATE = getdate()

    --this temp table is to store the ids that we want to migrate

    declare @FOUNDSUBSCRIBERS table(ANONYMOUSEMAILSUBSCRIBERID uniqueidentifier, CONSTITUENTID uniqueidentifier, EMAILADDRESS nvarchar(200), EMAILADDRESSID uniqueidentifier)

    --prepare records

    insert into @FOUNDSUBSCRIBERS (ANONYMOUSEMAILSUBSCRIBERID, CONSTITUENTID, EMAILADDRESS, EMAILADDRESSID) 
    select distinct AES.ID, EA.CONSTITUENTID, EA.EMAILADDRESS, EA.ID from ANONYMOUSEMAILSUBSCRIBER AES 
        inner join EMAILADDRESS EA on AES.EMAILADDRESS=EA.EMAILADDRESS

    --store records processed

    set @NUMRECORDSPROCESSED = @@ROWCOUNT

    merge dbo.MAILPREFERENCE as target
    using
    (
        select FS.CONSTITUENTID, AEP.BUSINESSUNITCODEID, AEP.APPEALCATEGORYCODEID, AEP.SITEID, ~AEP.OPTEDOUT SENDMAIL, FS.EMAILADDRESSID
        from AnonymousEmailPreference AEP
                inner join @FOUNDSUBSCRIBERS FS on AEP.ANONYMOUSEMAILSUBSCRIBERID=FS.ANONYMOUSEMAILSUBSCRIBERID
    ) as source
    on ((target.CONSTITUENTID=source.CONSTITUENTID or target.CONSTITUENTID is null and source.CONSTITUENTID is null)
        and target.MAILTYPECODE=1
        and (target.BUSINESSUNITCODEID=source.BUSINESSUNITCODEID or target.BUSINESSUNITCODEID is null and source.BUSINESSUNITCODEID is null)
        and (target.CATEGORYCODEID=source.APPEALCATEGORYCODEID or target.CATEGORYCODEID is null and source.APPEALCATEGORYCODEID is null)
        and (target.SITEID=source.SITEID or target.SITEID is null and source.SITEID is null))
    when matched then 
        update set CONSTITUENTID=source.CONSTITUENTID,
                   MAILTYPECODE=1,
                   BUSINESSUNITCODEID=source.BUSINESSUNITCODEID,
                   CATEGORYCODEID=source.APPEALCATEGORYCODEID,
                   SITEID=source.SITEID,
                   SENDMAIL=source.sendmail,
                   DELIVERYMETHODCODE=1,
                   RECEIPTTYPECODE=0,
                   EMAILADDRESSID=source.EMAILADDRESSID,
                   CHANGEDBYID=@CHANGEAGENTID,
                   DATECHANGED=@CURRENTDATE

    when not matched then
        insert (CONSTITUENTID,MAILTYPECODE,BUSINESSUNITCODEID,CATEGORYCODEID,SITEID,SENDMAIL,DELIVERYMETHODCODE,RECEIPTTYPECODE,EMAILADDRESSID,ADDEDBYID,CHANGEDBYID,DATEADDED,DATECHANGED)
            values (source.CONSTITUENTID, 1, source.BUSINESSUNITCODEID, source.APPEALCATEGORYCODEID, source.SITEID, source.SENDMAIL, 1, 0, source.EMAILADDRESSID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE);

    --cleanup migration

    delete dbo.ANONYMOUSEMAILSUBSCRIBER
        from dbo.ANONYMOUSEMAILSUBSCRIBER AES
        inner join @FOUNDSUBSCRIBERS F on AES.ID = F.ANONYMOUSEMAILSUBSCRIBERID

end