USP_MKTSEGMENTATIONASKLADDEROVERRIDE_MOVEDOWN

Executes the "Marketing Effort Ask Ladder Override: Move Down" record operation.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier 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_MKTSEGMENTATIONASKLADDEROVERRIDE_MOVEDOWN]
(
  @ID uniqueidentifier,
  @CHANGEAGENTID uniqueidentifier = null
)
as
  set nocount on;

  declare @SEGMENTATIONID uniqueidentifier;
  declare @SEQ int;
  declare @MAXSEQ int;
  declare @MINSEQ int;
  declare @NEXTID uniqueidentifier;
  declare @CURRENTDATE datetime = getdate();

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

  begin try
    select
      @SEQ = [SEQUENCE],
      @SEGMENTATIONID = [SEGMENTATIONID]
    from dbo.[MKTSEGMENTATIONASKLADDEROVERRIDE]
    where [ID] = @ID;

    select
      @MAXSEQ = max([SEQUENCE])
    from dbo.[MKTSEGMENTATIONASKLADDEROVERRIDE]
    where [SEGMENTATIONID] = @SEGMENTATIONID;

    if (@SEQ < @MAXSEQ
      begin
        select
          @NEXTID = [ID]
        from dbo.[MKTSEGMENTATIONASKLADDEROVERRIDE]
        where [SEGMENTATIONID] = @SEGMENTATIONID
        and [SEQUENCE] = (@SEQ + 1);

        if @NEXTID is not null
          begin
            update dbo.[MKTSEGMENTATIONASKLADDEROVERRIDE] set
              [SEQUENCE] = @SEQ,
              [DATECHANGED] = @CURRENTDATE,
              [CHANGEDBYID] = @CHANGEAGENTID
            where [ID] = @NEXTID;

            update dbo.[MKTSEGMENTATIONASKLADDEROVERRIDE] set
              [SEQUENCE] = @SEQ + 1,
              [DATECHANGED] = @CURRENTDATE,
              [CHANGEDBYID] = @CHANGEAGENTID
            where [ID] = @ID;

            --Clear the record count cache...

            exec dbo.[USP_MKTSEGMENTATION_CLEARCACHE] @SEGMENTATIONID, 1;
          end
      end
  end try

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

  return 0;