USP_DATAFORMTEMPLATE_EDITLOAD_MEMBERSHIPPROGRAMBENEFIT

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@DATALOADED bit INOUT
@CARDFORMAT nvarchar(255) INOUT
@NAMEFORMAT uniqueidentifier INOUT
@TSLONG bigint INOUT
@LEVELS xml INOUT
@BENEFITS xml INOUT
@DEDUCTIBILITYCODE tinyint INOUT
@PROGRAMBASEDONCODE tinyint INOUT
@PROGRAMTYPECODE tinyint INOUT
@TERMCOUNT int INOUT
@BASECURRENCYID uniqueidentifier INOUT
@CARDSREQUIRED bit INOUT
@REPORTCATALOGID uniqueidentifier INOUT
@LETTERTEMPLATEID uniqueidentifier INOUT
@LOWESTTERMVALUE money INOUT

Definition

Copy


CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDITLOAD_MEMBERSHIPPROGRAMBENEFIT(
    @ID uniqueidentifier,
    @DATALOADED bit = 0 output,
      @CARDFORMAT nvarchar(255) = null output,
    @NAMEFORMAT uniqueidentifier = null output,
    @TSLONG bigint = 0 output,
      @LEVELS xml = null output,
    @BENEFITS xml = null output,
    @DEDUCTIBILITYCODE tinyint = null output,
    @PROGRAMBASEDONCODE tinyint = null output,
    @PROGRAMTYPECODE tinyint = null output,
    @TERMCOUNT integer = null output,
    @BASECURRENCYID uniqueidentifier = null output,
    @CARDSREQUIRED bit = null output,
    @REPORTCATALOGID uniqueidentifier = null output,
    @LETTERTEMPLATEID uniqueidentifier = null output,
    @LOWESTTERMVALUE money = null output
)
as

    set nocount on;

    -- be sure to set these, in case the select returns no rows

    set @DATALOADED = 0
    set @TSLONG = 0

    set @CARDSREQUIRED = 0 --MEMBERSHIPCARDS are no longer required


    -- 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.  Also note that we fetch the TSLONG so that concurrency

    -- can be considered.

    select
        @DATALOADED = 1,
        @TSLONG = MP.TSLONG,
      @CARDFORMAT = MP.CARDFORMAT,
    @DEDUCTIBILITYCODE = MP.DEDUCTIBILITYCODE,
      @NAMEFORMAT = MP.NAMEFORMATID,
    @PROGRAMBASEDONCODE = MP.PROGRAMBASEDONCODE,
    @PROGRAMTYPECODE = MP.PROGRAMTYPECODE,
    @TERMCOUNT = MLT.TERMCOUNT,
    @BASECURRENCYID = MP.BASECURRENCYID,
    @REPORTCATALOGID = MP.REPORTCATALOGID,
    @LETTERTEMPLATEID = MP.LETTERTEMPLATEID
  from dbo.MEMBERSHIPPROGRAM MP
  left outer join dbo.REPORTCATALOG RC on MP.CARDFORMAT = RC.NAME
  left outer join dbo.LETTERTEMPLATE lc on mp.CARDFORMAT = lc.NAME and LETTERTEMPLATETYPECODE = 8
  inner join (select MAX(MLT.SEQUENCE)TERMCOUNT, ML.MEMBERSHIPPROGRAMID 
                from 
                    dbo.MEMBERSHIPLEVELTERM MLT
                    inner join MEMBERSHIPLEVEL ML on MLT.LEVELID = ML.ID 
        where ML.MEMBERSHIPPROGRAMID = @ID
                group by ML.MEMBERSHIPPROGRAMID)MLT on MLT.MEMBERSHIPPROGRAMID = MP.ID 
    where MP.ID = @ID


    set @LEVELS = (
    select top 20
      ML.ID,
      ML.NAME,
      ML.MEMBERSALLOWED,
      ML.RECEIPTAMOUNT as PRICE,
      case @PROGRAMTYPECODE
        -- for lifetime program, get the lowest total price term, lifetime term has zero for number of payments

        when 2 then
        (
          select top 1
            case LIFETIMEPAYMENTOPTIONCODE when 0 then TERM.AMOUNT else TERM.AMOUNT * TERM.LIFETIMENUMBEROFPAYMENTS end as TOTALAMOUNT
          from dbo.MEMBERSHIPLEVELTERM TERM
          where TERM.LEVELID = ML.ID
            and TERM.ISACTIVE = 1
          order by TOTALAMOUNT asc
        )
        else 
        (
          select min(TERM.AMOUNT)
          from dbo.MEMBERSHIPLEVELTERM TERM
          where TERM.LEVELID = ML.ID
            and TERM.ISACTIVE = 1
        )
      end as LEVELAMOUNT
    from 
      dbo.MEMBERSHIPLEVEL ML
    where
      ML.MEMBERSHIPPROGRAMID = @ID
      and ML.ISACTIVE = 1
    order by ML.SEQUENCE
    for xml raw ('ITEM'), type, elements, root('LEVELS'), BINARY BASE64);

  set @BENEFITS = (
      select
                MEMBERSHIPLEVELBENEFIT.ID,
                MEMBERSHIPLEVELBENEFIT.BENEFITID,
                MEMBERSHIPLEVELBENEFIT.NUMBERTOOFFERCODE as NUMBERTOOFFER,
                MEMBERSHIPLEVELBENEFIT.QUANTITY,
                MEMBERSHIPLEVELBENEFIT.FREQUENCYCODE as FREQUENCY, 
                MEMBERSHIPLEVELBENEFIT.MEMBERSHIPLEVELID,
                MEMBERSHIPLEVELBENEFIT.USEPERCENT,
                MEMBERSHIPLEVELBENEFIT.VALUEPERCENT,
                BENEFIT.NAME BENEFITNAME,
                MEMBERSHIPLEVELBENEFIT.UNITVALUE,
                MEMBERSHIPLEVEL.BASECURRENCYID,
                MEMBERSHIPLEVELBENEFIT.DETAILS
            from
                MEMBERSHIPLEVELBENEFIT
                inner join dbo.BENEFIT on MEMBERSHIPLEVELBENEFIT.BENEFITID = BENEFIT.ID
                inner join dbo.MEMBERSHIPLEVEL on MEMBERSHIPLEVELBENEFIT.MEMBERSHIPLEVELID = MEMBERSHIPLEVEL.ID
            where
                MEMBERSHIPLEVEL.MEMBERSHIPPROGRAMID = @ID
            order by
                MEMBERSHIPLEVEL.SEQUENCE
            for xml raw ('ITEM'), type, elements, root('BENEFITS'), BINARY BASE64);

    select
        @LOWESTTERMVALUE = min(AMOUNT)
    from dbo.MEMBERSHIPLEVELTERM
        inner join dbo.MEMBERSHIPLEVEL on MEMBERSHIPLEVELTERM.LEVELID = MEMBERSHIPLEVEL.ID
    where MEMBERSHIPLEVEL.MEMBERSHIPPROGRAMID = @ID

               set @DATALOADED = 1

    return 0;