USP_DATAFORMTEMPLATE_ADD_SCHEDULEPROGRAMEVENTS
The save procedure used by the add dataform template "Schedule Program Events Add Data Form".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | The output parameter indicating the ID of the record added. |
@PROGRAMID | uniqueidentifier | IN | Input parameter indicating the context ID for the record being added. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@CAPACITY | int | IN | Capacity |
@NAME | nvarchar(100) | IN | Name |
@DESCRIPTION | nvarchar(255) | IN | Description |
@LOCATIONS | xml | IN | |
@RESOURCES | xml | IN | Supplies/Equipment resources |
@STAFFRESOURCES | xml | IN | Staffing resources |
@EVENTTIMES | xml | IN | Event times |
@EVENTS | xml | IN | Event dates |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_SCHEDULEPROGRAMEVENTS
(
@ID uniqueidentifier = null output,
@PROGRAMID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@CAPACITY integer = null,
@NAME nvarchar(100) = '',
@DESCRIPTION nvarchar(255) = '',
@LOCATIONS xml = null,
@RESOURCES xml = null,
@STAFFRESOURCES xml = null,
@EVENTTIMES xml = null,
@EVENTS xml = null
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate();
begin try
if @EVENTS is null
raiserror('BBERR_INVALIDEVENTS', 13, 1);
declare @SCHEDULEID uniqueidentifier;
set @SCHEDULEID = newid();
set @ID = @PROGRAMID;
declare @ISPREREGISTERED bit;
declare @ISDAILYADMISSION bit;
select @ISPREREGISTERED = ISPREREGISTERED,
@ISDAILYADMISSION = ISDAILYADMISSION
from dbo.PROGRAM
where ID = @PROGRAMID;
if @ISDAILYADMISSION = 1
raiserror('BBERR_INVALIDPROGRAMTYPE', 13, 1);
declare @DUPLICATELOCATIONSEXIST bit = 0;
if not exists (select 1
from @LOCATIONS.nodes('/LOCATIONS/ITEM') T(locations))
raiserror('BBERR_INVALIDLOCATIONS', 13, 1);
with LOCATIONS_CTE as
(
select
T.locations.value('(EVENTLOCATIONID)[1]', 'uniqueidentifier') as ID
from @LOCATIONS.nodes('/LOCATIONS/ITEM') T(locations)
)
select
@DUPLICATELOCATIONSEXIST = 1
where
exists
(
select 1
from LOCATIONS_CTE
group by ID
having count(ID) > 1
)
if @DUPLICATELOCATIONSEXIST = 1
raiserror('BBERR_DUPLICATELOCATIONS', 13, 1);
if exists
(select count(VOLUNTEERTYPEID)
from
(
select T.staffresources.value('(VOLUNTEERTYPEID)[1]', 'uniqueidentifier') VOLUNTEERTYPEID
from @STAFFRESOURCES.nodes('/STAFFRESOURCES/ITEM') T(STAFFRESOURCES)
) Result
group by VOLUNTEERTYPEID
having count(*) > 1
)
raiserror('BBERR_DUPLICATESTAFFRESOURCES', 13, 1);
if exists
(select count(RESOURCEID)
from
(
select T.resources.value('(RESOURCEID)[1]', 'uniqueidentifier') RESOURCEID
from @RESOURCES.nodes('/RESOURCES/ITEM') T(RESOURCES)
) Result
group by RESOURCEID
having count(*) > 1
)
raiserror('BBERR_DUPLICATERESOURCES', 13, 1);
declare @idoc int
exec sp_xml_preparedocument @idoc OUTPUT, @EVENTS
declare @EVENTSTABLE table
(
EVENTID uniqueidentifier,
STARTDATE date,
ENDDATE date,
STARTTIME udt_HOURMINUTE,
ENDTIME udt_HOURMINUTE,
ISCONFLICT bit,
CONFLICTID uniqueidentifier,
PROGRAMID uniqueidentifier
)
insert into @EVENTSTABLE
select
EVENTID,
STARTDATE,
ENDDATE,
STARTTIME,
ENDTIME,
0,
null,
@PROGRAMID
from openxml (@idoc,'/EVENTS/ITEM', 2)
with
(EVENTID uniqueidentifier,
STARTDATE date,
STARTTIME udt_HOURMINUTE,
ENDDATE date,
ENDTIME udt_HOURMINUTE,
ISCONFLICT bit)
exec sp_xml_removedocument @idoc
declare @CONFLICTSEXIST bit = 0;
-- Checking Conflicts
update @EVENTSTABLE set
ET.ISCONFLICT = 1,
ET.CONFLICTID = newid(),
@CONFLICTSEXIST = 1
from @EVENTSTABLE ET
inner join dbo.UFN_CONFLICTCHECK_CONFLICTSEXISTFORMULTIPLETIMES(@EVENTS, @LOCATIONS, @RESOURCES, @STAFFRESOURCES) CC
on ET.EVENTID = CC.EVENTID
set @EVENTS =
(
select EVENTID as EVENTID,
STARTDATE as STARTDATE,
ENDDATE as ENDDATE,
STARTTIME as STARTTIME,
ENDTIME as ENDTIME,
ISCONFLICT as ISCONFLICT,
CONFLICTID as CONFLICTID,
@PROGRAMID as PROGRAMID
from @EVENTSTABLE
for xml raw ('ITEM'), type, elements, root('EVENTS'), BINARY BASE64
);
if @CONFLICTSEXIST = 1
exec dbo.USP_PROGRAMEVENTCONFLICT_INSERTCONFLICTS @EVENTS, @SCHEDULEID, @PROGRAMID, @NAME, @CAPACITY, @DESCRIPTION, @CHANGEAGENTID, @CURRENTDATE;
exec dbo.USP_PROGRAMEVENT_INSERT @EVENTS, @SCHEDULEID, @PROGRAMID, @NAME, @DESCRIPTION, @CAPACITY, @CHANGEAGENTID, @CURRENTDATE;
exec dbo.USP_PROGRAMEVENTLOCATION_INSERTLOCATIONS @EVENTS, @LOCATIONS, @PROGRAMID, @CHANGEAGENTID, @CURRENTDATE, @CONFLICTSEXIST;
if @ISPREREGISTERED = 1
exec dbo.USP_PROGRAMEVENT_COPYPROGRAMEVENTPREFERENCES @EVENTS, @PROGRAMID, @CONFLICTSEXIST, @CHANGEAGENTID, @CURRENTDATE;
if @RESOURCES is not null
exec dbo.USP_PROGRAMEVENTRESOURCES_INSERTRESOURCES @RESOURCES, @EVENTS, @PROGRAMID, @CHANGEAGENTID, @CURRENTDATE;
if @STAFFRESOURCES is not null
exec dbo.USP_PROGRAMEVENTSTAFFRESOURCES_INSERTSTAFFRESOURCES @STAFFRESOURCES, @EVENTS, @PROGRAMID, @CHANGEAGENTID, @CURRENTDATE;
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0