USP_CONSTITUENCYDATERANGE_REFRESHCOMMITTEEMEMBERCONSTITUENCY
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@CONSTITUENTID | uniqueidentifier | IN | |
@CONSTITUENCYREFRESHPROCESSID | uniqueidentifier | IN | |
@RECORDCOUNT | int | INOUT |
Definition
Copy
CREATE procedure dbo.USP_CONSTITUENCYDATERANGE_REFRESHCOMMITTEEMEMBERCONSTITUENCY
(
@CONSTITUENTID uniqueidentifier = null,
@CONSTITUENCYREFRESHPROCESSID uniqueidentifier = null,
@RECORDCOUNT int = 0 output
)
as
begin
set nocount on;
set @RECORDCOUNT = 0;
declare @CURRENTDATE datetime = getdate();
declare @COMMITTEEMEMBERDEFINITIONID uniqueidentifier = '093A3D4F-2974-447F-AD92-870EB4A04593';
begin try
if @CONSTITUENTID is not null and @CONSTITUENCYREFRESHPROCESSID is not null
begin
raiserror('ERR_REFRESH_CONSTITUENTANDSELECTION : A constituency refresh cannot be run with both a specific constituent and a selection.', 13, 1);
end
if @CONSTITUENCYREFRESHPROCESSID is null and @CONSTITUENTID is null
begin
insert into dbo.CONSTITUENCYDATERANGE
(
ID,
CONSTITUENTID,
CONSTITUENCYDEFINITIONID,
DATEFROM,
DATETO,
REFRESHDATE
)
select
newid(),
GROUPMEMBER.MEMBERID,
@COMMITTEEMEMBERDEFINITIONID,
min(GROUPMEMBERDATERANGE.DATEFROM),
case
when min(coalesce(convert(nchar(8), GROUPMEMBERDATERANGE.DATETO, 112), '00000000')) = '00000000' then
null
else
max(GROUPMEMBERDATERANGE.DATETO)
end,
@CURRENTDATE
from
dbo.GROUPMEMBER
inner join dbo.COMMITTEEDATERANGE
on COMMITTEEDATERANGE.CONSTITUENTID = GROUPMEMBER.GROUPID
and (COMMITTEEDATERANGE.DATEFROM <= convert(date, getdate()) or COMMITTEEDATERANGE.DATEFROM is null)
and (COMMITTEEDATERANGE.DATETO >= convert(date, getdate()) or COMMITTEEDATERANGE.DATETO is null)
left join dbo.GROUPMEMBERDATERANGE
on GROUPMEMBER.ID = GROUPMEMBERDATERANGE.GROUPMEMBERID
left join dbo.CONSTITUENCYDATERANGE
on CONSTITUENCYDATERANGE.CONSTITUENTID = GROUPMEMBER.MEMBERID
and CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @COMMITTEEMEMBERDEFINITIONID
where
CONSTITUENCYDATERANGE.ID is null
group by
GROUPMEMBER.MEMBERID;
set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;
update dbo.CONSTITUENCYDATERANGE
set
DATEFROM = COMMITTEEMEMBER.DATEFROM,
DATETO = COMMITTEEMEMBER.DATETO,
REFRESHDATE = @CURRENTDATE
from
dbo.CONSTITUENCYDATERANGE
inner join (
select
GROUPMEMBER.MEMBERID,
min(GROUPMEMBERDATERANGE.DATEFROM) as DATEFROM,
case
when min(coalesce(convert(nchar(8), GROUPMEMBERDATERANGE.DATETO, 112), '00000000')) = '00000000' then
null
else
max(GROUPMEMBERDATERANGE.DATETO)
end as DATETO
from
dbo.GROUPMEMBER
inner join dbo.COMMITTEEDATERANGE
on COMMITTEEDATERANGE.CONSTITUENTID = GROUPMEMBER.GROUPID
and (COMMITTEEDATERANGE.DATEFROM <= convert(date, getdate()) or COMMITTEEDATERANGE.DATEFROM is null)
and (COMMITTEEDATERANGE.DATETO >= convert(date, getdate()) or COMMITTEEDATERANGE.DATETO is null)
left join dbo.GROUPMEMBERDATERANGE
on GROUPMEMBER.ID = GROUPMEMBERDATERANGE.GROUPMEMBERID
group by
GROUPMEMBER.MEMBERID
) COMMITTEEMEMBER
on COMMITTEEMEMBER.MEMBERID = CONSTITUENCYDATERANGE.CONSTITUENTID
where
CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @COMMITTEEMEMBERDEFINITIONID;
set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;
delete dbo.CONSTITUENCYDATERANGE
from
dbo.CONSTITUENCYDATERANGE
left join (
select distinct
GROUPMEMBER.MEMBERID
from
dbo.GROUPMEMBER
inner join dbo.COMMITTEEDATERANGE
on COMMITTEEDATERANGE.CONSTITUENTID = GROUPMEMBER.GROUPID
and (COMMITTEEDATERANGE.DATEFROM <= convert(date, getdate()) or COMMITTEEDATERANGE.DATEFROM is null)
and (COMMITTEEDATERANGE.DATETO >= convert(date, getdate()) or COMMITTEEDATERANGE.DATETO is null)
left join dbo.GROUPMEMBERDATERANGE
on GROUPMEMBER.ID = GROUPMEMBERDATERANGE.GROUPMEMBERID
) COMMITTEEMEMBER
on COMMITTEEMEMBER.MEMBERID = CONSTITUENCYDATERANGE.CONSTITUENTID
where
COMMITTEEMEMBER.MEMBERID is null
and CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @COMMITTEEMEMBERDEFINITIONID;
set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;
end
else if @CONSTITUENCYREFRESHPROCESSID is null
begin
insert into dbo.CONSTITUENCYDATERANGE
(
ID,
CONSTITUENTID,
CONSTITUENCYDEFINITIONID,
DATEFROM,
DATETO,
REFRESHDATE
)
select
newid(),
GROUPMEMBER.MEMBERID,
@COMMITTEEMEMBERDEFINITIONID,
min(GROUPMEMBERDATERANGE.DATEFROM),
case
when min(coalesce(convert(nchar(8), GROUPMEMBERDATERANGE.DATETO, 112), '00000000')) = '00000000' then
null
else
max(GROUPMEMBERDATERANGE.DATETO)
end,
@CURRENTDATE
from
dbo.GROUPMEMBER
inner join dbo.COMMITTEEDATERANGE
on COMMITTEEDATERANGE.CONSTITUENTID = GROUPMEMBER.GROUPID
and (COMMITTEEDATERANGE.DATEFROM <= convert(date, getdate()) or COMMITTEEDATERANGE.DATEFROM is null)
and (COMMITTEEDATERANGE.DATETO >= convert(date, getdate()) or COMMITTEEDATERANGE.DATETO is null)
left join dbo.GROUPMEMBERDATERANGE
on GROUPMEMBER.ID = GROUPMEMBERDATERANGE.GROUPMEMBERID
left join dbo.CONSTITUENCYDATERANGE
on CONSTITUENCYDATERANGE.CONSTITUENTID = GROUPMEMBER.MEMBERID
and CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @COMMITTEEMEMBERDEFINITIONID
where
CONSTITUENCYDATERANGE.ID is null
and GROUPMEMBER.MEMBERID = @CONSTITUENTID
group by
GROUPMEMBER.MEMBERID;
set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;
update dbo.CONSTITUENCYDATERANGE
set
DATEFROM = COMMITTEEMEMBER.DATEFROM,
DATETO = COMMITTEEMEMBER.DATETO,
REFRESHDATE = @CURRENTDATE
from
dbo.CONSTITUENCYDATERANGE
inner join (
select
GROUPMEMBER.MEMBERID,
min(GROUPMEMBERDATERANGE.DATEFROM) as DATEFROM,
case
when min(coalesce(convert(nchar(8), GROUPMEMBERDATERANGE.DATETO, 112), '00000000')) = '00000000' then
null
else
max(GROUPMEMBERDATERANGE.DATETO)
end as DATETO
from
dbo.GROUPMEMBER
inner join dbo.COMMITTEEDATERANGE
on COMMITTEEDATERANGE.CONSTITUENTID = GROUPMEMBER.GROUPID
and (COMMITTEEDATERANGE.DATEFROM <= convert(date, getdate()) or COMMITTEEDATERANGE.DATEFROM is null)
and (COMMITTEEDATERANGE.DATETO >= convert(date, getdate()) or COMMITTEEDATERANGE.DATETO is null)
left join dbo.GROUPMEMBERDATERANGE
on GROUPMEMBER.ID = GROUPMEMBERDATERANGE.GROUPMEMBERID
group by
GROUPMEMBER.MEMBERID
) COMMITTEEMEMBER
on COMMITTEEMEMBER.MEMBERID = CONSTITUENCYDATERANGE.CONSTITUENTID
where
CONSTITUENCYDATERANGE.CONSTITUENTID = @CONSTITUENTID
and CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @COMMITTEEMEMBERDEFINITIONID;
set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;
delete dbo.CONSTITUENCYDATERANGE
from
dbo.CONSTITUENCYDATERANGE
left join (
select distinct
GROUPMEMBER.MEMBERID
from
dbo.GROUPMEMBER
inner join dbo.COMMITTEEDATERANGE
on COMMITTEEDATERANGE.CONSTITUENTID = GROUPMEMBER.GROUPID
and (COMMITTEEDATERANGE.DATEFROM <= convert(date, getdate()) or COMMITTEEDATERANGE.DATEFROM is null)
and (COMMITTEEDATERANGE.DATETO >= convert(date, getdate()) or COMMITTEEDATERANGE.DATETO is null)
left join dbo.GROUPMEMBERDATERANGE
on GROUPMEMBER.ID = GROUPMEMBERDATERANGE.GROUPMEMBERID
) COMMITTEEMEMBER
on COMMITTEEMEMBER.MEMBERID = CONSTITUENCYDATERANGE.CONSTITUENTID
where
COMMITTEEMEMBER.MEMBERID is null
and CONSTITUENCYDATERANGE.CONSTITUENTID = @CONSTITUENTID
and CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @COMMITTEEMEMBERDEFINITIONID;
set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;
end
else
begin
insert into dbo.CONSTITUENCYDATERANGE
(
ID,
CONSTITUENTID,
CONSTITUENCYDEFINITIONID,
DATEFROM,
DATETO,
REFRESHDATE
)
select
newid(),
GROUPMEMBER.MEMBERID,
@COMMITTEEMEMBERDEFINITIONID,
min(GROUPMEMBERDATERANGE.DATEFROM),
case
when min(coalesce(convert(nchar(8), GROUPMEMBERDATERANGE.DATETO, 112), '00000000')) = '00000000' then
null
else
max(GROUPMEMBERDATERANGE.DATETO)
end,
@CURRENTDATE
from
dbo.GROUPMEMBER
inner join dbo.COMMITTEEDATERANGE
on COMMITTEEDATERANGE.CONSTITUENTID = GROUPMEMBER.GROUPID
and (COMMITTEEDATERANGE.DATEFROM <= convert(date, getdate()) or COMMITTEEDATERANGE.DATEFROM is null)
and (COMMITTEEDATERANGE.DATETO >= convert(date, getdate()) or COMMITTEEDATERANGE.DATETO is null)
left join dbo.GROUPMEMBERDATERANGE
on GROUPMEMBER.ID = GROUPMEMBERDATERANGE.GROUPMEMBERID
left join dbo.CONSTITUENCYDATERANGE
on CONSTITUENCYDATERANGE.CONSTITUENTID = GROUPMEMBER.MEMBERID
and CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @COMMITTEEMEMBERDEFINITIONID
inner join dbo.CONSTITUENCYREFRESHPROCESSSELECTIONRESULT CONSTITUENTS
on CONSTITUENTS.CONSTITUENTID = GROUPMEMBER.MEMBERID
and CONSTITUENTS.CONSTITUENCYREFRESHPROCESSID = @CONSTITUENCYREFRESHPROCESSID
where
CONSTITUENCYDATERANGE.ID is null
group by
GROUPMEMBER.MEMBERID;
set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;
update dbo.CONSTITUENCYDATERANGE
set
DATEFROM = COMMITTEEMEMBER.DATEFROM,
DATETO = COMMITTEEMEMBER.DATETO,
REFRESHDATE = @CURRENTDATE
from
dbo.CONSTITUENCYDATERANGE
inner join (
select
GROUPMEMBER.MEMBERID,
min(GROUPMEMBERDATERANGE.DATEFROM) as DATEFROM,
case
when min(coalesce(convert(nchar(8), GROUPMEMBERDATERANGE.DATETO, 112), '00000000')) = '00000000' then
null
else
max(GROUPMEMBERDATERANGE.DATETO)
end as DATETO
from
dbo.GROUPMEMBER
inner join dbo.COMMITTEEDATERANGE
on COMMITTEEDATERANGE.CONSTITUENTID = GROUPMEMBER.GROUPID
and (COMMITTEEDATERANGE.DATEFROM <= convert(date, getdate()) or COMMITTEEDATERANGE.DATEFROM is null)
and (COMMITTEEDATERANGE.DATETO >= convert(date, getdate()) or COMMITTEEDATERANGE.DATETO is null)
left join dbo.GROUPMEMBERDATERANGE
on GROUPMEMBER.ID = GROUPMEMBERDATERANGE.GROUPMEMBERID
group by
GROUPMEMBER.MEMBERID
) COMMITTEEMEMBER
on COMMITTEEMEMBER.MEMBERID = CONSTITUENCYDATERANGE.CONSTITUENTID
inner join dbo.CONSTITUENCYREFRESHPROCESSSELECTIONRESULT CONSTITUENTS
on CONSTITUENTS.CONSTITUENTID = CONSTITUENCYDATERANGE.CONSTITUENTID
and CONSTITUENTS.CONSTITUENCYREFRESHPROCESSID = @CONSTITUENCYREFRESHPROCESSID
where
CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @COMMITTEEMEMBERDEFINITIONID;
set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;
delete dbo.CONSTITUENCYDATERANGE
from
dbo.CONSTITUENCYDATERANGE
left join (
select distinct
GROUPMEMBER.MEMBERID
from
dbo.GROUPMEMBER
inner join dbo.COMMITTEEDATERANGE
on COMMITTEEDATERANGE.CONSTITUENTID = GROUPMEMBER.GROUPID
and (COMMITTEEDATERANGE.DATEFROM <= convert(date, getdate()) or COMMITTEEDATERANGE.DATEFROM is null)
and (COMMITTEEDATERANGE.DATETO >= convert(date, getdate()) or COMMITTEEDATERANGE.DATETO is null)
left join dbo.GROUPMEMBERDATERANGE
on GROUPMEMBER.ID = GROUPMEMBERDATERANGE.GROUPMEMBERID
) COMMITTEEMEMBER
on COMMITTEEMEMBER.MEMBERID = CONSTITUENCYDATERANGE.CONSTITUENTID
inner join dbo.CONSTITUENCYREFRESHPROCESSSELECTIONRESULT CONSTITUENTS
on CONSTITUENTS.CONSTITUENTID = CONSTITUENCYDATERANGE.CONSTITUENTID
and CONSTITUENTS.CONSTITUENCYREFRESHPROCESSID = @CONSTITUENCYREFRESHPROCESSID
where
COMMITTEEMEMBER.MEMBERID is null
and CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @COMMITTEEMEMBERDEFINITIONID;
set @RECORDCOUNT = @RECORDCOUNT + @@ROWCOUNT;
end
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch
return 0;
end