USP_MKTSEGMENTATIONSEGMENT_CACHEEMAILADDRESSES

Parameters

Parameter Parameter Type Mode Description
@SEGMENTID uniqueidentifier IN

Definition

Copy


create procedure dbo.[USP_MKTSEGMENTATIONSEGMENT_CACHEEMAILADDRESSES]
(
  @SEGMENTID uniqueidentifier
)
as
  set nocount on;

  declare @SEGMENTATIONID uniqueidentifier;
  declare @RECORDSOURCEID uniqueidentifier;
  declare @MAILINGTYPECODE tinyint;
  declare @SEGMENTTYPECODE tinyint;
  declare @CHANNELCODE tinyint;

  declare @USEADDRESSPROCESSING bit;
  declare @ADDRESSPROCESSINGOPTIONID uniqueidentifier;
  declare @APPEALID nvarchar(36);
  declare @SQL nvarchar(max);
  declare @TABLENAME nvarchar(128);
  declare @MAILTYPECODE tinyint;
  declare @GLOBALTEMPSEGMENTCONSTITUENTTABLE nvarchar(128);

  declare @ORGMAILINGPREFERENCE tinyint;
  declare @ORGCONTACTALSOINDACTION tinyint;

  begin try
    select
      @SEGMENTATIONID = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID],
      @RECORDSOURCEID = [MKTSEGMENT].[QUERYVIEWCATALOGID],
      @MAILINGTYPECODE = [MKTSEGMENTATION].[MAILINGTYPECODE],
      @SEGMENTTYPECODE = [MKTSEGMENT].[SEGMENTTYPECODE],
      @CHANNELCODE = [MKTPACKAGE].[CHANNELCODE],
      @USEADDRESSPROCESSING = case when [MKTSEGMENTATIONSEGMENT].[OVERRIDEADDRESSPROCESSING] = 1 then [MKTSEGMENTATIONSEGMENT].[USEADDRESSPROCESSING] else [MKTSEGMENTATION].[USEADDRESSPROCESSING] end,
      @ADDRESSPROCESSINGOPTIONID = case when [MKTSEGMENTATIONSEGMENT].[OVERRIDEADDRESSPROCESSING] = 1 then [MKTSEGMENTATIONSEGMENT].[ADDRESSPROCESSINGOPTIONID] else [MKTSEGMENTATION].[ADDRESSPROCESSINGOPTIONID] end,
      @APPEALID = coalesce(convert(nvarchar(36), [APPEALMAILING].[APPEALID]), [MKTSEGMENTATIONACTIVATE].[APPEALSYSTEMID]),
      @MAILTYPECODE = dbo.[UFN_MKTSEGMENTATION_GETMAILPREFERENCEMAILTYPECODE]([MKTSEGMENTATION].[ID])
    from dbo.[MKTSEGMENTATIONSEGMENT]
    inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID]
    inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]
    inner join dbo.[MKTPACKAGE] on [MKTPACKAGE].[ID] = [MKTSEGMENTATIONSEGMENT].[PACKAGEID]
    inner join dbo.[IDSETREGISTER] on [IDSETREGISTER].[ID] = [MKTSEGMENT].[IDSETREGISTERID]
    left join dbo.[APPEALMAILING] on [APPEALMAILING].[ID] = [MKTSEGMENTATION].[ID]
    left join dbo.[MKTSEGMENTATIONACTIVATE] on [MKTSEGMENTATIONACTIVATE].[SEGMENTATIONID] = [MKTSEGMENTATION].[ID] and [MKTSEGMENTATIONACTIVATE].[RECORDSOURCEID] = [MKTSEGMENT].[QUERYVIEWCATALOGID]
    where [MKTSEGMENTATIONSEGMENT].[ID] = @SEGMENTID;

    if dbo.[UFN_MKTRECORDSOURCE_VALIDFORBBEC](@RECORDSOURCEID) = 1  --BBEC only

       and (
         (@MAILINGTYPECODE = 0 and @SEGMENTTYPECODE = 1)            --Direct/appeal based mailings - we intentionally do not want to include other mailing types or list segments (acknowledgments is handled in its own process and for membership/sponsorship we don't want to exclude people from the counts based on an invalid address or comm prefs).

         or
         (@MAILINGTYPECODE = 5 and @SEGMENTTYPECODE = 3)            --Altru acknowledgements/reminders - we have to call this out separately because they are not really "appeal" mailings like the rest

       )
       and @CHANNELCODE = 1                                         --Email - not mail

       and @USEADDRESSPROCESSING = 1
       and @ADDRESSPROCESSINGOPTIONID is not null
      begin
        --Validate that none of the temp tables used in this stored procedure exist already...

        if object_id('tempdb..#TEMP_ADDRESSPROCESS_EMAILS') is not null
          raiserror('The temp table #TEMP_ADDRESSPROCESS_EMAILS is used by this stored procedure but it already exists in this session.  Please make sure the temp table does not exist before calling this stored procedure.', 13, 1);

        set @GLOBALTEMPSEGMENTCONSTITUENTTABLE = '##TEMP_SEGMENT_CONSTITUENT_' + replace(cast(@SEGMENTID as nvarchar(36)), '-', '_');
        set @TABLENAME = dbo.[UFN_MKTSEGMENTATIONSEGMENTCACHEEMAILADDRESSES_MAKETABLENAME](@SEGMENTATIONID);
        exec dbo.[USP_MKTSEGMENTATIONSEGMENTCACHEEMAILADDRESSES_CREATETABLE] @SEGMENTATIONID;

        if len(ltrim(rtrim(@APPEALID))) = 0
          set @APPEALID = null;


        --Put the email addresses into a temp table since we have to get them from a stored procedure...

        create table #TEMP_ADDRESSPROCESS_EMAILS (
          [CONSTITUENTID] uniqueidentifier not null,
          [EMAILADDRESS] nvarchar(100) collate database_default,
          [CONTACTID] uniqueidentifier
        );

        exec dbo.[USP_ADDRESSPROCESS_EMAILS]
          @MAILTYPE = @MAILTYPECODE,
          @PARAMETERSETID = @APPEALID,
          @CONSTITUENTIDSETTABLENAME = @GLOBALTEMPSEGMENTCONSTITUENTTABLE,
          @CONSTITUENTIDSETJOINCOLUMNNAME = 'ID',
          @IGNORECHANNELPREFERENCEFORSUPPRESSION = 0;


        --Insert the final addresses into the cache table...

        set @SQL = 'insert into dbo.[' + @TABLENAME + '] ([SEGMENTID], [CONSTITUENTID], [EMAILADDRESS], [CONTACTID])' + char(13) +
                   '  select' + char(13) +
                   '    @SEGMENTID as [SEGMENTID],' + char(13) +
                   '    [ADDRESSES].[CONSTITUENTID],' + char(13) +
                   '    [ADDRESSES].[EMAILADDRESS],' + char(13) +
                   '    [ADDRESSES].[CONTACTID]' + char(13) +
                   '  from ' + @GLOBALTEMPSEGMENTCONSTITUENTTABLE + ' as [CONSTITUENTS]' + char(13) +
                   '  inner join #TEMP_ADDRESSPROCESS_EMAILS as [ADDRESSES] on [ADDRESSES].[CONSTITUENTID] = [CONSTITUENTS].[ID]';
        exec sp_executesql @SQL, N'@SEGMENTID uniqueidentifier', @SEGMENTID = @SEGMENTID;


        --Drop the temp table...

        drop table #TEMP_ADDRESSPROCESS_EMAILS;
      end
  end try

  begin catch
    exec dbo.[USP_RAISE_ERROR];

    if object_id('tempdb..#TEMP_ADDRESSPROCESS_ADDRESSES') is not null
      drop table #TEMP_ADDRESSPROCESS_ADDRESSES;

    return 1;
  end catch

  return 0;