USP_COMMUNICATIONLETTER_MOVEUP

Executes the "Communication Letter: Move Up" 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_COMMUNICATIONLETTER_MOVEUP
(
    @ID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier
)
as begin
    declare @SEGMENTATIONID uniqueidentifier;
    declare @SEQUENCE int;
    declare @CHANNELCODE tinyint;
    declare @CHANNELPREFERENCECODE tinyint;
    declare @MAILSEGMENTATIONSEGMENTID uniqueidentifier;
    declare @EMAILSEGMENTATIONSEGMENTID uniqueidentifier;
    declare @CHANNELCODE_ABOVE tinyint;
    declare @CURRENTDATE datetime = getDate();
    declare @ACTIVE bit = 0;
    declare @DELETEAPPEALINFO bit = 0;

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

    begin try
        select
            @SEGMENTATIONID = COMMUNICATIONLETTER.SEGMENTATIONID,
            @ACTIVE = MKTSEGMENTATION.ACTIVE,
            @DELETEAPPEALINFO = case APPEALMAILING.APPEALID when null then 0 else 1 end,
            @SEQUENCE = COMMUNICATIONLETTER.SEQUENCE,
            @CHANNELCODE = COMMUNICATIONLETTER.CHANNELCODE,
            @CHANNELPREFERENCECODE = COMMUNICATIONLETTER.CHANNELPREFERENCECODE,
            @MAILSEGMENTATIONSEGMENTID = MAILSEGMENTATIONSEGMENT.ID,
            @EMAILSEGMENTATIONSEGMENTID = EMAILSEGMENTATIONSEGMENT.ID
        from dbo.COMMUNICATIONLETTER
        inner join dbo.MKTSEGMENTATION
            on COMMUNICATIONLETTER.SEGMENTATIONID = MKTSEGMENTATION.ID
        left outer join dbo.APPEALMAILING
            on COMMUNICATIONLETTER.SEGMENTATIONID = APPEALMAILING.ID
        left outer join dbo.MKTSEGMENTATIONSEGMENT MAILSEGMENTATIONSEGMENT
            on COMMUNICATIONLETTER.MAILPACKAGEID = MAILSEGMENTATIONSEGMENT.PACKAGEID
            and COMMUNICATIONLETTER.MAILSEGMENTID = MAILSEGMENTATIONSEGMENT.SEGMENTID
        left outer join dbo.MKTSEGMENTATIONSEGMENT EMAILSEGMENTATIONSEGMENT
            on COMMUNICATIONLETTER.EMAILPACKAGEID = EMAILSEGMENTATIONSEGMENT.PACKAGEID
            and COMMUNICATIONLETTER.EMAILSEGMENTID = EMAILSEGMENTATIONSEGMENT.SEGMENTID
        where COMMUNICATIONLETTER.ID = @ID;

        if @SEQUENCE = 1
            raiserror('BBERR_COMMUNICATIONLETTER_CANNOTMOVEUP', 13, 1);

        select
            @CHANNELCODE_ABOVE = CHANNELCODE
        from dbo.COMMUNICATIONLETTER
        where COMMUNICATIONLETTER.SEGMENTATIONID = @SEGMENTATIONID
            and COMMUNICATIONLETTER.SEQUENCE = @SEQUENCE - 1;

        -- Rollback active mailings before you can update move segmentation segments around

        if @ACTIVE = 1 or dbo.UFN_MKTSEGMENTATION_HASACTIVESEGMENTS(@SEGMENTATIONID) = 1
            exec dbo.USP_MKTSEGMENTATIONACTIVATE_ROLLBACK @SEGMENTATIONID, @CHANGEAGENTID, @DELETEAPPEALINFO, 1;

        update dbo.COMMUNICATIONLETTER set
            SEQUENCE = 
                case COMMUNICATIONLETTER.SEQUENCE
                    when @SEQUENCE then @SEQUENCE - 1
                    when @SEQUENCE - 1 then @SEQUENCE
                end,
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = @CURRENTDATE
        where COMMUNICATIONLETTER.SEGMENTATIONID = @SEGMENTATIONID
            and (
                COMMUNICATIONLETTER.SEQUENCE = @SEQUENCE
                or COMMUNICATIONLETTER.SEQUENCE = @SEQUENCE - 1
            );

        if @CHANNELCODE = 0 and @MAILSEGMENTATIONSEGMENTID is not null
            begin
                exec dbo.USP_MKTSEGMENTATIONSEGMENT_MOVEUP @MAILSEGMENTATIONSEGMENTID, @CHANGEAGENTID;

                if @CHANNELCODE_ABOVE = 2
                    exec dbo.USP_MKTSEGMENTATIONSEGMENT_MOVEUP @MAILSEGMENTATIONSEGMENTID, @CHANGEAGENTID;
            end

        if @CHANNELCODE = 1 and @EMAILSEGMENTATIONSEGMENTID is not null
            begin
                exec dbo.USP_MKTSEGMENTATIONSEGMENT_MOVEUP @EMAILSEGMENTATIONSEGMENTID, @CHANGEAGENTID;

                if @CHANNELCODE_ABOVE = 2
                    exec dbo.USP_MKTSEGMENTATIONSEGMENT_MOVEUP @EMAILSEGMENTATIONSEGMENTID, @CHANGEAGENTID;
            end

        -- if sending both mail and email, you must move the preferred channel first

        if @CHANNELCODE = 2
            begin
                if @CHANNELPREFERENCECODE = 0
                    begin
                        if @EMAILSEGMENTATIONSEGMENTID is not null
                            begin
                                exec dbo.USP_MKTSEGMENTATIONSEGMENT_MOVEUP @EMAILSEGMENTATIONSEGMENTID, @CHANGEAGENTID;

                                if @CHANNELCODE_ABOVE = 2
                                    exec dbo.USP_MKTSEGMENTATIONSEGMENT_MOVEUP @EMAILSEGMENTATIONSEGMENTID, @CHANGEAGENTID;
                            end

                        if @MAILSEGMENTATIONSEGMENTID is not null
                            begin
                                exec dbo.USP_MKTSEGMENTATIONSEGMENT_MOVEUP @MAILSEGMENTATIONSEGMENTID, @CHANGEAGENTID;

                                if @CHANNELCODE_ABOVE = 2
                                    exec dbo.USP_MKTSEGMENTATIONSEGMENT_MOVEUP @MAILSEGMENTATIONSEGMENTID, @CHANGEAGENTID;
                            end
                    end
                else
                    begin
                        if @MAILSEGMENTATIONSEGMENTID is not null
                            begin
                                exec dbo.USP_MKTSEGMENTATIONSEGMENT_MOVEUP @MAILSEGMENTATIONSEGMENTID, @CHANGEAGENTID;

                                if @CHANNELCODE_ABOVE = 2
                                    exec dbo.USP_MKTSEGMENTATIONSEGMENT_MOVEUP @MAILSEGMENTATIONSEGMENTID, @CHANGEAGENTID;
                            end

                        if @EMAILSEGMENTATIONSEGMENTID is not null
                            begin
                                exec dbo.USP_MKTSEGMENTATIONSEGMENT_MOVEUP @EMAILSEGMENTATIONSEGMENTID, @CHANGEAGENTID;

                                if @CHANNELCODE_ABOVE = 2
                                    exec dbo.USP_MKTSEGMENTATIONSEGMENT_MOVEUP @EMAILSEGMENTATIONSEGMENTID, @CHANGEAGENTID;
                            end
                    end
            end
    end try

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

    return 0;

end