UFN_RESERVATION_HASUNASSIGNEDSTAFFRESOURCES

Returns whether or not a given Reservation has unassigned staff resources.

Return

Return Type
bit

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN

Definition

Copy


        create function dbo.UFN_RESERVATION_HASUNASSIGNEDSTAFFRESOURCES
        (
            @ID uniqueidentifier
        )
        returns bit
        with execute as caller
        as 
        begin

            declare @HASUNASSIGNEDSTAFFRESOURCES bit

            set @HASUNASSIGNEDSTAFFRESOURCES = 0

            declare @ITINERARYSTAFFRESOURCES table
            (
                ID uniqueidentifier,
                QUANTITYNEEDED int,
                JOBOCCURRENCEID uniqueidentifier,
                FILLEDBYCODE tinyint
            )
            insert into @ITINERARYSTAFFRESOURCES
            select
                ITINERARYSTAFFRESOURCE.ID as ID,
                ITINERARYSTAFFRESOURCE.QUANTITYNEEDED as QUANTITYNEEDED,
                ITINERARYSTAFFRESOURCE.JOBOCCURRENCEID as JOBOCCURENCEID,
                ITINERARYSTAFFRESOURCE.FILLEDBYCODE
            from dbo.ITINERARYSTAFFRESOURCE
            inner join dbo.ITINERARY on
                ITINERARYSTAFFRESOURCE.ITINERARYID = ITINERARY.ID
            where
                ITINERARY.RESERVATIONID = @ID and
                ITINERARY.STARTDATETIME is not null and
                ITINERARY.ENDDATETIME is not null

            declare @ITINERARYITEMSTAFFRESOURCES table
            (
                ID uniqueidentifier,
                QUANTITYNEEDED int,
                JOBOCCURRENCEID uniqueidentifier,
                FILLEDBYCODE tinyint
            )
            insert into @ITINERARYITEMSTAFFRESOURCES
            select
                ITINERARYITEMSTAFFRESOURCE.ID as ID,
                ITINERARYITEMSTAFFRESOURCE.QUANTITYNEEDED as QUANTITYNEEDED,
                ITINERARYITEMSTAFFRESOURCE.JOBOCCURRENCEID as JOBOCCURENCEID,
                ITINERARYITEMSTAFFRESOURCE.FILLEDBYCODE
            from dbo.ITINERARYITEMSTAFFRESOURCE
            inner join dbo.ITINERARYITEM on
                ITINERARYITEMSTAFFRESOURCE.ITINERARYITEMID = ITINERARYITEM.ID
            inner join dbo.ITINERARY on
                ITINERARYITEM.ITINERARYID = ITINERARY.ID
            where
                ITINERARY.RESERVATIONID = @ID and 
                ITINERARYITEM.ITEMTYPECODE <> 3;

            -- Select all staff and board type itinerary staff resources without assignments

            with COUNT_CTE as 
            (
                select
                    ITINERARYSTAFFRESOURCEASSIGNMENT.ITINERARYSTAFFRESOURCEID as ID,
                    count(1) as ASSIGNMENTCOUNT
                from dbo.ITINERARYSTAFFRESOURCEASSIGNMENT
                inner join @ITINERARYSTAFFRESOURCES as STAFFRESOURCES on
                    STAFFRESOURCES.ID = ITINERARYSTAFFRESOURCEASSIGNMENT.ITINERARYSTAFFRESOURCEID
                group by ITINERARYSTAFFRESOURCEASSIGNMENT.ITINERARYSTAFFRESOURCEID
            )
            select @HASUNASSIGNEDSTAFFRESOURCES = 1
            from @ITINERARYSTAFFRESOURCES as STAFFRESOURCES
            left join COUNT_CTE as COUNT on STAFFRESOURCES.ID = COUNT.ID
            where
                STAFFRESOURCES.FILLEDBYCODE <> 0 and
                (
                    (COUNT.ID is null and STAFFRESOURCES.QUANTITYNEEDED > 0) or
                    STAFFRESOURCES.QUANTITYNEEDED <> COUNT.ASSIGNMENTCOUNT
                );

            -- Select all staff and board type itinerary item staff resources without assignments

            with COUNT_CTE as 
            (
                select
                    ITINERARYITEMSTAFFRESOURCEASSIGNMENT.ITINERARYITEMSTAFFRESOURCEID as ID,
                    count(1) as ASSIGNMENTCOUNT
                from dbo.ITINERARYITEMSTAFFRESOURCEASSIGNMENT
                inner join @ITINERARYITEMSTAFFRESOURCES as STAFFRESOURCES on
                    STAFFRESOURCES.ID = ITINERARYITEMSTAFFRESOURCEASSIGNMENT.ITINERARYITEMSTAFFRESOURCEID
                group by ITINERARYITEMSTAFFRESOURCEASSIGNMENT.ITINERARYITEMSTAFFRESOURCEID
            )
            select @HASUNASSIGNEDSTAFFRESOURCES = 1
            from @ITINERARYITEMSTAFFRESOURCES as STAFFRESOURCES
            left join COUNT_CTE as COUNT on STAFFRESOURCES.ID = COUNT.ID
            where
                STAFFRESOURCES.FILLEDBYCODE <> 0 and
                (
                    (COUNT.ID is null and STAFFRESOURCES.QUANTITYNEEDED > 0) or
                    STAFFRESOURCES.QUANTITYNEEDED <> COUNT.ASSIGNMENTCOUNT
                );

            -- Select all volunteer type itinerary staff resources without assignments

            with COUNT_CTE as 
            (
                select
                    VOLUNTEERASSIGNMENT.JOBOCCURRENCEID as ID,
                    count(1) as ASSIGNMENTCOUNT
                from dbo.VOLUNTEERASSIGNMENT
                inner join @ITINERARYSTAFFRESOURCES as STAFFRESOURCES on
                    STAFFRESOURCES.JOBOCCURRENCEID = VOLUNTEERASSIGNMENT.JOBOCCURRENCEID
                group by VOLUNTEERASSIGNMENT.JOBOCCURRENCEID
            )
            select @HASUNASSIGNEDSTAFFRESOURCES = 1
            from @ITINERARYSTAFFRESOURCES as STAFFRESOURCES
            left join COUNT_CTE as COUNT on STAFFRESOURCES.JOBOCCURRENCEID = COUNT.ID
            where
                STAFFRESOURCES.FILLEDBYCODE = 0 and
                (
                    (COUNT.ID is null and STAFFRESOURCES.QUANTITYNEEDED > 0) or
                    STAFFRESOURCES.QUANTITYNEEDED <> COUNT.ASSIGNMENTCOUNT
                );

            -- Select all volunteer type itinerary item staff resources without assignments

            with COUNT_CTE as 
            (
                select
                    VOLUNTEERASSIGNMENT.JOBOCCURRENCEID as ID,
                    count(1) as ASSIGNMENTCOUNT
                from dbo.VOLUNTEERASSIGNMENT
                inner join @ITINERARYITEMSTAFFRESOURCES as STAFFRESOURCES on
                    STAFFRESOURCES.JOBOCCURRENCEID = VOLUNTEERASSIGNMENT.JOBOCCURRENCEID
                group by VOLUNTEERASSIGNMENT.JOBOCCURRENCEID
            )
            select @HASUNASSIGNEDSTAFFRESOURCES = 1
            from @ITINERARYITEMSTAFFRESOURCES as STAFFRESOURCES
            left join COUNT_CTE as COUNT on STAFFRESOURCES.JOBOCCURRENCEID = COUNT.ID
            where
                STAFFRESOURCES.FILLEDBYCODE = 0 and
                (
                    (COUNT.ID is null and STAFFRESOURCES.QUANTITYNEEDED > 0) or
                    STAFFRESOURCES.QUANTITYNEEDED <> COUNT.ASSIGNMENTCOUNT
                )

            return @HASUNASSIGNEDSTAFFRESOURCES
        end