USP_EMAILLIST_REFRESH

Executes the "Email List Refresh" record operation.

Parameters

Parameter Parameter Type Mode Description
@ID int IN Input parameter indicating the ID of the record being updated.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the update.

Definition

Copy


CREATE procedure dbo.USP_EMAILLIST_REFRESH
(
    @ID int,
    @CHANGEAGENTID uniqueidentifier
)
with execute as owner
as begin

    declare @QUERYID int
    declare @BBSYSTEMID int

    create table #ACQUIREDCOUNT (ID int, COUNT int)
    insert into #ACQUIREDCOUNT
    select 1,0

    --Setup stuff

    declare @NOEMAILSOLICITCODEID uniqueidentifier 
    select top 1 @NOEMAILSOLICITCODEID=DONOTEMAILSOLICITCODEID
    from NETCOMMUNITYDEFAULTCODEMAP

    declare @EMAILPHONETYPE int
    select @EMAILPHONETYPE =  EmailPhoneType from dbo.clients

    declare QUERYCURSOR cursor local for
    select QueryID, BBSystem from dbo.EmailList_Query ELQ where ELQ.EmailListID = @ID

    --Clear out old data

    delete from EmailList_People where EmailListID = @ID

    open QUERYCURSOR
    fetch next from QUERYCURSOR into @QUERYID, @BBSYSTEMID

    while @@FETCH_STATUS = 0
    begin

        --Look up info about this selection

        declare @SELECTIONINFO table(DBOBJECTNAME nvarchar(255), OBJECTTYPE tinyint)
        insert into @SELECTIONINFO
        exec dbo.USP_BBNC_GETSELECTIONLISTINFO @QUERYID

        --Extract info about selection

        declare @DBOBJECTNAME nvarchar(255)
        declare @OBJECTTYPE int
        select @DBOBJECTNAME = DBOBJECTNAME, @OBJECTTYPE = OBJECTTYPE from @SELECTIONINFO

        --Build SQL for upating roles based on the selection

        if @OBJECTTYPE = 1
            set @DBOBJECTNAME = @DBOBJECTNAME + '()'

        declare @SQLSTRING nvarchar(4000)
      declare @NOEMAILSOLICITCODEIDSTRING    as nvarchar(50)=CAST(@NOEMAILSOLICITCODEID as nvarchar(50))

        --Select the role members data into a temporary table

        set @SQLSTRING  = ' declare @RECORD table(ID int, NAME nvarchar(154), EMAILADDRESS nvarchar(100), DONOTMAILCODE uniqueidentifier);'
        set @SQLSTRING += ' insert into @RECORD'
        set @SQLSTRING += ' select C.SEQUENCEID, C.Name, ISNULL(EA.EMAILADDRESS,'''') as EMAILADDRESS, CSC.ID as DONOTMAILCODE'
        set @SQLSTRING += ' from dbo.' + @DBOBJECTNAME + ' as R'
        set @SQLSTRING += ' inner join dbo.CONSTITUENT C on C.ID = R.ID'
        set @SQLSTRING += ' left outer join ('
        set @SQLSTRING += '                        select ID,CONSTITUENTID from dbo.CONSTITUENTSOLICITCODE CS'
        set @SQLSTRING += '                        where SOLICITCODEID = ''' + @NOEMAILSOLICITCODEIDSTRING + ''' and'
        set @SQLSTRING += '                        ((STARTDATE is null) or (datediff(day, STARTDATE, getdate())>=0)) and'
        set @SQLSTRING += '                        ((ENDDATE is null) or (datediff(day, getdate(), ENDDATE)>=0)) and 
                                    CONSENTPREFERENCECODE=case when (select CONSENT from SOLICITCODE where id='''+@NOEMAILSOLICITCODEIDSTRING+''' ) <>''None'' then 1 else CONSENTPREFERENCECODE end'
        set @SQLSTRING += '                      ) CSC on C.ID = CSC.CONSTITUENTID'                 
      set @SQLSTRING += ' left outer join dbo.EMAILADDRESS EA on EA.CONSTITUENTID = C.ID'
        set @SQLSTRING += ' where C.ISORGANIZATION = 0 and C.ISGROUP = 0 and ISNULL(EA.ISPRIMARY,1) = 1'

        set @SQLSTRING += 'update #ACQUIREDCOUNT set count = count + (select count(1) from @RECORD) where ID=1'

        -- First Make sure that all of our recipients exist in the 

        -- Backoffice people table

        set @SQLSTRING += ' merge dbo.BACKOFFICESYSTEMPEOPLE as T'
        set @SQLSTRING += ' using @RECORD as S'
        set @SQLSTRING += ' on (T.BACKOFFICESYSTEMID = ' + CAST(@BBSYSTEMID as nvarchar(10)) + ' and T.BACKOFFICERECORDID = S.ID)'
        set @SQLSTRING += ' when not matched by target'
        set @SQLSTRING += '     then insert (BackOfficeSystemID, BackofficeRecordID) values (' + CAST(@BBSYSTEMID as nvarchar(10)) + ', ID);'

        --Insert new rows

        set @SQLSTRING += ' insert into EmailList_People(EmailListID, PeopleID,EmailDisplayName, EmailAddress, QueryID, GlobalOptOut)'
        set @SQLSTRING += ' select ' + CAST(@ID as nvarchar(10)) + ', P.ID, R.NAME, R.EMAILADDRESS, ' + CAST(@QUERYID as nvarchar(10)) + ', case when R.DONOTMAILCODE is null then 0 else 1 end'
        set @SQLSTRING += ' from @RECORD R'
        set @SQLSTRING += ' left outer join dbo.BackOfficeSystemPeople P on P.BACKOFFICESYSTEMID = ' + CAST(@BBSYSTEMID as nvarchar(10)) + ' and P.BACKOFFICERECORDID = R.ID'

        execute(@SQLSTRING)

        fetch next from QUERYCURSOR into @QUERYID, @BBSYSTEMID
    end

    close QUERYCURSOR
    deallocate QUERYCURSOR    

    update dbo.EmailList set
    AcquiredRecordCount = (select count from #ACQUIREDCOUNT where ID = 1),
    AcquiredStatus = 1,
    AcquiredMsg = 'Success',
    AcquiredDate = GETUTCDATE()
    where ID = @ID

    return 0;

end