UFN_MEMBERSHIP_ISUPGRADEABLE

Return

Return Type
bit

Parameters

Parameter Parameter Type Mode Description
@MEMBERSHIPID uniqueidentifier IN
@BASEDONDATE datetime IN

Definition

Copy


CREATE function dbo.UFN_MEMBERSHIP_ISUPGRADEABLE(@MEMBERSHIPID uniqueidentifier, @BASEDONDATE datetime = null)
returns bit
as begin
    declare @ISUPGRADEABLE bit = 0
  declare @REVENUEID uniqueidentifier = null
  declare @BALANCE money = null

  set @REVENUEID = dbo.UFN_MEMBERSHIP_GETPLEDGE(@MEMBERSHIPID)
  set @BALANCE = dbo.UFN_PLEDGE_GETBALANCE(@REVENUEID)
    if @BASEDONDATE is null set @BASEDONDATE = getdate()


    if ((NOT @BALANCE is null) and @BALANCE > 0)
        return 0

  select @ISUPGRADEABLE = 1 where exists (
    select
          MP.ID
      from 
           dbo.MEMBERSHIP M
              inner join dbo.MEMBERSHIPPROGRAM MP on MP.ID = M.MEMBERSHIPPROGRAMID
              inner join MEMBERSHIPLEVEL ML on M.MEMBERSHIPPROGRAMID = ML.MEMBERSHIPPROGRAMID
              inner join MEMBERSHIPLEVELTERM MLT on ML.ID = MLT.LEVELID
              inner join 
                    (
                        select
                            M.ID,
                            dbo.UFN_MEMBERSHIPLEVEL_CREATERENEWALBEFOREEXPIRATIONDATE(M.MEMBERSHIPLEVELID, M.EXPIRATIONDATE) AS RENEWALDATE
                        from MEMBERSHIP M
                        where
                            M.ID = @MEMBERSHIPID
              and dbo.UFN_MEMBERSHIPLEVEL_ISUPGRADEABLE(M.MEMBERSHIPLEVELTERMID) = 1
                        union

                        select
                            M.ID,
                            dbo.UFN_MEMBERSHIPLEVEL_CREATERENEWALBEFOREEXPIRATIONDATE(M.MEMBERSHIPLEVELID, M.EXPIRATIONDATE) AS RENEWALDATE
                        from 
                            MEMBERSHIP M
                            inner join dbo.MEMBERSHIPLEVEL ML on M.MEMBERSHIPLEVELID = ML.ID
                            inner join dbo.MEMBERSHIPLEVELTERM MLT on M.MEMBERSHIPLEVELTERMID = MLT.ID and dbo.UFN_MEMBERSHIPLEVELTERM_ISUPGRADEABLE(MLT.ID) = 1
                        where
                            M.ID = @MEMBERSHIPID
                    ) UPGRADEABLELEVELS on M.ID = UPGRADEABLELEVELS.ID
      where
          M.ID = @MEMBERSHIPID
          and dbo.UFN_MEMBERSHIPLEVEL_ISUPGRADEABLE(MLT.ID) = 1
          and MP.ISACTIVE = 1 
          and M.STATUSCODE = 0
          and ((MP.PROGRAMTYPECODE = 0) or (MP.PROGRAMTYPECODE = 2 and MLT.LIFETIMEPAYMENTOPTIONCODE = 0))
            --when there is no renewal date or the @BASEDONDATE is between the RENEWALDATE and the JOINDATE, then allow the upgrade.

            and (UPGRADEABLELEVELS.RENEWALDATE IS NULL or (UPGRADEABLELEVELS.RENEWALDATE >= @BASEDONDATE and M.JOINDATE <= @BASEDONDATE))
  )

return @ISUPGRADEABLE

end