USP_DATAFORMTEMPLATE_EDITLOAD_MEMBERSHIPLEVEL2
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | nvarchar(50) | IN | |
@TABID | tinyint | INOUT | |
@DATALOADED | bit | INOUT | |
@TSLONG | bigint | INOUT | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@BASECURRENCYID | uniqueidentifier | INOUT | |
@MEMBERSHIPLEVELS | xml | INOUT | |
@RECURRINGPRICES | xml | INOUT | |
@PROGRAMTYPECODE | tinyint | INOUT | |
@PROGRAMBASEDONCODE | tinyint | INOUT | |
@ANNUALLYPAYMENTOPTION | bit | INOUT | |
@SEMIANNUALLYPAYMENTOPTION | bit | INOUT | |
@QUARTERLYPAYMENTOPTION | bit | INOUT | |
@MONTHLYPAYMENTOPTION | bit | INOUT | |
@MULTITERMPRICES | xml | INOUT | |
@LIFETIMEPAYMENTOPTIONS | xml | INOUT | |
@HASMULTIPLETERMS | bit | INOUT | |
@MULTIPLETERMSUNITS | xml | INOUT | |
@ANNUALLYOPTIONACTIVE | bit | INOUT | |
@SEMIANNUALLYOPTIONACTIVE | bit | INOUT | |
@QUARTERLYOPTIONACTIVE | bit | INOUT | |
@MONTHLYOPTIONACTIVE | bit | INOUT | |
@ISTYPEPROGRAM | bit | INOUT | |
@LIFETIMEINSTALLMENTPOSTSTATUSCODE | tinyint | INOUT |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDITLOAD_MEMBERSHIPLEVEL2 (
@ID nvarchar(50),
@TABID tinyint = null output,
@DATALOADED bit = 0 output,
@TSLONG bigint = 0 output,
@CURRENTAPPUSERID uniqueidentifier = null,
@BASECURRENCYID uniqueidentifier = null output,
@MEMBERSHIPLEVELS xml = null output,
@RECURRINGPRICES xml = null output,
@PROGRAMTYPECODE tinyint = null output,
@PROGRAMBASEDONCODE tinyint = null output,
@ANNUALLYPAYMENTOPTION bit = null output,
@SEMIANNUALLYPAYMENTOPTION bit = null output,
@QUARTERLYPAYMENTOPTION bit = null output,
@MONTHLYPAYMENTOPTION bit = null output,
@MULTITERMPRICES xml = null output,
@LIFETIMEPAYMENTOPTIONS xml = null output,
@HASMULTIPLETERMS bit = null output,
@MULTIPLETERMSUNITS xml = null output,
@ANNUALLYOPTIONACTIVE bit = null output,
@SEMIANNUALLYOPTIONACTIVE bit = null output,
@QUARTERLYOPTIONACTIVE bit = null output,
@MONTHLYOPTIONACTIVE bit = null output,
@ISTYPEPROGRAM bit = null output,
@LIFETIMEINSTALLMENTPOSTSTATUSCODE tinyint = null output
)
as
set nocount on;
declare @MEMBERSHIPPROGRAMID uniqueidentifier
declare @PARSEINDEX tinyint
set @PARSEINDEX = charindex('@',@ID)
set @DATALOADED = 0
set @TSLONG = 0
set @TABID = substring(@ID,0,@PARSEINDEX)
set @MEMBERSHIPPROGRAMID = substring(@ID, @PARSEINDEX + 1, LEN(@ID) - @PARSEINDEX)
-----
-- Fetch program data
-----
select top 1
@PROGRAMTYPECODE = PROGRAMTYPECODE,
@PROGRAMBASEDONCODE = PROGRAMBASEDONCODE,
@HASMULTIPLETERMS =
case
when --annual program with a single term
PROGRAMTYPECODE = 0 AND (MP.MULTIPLETERMS = 0) then 0
when --recurring program (has special terms and prices)
PROGRAMTYPECODE = 1 then 0
else 1 --All programs use multiple terms unless specified in above in the when clauses.
end,
@BASECURRENCYID = MP.BASECURRENCYID,
@ISTYPEPROGRAM = MP.ISTYPEPROGRAM,
@LIFETIMEINSTALLMENTPOSTSTATUSCODE = case when MP.PROGRAMTYPECODE = 2 then MP.INSTALLMENTPOSTSTATUSCODE end
from
dbo.MEMBERSHIPPROGRAM MP
where MP.ID = @MEMBERSHIPPROGRAMID
-----
-- Fetch level data
-----
set @MEMBERSHIPLEVELS =
(
select * from (
select
ROWNUM = row_number() over (partition by ML.ID order by ML.ID, ML.SEQUENCE),
ML.ID,
ML.NAME,
ML.SEQUENCE,
ML.DESCRIPTION,
ML.OBTAINLEVELCODE,
AMOUNT = coalesce(MLT.AMOUNT, 0),
LOWAMOUNT = coalesce(MLT.LOWAMOUNT,0),
ML.MEMBERSALLOWED,
ML.CARDSALLOWED,
ML.CHILDRENALLOWED,
TIERCODEID = TC.ID,
ML.FORCEMANUALDOWNGRADES,
HASMULTIPLETERMS = 1,
ML.ISACTIVE,
ML.MEMBERSHIPTERMTYPECODE,
MP.BASECURRENCYID
,dbo.UFN_MEMBERSHIPLEVEL_INUSE(ML.ID) [INUSE]
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 = @MEMBERSHIPPROGRAMID
) as L
where rownum = 1
order by SEQUENCE
for xml raw('ITEM'),type,elements,root('MEMBERSHIPLEVELS'),BINARY BASE64
)
if @PROGRAMTYPECODE = 0 and @HASMULTIPLETERMS = 1
begin
-----
-- Fetch annual multiple term payment options
-----
set @MULTIPLETERMSUNITS = (
select ID = newid(),
TERMTIMELENGTH,
TERMLENGTH = TERMLENGTHCODE,
TERMSEQUENCE = SEQUENCE,
ISACTIVE = ISACTIVE,
INUSE = INUSE
from
dbo.UFN_MEMBERSHIPPROGRAM_GETTERMS(@MEMBERSHIPPROGRAMID)
order by SEQUENCE
for xml raw('ITEM'),type,elements,root('MULTIPLETERMSUNITS'),BINARY BASE64)
end
-----
-- Fetch recurring payment data
-----
set @RECURRINGPRICES =
(
select distinct
(select top 1 ID from dbo.MEMBERSHIPLEVELTERM where LEVELID = ML.ID) as ID,
ML.ID as LEVELID,
ML.NAME as LEVELNAME,
case when ML.ISACTIVE = 1 then 'Yes' else 'no' end as ISACTIVE,
MP.BASECURRENCYID,
ML.SEQUENCE,
(select ID from dbo.MEMBERSHIPLEVELTERM where RECURRINGPAYMENTOPTIONCODE = 0 and LEVELID = ML.ID) as ANNUALLYTERMID,
(select AMOUNT from dbo.MEMBERSHIPLEVELTERM where RECURRINGPAYMENTOPTIONCODE = 0 and LEVELID = ML.ID) as ANNUALLYPRICE,
(select ID from dbo.MEMBERSHIPLEVELTERM where RECURRINGPAYMENTOPTIONCODE = 1 and LEVELID = ML.ID) as SEMIANNUALLYTERMID,
(select AMOUNT from dbo.MEMBERSHIPLEVELTERM where RECURRINGPAYMENTOPTIONCODE = 1 and LEVELID = ML.ID) as SEMIANNUALLYPRICE,
(select ID from dbo.MEMBERSHIPLEVELTERM where RECURRINGPAYMENTOPTIONCODE = 2 and LEVELID = ML.ID) as QUARTERLYTERMID,
(select AMOUNT from dbo.MEMBERSHIPLEVELTERM where RECURRINGPAYMENTOPTIONCODE = 2 and LEVELID = ML.ID) as QUARTERLYPRICE,
(select ID from dbo.MEMBERSHIPLEVELTERM where RECURRINGPAYMENTOPTIONCODE = 3 and LEVELID = ML.ID) as MONTHLYTERMID,
(select AMOUNT from dbo.MEMBERSHIPLEVELTERM where RECURRINGPAYMENTOPTIONCODE = 3 and LEVELID = ML.ID) as MONTHLYPRICE
from
dbo.MEMBERSHIPLEVEL ML
inner join dbo.MEMBERSHIPLEVELTERM MLT on MLT.LEVELID = ML.ID
inner join dbo.MEMBERSHIPPROGRAM MP on MP.ID = ML.MEMBERSHIPPROGRAMID AND MP.PROGRAMTYPECODE = 1
where
MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID
order by ML.SEQUENCE
for xml raw('ITEM'),type,elements,root('RECURRINGPRICES'),BINARY BASE64
)
-----
-- Fetch lifetime payment options
-----
set @LIFETIMEPAYMENTOPTIONS =
(
select PROGRAMID = MEMBERSHIPPROGRAMID,
TERMSEQUENCE = SEQUENCE,
PAYMENTOPTION = LIFETIMEPAYMENTOPTIONCODE,
NUMBEROFPAYMENTS = LIFETIMENUMBEROFPAYMENTS,
ISACTIVE,
INUSE
from
dbo.UFN_MEMBERSHIPPROGRAM_GETLIFETIMEPAYMENTOPTIONS(@MEMBERSHIPPROGRAMID)
order by SEQUENCE
for xml raw('ITEM'),type,elements,root('LIFETIMEPAYMENTOPTIONS'),BINARY BASE64
);
-----
-- Fetch multiple terms pricing data
-----
if @HASMULTIPLETERMS = 1
begin
with CTE_MULTIPLEPRICES
as
(
select MEMBERSHIPLEVELTERM.LEVELID, MEMBERSHIPLEVELTERM.ID, ROW_NUMBER() over (partition by MEMBERSHIPLEVELTERM.LEVELID order by MEMBERSHIPLEVELTERM.SEQUENCE) as SEQUENCE
from dbo.MEMBERSHIPLEVEL
inner join dbo.MEMBERSHIPLEVELTERM on MEMBERSHIPLEVELTERM.LEVELID = MEMBERSHIPLEVEL.ID
where MEMBERSHIPLEVEL.MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID
)
select @MULTITERMPRICES =
(
select distinct
ML.ID,
MP.PROGRAMBASEDONCODE,
MP.PROGRAMTYPECODE,
MP.BASECURRENCYID,
ML.NAME as LEVEL,
ML.ID as LEVELID,
ML.SEQUENCE as LEVELSEQUENCE,
ML.OBTAINLEVELCODE as OBTAINLEVELCODE,
case when ML.ISACTIVE = 1 then 'Yes' else 'No' end as ISACTIVE,
MLT1.ID as TERMID1,
dbo.UFN_MEMBERSHIPLEVELTERMS_PAYMENTOPTIONDESCRIPTION(MLT1.ID) AS TERM1,
MLT1.ISACTIVE as TERMACTIVE1,
MLT1.LIFETIMEPAYMENTOPTIONCODE as LIFETIMEPAYMENTOPTIONCODE1,
MLT1.LIFETIMENUMBEROFPAYMENTS as NUMBEROFPAYMENTS1,
MLT1.LOWAMOUNT as LOWAMOUNT1,
MLT1.AMOUNT as AMOUNT1,
MLT1.SEQUENCE as TERMSEQUENCE1,
MLT2.ID as TERMID2,
dbo.UFN_MEMBERSHIPLEVELTERMS_PAYMENTOPTIONDESCRIPTION(MLT2.ID) AS TERM2,
MLT2.ISACTIVE as TERMACTIVE2,
MLT2.LIFETIMEPAYMENTOPTIONCODE as LIFETIMEPAYMENTOPTIONCODE2,
MLT2.LIFETIMENUMBEROFPAYMENTS as NUMBEROFPAYMENTS2,
MLT2.LOWAMOUNT as LOWAMOUNT2,
MLT2.AMOUNT as AMOUNT2,
MLT2.SEQUENCE as TERMSEQUENCE2,
MLT3.ID as TERMID3,
dbo.UFN_MEMBERSHIPLEVELTERMS_PAYMENTOPTIONDESCRIPTION(MLT3.ID) AS TERM3,
MLT3.ISACTIVE as TERMACTIVE3,
MLT3.LIFETIMEPAYMENTOPTIONCODE as LIFETIMEPAYMENTOPTIONCODE3,
MLT3.LIFETIMENUMBEROFPAYMENTS as NUMBEROFPAYMENTS3,
MLT3.LOWAMOUNT as LOWAMOUNT3,
MLT3.AMOUNT as AMOUNT3,
MLT3.SEQUENCE as TERMSEQUENCE3,
MLT4.ID as TERMID4,
dbo.UFN_MEMBERSHIPLEVELTERMS_PAYMENTOPTIONDESCRIPTION(MLT4.ID) AS TERM4,
MLT4.ISACTIVE as TERMACTIVE4,
MLT4.LIFETIMEPAYMENTOPTIONCODE as LIFETIMEPAYMENTOPTIONCODE4,
MLT4.LIFETIMENUMBEROFPAYMENTS as NUMBEROFPAYMENTS4,
MLT4.LOWAMOUNT as LOWAMOUNT4,
MLT4.AMOUNT as AMOUNT4,
MLT4.SEQUENCE as TERMSEQUENCE4,
MLT5.ID as TERMID5,
dbo.UFN_MEMBERSHIPLEVELTERMS_PAYMENTOPTIONDESCRIPTION(MLT5.ID) AS TERM5,
MLT5.ISACTIVE as TERMACTIVE5,
MLT5.LIFETIMEPAYMENTOPTIONCODE as LIFETIMEPAYMENTOPTIONCODE5,
MLT5.LIFETIMENUMBEROFPAYMENTS as NUMBEROFPAYMENTS5,
MLT5.LOWAMOUNT as LOWAMOUNT5,
MLT5.AMOUNT as AMOUNT5,
MLT5.SEQUENCE as TERMSEQUENCE5,
MLT6.ID as TERMID6,
dbo.UFN_MEMBERSHIPLEVELTERMS_PAYMENTOPTIONDESCRIPTION(MLT6.ID) AS TERM6,
MLT6.ISACTIVE as TERMACTIVE6,
MLT6.LIFETIMEPAYMENTOPTIONCODE as LIFETIMEPAYMENTOPTIONCODE6,
MLT6.LIFETIMENUMBEROFPAYMENTS as NUMBEROFPAYMENTS6,
MLT6.LOWAMOUNT as LOWAMOUNT6,
MLT6.AMOUNT as AMOUNT6,
MLT6.SEQUENCE as TERMSEQUENCE6,
MLT7.ID as TERMID7,
dbo.UFN_MEMBERSHIPLEVELTERMS_PAYMENTOPTIONDESCRIPTION(MLT7.ID) AS TERM7,
MLT7.ISACTIVE as TERMACTIVE7,
MLT7.LIFETIMEPAYMENTOPTIONCODE as LIFETIMEPAYMENTOPTIONCODE7,
MLT7.LIFETIMENUMBEROFPAYMENTS as NUMBEROFPAYMENTS7,
MLT7.LOWAMOUNT as LOWAMOUNT7,
MLT7.AMOUNT as AMOUNT7,
MLT7.SEQUENCE as TERMSEQUENCE7,
MLT8.ID as TERMID8,
dbo.UFN_MEMBERSHIPLEVELTERMS_PAYMENTOPTIONDESCRIPTION(MLT8.ID) AS TERM8,
MLT8.ISACTIVE as TERMACTIVE8,
MLT8.LIFETIMEPAYMENTOPTIONCODE as LIFETIMEPAYMENTOPTIONCODE8,
MLT8.LIFETIMENUMBEROFPAYMENTS as NUMBEROFPAYMENTS8,
MLT8.LOWAMOUNT as LOWAMOUNT8,
MLT8.AMOUNT as AMOUNT8,
MLT8.SEQUENCE as TERMSEQUENCE8,
MLT9.ID as TERMID9,
dbo.UFN_MEMBERSHIPLEVELTERMS_PAYMENTOPTIONDESCRIPTION(MLT9.ID) AS TERM9,
MLT9.ISACTIVE as TERMACTIVE9,
MLT9.LIFETIMEPAYMENTOPTIONCODE as LIFETIMEPAYMENTOPTIONCODE9,
MLT9.LIFETIMENUMBEROFPAYMENTS as NUMBEROFPAYMENTS9,
MLT9.LOWAMOUNT as LOWAMOUNT9,
MLT9.AMOUNT as AMOUNT9,
MLT9.SEQUENCE as TERMSEQUENCE9,
MLT10.ID as TERMID10,
dbo.UFN_MEMBERSHIPLEVELTERMS_PAYMENTOPTIONDESCRIPTION(MLT10.ID) AS TERM10,
MLT10.ISACTIVE as TERMACTIVE10,
MLT10.LIFETIMEPAYMENTOPTIONCODE as LIFETIMEPAYMENTOPTIONCODE1,
MLT10.LIFETIMENUMBEROFPAYMENTS as NUMBEROFPAYMENTS10,
MLT10.LOWAMOUNT as LOWAMOUNT10,
MLT10.AMOUNT as AMOUNT10,
MLT10.SEQUENCE as TERMSEQUENCE10
from
dbo.MEMBERSHIPPROGRAM MP
left outer join dbo.MEMBERSHIPLEVEL ML ON MP.ID = ML.MEMBERSHIPPROGRAMID
left outer join CTE_MULTIPLEPRICES CTE_MP1 on CTE_MP1.LEVELID = ML.ID and CTE_MP1.SEQUENCE = 1
left outer join dbo.MEMBERSHIPLEVELTERM MLT1 on MLT1.ID = CTE_MP1.ID
left outer join CTE_MULTIPLEPRICES CTE_MP2 on CTE_MP2.LEVELID = ML.ID and CTE_MP2.SEQUENCE = 2
left outer join dbo.MEMBERSHIPLEVELTERM MLT2 on MLT2.ID = CTE_MP2.ID
left outer join CTE_MULTIPLEPRICES CTE_MP3 on CTE_MP3.LEVELID = ML.ID and CTE_MP3.SEQUENCE = 3
left outer join dbo.MEMBERSHIPLEVELTERM MLT3 on MLT3.ID = CTE_MP3.ID
left outer join CTE_MULTIPLEPRICES CTE_MP4 on CTE_MP4.LEVELID = ML.ID and CTE_MP4.SEQUENCE = 4
left outer join dbo.MEMBERSHIPLEVELTERM MLT4 on MLT4.ID = CTE_MP4.ID
left outer join CTE_MULTIPLEPRICES CTE_MP5 on CTE_MP5.LEVELID = ML.ID and CTE_MP5.SEQUENCE = 5
left outer join dbo.MEMBERSHIPLEVELTERM MLT5 on MLT5.ID = CTE_MP5.ID
left outer join CTE_MULTIPLEPRICES CTE_MP6 on CTE_MP6.LEVELID = ML.ID and CTE_MP6.SEQUENCE = 6
left outer join dbo.MEMBERSHIPLEVELTERM MLT6 on MLT6.ID = CTE_MP6.ID
left outer join CTE_MULTIPLEPRICES CTE_MP7 on CTE_MP7.LEVELID = ML.ID and CTE_MP7.SEQUENCE = 7
left outer join dbo.MEMBERSHIPLEVELTERM MLT7 on MLT7.ID = CTE_MP7.ID
left outer join CTE_MULTIPLEPRICES CTE_MP8 on CTE_MP8.LEVELID = ML.ID and CTE_MP8.SEQUENCE = 8
left outer join dbo.MEMBERSHIPLEVELTERM MLT8 on MLT8.ID = CTE_MP8.ID
left outer join CTE_MULTIPLEPRICES CTE_MP9 on CTE_MP9.LEVELID = ML.ID and CTE_MP9.SEQUENCE = 9
left outer join dbo.MEMBERSHIPLEVELTERM MLT9 on MLT9.ID = CTE_MP9.ID
left outer join CTE_MULTIPLEPRICES CTE_MP10 on CTE_MP10.LEVELID = ML.ID and CTE_MP10.SEQUENCE = 10
left outer join dbo.MEMBERSHIPLEVELTERM MLT10 on MLT10.ID = CTE_MP10.ID
where ML.MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID
order by ML.SEQUENCE
for xml raw('ITEM'),type,elements,root('MULTITERMPRICES'),BINARY BASE64
)
end
-----
-- Fetch options
-----
declare @PAYMENTOPTIONS table
(
OPTIONCODE tinyint,
ISACTIVE tinyint
)
insert into @PAYMENTOPTIONS
(
OPTIONCODE, ISACTIVE
)
select distinct
MLT.RECURRINGPAYMENTOPTIONCODE, MLT.ISACTIVE
from
dbo.MEMBERSHIPLEVELTERM MLT
inner join dbo.MEMBERSHIPLEVEL ML on ML.ID = MLT.LEVELID
where
MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID
set @ANNUALLYPAYMENTOPTION =
case
when exists (select OPTIONCODE from @PAYMENTOPTIONS where OPTIONCODE = 0) then 1
else 0
end
set @ANNUALLYOPTIONACTIVE =
case
when exists (select OPTIONCODE from @PAYMENTOPTIONS where OPTIONCODE = 0 and ISACTIVE = 1) then 1
else 0
end
set @SEMIANNUALLYPAYMENTOPTION =
case
when exists (select OPTIONCODE from @PAYMENTOPTIONS where OPTIONCODE = 1) then 1
else 0
end
set @SEMIANNUALLYOPTIONACTIVE =
case
when exists (select OPTIONCODE from @PAYMENTOPTIONS where OPTIONCODE = 1 and ISACTIVE = 1) then 1
else 0
end
set @QUARTERLYPAYMENTOPTION =
case
when exists (select OPTIONCODE from @PAYMENTOPTIONS where OPTIONCODE = 2) then 1
else 0
end
set @QUARTERLYOPTIONACTIVE =
case
when exists (select OPTIONCODE from @PAYMENTOPTIONS where OPTIONCODE = 2 and ISACTIVE = 1) then 1
else 0
end
set @MONTHLYPAYMENTOPTION =
case
when exists (select OPTIONCODE from @PAYMENTOPTIONS where OPTIONCODE = 3) then 1
else 0
end
set @MONTHLYOPTIONACTIVE =
case
when exists (select OPTIONCODE from @PAYMENTOPTIONS where OPTIONCODE = 3 and ISACTIVE = 1) then 1
else 0
end
set @DATALOADED = 1
return 0;