USP_EVENTCONFLICT_SAVERESOLVECONFLICT
The save procedure used by the edit dataform template "Event Conflict Edit".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | The input ID parameter indicating the ID of the record being edited. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@NAME | nvarchar(100) | IN | |
@STARTDATE | datetime | IN | Date |
@ENDDATE | datetime | IN | End date |
@STARTTIME | UDT_HOURMINUTE | IN | Start time |
@ENDTIME | UDT_HOURMINUTE | IN | End time |
@CONFLICTINGEVENTS | xml | IN | Conflicting Events |
@LOCATIONS | xml | IN | Location |
Definition
Copy
CREATE procedure dbo.USP_EVENTCONFLICT_SAVERESOLVECONFLICT
(
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@NAME nvarchar(100),
@STARTDATE datetime,
@ENDDATE datetime,
@STARTTIME dbo.UDT_HOURMINUTE,
@ENDTIME dbo.UDT_HOURMINUTE,
@CONFLICTINGEVENTS xml,
@LOCATIONS xml
)
as
set nocount on;
if @CHANGEAGENTID is NULL
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;
begin try
-- Location(s) must exist.
if @LOCATIONS is null
raiserror('ERR_LOCATION_REQUIRED', 13, 1)
-- Check for duplicate locations.
if exists
(
select count(LOCATIONID)
from
(
select T.locations.value('(EVENTLOCATIONID)[1]', 'uniqueidentifier') LOCATIONID
from @LOCATIONS.nodes('/LOCATIONS/ITEM') T(LOCATIONS)
) Result
group by LOCATIONID
having count(*) > 1
)
raiserror('ERR_DUPLICATE_LOCATIONS', 13, 1)
declare @CONFLICTID uniqueidentifier=null;
declare @STIME datetime;
declare @ETIME datetime;
set @STIME=dbo.UFN_DATE_ADDHOURMINUTE(@STARTDATE,@STARTTIME);
set @ETIME=dbo.UFN_DATE_ADDHOURMINUTE(@ENDDATE,@ENDTIME);
-- Check to make sure new event is not scheduled in the past.
if @STIME < getdate()
raiserror('ERR_INVALID_DATE', 13, 1)
select TOP(1) @CONFLICTID = EVENT.ID
from dbo.EVENT
left join dbo.PROGRAMEVENTLOCATION on EVENT.ID = PROGRAMEVENTLOCATION.EVENTID
inner join @LOCATIONS.nodes('/LOCATIONS/ITEM') T(LOCATIONS) on (T.locations.value('(EVENTLOCATIONID)[1]', 'uniqueidentifier') = PROGRAMEVENTLOCATION.EVENTLOCATIONID or
T.locations.value('(EVENTLOCATIONID)[1]', 'uniqueidentifier') = EVENT.EVENTLOCATIONID)
left join dbo.PROGRAM on EVENT.PROGRAMID = PROGRAM.ID
where
(PROGRAM.ISACTIVE = 1 or EVENT.PROGRAMID is null) and
(@STIME >= EVENT.STARTDATETIME and @STIME < EVENT.ENDDATETIME) or
(@ETIME > EVENT.STARTDATETIME and @ETIME <= EVENT.ENDDATETIME) or
(@STIME <= EVENT.STARTDATETIME and @ETIME >= EVENT.ENDDATETIME)
if @CONFLICTID is null
begin
declare @SCHEDULEID uniqueidentifier;
declare @PROGRAMID uniqueidentifier;
declare @DESCRIPTION nvarchar(500);
declare @CAPACITY integer;
select @SCHEDULEID = SCHEDULEID,
@PROGRAMID = PROGRAMID,
@DESCRIPTION = DESCRIPTION,
@CAPACITY = CAPACITY
from dbo.EVENTCONFLICT
where ID = @ID
exec dbo.USP_PROGRAMEVENTLOCATION_GETEVENTCONFLICTLOCATIONS_UPDATEFROMXML @ID, @LOCATIONS, @CHANGEAGENTID;
--1.insert into the event table
declare @EVENTID uniqueidentifier;
exec dbo.USP_EVENT_INSERT @EVENTID output, @SCHEDULEID,@PROGRAMID,@NAME,@DESCRIPTION,@CAPACITY,@STARTDATE,@ENDDATE,@STIME,@ETIME,@CHANGEAGENTID;
--2.update the event location table
update dbo.PROGRAMEVENTLOCATION
set EVENTID=@EVENTID, EVENTCONFLICTID = null
where EVENTCONFLICTID=@ID;
--3.delete it from the event conflict table.
exec USP_EVENTCONFLICT_DELETEBYID_WITHCHANGEAGENTID @ID, @CHANGEAGENTID;
end
else
begin
declare @EVENTNAME nvarchar(100)
declare @EVENTSTARTDATE datetime
declare @EVENTENDDATE datetime
declare @EVENTSTARTTIME udt_HOURMINUTE
declare @EVENTENDTIME udt_HOURMINUTE
declare @LOCATION nvarchar(100)
select @EVENTNAME = NAME,
@EVENTSTARTDATE = STARTDATE,
@EVENTENDDATE = ENDDATE,
@LOCATION = dbo.UFN_EVENT_GETLOCATIONNAME(EVENT.ID),
@EVENTSTARTTIME = STARTTIME,
@EVENTENDTIME = ENDTIME
from dbo.EVENT
where ID = @CONFLICTID
declare @ERRORMESSAGE nvarchar(max)
set @ERRORMESSAGE = 'Cannot schedule this event due to a conflict.' + CHAR(10) + char(10) +
@NAME + char(10) + convert(nvarchar(10), @STARTDATE, 101) + char(10) +
dbo.UFN_HOURMINUTE_DISPLAYTIME(@STARTTIME) + ' - ' + dbo.UFN_HOURMINUTE_DISPLAYTIME(@ENDTIME) + char(10) +
@LOCATION + char(10) + char(10) + 'Conflicts with:' + char(10) + char(10) +
@EVENTNAME + char(10) + convert(nvarchar(10), @EVENTSTARTDATE, 101) + char(10) +
dbo.UFN_HOURMINUTE_DISPLAYTIME(@EVENTSTARTTIME) + ' - ' + dbo.UFN_HOURMINUTE_DISPLAYTIME(@EVENTENDTIME) + char(10) +
@LOCATION;
raiserror(@ERRORMESSAGE,13,1)
end
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0;