UFN_MEMBERSHIP_RENEWTRANSACTIONEXISTS_BEFORETHISDATE

Return

Return Type
datetime

Parameters

Parameter Parameter Type Mode Description
@MEMBERSHIPID uniqueidentifier IN
@ORIGINALMEMBERSHIPTRANSACTIONID uniqueidentifier IN
@ORIGINALTRANSACTIONEXPIRATIONDATE datetime IN
@ORIGINALTRANSACTIONEXTENDEDEXPIRATIONDATE datetime IN
@FROMDATE datetime IN
@TODATE datetime IN

Definition

Copy



CREATE FUNCTION dbo.[UFN_MEMBERSHIP_RENEWTRANSACTIONEXISTS_BEFORETHISDATE]
    (@MEMBERSHIPID uniqueidentifier, @ORIGINALMEMBERSHIPTRANSACTIONID uniqueidentifier, @ORIGINALTRANSACTIONEXPIRATIONDATE datetime, @ORIGINALTRANSACTIONEXTENDEDEXPIRATIONDATE datetime, @FROMDATE datetime, @TODATE datetime)
RETURNS datetime
WITH EXECUTE AS CALLER
AS
BEGIN

    declare @RENEWTRANSACTIONDATE datetime = null
    declare @FIRSTDATEABLETORENEW datetime
    declare @DAYAFTERORIGINALTRANSACTIONDATE datetime
    declare @ORIGINALTRANSACTIONDATE datetime
    declare @RENEWALWINDOWSTARTSINMONTHS tinyint
    declare @CURRENTMEMBERSHIPSTATUS tinyint
    declare @LOWESTLEVELAMOUNT money
    declare @OBTAINLEVELCODE tinyint
    declare @MEMBERSHIPLEVELID uniqueidentifier
    declare @MEMBERSHIPPROGRAMID uniqueidentifier
    declare @WHATHAPPENSIFTHEYGIVEMORE tinyint

    select    @RENEWALWINDOWSTARTSINMONTHS = ML.BEFOREEXPIRATION,
            @CURRENTMEMBERSHIPSTATUS = M.STATUSCODE,
            @OBTAINLEVELCODE = ML.OBTAINLEVELCODE,
            @MEMBERSHIPLEVELID = ML.ID,
            @MEMBERSHIPPROGRAMID = ML.MEMBERSHIPPROGRAMID,
            @WHATHAPPENSIFTHEYGIVEMORE = C.WHATHAPPENSIFTHEYGIVEMORECODE
    from dbo.MEMBERSHIP M
    join dbo.MEMBERSHIPLEVEL ML
      on M.MEMBERSHIPLEVELID = ML.ID
    join dbo.MEMBERSHIPLEVELRENEWALRULES RR
      on ML.ID = RR.MEMBERSHIPLEVELID
    join dbo.MEMBERSHIPPROGRAM P
      on P.ID = ML.MEMBERSHIPPROGRAMID
    left join dbo.MEMBERSHIPPROGRAMCONTRIBUTION C
      on P.ID = C.ID
    where M.ID = @MEMBERSHIPID

    if @OBTAINLEVELCODE = 0 --dues based

    begin
        select @LOWESTLEVELAMOUNT = min(T.AMOUNT)
        from MEMBERSHIPLEVEL L
        join MEMBERSHIPLEVELTERM T
          on L.MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID
         and L.ID = T.LEVELID
    end
    else
    begin
        select @LOWESTLEVELAMOUNT = min(T.LOWAMOUNT)
        from MEMBERSHIPLEVEL L
        join MEMBERSHIPLEVELTERM T
          on L.MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID
         and L.ID = T.LEVELID
    end

    select    @ORIGINALTRANSACTIONDATE = TRANSACTIONDATE
    from dbo.[MEMBERSHIPTRANSACTION]
    where ID = @ORIGINALMEMBERSHIPTRANSACTIONID

    if @RENEWALWINDOWSTARTSINMONTHS = 13
    begin
        set @FIRSTDATEABLETORENEW = @ORIGINALTRANSACTIONDATE
    end
    else
    begin
        set @FIRSTDATEABLETORENEW = DATEADD(month, -1 * @RENEWALWINDOWSTARTSINMONTHS, @ORIGINALTRANSACTIONEXPIRATIONDATE)
    end

    set @FIRSTDATEABLETORENEW = dbo.UFN_DATE_GETEARLIESTTIME(@FIRSTDATEABLETORENEW)

    set @DAYAFTERORIGINALTRANSACTIONDATE = DATEADD(day, 1, @ORIGINALTRANSACTIONDATE)

    select @RENEWTRANSACTIONDATE = MT.TRANSACTIONDATE             
    from dbo.[MEMBERSHIPTRANSACTION] MT
    join dbo.[FINANCIALTRANSACTIONLINEITEM] TLI
    on MT.REVENUESPLITID = TLI.ID
    join dbo.[FINANCIALTRANSACTION] FT
    on FT.ID = TLI.FINANCIALTRANSACTIONID
    where MEMBERSHIPID = @MEMBERSHIPID
    and MT.ID != @ORIGINALMEMBERSHIPTRANSACTIONID
    and ((@OBTAINLEVELCODE = 0 and MT.TRANSACTIONDATE between @DAYAFTERORIGINALTRANSACTIONDATE and @TODATE)
        or
       (@OBTAINLEVELCODE = 1 and @WHATHAPPENSIFTHEYGIVEMORE = 2 and MT.TRANSACTIONDATE between @DAYAFTERORIGINALTRANSACTIONDATE and @TODATE)
       or
       (@OBTAINLEVELCODE = 1 and @WHATHAPPENSIFTHEYGIVEMORE <> 2 and MT.TRANSACTIONDATE between @FIRSTDATEABLETORENEW and @TODATE)
      )
    and ((MT.TRANSACTIONDATE <= @ORIGINALTRANSACTIONEXTENDEDEXPIRATIONDATE) or (@CURRENTMEMBERSHIPSTATUS <> 4 and @FROMDATE >= MT.TRANSACTIONDATE))
    and MT.ACTIONCODE != 4 --Not a drop transaction

    and FT.TRANSACTIONAMOUNT >= @LOWESTLEVELAMOUNT

    return @RENEWTRANSACTIONDATE

END