UFN_ITINERARYITEM_CANBLOCK

On a custom item, determine whether it can block a location.

Return

Return Type
bit

Parameters

Parameter Parameter Type Mode Description
@EVENTLOCATIONID uniqueidentifier IN
@STARTDATE datetime IN
@ENDDATE datetime IN
@STARTTIME UDT_HOURMINUTE IN
@ENDTIME UDT_HOURMINUTE IN

Definition

Copy


CREATE function dbo.UFN_ITINERARYITEM_CANBLOCK
(
    @EVENTLOCATIONID uniqueidentifier = null,
    @STARTDATE datetime,
    @ENDDATE datetime,
    @STARTTIME dbo.UDT_HOURMINUTE,
    @ENDTIME dbo.UDT_HOURMINUTE
)
returns bit
with execute as caller
as begin
    declare @VALID bit;
    set @VALID = 1;

    declare @SDATE datetime;
    set @SDATE = dbo.UFN_DATE_ADDHOURMINUTE(@STARTDATE, @STARTTIME)

    declare @EDATE datetime;
    set @EDATE = dbo.UFN_DATE_ADDHOURMINUTE(@ENDDATE, @ENDTIME)

    if exists
    (
        select 1 
        from dbo.ITINERARYITEM 
        inner join dbo.ITINERARY on ITINERARY.ID = ITINERARYITEM.ITINERARYID
        inner join dbo.SALESORDER on ITINERARY.RESERVATIONID = SALESORDER.ID
        where
            (SALESORDER.STATUSCODE <> 5) and -- MDC - Ignore cancelled

            (
                (
                    ITINERARYITEM.ITEMTYPECODE = 0 and
                    exists
                    (
                        select 1 from dbo.PROGRAMEVENTLOCATION PEL
                        where
                            ITINERARYITEM.EVENTID = PEL.EVENTID and
                            PEL.EVENTLOCATIONID = @EVENTLOCATIONID
                    )
                )
                or
                (
                    ITINERARYITEM.ITEMTYPECODE = 1 and
                    exists
                    (
                        select 1 from dbo.PROGRAMLOCATION 
                        where
                            ITINERARYITEM.PROGRAMID = PROGRAMLOCATION.PROGRAMID and
                            PROGRAMLOCATION.EVENTLOCATIONID = @EVENTLOCATIONID
                    )
                )
                or
                (
                    ITINERARYITEM.ITEMTYPECODE = 2 and
                    ITINERARYITEM.EVENTLOCATIONID = @EVENTLOCATIONID
                )
            )
            and
            (
                (
                    @SDATE >= ITINERARYITEM.STARTDATETIME and 
                    @SDATE < ITINERARYITEM.ENDDATETIME
                ) or
                (
                    @EDATE > ITINERARYITEM.STARTDATETIME and 
                    @EDATE <= ITINERARYITEM.ENDDATETIME
                ) or
                (
                    @SDATE <= ITINERARYITEM.STARTDATETIME and 
                    @EDATE >= ITINERARYITEM.ENDDATETIME
                ) or
                (
                    @EDATE > ITINERARYITEM.STARTDATETIME and 
                    @EDATE <= ITINERARYITEM.ENDDATETIME
                )
            )
    )
    begin
        set @VALID = 0
    end

    return @VALID
end