UFN_MEMBERSHIPPROGRAM_ACTIVITYBREAKDOWN

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@PROGRAMID uniqueidentifier IN
@ACTIONCODE tinyint IN
@FROMDATE datetime IN
@TODATE datetime IN

Definition

Copy


CREATE function dbo.UFN_MEMBERSHIPPROGRAM_ACTIVITYBREAKDOWN
(
    @PROGRAMID uniqueidentifier,
    @ACTIONCODE tinyint = null,
    @FROMDATE datetime = null,
    @TODATE datetime = null
)
returns @MEMBERSHIPBREAKDOWN table
(
    MEMBERSHIPID uniqueidentifier,
    EXPIRATIONDATE date,
    MEMBERSHIPLEVELID uniqueidentifier,
    TIERCODEID uniqueidentifier,
    TRANSACTIONDATE datetime,
    TRANSACTIONID uniqueidentifier
)
with execute as caller
as begin

    set @FROMDATE = dbo.UFN_DATE_GETEARLIESTTIME(@FROMDATE);
    set @TODATE = dbo.UFN_DATE_GETLATESTTIME(@TODATE);

    -- Handle lapsed differently since the calculation is not based on action code

    if @ACTIONCODE = 100
    begin
        insert into @MEMBERSHIPBREAKDOWN
        select distinct
            MEMBERSHIPTRANSACTION.MEMBERSHIPID,
            (
                select top(1
                    EXPIRATIONDATE
                from dbo.MEMBERSHIPTRANSACTION MT
                where MT.MEMBERSHIPID = MEMBERSHIPTRANSACTION.MEMBERSHIPID
                    and MT.EXPIRATIONDATE between @FROMDATE and @TODATE
                    and MT.MEMBERSHIPLEVELID = MEMBERSHIPTRANSACTION.MEMBERSHIPLEVELID
                order by TRANSACTIONDATE desc
            ),
            MEMBERSHIPLEVEL.ID,
            MEMBERSHIPLEVEL.TIERCODEID,
            MEMBERSHIPTRANSACTION.TRANSACTIONDATE,
            MEMBERSHIPTRANSACTION.ID
        from dbo.MEMBERSHIPTRANSACTION
        inner join dbo.MEMBERSHIP
            on MEMBERSHIP.ID = MEMBERSHIPTRANSACTION.MEMBERSHIPID
        inner join dbo.MEMBERSHIPLEVEL
            on MEMBERSHIPLEVEL.ID = MEMBERSHIPTRANSACTION.MEMBERSHIPLEVELID
        where MEMBERSHIPTRANSACTION.EXPIRATIONDATE between @FROMDATE and @TODATE
            and MEMBERSHIPTRANSACTION.ACTIONCODE <> 4 -- Dropped are counted elsewhere

            and not exists (
                select
                    1
                from dbo.MEMBERSHIPTRANSACTION MT
                where MT.MEMBERSHIPID = MEMBERSHIPTRANSACTION.MEMBERSHIPID
                    and MT.TRANSACTIONDATE between MEMBERSHIPTRANSACTION.TRANSACTIONDATE and @TODATE
                    and MT.DATEADDED > MEMBERSHIPTRANSACTION.DATEADDED
            )
            and MEMBERSHIP.MEMBERSHIPPROGRAMID = @PROGRAMID
            and MEMBERSHIP.STATUSCODE <> 2

    end

    -- Handle the 'All active memberships' case

    if @ACTIONCODE = 50
    begin
        insert into @MEMBERSHIPBREAKDOWN
        select
            MEMBERSHIP.ID,
            MEMBERSHIP.EXPIRATIONDATE,
            MEMBERSHIPLEVEL.ID,
            MEMBERSHIPLEVEL.TIERCODEID,
            null,
            null
        from dbo.MEMBERSHIP
        inner join dbo.MEMBERSHIPLEVEL
            on MEMBERSHIPLEVEL.ID = MEMBERSHIP.MEMBERSHIPLEVELID
        where MEMBERSHIP.MEMBERSHIPPROGRAMID = @PROGRAMID
            and STATUSCODE = 0
    end

    -- Handle renew/rejoin together using the renewal action code

    if @ACTIONCODE = 1
    begin
        insert into @MEMBERSHIPBREAKDOWN
        select distinct
            MEMBERSHIPTRANSACTION.MEMBERSHIPID,
            (
                select top(1
                    EXPIRATIONDATE 
                from dbo.MEMBERSHIPTRANSACTION MT
                where MT.MEMBERSHIPID = MEMBERSHIPTRANSACTION.MEMBERSHIPID
                    and MT.TRANSACTIONDATE between @FROMDATE and @TODATE
                    and MT.MEMBERSHIPLEVELID = MEMBERSHIPTRANSACTION.MEMBERSHIPLEVELID
                order by TRANSACTIONDATE desc
            ),
            MEMBERSHIPLEVEL.ID,
            MEMBERSHIPLEVEL.TIERCODEID,
            MEMBERSHIPTRANSACTION.TRANSACTIONDATE,
            MEMBERSHIPTRANSACTION.ID
        from dbo.MEMBERSHIPTRANSACTION
        inner join dbo.MEMBERSHIP
            on MEMBERSHIP.ID = MEMBERSHIPTRANSACTION.MEMBERSHIPID
        inner join dbo.MEMBERSHIPLEVEL
            on MEMBERSHIPLEVEL.ID = MEMBERSHIPTRANSACTION.MEMBERSHIPLEVELID
        where MEMBERSHIPTRANSACTION.ACTIONCODE in (1,5)
            and TRANSACTIONDATE between @FROMDATE and @TODATE
            and MEMBERSHIPLEVEL.MEMBERSHIPPROGRAMID = @PROGRAMID
            and MEMBERSHIP.STATUSCODE <> 2
    end

    if @ACTIONCODE not in (1,50,100)
    begin
        insert into @MEMBERSHIPBREAKDOWN
        select distinct
            MEMBERSHIPTRANSACTION.MEMBERSHIPID,
            (
                select top(1
                    EXPIRATIONDATE 
                from dbo.MEMBERSHIPTRANSACTION MT
                where MT.MEMBERSHIPID = MEMBERSHIPTRANSACTION.MEMBERSHIPID
                    and MT.TRANSACTIONDATE between @FROMDATE and @TODATE
                    and MT.MEMBERSHIPLEVELID = MEMBERSHIPTRANSACTION.MEMBERSHIPLEVELID
                order by TRANSACTIONDATE desc
            ),
            MEMBERSHIPLEVEL.ID,
            MEMBERSHIPLEVEL.TIERCODEID,
            MEMBERSHIPTRANSACTION.TRANSACTIONDATE,
            MEMBERSHIPTRANSACTION.ID
        from dbo.MEMBERSHIPTRANSACTION
        inner join dbo.MEMBERSHIP
            on MEMBERSHIP.ID = MEMBERSHIPTRANSACTION.MEMBERSHIPID
        inner join dbo.MEMBERSHIPLEVEL
            on MEMBERSHIPLEVEL.ID = MEMBERSHIPTRANSACTION.MEMBERSHIPLEVELID
        where MEMBERSHIPTRANSACTION.ACTIONCODE = @ACTIONCODE
            and MEMBERSHIPTRANSACTION.TRANSACTIONDATE between @FROMDATE and @TODATE
            and MEMBERSHIPLEVEL.MEMBERSHIPPROGRAMID = @PROGRAMID
            and MEMBERSHIP.STATUSCODE <> 2
    end

    return
end