USP_SMARTFIELD_MEMBERSHIPEXPIRATION
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ASOF | datetime | IN | |
@CALCULATIONTYPE | tinyint | IN | |
@SITES | xml | IN |
Definition
Copy
CREATE procedure dbo.[USP_SMARTFIELD_MEMBERSHIPEXPIRATION]
(
@ASOF datetime,
@CALCULATIONTYPE tinyint = 2,
@SITES xml = null
)
as
set nocount on;
declare @TODAY datetime;
declare @MEMBERSHIPFILTER table ([ID] uniqueidentifier primary key);
set @TODAY = getdate();
if @ASOF is not null
insert into
@MEMBERSHIPFILTER (ID)
select
[ID]
from
dbo.[MEMBERSHIP]
where
[MEMBERSHIP].[DATECHANGED] > @ASOF
union
select
[AUDITRECORDID]
from
dbo.[MEMBERSHIPAUDIT]
where
[MEMBERSHIPAUDIT].[AUDITDATE] > @ASOF
union
select
[MEMBERSHIPID]
from
dbo.[MEMBERSHIPTRANSACTION]
where
[MEMBERSHIPTRANSACTION].[DATECHANGED] > @ASOF
union
select
[MEMBERSHIPID]
from
dbo.[MEMBERSHIPTRANSACTIONAUDIT]
inner join
dbo.[MEMBERSHIP] on [MEMBERSHIP].[ID] = [MEMBERSHIPTRANSACTIONAUDIT].[MEMBERSHIPID]
where
[MEMBERSHIPTRANSACTIONAUDIT].[AUDITDATE] > @ASOF;
else
insert into
@MEMBERSHIPFILTER (ID)
select
[ID]
from dbo.[MEMBERSHIP];
declare @SITESFILTER table(ID uniqueidentifier primary key);
insert into
@SITESFILTER(ID)
select distinct
T.c.value('(SITEID)[1]','uniqueidentifier')
FROM
@SITES.nodes('/SITES/ITEM') T(c)
select
[F].[ID],
case
when @CALCULATIONTYPE = 0 then datediff(dd, @TODAY, [MEMBERSHIP].[EXPIRATIONDATE]) -- days
when @CALCULATIONTYPE = 1 then datediff(ww, @TODAY, [MEMBERSHIP].[EXPIRATIONDATE]) -- weeks
when @CALCULATIONTYPE = 2 then datediff(mm, @TODAY, [MEMBERSHIP].[EXPIRATIONDATE]) -- months
when @CALCULATIONTYPE = 3 then datediff(qq, @TODAY, [MEMBERSHIP].[EXPIRATIONDATE]) -- quarters
when @CALCULATIONTYPE = 4 then datediff(yy, @TODAY, [MEMBERSHIP].[EXPIRATIONDATE]) -- years
end as [EXPIRESIN]
from
@MEMBERSHIPFILTER as [F]
inner join
dbo.[MEMBERSHIP] on [MEMBERSHIP].[ID] = [F].[ID]
where
MEMBERSHIP.EXPIRATIONDATE is not null
and
(
(@SITES is null)
or
exists(
select
CONSTITUENTSITE.ID
from
CONSTITUENTSITE
inner join
@SITESFILTER as SITES on SITES.ID = CONSTITUENTSITE.SITEID
inner join
MEMBER on MEMBER.CONSTITUENTID = CONSTITUENTSITE.CONSTITUENTID
where
MEMBER.MEMBERSHIPID = MEMBERSHIP.ID
)
)
return 0;