USP_DATAFORMTEMPLATE_VIEW_MEMBERSHIPPROGRAMLEVEL

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@DATALOADED bit INOUT
@LEVELS xml INOUT
@PROGRAMTYPECODE tinyint INOUT
@PROGRAMBASEDONCODE tinyint INOUT
@TERMCOUNT tinyint INOUT
@MULTIPLETERMS tinyint INOUT

Definition

Copy

                CREATE procedure dbo.USP_DATAFORMTEMPLATE_VIEW_MEMBERSHIPPROGRAMLEVEL
                (
                    @ID uniqueidentifier,
                    @DATALOADED bit = 0 output,
                    @LEVELS xml = null output,
                    @PROGRAMTYPECODE tinyint = null output,
                    @PROGRAMBASEDONCODE tinyint = null output,
                    @TERMCOUNT tinyint = null output,
                    @MULTIPLETERMS tinyint = null output
                )
                as
                    set nocount on;

                    -- be sure to set this, in case the select returns no rows
                    set @DATALOADED = 1;

                    declare @numterms int = 0
                    --select @numterms = count(*) from dbo.UFN_MEMBERSHIPPROGRAM_GETTERMS(@ID)

                    select
                        @PROGRAMTYPECODE = MP.PROGRAMTYPECODE,
                        @PROGRAMBASEDONCODE = MP.PROGRAMBASEDONCODE,
                        @TERMCOUNT = @numterms,
                        @MULTIPLETERMS = MP.MULTIPLETERMS
                    from
                        dbo.MEMBERSHIPPROGRAM MP
                    where MP.ID = @ID

                    declare @HIGHESTSEQUENCE int;
                    declare @LOWESTSEQUENCE int;

                    select 
                        @HIGHESTSEQUENCE = max(SEQUENCE)
                    from 
                        dbo.MEMBERSHIPLEVEL
                    where 
                        MEMBERSHIPPROGRAMID = @ID
                        and MEMBERSHIPLEVEL.ISACTIVE = 1

                    select
                        @LOWESTSEQUENCE = min(SEQUENCE)
                    from 
                        dbo.MEMBERSHIPLEVEL
                    where 
                        MEMBERSHIPPROGRAMID = @ID
                        and MEMBERSHIPLEVEL.ISACTIVE = 1

                    -- populate the output parameters, which correspond to fields on the form.  Note that
                    -- we set @DATALOADED = 1 to indicate that the load was successful.  Otherwise, the system
                    -- will display a "no data loaded" message.
                    set @LEVELS = (
                        select * from (
                            select
                                ROWNUM = row_number() over (partition by ML.ID order by ML.ID, ML.SEQUENCE),
                                ML.NAME,
                                ML.[DESCRIPTION],
                                ML.OBTAINLEVEL as HOWPEOPLEOBTAIN,
                                case when @numterms > 1 then NULL else MLT.LOWAMOUNT END AS LOWAMOUNT,
                                case when @numterms > 1 then NULL else MLT.AMOUNT END AS AMOUNT,
                                ML.MEMBERSALLOWED as MEMBERCOUNT,
                                ML.CARDSALLOWED,
                                ML.CHILDRENALLOWED,
                                TC.DESCRIPTION as TIER,
                                case when ML.FORCEMANUALDOWNGRADES = 0 then 'No' ELSE 'Yes' end as FORCEMANUALDOWNGRADES,
                                ML.SEQUENCE,
                                ML.ID,
                                ISACTIVE = case ML.ISACTIVE when 0 then 'No' when 1 then 'Yes' end,
                                MP.BASECURRENCYID,
                                case when ML.SEQUENCE = @HIGHESTSEQUENCE then 0 else 1 end as PROMOTABLE,
                                case when ML.SEQUENCE = @LOWESTSEQUENCE then 0 else 1 end as DEMOTABLE                
                            from dbo.MEMBERSHIPPROGRAM MP
                                inner join dbo.MEMBERSHIPLEVEL ML on MP.ID = ML.MEMBERSHIPPROGRAMID
                                left join dbo.MEMBERSHIPLEVELTERM MLT on ML.ID = MLT.LEVELID
                                left outer join dbo.TIERCODE TC on ML.TIERCODEID = TC.ID
                            where MP.ID = @ID
                                and ML.ISACTIVE = 1
                            ) as L
                            where rownum = 1        --using the row_number partitioned by LEVEL.ID ensures that you don't see the same level for different prices
                            order by SEQUENCE
                            for xml raw ('ITEM'), type, elements, root('LEVELS'), BINARY BASE64);

                return 0;