UFN_MEMBERSHIPDUESBATCH_CANADDCONSTITUENTTOPROGRAM_3
Return
Return Type |
---|
bit |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONSTITUENTID | uniqueidentifier | IN | |
@MEMBERSHIPPROGRAMID | uniqueidentifier | IN | |
@WHATPAYINGFORVALUE | tinyint | IN | |
@MEMBERSHIPID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_MEMBERSHIPDUESBATCH_CANADDCONSTITUENTTOPROGRAM_3
(
@CONSTITUENTID uniqueidentifier,
@MEMBERSHIPPROGRAMID uniqueidentifier,
@WHATPAYINGFORVALUE tinyint = 0, --0 = Add, 1 = Renew, 2 = Pay, 3 = Upgrade
@MEMBERSHIPID uniqueidentifier
)
returns bit with execute as caller
as begin
declare @ALLOWMULTIPLEMEMBERSHIPS bit = 0;
declare @CURRENTDATE date = getdate();
declare @PROGRAMTYPECODE tinyint;
select
@ALLOWMULTIPLEMEMBERSHIPS = ALLOWMULTIPLEMEMBERSHIPS,
@PROGRAMTYPECODE = PROGRAMTYPECODE
from dbo.MEMBERSHIPPROGRAM
where ID = @MEMBERSHIPPROGRAMID;
declare @ISREJOIN bit = 0;
select
@ISREJOIN = case
-- Annual
when @PROGRAMTYPECODE = 0 then
case
when
(
MEMBERSHIPPROGRAM.RENEWALWINDOWREVENUETYPECODE = 0 and
(
MEMBERSHIP.EXPIRATIONDATE is not null and
dateadd(month, MEMBERSHIPLEVEL.AFTEREXPIRATION, MEMBERSHIP.EXPIRATIONDATE) < @CURRENTDATE
)
)
or
not (
MEMBERSHIP.STATUSCODE <> 1 or
MEMBERSHIP.STATUSCODE = 5
)
then 1
else 0
end
-- Lifetime/Recurring
when @PROGRAMTYPECODE in (1, 2) then
case
when not (MEMBERSHIP.STATUSCODE <> 1 or MEMBERSHIP.STATUSCODE = 5) then 1
else 0
end
else 0
end
from dbo.MEMBERSHIP
inner join dbo.MEMBERSHIPLEVEL on MEMBERSHIP.MEMBERSHIPLEVELID = MEMBERSHIPLEVEL.ID
inner join dbo.MEMBERSHIPPROGRAM on MEMBERSHIPLEVEL.MEMBERSHIPPROGRAMID = MEMBERSHIPPROGRAM.ID
where MEMBERSHIP.ID = @MEMBERSHIPID;
if @ALLOWMULTIPLEMEMBERSHIPS = 0
begin
-- If the program does not allow multiple memberships... check and see if this constituent is already associated with the program.
declare @MEMBERSHIPCOUNT int = 0;
if @PROGRAMTYPECODE = 0
begin
select @MEMBERSHIPCOUNT = count('x')
from dbo.MEMBER
inner join dbo.MEMBERSHIP on MEMBER.MEMBERSHIPID = MEMBERSHIP.ID
inner join dbo.MEMBERSHIPLEVEL on MEMBERSHIP.MEMBERSHIPLEVELID = MEMBERSHIPLEVEL.ID
where
MEMBER.CONSTITUENTID = @CONSTITUENTID and
MEMBERSHIP.MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID and
MEMBERSHIP.STATUSCODE <> 1 and -- Not cancelled
MEMBER.ISDROPPED <> 1 and -- Not dropped
dateadd(month, MEMBERSHIPLEVEL.AFTEREXPIRATION, MEMBERSHIP.EXPIRATIONDATE) >= @CURRENTDATE; -- Not expired
end
else
begin
select @MEMBERSHIPCOUNT = count('x')
from dbo.MEMBER
inner join dbo.MEMBERSHIP on MEMBER.MEMBERSHIPID = MEMBERSHIP.ID
where
MEMBER.CONSTITUENTID = @CONSTITUENTID and
MEMBERSHIP.MEMBERSHIPPROGRAMID = @MEMBERSHIPPROGRAMID and
MEMBERSHIP.STATUSCODE <> 1 and -- Not cancelled
MEMBER.ISDROPPED <> 1; -- Not dropped
end
-- Add
if @WHATPAYINGFORVALUE = 0
begin
if @MEMBERSHIPCOUNT > 0 -- A membership to this program already exists
return 0;
end
-- Renew, Rejoin
if @WHATPAYINGFORVALUE = 1
begin
if (@MEMBERSHIPID is null and @MEMBERSHIPCOUNT = 0) -- There is no membership to renew/rejoin
return 0;
if @ISREJOIN = 0
begin
-- This is a renewal
if @MEMBERSHIPCOUNT > 1 -- More than one membership shouldn't be possible
return 0;
end
else
begin
-- This is a rejoin
if @MEMBERSHIPCOUNT > 0 -- A membership to this program already exists
return 0;
end
end
end
return 1;
end