UFN_MEMBERSHIP_CALCULATERENEWALEXPIRATION_2

Return

Return Type
datetime

Parameters

Parameter Parameter Type Mode Description
@EXPIRATIONDATE datetime IN
@TERMID uniqueidentifier IN

Definition

Copy


CREATE function dbo.UFN_MEMBERSHIP_CALCULATERENEWALEXPIRATION_2
(
    @EXPIRATIONDATE datetime,
    @TERMID uniqueidentifier
)
returns datetime
as
begin
    declare @DATALOADED bit = 0;
    declare @RENEWALEXPIRATIONDATE datetime = null;
    declare @PROGRAMTYPECODE tinyint = 0;
    declare @TERMLENGTHCODE tinyint = 0;
    declare @TERMTIMELENGTH smallint = 0;
    declare @CUTOFFDAY tinyint;
    declare @EXPIRESONCODE tinyint;

    select
        @CUTOFFDAY = MEMBERSHIPPROGRAM.CUTOFFDAY,
        @EXPIRESONCODE = MEMBERSHIPPROGRAM.EXPIRESONCODE,
        @DATALOADED = 1,
        @TERMLENGTHCODE = MEMBERSHIPLEVELTERM.TERMLENGTHCODE,
        @TERMTIMELENGTH = MEMBERSHIPLEVELTERM.TERMTIMELENGTH,
        @PROGRAMTYPECODE = MEMBERSHIPPROGRAM.PROGRAMTYPECODE
    from dbo.MEMBERSHIPLEVELTERM
    inner join dbo.MEMBERSHIPLEVEL
        on MEMBERSHIPLEVELTERM.LEVELID = MEMBERSHIPLEVEL.ID
    inner join dbo.MEMBERSHIPPROGRAM
        on MEMBERSHIPLEVEL.MEMBERSHIPPROGRAMID = MEMBERSHIPPROGRAM.ID
    where MEMBERSHIPLEVELTERM.ID = @TERMID;

    if @DATALOADED = 1 and @PROGRAMTYPECODE = 0
        begin
            set @RENEWALEXPIRATIONDATE = 
                    case @TERMLENGTHCODE
                        when 0 then dateadd(mm, @TERMTIMELENGTH, @EXPIRATIONDATE)
                        when 1 then dateadd(yy, @TERMTIMELENGTH, @EXPIRATIONDATE)
                    end;
        end

    if @EXPIRESONCODE = 1
        begin
            if @CUTOFFDAY <= day(@EXPIRATIONDATE)
                begin
                    set @RENEWALEXPIRATIONDATE = dbo.UFN_DATE_THISMONTH_LASTDAY(@RENEWALEXPIRATIONDATE, 1);
                end
                else
                begin
                    set @RENEWALEXPIRATIONDATE = dbo.UFN_DATE_LASTMONTH_LASTDAY(@RENEWALEXPIRATIONDATE, 1);
                end
        end
    return @RENEWALEXPIRATIONDATE;
end