USP_DATALIST_MEMBERSHIPPROGRAM_REVENUETREND

View membership program revenue trends.

Parameters

Parameter Parameter Type Mode Description
@DATETYPE int IN Revenue for
@FROMDATE datetime IN From
@TODATE datetime IN To
@PROGRAM1NAME nvarchar(100) INOUT Program
@PROGRAM2NAME nvarchar(100) INOUT Program
@PROGRAM3NAME nvarchar(100) INOUT Program
@PROGRAM4NAME nvarchar(100) INOUT Program
@PROGRAM5NAME nvarchar(100) INOUT Program
@PROGRAM6NAME nvarchar(100) INOUT Program

Definition

Copy


            create procedure dbo.USP_DATALIST_MEMBERSHIPPROGRAM_REVENUETREND
            (
                @DATETYPE int = null,
                @FROMDATE datetime = null,
                @TODATE datetime = null,
                @PROGRAM1NAME nvarchar(100) = null output,
                @PROGRAM2NAME nvarchar(100) = null output,
                @PROGRAM3NAME nvarchar(100) = null output,
                @PROGRAM4NAME nvarchar(100) = null output,
                @PROGRAM5NAME nvarchar(100) = null output,
                @PROGRAM6NAME nvarchar(100) = null output
            )

            as
                set nocount on;

                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 @PROGRAM1ID uniqueidentifier
                declare @PROGRAM2ID uniqueidentifier
                declare @PROGRAM3ID uniqueidentifier
                declare @PROGRAM4ID uniqueidentifier
                declare @PROGRAM5ID uniqueidentifier
                declare @PROGRAM6ID uniqueidentifier

                declare @MEMBERSHIPREVENUE table(TOTAL money, TRANSACTIONDATE datetime, PROGRAMID uniqueidentifier)

                insert into @MEMBERSHIPREVENUE
                select
                    sum(TOTAL),
                    TRANSACTIONDATE,
                    PROGRAMID
                from (
                    select
                        REVENUEAMOUNT.AMOUNTINCURRENCY TOTAL,
                        MEMBERSHIPTRANSACTION.TRANSACTIONDATE TRANSACTIONDATE,
                        MEMBERSHIPPROGRAM.ID PROGRAMID
                    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
                    inner join dbo.MEMBERSHIPPROGRAM
                        on MEMBERSHIPPROGRAM.ID = MEMBERSHIPLEVEL.MEMBERSHIPPROGRAMID
                    where MEMBERSHIPTRANSACTION.TRANSACTIONDATE between @FROMDATE and @TODATE

                    union all

                    select
                        -CREDITITEM.TOTAL TOTAL,
                        CREDIT.TRANSACTIONDATE TRANSACTIONDATE,
                        MEMBERSHIPPROGRAM.ID PROGRAMID
                    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.MEMBERSHIPPROGRAM
                        on CREDITITEMMEMBERSHIP.MEMBERSHIPPROGRAMID = MEMBERSHIPPROGRAM.ID
                    where CREDIT.TRANSACTIONDATE between @FROMDATE and @TODATE
                    and CREDIT.TYPECODE = 0
                ) as RAWMEMBERSHIPREVENUE
                group by PROGRAMID, TRANSACTIONDATE
                order by TRANSACTIONDATE asc

                declare @PROGRAMID uniqueidentifier
                declare @PROGRAMNAME nvarchar(100)
                declare @TOTAL money
                declare @IDX int = 0

                declare TOP_PROGRAMS cursor local fast_forward for

                select top(6)
                    PROGRAMID
                from @MEMBERSHIPREVENUE
                group by PROGRAMID
                order by sum(TOTAL) desc

                open TOP_PROGRAMS

                fetch next from TOP_PROGRAMS into @PROGRAMID

                while @@fetch_status = 0
                begin    

                    set @PROGRAMNAME = (select NAME from dbo.MEMBERSHIPPROGRAM where ID = @PROGRAMID)

                    if @IDX = 0
                        select 
                            @PROGRAM1NAME = @PROGRAMNAME,
                            @PROGRAM1ID = @PROGRAMID

                    if @IDX = 1
                        select 
                            @PROGRAM2NAME = @PROGRAMNAME,
                            @PROGRAM2ID = @PROGRAMID

                    if @IDX = 2
                        select 
                            @PROGRAM3NAME = @PROGRAMNAME,
                            @PROGRAM3ID = @PROGRAMID

                    if @IDX = 3
                        select 
                            @PROGRAM4NAME = @PROGRAMNAME,
                            @PROGRAM4ID = @PROGRAMID

                    if @IDX = 4
                        select 
                            @PROGRAM5NAME = @PROGRAMNAME,
                            @PROGRAM5ID = @PROGRAMID

                    if @IDX = 5
                        select 
                            @PROGRAM6NAME = @PROGRAMNAME,
                            @PROGRAM6ID = @PROGRAMID

                    set @IDX = @IDX + 1

                    fetch next from TOP_PROGRAMS into @PROGRAMID

                end

                select
                    TRANSACTIONDATE,
                    case
                        when PROGRAMID = @PROGRAM1ID then TOTAL
                        else null
                    end as PROGRAM1AMOUNT,
                    case
                        when PROGRAMID = @PROGRAM2ID then TOTAL
                        else null
                    end as PROGRAM2AMOUNT,
                    case
                        when PROGRAMID = @PROGRAM3ID then TOTAL
                        else null
                    end as PROGRAM3AMOUNT,
                    case
                        when PROGRAMID = @PROGRAM4ID then TOTAL
                        else null
                    end as PROGRAM4AMOUNT,
                    case
                        when PROGRAMID = @PROGRAM5ID then TOTAL
                        else null
                    end as PROGRAM5AMOUNT,
                    case
                        when PROGRAMID = @PROGRAM6ID then TOTAL
                        else null
                    end as PROGRAM6AMOUNT
                from @MEMBERSHIPREVENUE
                where PROGRAMID in (@PROGRAM1ID, @PROGRAM2ID, @PROGRAM3ID, @PROGRAM4ID, @PROGRAM5ID, @PROGRAM6ID)