USP_MKTSEGMENTATIONSEGMENT_MOVEDOWN
Executes the "Marketing Effort Segment: 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_MKTSEGMENTATIONSEGMENT_MOVEDOWN]
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null
)
as
set nocount on;
declare @SEGMENTATIONID uniqueidentifier;
declare @ISHISTORICAL bit;
declare @MARKETINGPLANITEMID uniqueidentifier;
declare @BRIEFID uniqueidentifier;
declare @NEXTBRIEFSEQ int;
declare @MAXBRIEFSEQ int;
declare @BELOWSEGMENTID uniqueidentifier;
declare @SEQ int;
declare @MAXSEQ 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();
select
@SEGMENTATIONID = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID],
@ISHISTORICAL = [MKTSEGMENTATION].[ISHISTORICAL],
@SEQ = [MKTSEGMENTATIONSEGMENT].[SEQUENCE],
@BRIEFID = [MKTSEGMENTATIONSEGMENT].[MARKETINGPLANBRIEFID],
@NEXTBRIEFSEQ = [MKTSEGMENTATIONSEGMENT].[NEXTBRIEFSEQUENCE],
@MARKETINGPLANITEMID = [MKTSEGMENTATION].[MARKETINGPLANITEMID]
from dbo.[MKTSEGMENTATIONSEGMENT]
inner join dbo.[MKTSEGMENTATION] on [MKTSEGMENTATION].[ID] = [MKTSEGMENTATIONSEGMENT].[SEGMENTATIONID]
where [MKTSEGMENTATIONSEGMENT].[ID] = @ID;
if @ISHISTORICAL = 1
begin
raiserror('BBERR_MKTSEGMENTATION_ISHISTORICAL', 13, 1);
raiserror('Segments in historical marketing efforts may not be moved.', 1, 11);
return 1;
end
--Check if the mailing is currently being activated...
exec dbo.[USP_MKTSEGMENTATION_CHECKACTIVATION] @SEGMENTATIONID;
if @BRIEFID is not null
begin
--Segment is under a brief (only move if not the last segment in the brief)
if @SEQ < (select max([SEQUENCE]) from dbo.[MKTSEGMENTATIONSEGMENT] where [SEGMENTATIONID] = @SEGMENTATIONID and [MARKETINGPLANBRIEFID] = @BRIEFID)
begin
select @BELOWSEGMENTID = [ID]
from dbo.[MKTSEGMENTATIONSEGMENT]
where [SEGMENTATIONID] = @SEGMENTATIONID
and [MARKETINGPLANBRIEFID] = @BRIEFID
and [SEQUENCE] = (@SEQ + 1);
--swap the 2 segments
exec dbo.[USP_MKTSEGMENTATION_SWAPSEGMENTS] @ID, @BELOWSEGMENTID, @CHANGEAGENTID;
end
end
else
begin
--Segment is at the root level (only move if not the last segment in the mailing)
select @MAXSEQ = max([SEQUENCE])
from dbo.[MKTSEGMENTATIONSEGMENT]
where [SEGMENTATIONID] = @SEGMENTATIONID;
select @MAXBRIEFSEQ = isnull(max([SEQUENCE]), 0)
from dbo.[MKTMARKETINGPLANBRIEF]
where [MARKETINGPLANITEMID] = @MARKETINGPLANITEMID;
if (@SEQ < @MAXSEQ) or ((@SEQ = @MAXSEQ) and (@NEXTBRIEFSEQ between 1 and @MAXBRIEFSEQ))
begin
select @BELOWSEGMENTID = [ID]
from dbo.[MKTSEGMENTATIONSEGMENT]
where [SEGMENTATIONID] = @SEGMENTATIONID
and [MARKETINGPLANBRIEFID] is null
and [NEXTBRIEFSEQUENCE] = @NEXTBRIEFSEQ
and [SEQUENCE] = (@SEQ + 1);
if @BELOWSEGMENTID is not null
--Segment is being moved below another segment, swap the 2 segments
exec dbo.[USP_MKTSEGMENTATION_SWAPSEGMENTS] @ID, @BELOWSEGMENTID, @CHANGEAGENTID;
else
begin
--Segment is being moved down below a brief...
--Get the brief ID we are moving below
select @BRIEFID = [ID]
from dbo.[MKTMARKETINGPLANBRIEF]
where [MARKETINGPLANITEMID] = @MARKETINGPLANITEMID
and [SEQUENCE] = @NEXTBRIEFSEQ;
--Get the minimum sequence to refresh the views
set @MINSEQ = @SEQ;
set @MAXSEQ = @MINSEQ + 1;
--Get the new sequence for the segment
select @SEQ = isnull(max([SEQUENCE]), @SEQ)
from dbo.[MKTSEGMENTATIONSEGMENT]
where [SEGMENTATIONID] = @SEGMENTATIONID
and [MARKETINGPLANBRIEFID] = @BRIEFID;
--Update the segment sequence
update dbo.[MKTSEGMENTATIONSEGMENT] set
[NEXTBRIEFSEQUENCE] = (@NEXTBRIEFSEQ + 1),
[SEQUENCE] = @SEQ,
[CHANGEDBYID] = @CHANGEAGENTID,
[DATECHANGED] = @CURRENTDATE
where [ID] = @ID;
--Resequence all segments in the brief
update dbo.[MKTSEGMENTATIONSEGMENT] set
[SEQUENCE] = [SEQUENCE] - 1,
[CHANGEDBYID] = @CHANGEAGENTID,
[DATECHANGED] = @CURRENTDATE
where [SEGMENTATIONID] = @SEGMENTATIONID
and [MARKETINGPLANBRIEFID] = @BRIEFID;
--Clear the cache for this segment and all segments after it
select
@MINSEGMENTID = [ID]
from dbo.[MKTSEGMENTATIONSEGMENT]
where [SEGMENTATIONID] = @SEGMENTATIONID
and [SEQUENCE] = @MINSEQ;
exec dbo.[USP_MKTSEGMENTATIONSEGMENT_CLEARCACHE] @MINSEGMENTID, 0, 1;
end
end
end
end try
begin catch
exec dbo.[USP_RAISE_ERROR];
return 1;
end catch
return 0;