USP_DATALIST_MEMBERSHIPPROGRAM_REVENUETRENDBYLEVEL
Returns the revenue trend for each level in a membership program.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@PROGRAMID | uniqueidentifier | IN | Input parameter indicating the context ID for the data list. |
@FROMDATE | datetime | IN | |
@TODATE | datetime | IN | |
@LEVEL1NAME | nvarchar(100) | INOUT | Level |
@LEVEL2NAME | nvarchar(100) | INOUT | Level |
@LEVEL3NAME | nvarchar(100) | INOUT | Level |
@LEVEL4NAME | nvarchar(100) | INOUT | Level |
@LEVEL5NAME | nvarchar(100) | INOUT | Level |
@LEVEL6NAME | nvarchar(100) | INOUT | Level |
Definition
Copy
create procedure dbo.USP_DATALIST_MEMBERSHIPPROGRAM_REVENUETRENDBYLEVEL
(
@PROGRAMID uniqueidentifier,
@FROMDATE datetime = null,
@TODATE datetime = null,
@LEVEL1NAME nvarchar(100) = null output,
@LEVEL2NAME nvarchar(100) = null output,
@LEVEL3NAME nvarchar(100) = null output,
@LEVEL4NAME nvarchar(100) = null output,
@LEVEL5NAME nvarchar(100) = null output,
@LEVEL6NAME nvarchar(100) = null output
)
as
set nocount on;
set @FROMDATE = dbo.UFN_DATE_GETEARLIESTTIME(@FROMDATE);
set @TODATE = dbo.UFN_DATE_GETLATESTTIME(@TODATE);
declare @ORGANIZATIONCURRENCYID uniqueidentifier;
set @ORGANIZATIONCURRENCYID = dbo.UFN_CURRENCY_GETORGANIZATIONCURRENCY();
declare @SELECTEDCURRENCYID uniqueidentifier;
set @SELECTEDCURRENCYID = @ORGANIZATIONCURRENCYID;
declare @DECIMALDIGITS tinyint;
declare @ROUNDINGTYPECODE tinyint;
declare @CURRENCYISO nvarchar(6);
declare @CURRENCYSYMBOL nvarchar(10);
declare @CURRENCYSYMBOLDISPLAYSETTINGCODE tinyint;
select
@CURRENCYISO = CURRENCY.ISO4217,
@DECIMALDIGITS = CURRENCY.DECIMALDIGITS,
@CURRENCYSYMBOL = CURRENCY.CURRENCYSYMBOL,
@ROUNDINGTYPECODE = CURRENCY.ROUNDINGTYPECODE,
@CURRENCYSYMBOLDISPLAYSETTINGCODE = CURRENCY.SYMBOLDISPLAYSETTINGCODE
from
dbo.CURRENCY
where
CURRENCY.ID = @SELECTEDCURRENCYID;
declare @LEVEL1ID uniqueidentifier
declare @LEVEL2ID uniqueidentifier
declare @LEVEL3ID uniqueidentifier
declare @LEVEL4ID uniqueidentifier
declare @LEVEL5ID uniqueidentifier
declare @LEVEL6ID uniqueidentifier
declare @MEMBERSHIPREVENUE table(TOTAL money, TRANSACTIONDATE datetime, LEVELID uniqueidentifier)
insert into @MEMBERSHIPREVENUE
select
sum(TOTAL),
TRANSACTIONDATE,
LEVELID
from (
select
REVENUEAMOUNT.AMOUNTINCURRENCY TOTAL,
MEMBERSHIPTRANSACTION.TRANSACTIONDATE TRANSACTIONDATE,
MEMBERSHIPLEVEL.ID LEVELID
from dbo.UFN_REVENUESPLIT_GETAMOUNTINCURRENCY_BULK(
@SELECTEDCURRENCYID, @ORGANIZATIONCURRENCYID, @DECIMALDIGITS, @ROUNDINGTYPECODE
) as REVENUEAMOUNT
inner join dbo.MEMBERSHIPTRANSACTION
on REVENUEAMOUNT.ID = MEMBERSHIPTRANSACTION.REVENUESPLITID
inner join dbo.MEMBERSHIPLEVEL
on MEMBERSHIPLEVEL.ID = MEMBERSHIPTRANSACTION.MEMBERSHIPLEVELID
where MEMBERSHIPTRANSACTION.TRANSACTIONDATE between @FROMDATE and @TODATE
and MEMBERSHIPLEVEL.MEMBERSHIPPROGRAMID = @PROGRAMID
union all
select
-CREDITITEM.TOTAL TOTAL,
CREDIT.TRANSACTIONDATE TRANSACTIONDATE,
MEMBERSHIPLEVEL.ID LEVELID
from dbo.CREDIT
inner join dbo.CREDITITEM
on CREDITITEM.CREDITID = CREDIT.ID
inner join dbo.CREDITPAYMENT
on CREDITPAYMENT.CREDITID = CREDIT.ID
inner join dbo.REVENUESPLIT
on (REVENUESPLIT.REVENUEID = CREDITPAYMENT.REVENUEID and REVENUESPLIT.TYPECODE = 2)
or (REVENUESPLIT.ID = CREDITPAYMENT.REVENUESPLITID)
inner join dbo.CREDITITEMMEMBERSHIP
on CREDITITEM.ID = CREDITITEMMEMBERSHIP.ID
inner join dbo.MEMBERSHIPLEVEL
on CREDITITEMMEMBERSHIP.MEMBERSHIPLEVELID = MEMBERSHIPLEVEL.ID
where CREDIT.TRANSACTIONDATE between @FROMDATE and @TODATE
and CREDIT.TYPECODE = 0
and CREDITITEMMEMBERSHIP.MEMBERSHIPPROGRAMID = @PROGRAMID
) as RAWMEMBERSHIPREVENUE
group by LEVELID, TRANSACTIONDATE
order by TRANSACTIONDATE asc
declare @LEVELID uniqueidentifier
declare @LEVELNAME nvarchar(100)
declare @TOTAL money
declare @IDX int = 0
declare TOP_LEVELS cursor local fast_forward for
select top(6)
LEVELID
from @MEMBERSHIPREVENUE
group by LEVELID
order by sum(TOTAL) desc
open TOP_LEVELS
fetch next from TOP_LEVELS into @LEVELID
while @@fetch_status = 0
begin
set @LEVELNAME = (select NAME from dbo.MEMBERSHIPLEVEL where ID = @LEVELID)
if @IDX = 0
select
@LEVEL1NAME = @LEVELNAME,
@LEVEL1ID = @LEVELID
if @IDX = 1
select
@LEVEL2NAME = @LEVELNAME,
@LEVEL2ID = @LEVELID
if @IDX = 2
select
@LEVEL3NAME = @LEVELNAME,
@LEVEL3ID = @LEVELID
if @IDX = 3
select
@LEVEL4NAME = @LEVELNAME,
@LEVEL4ID = @LEVELID
if @IDX = 4
select
@LEVEL5NAME = @LEVELNAME,
@LEVEL5ID = @LEVELID
if @IDX = 5
select
@LEVEL6NAME = @LEVELNAME,
@LEVEL6ID = @LEVELID
set @IDX = @IDX + 1
fetch next from TOP_LEVELS into @LEVELID
end
select
TRANSACTIONDATE,
case
when LEVELID = @LEVEL1ID then TOTAL
else null
end as LEVEL1AMOUNT,
case
when LEVELID = @LEVEL2ID then TOTAL
else null
end as LEVEL2AMOUNT,
case
when LEVELID = @LEVEL3ID then TOTAL
else null
end as LEVEL3AMOUNT,
case
when LEVELID = @LEVEL4ID then TOTAL
else null
end as LEVEL4AMOUNT,
case
when LEVELID = @LEVEL5ID then TOTAL
else null
end as LEVEL5AMOUNT,
case
when LEVELID = @LEVEL6ID then TOTAL
else null
end as LEVEL6AMOUNT
from @MEMBERSHIPREVENUE
where LEVELID in (@LEVEL1ID, @LEVEL2ID, @LEVEL3ID, @LEVEL4ID, @LEVEL5ID, @LEVEL6ID)