UFN_MEMBERSHIPTRANSACTION_CALCULATEMEMBERSHIPSTATUSCODE
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | |
@ASOF | date | IN |
Definition
Copy
CREATE function dbo.UFN_MEMBERSHIPTRANSACTION_CALCULATEMEMBERSHIPSTATUSCODE (
@ID uniqueidentifier,
@ASOF date
)
returns table
as return (
select
case
when MEMBERSHIPPROGRAM.PROGRAMTYPECODE IN (1,2) then
MEMBERSHIP.STATUSCODE -- For Recurring/Sustaining and Lifetime programs, leave the STATUSCODE the same. A future story will change the status code for these program types.
when MEMBERSHIPTRANSACTION.ACTIONCODE = 4 then -- Drop
1 -- Cancelled
when @ASOF <= MEMBERSHIPTRANSACTION.EXPIRATIONDATE then
0 -- Active
when @ASOF > dateadd(month, MEMBERSHIPLEVEL.AFTEREXPIRATION, MEMBERSHIPTRANSACTION.EXPIRATIONDATE) then
MEMBERSHIPLEVEL.NONRENEWALACTIONTYPECODE
when (MEMBERSHIPLEVEL.MEMBERSHIPLEVELRENEWAL1ID is not null and MLR1.INTERVALCODE = 12 or @ASOF <= dateadd(month, MLR1.INTERVALCODE+1, MEMBERSHIPTRANSACTION.EXPIRATIONDATE)) then
MLR1.STATUSCODE -- When the current date is within the first rules period
when (MEMBERSHIPLEVEL.MEMBERSHIPLEVELRENEWAL2ID is not null and MLR2.INTERVALCODE = 12 or @ASOF <= dateadd(month, (MLR1.INTERVALCODE+1 + MLR2.INTERVALCODE+1), MEMBERSHIPTRANSACTION.EXPIRATIONDATE)) then
MLR2.STATUSCODE -- When the current date is within the second rules period
when (MEMBERSHIPLEVEL.MEMBERSHIPLEVELRENEWAL3ID is not null and MLR3.INTERVALCODE = 12 or @ASOF <= dateadd(month, (MLR3.INTERVALCODE+1 + MLR1.INTERVALCODE+1 + MLR2.INTERVALCODE+1), MEMBERSHIPTRANSACTION.EXPIRATIONDATE)) then
MLR3.STATUSCODE -- When the current date is within the third rules period
else
4 -- Lapsed
end as STATUSCODE
from
dbo.MEMBERSHIPTRANSACTION
inner join
dbo.MEMBERSHIPLEVEL on MEMBERSHIPLEVEL.ID = MEMBERSHIPTRANSACTION.MEMBERSHIPLEVELID
inner join
dbo.MEMBERSHIPPROGRAM on MEMBERSHIPPROGRAM.ID = MEMBERSHIPLEVEL.MEMBERSHIPPROGRAMID
inner join
dbo.MEMBERSHIP ON MEMBERSHIP.ID = MEMBERSHIPTRANSACTION.MEMBERSHIPID
left join
dbo.MEMBERSHIPLEVELRENEWAL MLR1 on MLR1.ID = MEMBERSHIPLEVEL.MEMBERSHIPLEVELRENEWAL1ID
left join
dbo.MEMBERSHIPLEVELRENEWAL MLR2 on MLR2.ID = MEMBERSHIPLEVEL.MEMBERSHIPLEVELRENEWAL2ID
left join
dbo.MEMBERSHIPLEVELRENEWAL MLR3 on MLR3.ID = MEMBERSHIPLEVEL.MEMBERSHIPLEVELRENEWAL3ID
where
MEMBERSHIPTRANSACTION.ID = @ID
)