USP_MKTSEGMENTWHITEMAIL_UPDATESOURCECODEMAP

Updates the source code map tables for a given white mail segment.

Parameters

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

Definition

Copy


create procedure dbo.[USP_MKTSEGMENTWHITEMAIL_UPDATESOURCECODEMAP]
(
  @SEGMENTID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier = null
)
as
  set nocount on;

  declare @SOURCECODEMAPID uniqueidentifier;
  declare @QUERYVIEWCATALOGID uniqueidentifier;
  declare @SOURCECODEID uniqueidentifier;
  declare @SEGMENTATIONID uniqueidentifier;
  declare @ACTIVE bit;
  declare @SQL nvarchar(max);
  declare @CURRENTDATE datetime;
  declare @WORKTABLE table (
    [MKTSOURCECODEMAPID] uniqueidentifier,
    [MKTSOURCECODEPARTDEFINITIONID] uniqueidentifier,
    [CODE] nvarchar(10),
    [MKTSOURCECODEPARTDEFINITIONVALUESID] uniqueidentifier
  );

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

    set @CURRENTDATE = getdate();

    select
      @SOURCECODEMAPID = [MKTSOURCECODEMAP].[ID],
      @QUERYVIEWCATALOGID = [MKTSEGMENT].[QUERYVIEWCATALOGID],
      @SOURCECODEID = [MKTSEGMENTWHITEMAIL].[SOURCECODEID],
      @SEGMENTATIONID = [MKTSEGMENTWHITEMAIL].[SEGMENTATIONID],
      @ACTIVE = isnull([MKTSEGMENTATION].[ACTIVE], 0)
    from dbo.[MKTSEGMENTWHITEMAIL]
    inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTWHITEMAIL].[ID]
    inner join dbo.[MKTSOURCECODEMAP] on [MKTSOURCECODEMAP].[WHITEMAILSEGMENTID] = [MKTSEGMENTWHITEMAIL].[ID]
    left outer join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTWHITEMAIL].[SEGMENTATIONID]
    where [MKTSEGMENTWHITEMAIL].[ID] = @SEGMENTID;

    update dbo.[MKTSOURCECODEMAP] set
      [DONORQUERYVIEWCATALOGID] = @QUERYVIEWCATALOGID,
      [SOURCECODEID] = @SOURCECODEID,
      [SOURCECODE] = dbo.[UFN_MKTSOURCECODE_BUILDCODE](@SEGMENTID, null, null),
      [SEGMENTATIONID] = @SEGMENTATIONID,
      [CHANGEDBYID] = @CHANGEAGENTID,
      [DATECHANGED] = @CURRENTDATE
    where [ID] = @SOURCECODEMAPID;

    insert into @WORKTABLE (
      [MKTSOURCECODEMAPID],
      [MKTSOURCECODEPARTDEFINITIONID],
      [CODE],
      [MKTSOURCECODEPARTDEFINITIONVALUESID]
    )
    select
      @SOURCECODEMAPID,
      [MKTSOURCECODEITEM].[MKTSOURCECODEPARTDEFINITIONID],
      dbo.[UFN_MKTSOURCECODE_BUILDCODE](@SEGMENTID, null, [MKTSOURCECODEITEM].[ID]) as [CODE],
      case when [MKTSOURCECODEPARTDEFINITION].[ITEMTYPECODE] = 0
           then case when exists (select top 1 1 from dbo.[MKTSOURCECODEPART] where [SOURCECODEITEMID] = [MKTSOURCECODEITEM].[ID] and [WHITEMAILSEGMENTID] = @SEGMENTID)
                     then (select [PARTDEFINITIONVALUESID] from dbo.[MKTSOURCECODEPART] where [SOURCECODEITEMID] = [MKTSOURCECODEITEM].[ID] and [WHITEMAILSEGMENTID] = @SEGMENTID)
                     else (select [PARTDEFINITIONVALUESID] from dbo.[MKTSEGMENTATION] where [ID] = @SEGMENTATIONID)
                end
           when [MKTSOURCECODEPARTDEFINITION].[ITEMTYPECODE] = 1
           then [MKTSEGMENT].[PARTDEFINITIONVALUESID]
           when [MKTSOURCECODEPARTDEFINITION].[ITEMTYPECODE] = 5
           then case when exists (select top 1 1 from dbo.[MKTSOURCECODEPART] where [SOURCECODEITEMID] = [MKTSOURCECODEITEM].[ID] and [WHITEMAILSEGMENTID] = @SEGMENTID)
                     then (select [PARTDEFINITIONVALUESID] from dbo.[MKTSOURCECODEPART] where [SOURCECODEITEMID] = [MKTSOURCECODEITEM].[ID] and [WHITEMAILSEGMENTID] = @SEGMENTID)
                     else (select [PARTDEFINITIONVALUESID] from dbo.[MKTSOURCECODEPART] where [SEGMENTATIONID] = @SEGMENTATIONID and [SOURCECODEITEMID] = [MKTSOURCECODEITEM].[ID] and [SEGMENTATIONSEGMENTID] is null and [SEGMENTATIONTESTSEGMENTID] is null and [WHITEMAILSEGMENTID] is null)
                end
           else 
                (select [PARTDEFINITIONVALUESID] from dbo.[MKTSOURCECODEPART] where [SOURCECODEITEMID] = [MKTSOURCECODEITEM].[ID] and [WHITEMAILSEGMENTID] = @SEGMENTID)
      end as [MKTSOURCECODEPARTDEFINITIONVALUESID]
    from dbo.[MKTSOURCECODEMAP]
    inner join dbo.[MKTSOURCECODEITEM] on [MKTSOURCECODEITEM].[SOURCECODEID] = [MKTSOURCECODEMAP].[SOURCECODEID]
    inner join dbo.[MKTSOURCECODEPARTDEFINITION] on [MKTSOURCECODEPARTDEFINITION].[ID] = [MKTSOURCECODEITEM].[MKTSOURCECODEPARTDEFINITIONID]
    inner join dbo.[MKTSEGMENTWHITEMAIL] on [MKTSEGMENTWHITEMAIL].[ID] = [MKTSOURCECODEMAP].[WHITEMAILSEGMENTID]
    inner join dbo.[MKTSEGMENT] on [MKTSEGMENT].[ID] = [MKTSEGMENTWHITEMAIL].[ID]
    where [MKTSOURCECODEMAP].[WHITEMAILSEGMENTID] = @SEGMENTID;

    -- remove any parts that were dropped from the source code

    delete from dbo.[MKTSOURCECODEMAPPART]
    where [MKTSOURCECODEMAPID] = @SOURCECODEMAPID
    and [MKTSOURCECODEPARTDEFINITIONID] not in (select [MKTSOURCECODEPARTDEFINITIONID] from @WORKTABLE);

    -- update any parts that are still in the source code

    update dbo.[MKTSOURCECODEMAPPART] set
      [CODE] = [W].[CODE],
      [MKTSOURCECODEPARTDEFINITIONVALUESID] = [W].[MKTSOURCECODEPARTDEFINITIONVALUESID]
    from dbo.[MKTSOURCECODEMAPPART]
    inner join @WORKTABLE as [W] on ([W].[MKTSOURCECODEMAPID] = [MKTSOURCECODEMAPPART].[MKTSOURCECODEMAPID] and [W].[MKTSOURCECODEPARTDEFINITIONID] = [MKTSOURCECODEMAPPART].[MKTSOURCECODEPARTDEFINITIONID]);

    -- add any parts that are new to the source code

    insert into dbo.[MKTSOURCECODEMAPPART] (
      [ID],
      [MKTSOURCECODEMAPID],
      [MKTSOURCECODEPARTDEFINITIONID],
      [CODE],
      [MKTSOURCECODEPARTDEFINITIONVALUESID],
      [ADDEDBYID],
      [CHANGEDBYID],
      [DATEADDED],
      [DATECHANGED]
    )
    select
      newid(),
      [W].[MKTSOURCECODEMAPID],
      [W].[MKTSOURCECODEPARTDEFINITIONID],
      [W].[CODE],
      [W].[MKTSOURCECODEPARTDEFINITIONVALUESID],
      @CHANGEAGENTID,
      @CHANGEAGENTID,
      @CURRENTDATE,
      @CURRENTDATE
    from @WORKTABLE as [W]
    left outer join dbo.[MKTSOURCECODEMAPPART] on ([MKTSOURCECODEMAPPART].[MKTSOURCECODEMAPID] = [W].[MKTSOURCECODEMAPID] and [MKTSOURCECODEMAPPART].[MKTSOURCECODEPARTDEFINITIONID] = [W].[MKTSOURCECODEPARTDEFINITIONID])
    where [MKTSOURCECODEMAPPART].[ID] is null;

  end try

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

  return 0;