UFN_MEMBERSHIP_WASLAPSED_BETWEENTHESEDATES

Return

Return Type
bit

Parameters

Parameter Parameter Type Mode Description
@MEMBERSHIPID uniqueidentifier IN
@ORIGINALMEMBERSHIPTRANSACTIONID uniqueidentifier IN
@FROMDATE datetime IN
@TODATE datetime IN
@ONLYCOUNTCHANGEDTOLAPSED bit IN

Definition

Copy


CREATE FUNCTION dbo.[UFN_MEMBERSHIP_WASLAPSED_BETWEENTHESEDATES]
 (@MEMBERSHIPID uniqueidentifier, @ORIGINALMEMBERSHIPTRANSACTIONID uniqueidentifier, @FROMDATE datetime, @TODATE datetime, @ONLYCOUNTCHANGEDTOLAPSED bit)
RETURNS bit
WITH EXECUTE AS CALLER
AS
BEGIN

    declare @ORIGINALTRANSACTIONEXPIRATIONDATE datetime
    declare @TOTALGRACEPERIODINMONTHS tinyint = 0
    declare @ORIGINALTRANSACTIONEXTENDEDEXPIRATIONDATE datetime
    declare @STATUSCODEAFTERRENEWALWINDOW tinyint

select        @TOTALGRACEPERIODINMONTHS = RR.AFTEREXPIRATION,
            @STATUSCODEAFTERRENEWALWINDOW = RR.NONRENEWALACTIONTYPECODE
    from dbo.MEMBERSHIP M
    join dbo.MEMBERSHIPLEVEL ML
      on M.MEMBERSHIPLEVELID = ML.ID
    join dbo.MEMBERSHIPLEVELRENEWALRULES RR
      on ML.ID = RR.MEMBERSHIPLEVELID
    where M.ID = @MEMBERSHIPID

    select @ORIGINALTRANSACTIONEXPIRATIONDATE = EXPIRATIONDATE
    from dbo.[MEMBERSHIPTRANSACTION]
    where ID = @ORIGINALMEMBERSHIPTRANSACTIONID

    set @ORIGINALTRANSACTIONEXTENDEDEXPIRATIONDATE = dbo.[UFN_MEMBERSHIP_WITHRENEWALWINDOW_GETEXPIRATIONDATE](@MEMBERSHIPID, @ORIGINALTRANSACTIONEXPIRATIONDATE)
    set @TODATE =  dbo.UFN_DATE_GETLATESTTIME(@TODATE)

    declare @ORIGINALTRANSACTIONLASTRENEWALWINDOWDATE datetime
    set @ORIGINALTRANSACTIONLASTRENEWALWINDOWDATE = DATEADD(month, @TOTALGRACEPERIODINMONTHS, @ORIGINALTRANSACTIONEXPIRATIONDATE)
    set @ORIGINALTRANSACTIONLASTRENEWALWINDOWDATE = dbo.UFN_DATE_GETEARLIESTTIME(@ORIGINALTRANSACTIONLASTRENEWALWINDOWDATE)

    declare @RENEWTRANSACTIONDATE datetime = null
    set @RENEWTRANSACTIONDATE = dbo.[UFN_MEMBERSHIP_RENEWTRANSACTIONEXISTS_BEFORETHISDATE](@MEMBERSHIPID, @ORIGINALMEMBERSHIPTRANSACTIONID, @ORIGINALTRANSACTIONEXPIRATIONDATE, @ORIGINALTRANSACTIONEXTENDEDEXPIRATIONDATE, @FROMDATE, @TODATE)    

    declare @AFTERRENEWALWINDOWANDSTATUSNOTLAPSED bit = 0
    if (@RENEWTRANSACTIONDATE is null and @ORIGINALTRANSACTIONLASTRENEWALWINDOWDATE <= @FROMDATE and @STATUSCODEAFTERRENEWALWINDOW != 4)
    begin
        set @AFTERRENEWALWINDOWANDSTATUSNOTLAPSED = 1
    end

    declare @NORENEWALWINDOWANDSTATUSNOTLAPSED bit = 0
    if @TOTALGRACEPERIODINMONTHS = 0 and @STATUSCODEAFTERRENEWALWINDOW != 4
    begin
        set @NORENEWALWINDOWANDSTATUSNOTLAPSED = 1
    end

    --Only counts a lapsed membership if it switches to lapsed during the time frame, not if it switched to lapsed in a previous time frame and is now lapsed

    if @ONLYCOUNTCHANGEDTOLAPSED = 1
    begin
        declare @CURRENTDATE datetime = getdate()
        if @ORIGINALTRANSACTIONEXTENDEDEXPIRATIONDATE between @FROMDATE and @TODATE
        and @CURRENTDATE > @ORIGINALTRANSACTIONEXTENDEDEXPIRATIONDATE
        and (@RENEWTRANSACTIONDATE is null or not (@RENEWTRANSACTIONDATE between @FROMDATE and @TODATE))
        begin
            return 1
        end
    end
    else
    begin
        if @ORIGINALTRANSACTIONEXTENDEDEXPIRATIONDATE < @TODATE
        and @RENEWTRANSACTIONDATE is null
        and @AFTERRENEWALWINDOWANDSTATUSNOTLAPSED = 0
        and @NORENEWALWINDOWANDSTATUSNOTLAPSED = 0
        begin
            return 1
        end
    end

    return 0
END