USP_CONSTITUENTSOURCEANALYSIS_UPDATEMEMBERSHIPMEMBER
Updates the cached Membership Member constituency values for constituent source analysis.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CHANGEAGENTID | uniqueidentifier | IN | |
@CHANGEDATE | datetime | IN |
Definition
Copy
create procedure dbo.USP_CONSTITUENTSOURCEANALYSIS_UPDATEMEMBERSHIPMEMBER
(
@CHANGEAGENTID uniqueidentifier = null,
@CHANGEDATE datetime = null
)
as
set nocount on;
begin try
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
if @CHANGEDATE is null
set @CHANGEDATE = getdate();
--reset the NEEDSUPDATE flag from previous runs
update dbo.CONSTITUENTSOURCEANALYSISCACHEMEMBERSHIPMEMBER
set NEEDSUPDATE = 0,
CHANGEDBYID = @CHANGEAGENTID,
DATECHANGED = @CHANGEDATE
where NEEDSUPDATE = 1;
--any records that have changed since last time needs to have their DATETO date set. Also set NEEDSUPDATE so the
--insert statement will know to write the updated data to the cache
with [CONSTIT_INFO] as
(
select
CONSTITUENT.ID as [CONSTITUENTID],
coalesce(max(MEMBER.DATECHANGED), @CHANGEDATE) as [DATECHANGED],
case when MEMBER.CONSTITUENTID is null then 0 else 1 end as [ISMEMBER]
from dbo.CONSTITUENT
left join dbo.MEMBER on MEMBER.CONSTITUENTID = CONSTITUENT.ID and MEMBER.ISDROPPED = 0
left join dbo.MEMBERSHIP on MEMBERSHIP.ID = MEMBER.MEMBERSHIPID and MEMBERSHIP.STATUSCODE <> 1
left join dbo.MEMBERSHIPLEVELTERM on MEMBERSHIPLEVELTERM.ID = MEMBERSHIP.MEMBERSHIPLEVELTERMID and (MEMBERSHIPLEVELTERM.TERMCODE = 6 or getdate() <= dbo.UFN_MEMBERSHIPLEVEL_CREATERENEWALAFTEREXPIRATIONDATE(MEMBERSHIP.MEMBERSHIPLEVELID,MEMBERSHIP.EXPIRATIONDATE))
inner join dbo.CONSTITUENTSOURCEANALYSISCACHEMEMBERSHIPMEMBER on CONSTITUENTSOURCEANALYSISCACHEMEMBERSHIPMEMBER.CONSTITUENTID = CONSTITUENT.ID
where (@CHANGEDATE > CONSTITUENTSOURCEANALYSISCACHEMEMBERSHIPMEMBER.DATEFROM)
group by MEMBER.CONSTITUENTID, CONSTITUENT.ID
)
update CONSTITUENTSOURCEANALYSISCACHEMEMBERSHIPMEMBER
set CONSTITUENTSOURCEANALYSISCACHEMEMBERSHIPMEMBER.NEEDSUPDATE = 1,
CONSTITUENTSOURCEANALYSISCACHEMEMBERSHIPMEMBER.DATETO = @CHANGEDATE,
CONSTITUENTSOURCEANALYSISCACHEMEMBERSHIPMEMBER.CHANGEDBYID = @CHANGEAGENTID,
CONSTITUENTSOURCEANALYSISCACHEMEMBERSHIPMEMBER.DATECHANGED = @CHANGEDATE
from CONSTITUENTSOURCEANALYSISCACHEMEMBERSHIPMEMBER
inner join [CONSTIT_INFO] on [CONSTIT_INFO].CONSTITUENTID = CONSTITUENTSOURCEANALYSISCACHEMEMBERSHIPMEMBER.CONSTITUENTID and CONSTITUENTSOURCEANALYSISCACHEMEMBERSHIPMEMBER.DATETO is null
where
[CONSTIT_INFO].ISMEMBER <> CONSTITUENTSOURCEANALYSISCACHEMEMBERSHIPMEMBER.VALUE;
--For any constituents that either don't have a record in the cache table OR have a NEEDSUPDATE flag set, insert their
--current address data into the cache
with [CONSTIT_INFO] as
(
select
CONSTITUENT.ID as [CONSTITUENTID],
coalesce(max(MEMBER.DATECHANGED), @CHANGEDATE) as [DATECHANGED],
case when MEMBER.CONSTITUENTID is null then 0 else 1 end as [ISMEMBER]
from dbo.CONSTITUENT
left join dbo.MEMBER on MEMBER.CONSTITUENTID = CONSTITUENT.ID and MEMBER.ISDROPPED = 0
left join dbo.MEMBERSHIP on MEMBERSHIP.ID = MEMBER.MEMBERSHIPID and MEMBERSHIP.STATUSCODE <> 1
left join dbo.MEMBERSHIPLEVELTERM on MEMBERSHIPLEVELTERM.ID = MEMBERSHIP.MEMBERSHIPLEVELTERMID and (MEMBERSHIPLEVELTERM.TERMCODE = 6 or getdate() <= dbo.UFN_MEMBERSHIPLEVEL_CREATERENEWALAFTEREXPIRATIONDATE(MEMBERSHIP.MEMBERSHIPLEVELID,MEMBERSHIP.EXPIRATIONDATE))
left join dbo.CONSTITUENTSOURCEANALYSISCACHEMEMBERSHIPMEMBER on CONSTITUENTSOURCEANALYSISCACHEMEMBERSHIPMEMBER.CONSTITUENTID = CONSTITUENT.ID
where CONSTITUENTSOURCEANALYSISCACHEMEMBERSHIPMEMBER.ID is null or CONSTITUENTSOURCEANALYSISCACHEMEMBERSHIPMEMBER.NEEDSUPDATE = 1
group by MEMBER.CONSTITUENTID, CONSTITUENT.ID
)
insert into dbo.CONSTITUENTSOURCEANALYSISCACHEMEMBERSHIPMEMBER(ID, NEEDSUPDATE, CONSTITUENTID, DATEFROM, DATETO, VALUE,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
newid(),
0,
[CONSTIT_INFO].CONSTITUENTID,
@CHANGEDATE,
null,
[CONSTIT_INFO].ISMEMBER,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CHANGEDATE,
@CHANGEDATE
from [CONSTIT_INFO];
--No need to reset the NEEDSUPDATE flag since that will be handled the next time this procedure is run
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;