UFN_EVENTCONFLICT_GETCONFLICTINGEVENTS

Returns events conflicting with the eventconflict ID ordered by time.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN

Definition

Copy


            CREATE function dbo.UFN_EVENTCONFLICT_GETCONFLICTINGEVENTS
            (
                @ID uniqueidentifier
            )
            returns @EVENTS table
            (
                ID uniqueidentifier,
                PROGRAMID uniqueidentifier,
                NAME nvarchar(50),
                STARTDATE datetime,
                ENDDATE datetime,
                CONFLICTINGEVENTTIMESPAN nvarchar(30),
                LOCATIONS nvarchar(500)
            )
            begin

                declare @CONFLICTSTARTDATE date;
                declare @CONFLICTSTARTDATETIME datetime;
                declare @CONFLICTSTARTTIME dbo.UDT_HOURMINUTE;
                declare @CONFLICTENDDATE date;
                declare @CONFLICTENDDATETIME datetime;
                declare @CONFLICTENDTIME dbo.UDT_HOURMINUTE;

                select
                    @CONFLICTSTARTDATE = STARTDATE,
                    @CONFLICTSTARTTIME = STARTTIME,
                    @CONFLICTSTARTDATETIME = STARTDATETIME,
                    @CONFLICTENDDATE = ENDDATE,
                    @CONFLICTENDTIME = ENDTIME,
                    @CONFLICTENDDATETIME = ENDDATETIME
                from dbo.EVENTCONFLICT
                where EVENTCONFLICT.ID = @ID

                insert into @EVENTS
                select
                    EVENT.ID,
                    EVENT.PROGRAMID,
                    EVENT.NAME,
                    EVENT.STARTDATE,
                    EVENT.ENDDATE,
                    dbo.UFN_GETEVENT_TIMESPAN(EVENT.ID) as CONFLICTINGEVENTTIMESPAN,
                    dbo.UFN_EVENT_GETLOCATIONNAME(EVENT.ID) as LOCATIONS
                from
                    dbo.EVENT
                left join dbo.PROGRAM on 
                    EVENT.PROGRAMID = PROGRAM.ID
                where
                    (PROGRAM.ISACTIVE = 1 or EVENT.PROGRAMID is null) and
                    (STARTDATE = @CONFLICTSTARTDATE or @CONFLICTSTARTDATE between STARTDATE and ENDDATE) and 
                    (
                        EVENT.ID in 
                            (select A.EVENTID from dbo.PROGRAMEVENTLOCATION A
                            inner join dbo.PROGRAMEVENTLOCATION B 
                            on A.EVENTLOCATIONID=B.EVENTLOCATIONID
                            and B.EVENTCONFLICTID=@ID)
                        or 
                        EVENTLOCATIONID in 
                            (select EVENTLOCATIONID from dbo.PROGRAMEVENTLOCATION where EVENTCONFLICTID=@ID)
                    )
                    and
                    (
                        (
                            STARTDATE = ENDDATE and
                            (
                                (@CONFLICTSTARTTIME >= STARTTIME and @CONFLICTSTARTTIME < ENDTIME) 
                                or
                                (@CONFLICTENDTIME > STARTTIME and @CONFLICTENDTIME <= ENDTIME) 
                                or
                                (@CONFLICTSTARTTIME > STARTTIME and @CONFLICTENDTIME <= ENDTIME) 
                                or 
                                (@CONFLICTSTARTTIME <= STARTTIME and @CONFLICTENDTIME >= ENDTIME)
                            )
                        )
                        or
                        (
                            STARTDATE < ENDDATE and
                            (
                                (@CONFLICTSTARTDATETIME <= STARTDATETIME and @CONFLICTENDDATETIME > STARTDATETIME) 
                                or
                                (@CONFLICTSTARTDATETIME >= STARTDATETIME and @CONFLICTSTARTDATETIME < ENDDATETIME)
                            ) 
                        )
                    )

                order by EVENT.STARTDATE, EVENT.STARTTIME

                return;
            end