USP_MKTSEGMENTATIONACTIVATE_POPULATESOURCECODEPARTSFORLISTS

Used during activation to insert all of a marketing effort's list source codes into the MKTSOURCECODEPART table.

Parameters

Parameter Parameter Type Mode Description
@SEGMENTATIONID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.[USP_MKTSEGMENTATIONACTIVATE_POPULATESOURCECODEPARTSFORLISTS]
(
  @SEGMENTATIONID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier = null
)
as
  set nocount on;

  declare @ACTIVE bit;
  declare @SOURCECODEISHISTORICAL bit;
  declare @CURRENTDATE datetime;
  declare @SQL nvarchar(max);
  declare @DATATABLENAME nvarchar(128);

  begin try
    if @CHANGEAGENTID is null
      exec dbo.[USP_CHANGEAGENT_GETORCREATECHANGEAGENT] @CHANGEAGENTID output;

    set @CURRENTDATE = getdate();

    select
      @ACTIVE = [ACTIVE],
      @SOURCECODEISHISTORICAL = isnull([MKTSOURCECODE].[ISHISTORICAL], 0),
      @DATATABLENAME = dbo.[UFN_MKTSEGMENTATIONACTIVATE_MAKETABLENAME](@SEGMENTATIONID)
    from dbo.[MKTSEGMENTATION]
    left outer join dbo.[MKTSOURCECODE] on [MKTSOURCECODE].[ID] = [MKTSEGMENTATION].[SOURCECODEID]
    where [MKTSEGMENTATION].[ID] = @SEGMENTATIONID;

    -- only save this info if this is the first activation

    if @ACTIVE = 0 and @SOURCECODEISHISTORICAL = 0
      begin
        -- put the list codes into the source code parts table

        declare @LISTSOURCECODEID uniqueidentifier;

        select
          @LISTSOURCECODEID = [MKTSOURCECODEITEM].[ID]
        from dbo.[MKTSOURCECODEITEM]
        inner join dbo.[MKTSOURCECODEVALIDPARTVALUES] on [MKTSOURCECODEVALIDPARTVALUES].[MKTSOURCECODEITEMID] = [MKTSOURCECODEITEM].[ID]
        inner join dbo.[MKTSOURCECODEPARTDEFINITION] on [MKTSOURCECODEPARTDEFINITION].[ID] = [MKTSOURCECODEITEM].[MKTSOURCECODEPARTDEFINITIONID]
        where [MKTSOURCECODEPARTDEFINITION].[ITEMTYPECODE] = 6
        and [MKTSOURCECODEITEM].[SOURCECODEID] = (select [SOURCECODEID] from dbo.[MKTSEGMENTATION] where [ID] = @SEGMENTATIONID);

        if @LISTSOURCECODEID is not null
          begin
            declare @SEGMENTATIONLISTS table([LISTID] uniqueidentifier, [LISTCODE] nvarchar(50), [PARTDEFINITIONVALUESID] uniqueidentifier);

            -- constituent segments (including segments based on the consolidated list)...

            set @SQL = 'with [VALIDRECORDSOURCES] ([ID], [CODE], [PARTDEFINITIONVALUESID]) as' + char(13) +
                       '(' + char(13) +
                       '  select [ID], [CODE], [PARTDEFINITIONVALUESID]' + char(13) +
                       '  from dbo.[MKTRECORDSOURCE]' + char(13) +
                       '  where dbo.[UFN_MKTRECORDSOURCE_VALIDFORPRODUCT]([ID]) = 1' + char(13) +
                       ')' + char(13) +
                       'select distinct' + char(13) +
                       '  coalesce([MKTLIST].[ID], [MKTLIST].[RECORDSOURCEID], [MKTSEGMENT].[QUERYVIEWCATALOGID]),' + char(13) +
                       '  isnull((case when [MKTLIST].[ID] is null then [VALIDRECORDSOURCES].[CODE] else [MKTLIST].[CODE] end), ''''),' + char(13) +
                       '  coalesce([MKTLIST].[PARTDEFINITIONVALUESID], [VALIDRECORDSOURCES].[PARTDEFINITIONVALUESID])' + char(13) +
                       'from dbo.[MKTSEGMENTATIONSEGMENT]' + char(13) +
                       'inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTID]' + char(13) +
                       'inner join [VALIDRECORDSOURCES] on [VALIDRECORDSOURCES].[ID] = [MKTSEGMENT].[QUERYVIEWCATALOGID]' + char(13) +
                       'left join dbo.[' + @DATATABLENAME + '] as [DATATABLE] on [DATATABLE].[SEGMENTID] = [MKTSEGMENTATIONSEGMENT].[ID]' + char(13) + 
                       'left join dbo.[MKTSEGMENTATIONSEGMENTLIST] on [MKTSEGMENTATIONSEGMENTLIST].[ID] = [MKTSEGMENTATIONSEGMENT].[ID]' + char(13) +
                       'left join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[ID] = [MKTSEGMENTATIONSEGMENTLIST].[SEGMENTLISTID] or [MKTSEGMENTLIST].[QUERYVIEWCATALOGID] = [DATATABLE].[DONORQUERYVIEWCATALOGID]' + char(13) +
                       'left join dbo.[MKTLIST] on [MKTLIST].[ID] = [MKTSEGMENTLIST].[LISTID]' + char(13) +
                       'where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID and [MKTSEGMENTATIONSEGMENT].[EXCLUDE] = 0';

            insert into @SEGMENTATIONLISTS
              exec sp_executesql @SQL, N'@SEGMENTATIONID uniqueidentifier', @SEGMENTATIONID = @SEGMENTATIONID;

            -- vendor managed segments...

            insert into @SEGMENTATIONLISTS
              select distinct
                [MKTLIST].[ID] as [LISTID],
                isnull([MKTLIST].[CODE], '') as [LISTCODE],
                [MKTLIST].[PARTDEFINITIONVALUESID]
              from dbo.[MKTSEGMENTATIONSEGMENT]
              inner join dbo.[MKTSEGMENTATIONSEGMENTLIST] on [MKTSEGMENTATIONSEGMENTLIST].[ID] = [MKTSEGMENTATIONSEGMENT].[ID]
              inner join dbo.[MKTSEGMENTLIST] on [MKTSEGMENTLIST].[ID] = [MKTSEGMENTATIONSEGMENTLIST].[SEGMENTLISTID]
              inner join dbo.[MKTLIST] on [MKTLIST].[ID] = [MKTSEGMENTLIST].[LISTID]
              left join @SEGMENTATIONLISTS [S] on [S].[LISTID] = [MKTLIST].[ID]
              where [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID] = @SEGMENTATIONID
              and [MKTSEGMENTLIST].[TYPECODE] = 1
              and [S].[LISTID] is null;

            insert into dbo.[MKTSOURCECODEPART] (
              [ID],
              [SEGMENTATIONID],
              [LISTID],
              [SOURCECODEITEMID],
              [CODE],
              [PARTDEFINITIONVALUESID],
              [ADDEDBYID],
              [CHANGEDBYID],
              [DATEADDED],
              [DATECHANGED]
            )
            select
              NewID(),
              @SEGMENTATIONID,
              [LISTID],
              @LISTSOURCECODEID,
              [LISTCODE],
              [PARTDEFINITIONVALUESID],
              @CHANGEAGENTID,
              @CHANGEAGENTID,
              @CURRENTDATE,
              @CURRENTDATE
            from @SEGMENTATIONLISTS;
          end;
      end;
  end try

  begin catch
    exec dbo.[USP_RAISE_ERROR];
    return 1;
  end catch

  return 0;