UFN_EVENTCONFLICT_GETLOCATIONCONFLICTDETAILSBYID

Get all of the event and itinerary item locations that are in conflict with the given event conflict.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@START datetime IN
@END datetime IN
@ID uniqueidentifier IN
@IGNORERECORDID uniqueidentifier IN
@IGNORESUBRECORDID uniqueidentifier IN
@IGNORESUPERRECORDID uniqueidentifier IN
@INCLUDEEVENTCONFLICTS bit IN
@INCLUDEITINERARYITEMCONFLICTS bit IN

Definition

Copy


create function dbo.UFN_EVENTCONFLICT_GETLOCATIONCONFLICTDETAILSBYID (
    @START datetime,
    @END datetime,
    @ID uniqueidentifier,
    @IGNORERECORDID uniqueidentifier = null,
    @IGNORESUBRECORDID uniqueidentifier = null,
    @IGNORESUPERRECORDID uniqueidentifier = null,
    @INCLUDEEVENTCONFLICTS bit = 1,
    @INCLUDEITINERARYITEMCONFLICTS bit = 1
)
returns table
as return (
    with LOCATION_CTE as (
        select EVENTLOCATIONID as LOCATIONID
        from dbo.PROGRAMEVENTLOCATION
        where EVENTCONFLICTID = @ID
    )
    select
        EVENT.ID as EVENTID, 
        null as ITINERARYITEMID,
        isnull(PROGRAMEVENTLOCATION.EVENTLOCATIONID, EVENT.EVENTLOCATIONID) as LOCATIONID
    from
        dbo.EVENT
    left outer join
        dbo.PROGRAMEVENTLOCATION on EVENT.ID = PROGRAMEVENTLOCATION.EVENTID
    left outer join
        dbo.PROGRAM on EVENT.PROGRAMID = PROGRAM.ID
    inner join
        LOCATION_CTE as CONFLICTPROGRAMEVENTLOCATION on CONFLICTPROGRAMEVENTLOCATION.LOCATIONID = PROGRAMEVENTLOCATION.EVENTLOCATIONID or EVENT.EVENTLOCATIONID = CONFLICTPROGRAMEVENTLOCATION.LOCATIONID
    where
        @INCLUDEEVENTCONFLICTS = 1
        and (
            PROGRAM.ISACTIVE = 1
            or EVENT.PROGRAMID is null
        )
        and (
            @IGNORERECORDID is null
            or EVENT.ID <> @IGNORERECORDID
        )
        and (
            (
                @START >= EVENT.STARTDATETIME and 
                @START < EVENT.ENDDATETIME
            )
            or (
                @END > EVENT.STARTDATETIME and 
                @END <= EVENT.ENDDATETIME
            )
            or (
                @START < EVENT.STARTDATETIME and 
                @END > EVENT.ENDDATETIME
            )
        )

    union all    

    select
        null as EVENTID,
        ITINERARYITEM.ID as ITINERARYITEMID,
        ITINERARYITEM.EVENTLOCATIONID as LOCATIONID
    from
        dbo.ITINERARYITEM
    inner join
        dbo.ITINERARY on ITINERARYITEM.ITINERARYID = ITINERARY.ID
    inner join
        dbo.SALESORDER on SALESORDER.ID = ITINERARY.RESERVATIONID
    inner join
        LOCATION_CTE as CONFLICTLOCATIONS on ITINERARYITEM.EVENTLOCATIONID = CONFLICTLOCATIONS.LOCATIONID
    where
        @INCLUDEITINERARYITEMCONFLICTS = 1
        and SALESORDER.STATUSCODE <> 5
        and ITINERARYITEM.INVALIDREASONCODE = 0  -- Make sure that the itinerary item does not have an invalid reason

        and ITINERARYITEM.ITEMTYPECODE <> 3  -- Make sure the itinerary item is showing as scheduled

        and (
            @IGNORESUPERRECORDID is null
            or ITINERARY.RESERVATIONID <> @IGNORESUPERRECORDID
        )
        and (
            ITINERARYITEM.ITEMTYPECODE <> 2
            or ITINERARYITEM.BLOCKEVENT = 1 --Make sure the item is either not a custom item, if it is a custom item only count it if the location is marked busy

        )
        and (
            @IGNORERECORDID is null
            or ITINERARYITEM.ITINERARYID <> @IGNORERECORDID
        )
        and (
            @IGNORESUBRECORDID is null
            or ITINERARYITEM.ID <> @IGNORESUBRECORDID
        )
        and (
            (
                @START >= ITINERARYITEM.STARTDATETIME and 
                @START < ITINERARYITEM.ENDDATETIME
            )
            or (
                @END > ITINERARYITEM.STARTDATETIME and 
                @END <= ITINERARYITEM.ENDDATETIME
            )
            or (
                @START < ITINERARYITEM.STARTDATETIME and 
                @END > ITINERARYITEM.ENDDATETIME
            )
        )
)