USP_GLOBALCHANGE_ADDUSERDEFINEDCONSTITUENCY
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@IDSETREGISTERID | uniqueidentifier | IN | |
@CONSTITUENCYCODEID | uniqueidentifier | IN | |
@DATEFROM | datetime | IN | |
@DATETO | datetime | IN | |
@CHANGEAGENTID | uniqueidentifier | IN | |
@ASOF | datetime | IN | |
@OVERWRITEEXISTINGVALUE | bit | IN | |
@REMOVEUNQUALIFIED | bit | IN | |
@NUMBERADDED | int | INOUT | |
@NUMBEREDITED | int | INOUT | |
@NUMBERDELETED | int | INOUT | |
@CURRENTAPPUSERID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_GLOBALCHANGE_ADDUSERDEFINEDCONSTITUENCY
(
@IDSETREGISTERID uniqueidentifier = null,
@CONSTITUENCYCODEID uniqueidentifier,
@DATEFROM datetime = null,
@DATETO datetime = null,
@CHANGEAGENTID uniqueidentifier = null,
@ASOF as datetime = null,
@OVERWRITEEXISTINGVALUE bit,
@REMOVEUNQUALIFIED bit,
@NUMBERADDED int = 0 output,
@NUMBEREDITED int = 0 output,
@NUMBERDELETED int = 0 output,
@CURRENTAPPUSERID uniqueidentifier = null
)
as
set nocount on;
declare @CURRENTDATE datetime = getdate();
set @NUMBERADDED = 0;
set @NUMBEREDITED = 0;
set @NUMBERDELETED = 0;
declare @BPID uniqueidentifier = '3269A1D1-31CB-4D28-945C-B7623A3EFCCA';
declare @BYPASSSECURITY bit;
declare @BYPASSSITESECURITY bit;
exec dbo.USP_SECURITY_APPUSER_BYPASSSECURITYFORBUSINESSPROCESS @CURRENTAPPUSERID, @BPID, @BYPASSSECURITY output, @BYPASSSITESECURITY output;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @SELECTION table (ID uniqueidentifier not null primary key);
-- retrieve records that the user can add a constituency to
insert into @SELECTION(ID)
select ID from dbo.UFN_CONSTITUENT_GETRECORDSINSELECTION_FORBUSINESSPROCESS(@CURRENTAPPUSERID, @IDSETREGISTERID, @BPID, @BYPASSSECURITY, @BYPASSSITESECURITY);
begin try
if @REMOVEUNQUALIFIED = 1 and @IDSETREGISTERID is not null
begin
declare @CONTEXTCACHE varbinary(128);
/* Cache current context information@ */
set @CONTEXTCACHE = CONTEXT_INFO();
/* Set CONTEXT_INFO to @CHANGEAGENTID */
set CONTEXT_INFO @CHANGEAGENTID;
/* delete records */
delete
dbo.CONSTITUENCY
from
dbo.CONSTITUENCY
left join
dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITIDS_FORBUSINESSPROCESS(@CURRENTAPPUSERID, @BPID) as CONSTIT_RACS on CONSTITUENCY.CONSTITUENTID = CONSTIT_RACS.ID
where
CONSTITUENCY.CONSTITUENCYCODEID = @CONSTITUENCYCODEID and
CONSTITUENCY.CONSTITUENTID not in (select ID from @SELECTION) and
(
@BYPASSSECURITY = 1 or
CONSTIT_RACS.ID is not null
)
and
(
@BYPASSSITESECURITY = 1 or
exists
(
select 1
from dbo.CONSTITUENTSITE
where CONSTITUENTSITE.CONSTITUENTID = CONSTITUENCY.CONSTITUENTID
and dbo.UFN_SECURITY_APPUSER_GRANTED_BUSINESSPROCESS_FORSITE(@CURRENTAPPUSERID, @BPID, CONSTITUENTSITE.SITEID) = 1
)
);
set @NUMBERDELETED = @@ROWCOUNT;
/* Reset CONTEXT_INFO to previous value */
if not @CONTEXTCACHE is null
set CONTEXT_INFO @CONTEXTCACHE;
delete dbo.CONSTITUENCYDATERANGE
from
dbo.CONSTITUENCYDATERANGE
left join dbo.CONSTITUENCY
on CONSTITUENCY.ID = CONSTITUENCYDATERANGE.CONSTITUENCYRECORDIDENTIFIER
where
CONSTITUENCY.ID is null
and CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @CONSTITUENCYCODEID;
end
if @OVERWRITEEXISTINGVALUE = 1
begin
update
dbo.CONSTITUENCY
set
DATEFROM = @DATEFROM,
DATETO = @DATETO,
CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CURRENTDATE
where
CONSTITUENTID in(select ID from @SELECTION) and
CONSTITUENCYCODEID = @CONSTITUENCYCODEID and
(
DATEFROM is null and @DATEFROM is not null or
DATEFROM is not null and @DATEFROM is null or
DATEFROM <> @DATEFROM or
DATETO is null and @DATETO is not null or
DATETO is not null and @DATETO is null or
DATETO <> @DATETO
);
set @NUMBEREDITED = @@ROWCOUNT;
update dbo.CONSTITUENCYDATERANGE
set
CONSTITUENCYDATERANGE.DATEFROM = @DATEFROM,
CONSTITUENCYDATERANGE.DATETO = @DATETO,
CONSTITUENCYDATERANGE.DATECHANGED = @CURRENTDATE,
CONSTITUENCYDATERANGE.CHANGEDBYAPPLICATIONNAME = CHANGEDBY.APPLICATIONNAME,
CONSTITUENCYDATERANGE.CHANGEDBYUSERNAME = CHANGEDBY.USERNAME,
CONSTITUENCYDATERANGE.REFRESHDATE = @CURRENTDATE,
CONSTITUENCYDATERANGE.CONSTITUENCYTS = CONSTITUENCY.TS
from
dbo.CONSTITUENCYDATERANGE
inner join dbo.CONSTITUENCY
on CONSTITUENCY.ID = CONSTITUENCYDATERANGE.CONSTITUENCYRECORDIDENTIFIER
inner join dbo.CHANGEAGENT as CHANGEDBY
on CHANGEDBY.ID = CONSTITUENCY.CHANGEDBYID
where
CONSTITUENCYDATERANGE.CONSTITUENCYDEFINITIONID = @CONSTITUENCYCODEID
and CONSTITUENCYDATERANGE.CONSTITUENCYTS <> CONSTITUENCY.TS;
end
insert into dbo.CONSTITUENCY
(
ID,
CONSTITUENTID,
CONSTITUENCYCODEID,
DATEFROM,
DATETO,
ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
)
select
newid(),
SELECTION.ID,
@CONSTITUENCYCODEID,
@DATEFROM,
@DATETO,
@CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
from
@SELECTION as SELECTION
where
SELECTION.ID not in (select CONSTITUENTID from dbo.CONSTITUENCY where CONSTITUENCY.CONSTITUENCYCODEID = @CONSTITUENCYCODEID);
set @NUMBERADDED = @@ROWCOUNT;
insert into dbo.CONSTITUENCYDATERANGE
(
ID,
CONSTITUENTID,
CONSTITUENCYDEFINITIONID,
DATEFROM,
DATETO,
CONSTITUENCYRECORDIDENTIFIER,
REFRESHDATE,
DATEADDED,
DATECHANGED,
ADDEDBYAPPLICATIONNAME,
ADDEDBYUSERNAME,
CHANGEDBYAPPLICATIONNAME,
CHANGEDBYUSERNAME,
CONSTITUENCYTS
)
select
newid(),
CONSTITUENCY.CONSTITUENTID,
@CONSTITUENCYCODEID,
@DATEFROM,
@DATETO,
CONSTITUENCY.ID,
@CURRENTDATE,
@CURRENTDATE,
@CURRENTDATE,
ADDEDBY.APPLICATIONNAME,
ADDEDBY.USERNAME,
CHANGEDBY.APPLICATIONNAME,
CHANGEDBY.USERNAME,
CONSTITUENCY.TS
from
dbo.CONSTITUENCY
left join dbo.CONSTITUENCYDATERANGE
on CONSTITUENCYDATERANGE.CONSTITUENCYRECORDIDENTIFIER = CONSTITUENCY.ID
inner join dbo.CHANGEAGENT as ADDEDBY
on ADDEDBY.ID = CONSTITUENCY.ADDEDBYID
inner join dbo.CHANGEAGENT as CHANGEDBY
on CHANGEDBY.ID = CONSTITUENCY.CHANGEDBYID
where
CONSTITUENCYDATERANGE.ID is null
and CONSTITUENCY.CONSTITUENCYCODEID = @CONSTITUENCYCODEID;
end try
begin catch
exec dbo.USP_RAISE_ERROR;
return 1;
end catch