USP_MKTMARKETINGPLANBRIEF_SWAPBRIEFS

Swaps the sequence of two marketing plan selection briefs.

Parameters

Parameter Parameter Type Mode Description
@TOPBRIEFID uniqueidentifier IN
@BOTTOMBRIEFID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.[USP_MKTMARKETINGPLANBRIEF_SWAPBRIEFS]
(
  @TOPBRIEFID uniqueidentifier,
  @BOTTOMBRIEFID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier = null
)
as
  set nocount on;

  declare @SEGMENTATIONID uniqueidentifier;
  declare @TOPCOUNT int;
  declare @BOTTOMCOUNT int;
  declare @MINSEQ int;
  declare @MINSEGMENTID uniqueidentifier;
  declare @CURRENTDATE datetime;

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

    set @CURRENTDATE = getdate();

    /* Swap the sequences */
    update dbo.[MKTMARKETINGPLANBRIEF] set
      [SEQUENCE] = [SEQUENCE] + 1,
      [CHANGEDBYID] = @CHANGEAGENTID,
      [DATECHANGED] = @CURRENTDATE
    where [ID] = @TOPBRIEFID;

    update dbo.[MKTMARKETINGPLANBRIEF] set
      [SEQUENCE] = [SEQUENCE] - 1,
      [CHANGEDBYID] = @CHANGEAGENTID,
      [DATECHANGED] = @CURRENTDATE
    where [ID] = @BOTTOMBRIEFID;


    /* Check if the marketing plan is used in a mailing, and update any segments appropriately */
    select
      @SEGMENTATIONID = [ID]
    from dbo.[MKTSEGMENTATION]
    where [MARKETINGPLANITEMID] = (select [MARKETINGPLANITEMID] from dbo.[MKTMARKETINGPLANBRIEF] where [ID] = @TOPBRIEFID);

    if @SEGMENTATIONID is not null
    begin
      --Check if the mailing is currently being activated...

      exec dbo.[USP_MKTSEGMENTATION_CHECKACTIVATION] @SEGMENTATIONID;

      --Get the segment count for each brief

      select
        @TOPCOUNT = count([ID])
      from dbo.[MKTSEGMENTATIONSEGMENT]
      where [SEGMENTATIONID] = @SEGMENTATIONID
      and [MARKETINGPLANBRIEFID] = @TOPBRIEFID;

      select
        @BOTTOMCOUNT = count([ID])
      from dbo.[MKTSEGMENTATIONSEGMENT]
      where [SEGMENTATIONID] = @SEGMENTATIONID
      and [MARKETINGPLANBRIEFID] = @BOTTOMBRIEFID;

      if (@TOPCOUNT > 0) and (@BOTTOMCOUNT > 0)
      begin
        --Resequence all segments in both briefs

        update dbo.[MKTSEGMENTATIONSEGMENT] set
          [SEQUENCE] = [SEQUENCE] + @BOTTOMCOUNT,
          [CHANGEDBYID] = @CHANGEAGENTID,
          [DATECHANGED] = @CURRENTDATE
        where [SEGMENTATIONID] = @SEGMENTATIONID
        and [MARKETINGPLANBRIEFID] = @TOPBRIEFID;

        update dbo.[MKTSEGMENTATIONSEGMENT] set
          [SEQUENCE] = [SEQUENCE] - @TOPCOUNT,
          [CHANGEDBYID] = @CHANGEAGENTID,
          [DATECHANGED] = @CURRENTDATE
        where [SEGMENTATIONID] = @SEGMENTATIONID
        and [MARKETINGPLANBRIEFID] = @BOTTOMBRIEFID;

        --Get the minimum segment ID and sequence to update

        select
          @MINSEQ = min([SEQUENCE])
        from dbo.[MKTSEGMENTATIONSEGMENT]
        where [SEGMENTATIONID] = @SEGMENTATIONID
        and [MARKETINGPLANBRIEFID] = @BOTTOMBRIEFID;

        select 
          @MINSEGMENTID = [ID]
        from dbo.[MKTSEGMENTATIONSEGMENT]
        where [SEGMENTATIONID] = @SEGMENTATIONID
        and [MARKETINGPLANBRIEFID] = @BOTTOMBRIEFID
        and [SEQUENCE] = @MINSEQ;

        --Clear the exclusion cache info table first, for every segment after the minimum segment, so the cache will get rebuilt the next time they want record counts...

        exec dbo.[USP_MKTSEGMENTATIONSEGMENT_CLEARCACHE] @MINSEGMENTID, 0, 1;
      end
    end
  end try

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

  return 0;