UFN_SALESORDER_EXISTSINVALIDMEMBERSHIP_CODE

Return

Return Type
tinyint

Parameters

Parameter Parameter Type Mode Description
@SALESORDERID uniqueidentifier IN

Definition

Copy


CREATE function dbo.UFN_SALESORDER_EXISTSINVALIDMEMBERSHIP_CODE (
    @SALESORDERID uniqueidentifier
)
returns tinyint
with execute as caller
as begin
    declare @MEMBERSHIPERRORCODE tinyint = 0

    select top 1
        @MEMBERSHIPERRORCODE = [ERROR].[CODE]
    from
        dbo.[SALESORDERITEM]
    inner join
        dbo.[SALESORDERITEMMEMBERSHIP] on [SALESORDERITEM].ID = [SALESORDERITEMMEMBERSHIP].ID
    inner join
        dbo.MEMBERSHIPLEVEL on MEMBERSHIPLEVEL.ID = SALESORDERITEMMEMBERSHIP.MEMBERSHIPLEVELID
    inner join
        dbo.MEMBERSHIPLEVELTERM on MEMBERSHIPLEVELTERM.ID = SALESORDERITEMMEMBERSHIP.MEMBERSHIPLEVELTERMID
    outer apply (
        select case 
            --Check for no membership primary member

            when not exists(
                    select 1
                    from dbo.[SALESORDERITEMMEMBER]
                    where 
                        [SALESORDERITEMMEMBER].[SALESORDERITEMMEMBERSHIPID] = [SALESORDERITEMMEMBERSHIP].[ID] and
                        [SALESORDERITEMMEMBER].[ISPRIMARY] = 1
                ) then 1
        end as NOTEXISTS
    ) as PRIMARYMEMBER
    outer apply (
        select 
            case 
                --Ordering in terms of which errors could affect pricing of membership then in terms of severity.

                when MEMBERSHIPLEVELTERM.ISACTIVE = 0 and MEMBERSHIPLEVEL.ISACTIVE = 0 then 4
                when MEMBERSHIPLEVEL.ISACTIVE = 0 then 2
                when MEMBERSHIPLEVELTERM.ISACTIVE = 0 then 3
                when PRIMARYMEMBER.NOTEXISTS = 1 then 1
            end as CODE
    ) as [ERROR]
    where 
        [SALESORDERITEM].[SALESORDERID] = @SALESORDERID
        and [SALESORDERITEM].[TYPECODE] = 1  -- Membership

    order by
        [ERROR].CODE desc --Returning those which affect price first


    return @MEMBERSHIPERRORCODE;
end