USP_EDUCATIONALHISTORYSTATUS_MOVE

Moves educational history statuses up or down in sequence.

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@SEQUENCECHANGE int IN
@CHANGEAGENTID uniqueidentifier IN

Definition

Copy


            CREATE procedure dbo.USP_EDUCATIONALHISTORYSTATUS_MOVE
                (
                    @ID uniqueidentifier,
                    @SEQUENCECHANGE int = 1,
                    @CHANGEAGENTID uniqueidentifier = null
                )
            as
            begin

                -- See if we are making any change at all

                if (@SEQUENCECHANGE <> 0)
                begin
                    if @CHANGEAGENTID is null  
                        exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output

                    declare @CURRENTDATE datetime = getdate()

                    -- Get the original sequence for the item

                    declare @ORGSEQUENCE int = (select SEQUENCE from dbo.EDUCATIONALHISTORYSTATUS where ID = @ID);

                    -- get the next higher/lower item's SEQUENCE

                    declare @SWAPSEQUENCE int;
                    select 
                        @SWAPSEQUENCE = case when @SEQUENCECHANGE < 0 then max(SEQUENCE) else min(SEQUENCE) end
                    from  dbo.EDUCATIONALHISTORYSTATUS 
                    where 
                        ((@SEQUENCECHANGE > 0 and SEQUENCE > @ORGSEQUENCE
                            or (@SEQUENCECHANGE < 0 and SEQUENCE < @ORGSEQUENCE))

                    if @SWAPSEQUENCE is not null
                        -- handle both in single update due to possible uniqueness constraint

                        update dbo.EDUCATIONALHISTORYSTATUS
                            set SEQUENCE = 
                                case when ID = @ID 
                                    then @SWAPSEQUENCE 
                                    else @ORGSEQUENCE 
                                end,
                                CHANGEDBYID = @CHANGEAGENTID,
                                DATECHANGED = @CURRENTDATE
                        where
                            SEQUENCE in (@ORGSEQUENCE, @SWAPSEQUENCE)

                end

                return 0;
            end