UFN_MEMBERSHIPTRANSACTION_DETERMINEACTIONCODE

Determines the action code of a membership renewal.

Return

Return Type
tinyint

Parameters

Parameter Parameter Type Mode Description
@MEMBERSHIPID uniqueidentifier IN
@NEWMEMBERSHIPLEVELID uniqueidentifier IN
@TRANSACTIONDATE datetime IN

Definition

Copy


            CREATE function dbo.UFN_MEMBERSHIPTRANSACTION_DETERMINEACTIONCODE
            (
                @MEMBERSHIPID uniqueidentifier,
                @NEWMEMBERSHIPLEVELID uniqueidentifier,
                @TRANSACTIONDATE datetime
            )
            returns tinyint with execute as caller
            as
            begin
                --if there is no membership, this is a join

                if not exists (select ID from dbo.MEMBERSHIP where ID = @MEMBERSHIPID
                    return 0;

                --if the membership is dropped, this is a rejoin

                if exists (select ID from dbo.MEMBERSHIP where ID = @MEMBERSHIPID and STATUSCODE = 1)
                    return 5;                

                declare @ACTIONCODE tinyint
                declare @PRIORLEVELID uniqueidentifier
                declare @ENDEXPDATE datetime

                select @PRIORLEVELID = MEMBERSHIPLEVELID,
                    @ENDEXPDATE = dbo.UFN_MEMBERSHIPLEVEL_CREATERENEWALAFTEREXPIRATIONDATE_2(MEMBERSHIPLEVELID, MEMBERSHIP.EXPIRATIONDATE,@TRANSACTIONDATE)
                from dbo.MEMBERSHIP
                where ID = @MEMBERSHIPID

                --if the membership is past expiration window, this is a rejoin

                if @TRANSACTIONDATE > @ENDEXPDATE
                begin
                    return (select case when MEMBERSHIPLEVEL.RENEWALWINDOWREVENUETYPECODE = 1 then 0 else 5 end
                                from dbo.MEMBERSHIPLEVEL
                                inner join dbo.MEMBERSHIP on MEMBERSHIPLEVEL.ID = MEMBERSHIP.MEMBERSHIPLEVELID
                                where MEMBERSHIP.ID = @MEMBERSHIPID)
                end

                if @PRIORLEVELID = @NEWMEMBERSHIPLEVELID
                    set @ACTIONCODE = 1
                else
                    begin
                        declare @NEWSEQUENCE integer

                        select @NEWSEQUENCE = SEQUENCE
                        from dbo.MEMBERSHIPLEVEL
                        where MEMBERSHIPLEVEL.ID = @NEWMEMBERSHIPLEVELID

                        declare @LEVELSEQUENCE integer
                        select @LEVELSEQUENCE = SEQUENCE
                        from dbo.MEMBERSHIPLEVEL
                        where @PRIORLEVELID = ID

                        if @NEWSEQUENCE > @LEVELSEQUENCE
                            set @ACTIONCODE = 2
                        else
                            set @ACTIONCODE = 3
                    end

                return @ACTIONCODE
            end