USP_MEMBERSHIPLEVEL_DEMOTE

Parameters

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

Definition

Copy


                    CREATE procedure dbo.USP_MEMBERSHIPLEVEL_DEMOTE
                    (
                        @ID uniqueidentifier,
                        @CHANGEAGENTID uniqueidentifier
                    )
                    as 
                    begin
                        set nocount on;

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

                        declare @CURRENTDATE datetime = getdate();
                        declare @CURRENTSEQUENCE int = 0;
                        declare @MEMBERSHIPPROGRAMID uniqueidentifier;
                        declare @MINSEQUENCE int;

                        declare @PROGRAMTYPECODE tinyint;
                        declare @PROGRAMBASEDONCODE tinyint;
                        declare @LEVELOBTAINCODE tinyint;

                        select
                            @MEMBERSHIPPROGRAMID = MEMBERSHIPLEVEL.MEMBERSHIPPROGRAMID,
                            @CURRENTSEQUENCE = MEMBERSHIPLEVEL.SEQUENCE,
                            @LEVELOBTAINCODE = MEMBERSHIPLEVEL.OBTAINLEVELCODE,
                            @PROGRAMTYPECODE = MEMBERSHIPPROGRAM.PROGRAMTYPECODE,
                            @PROGRAMBASEDONCODE = MEMBERSHIPPROGRAM.PROGRAMBASEDONCODE
                        from
                            dbo.MEMBERSHIPLEVEL
                            inner join dbo.MEMBERSHIPPROGRAM on MEMBERSHIPLEVEL.MEMBERSHIPPROGRAMID = MEMBERSHIPPROGRAM.ID
                        where
                            MEMBERSHIPLEVEL.ID = @ID;

                        select @MINSEQUENCE = min(SEQUENCE)
                        from dbo.MEMBERSHIPLEVEL
                        where MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID
                            and OBTAINLEVELCODE = @LEVELOBTAINCODE

                        --If this is the lowest level already or the level is contributions based, then throw an exception

                        if @CURRENTSEQUENCE <= @MINSEQUENCE or (@PROGRAMBASEDONCODE = 1 or (@PROGRAMBASEDONCODE = 2 and @LEVELOBTAINCODE = 1))
                        begin
                            raiserror('BBERR_CANNOTDEMOTE', 13, 1);
                        end

                        declare @LEVELTOSWAPWITHID uniqueidentifier;
                        declare @SEQUENCETOSWAPWITH int;

                        select top 1 @LEVELTOSWAPWITHID = ID,
                                        @SEQUENCETOSWAPWITH = SEQUENCE
                        from dbo.MEMBERSHIPLEVEL
                        where MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID
                            and SEQUENCE < @CURRENTSEQUENCE
                            and OBTAINLEVELCODE = @LEVELOBTAINCODE
                            and ISACTIVE = 1
                        order by SEQUENCE desc

                        update dbo.MEMBERSHIPLEVEL
                        set SEQUENCE = @SEQUENCETOSWAPWITH
                        where ID = @ID;

                        update dbo.MEMBERSHIPLEVEL
                        set SEQUENCE = @CURRENTSEQUENCE
                        where ID = @LEVELTOSWAPWITHID;

                    end