UFN_SALESORDER_RESERVATIONSTAFFASSIGNMENT

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@SALESORDERID uniqueidentifier IN

Definition

Copy


        CREATE function [dbo].[UFN_SALESORDER_RESERVATIONSTAFFASSIGNMENT] (@SALESORDERID uniqueidentifier)
        returns @RESERVATIONSTAFFASSIGNMENT table (ID uniqueidentifier, VOLUNTEERTYPE nvarchar(100), ASSIGNEDTO nvarchar(154), STARTTIME dbo.UDT_HOURMINUTE, ENDTIME dbo.UDT_HOURMINUTE, INITERARYNAME nvarchar(154), ITINERARYITEMNAME nvarchar(100), QUANTITYOPEN int, ISASSIGNED nvarchar(20), FILLEDBYCODE tinyint, ISITINERARYLEVEL bit, CONSTITUENTID uniqueidentifier)
        as
        begin
        declare @ITINERARYSTAFFRESOURCES table
        (
            ID uniqueidentifier,
            QUANTITYNEEDED int,
            ITINERARYNAME nvarchar(154),
            VOLUNTEERTYPE nvarchar(100),
            STARTTIME dbo.UDT_HOURMINUTE,
            ENDTIME dbo.UDT_HOURMINUTE,
            JOBOCCURRENCEID uniqueidentifier,
            FILLEDBYCODE tinyint
        )
        insert into @ITINERARYSTAFFRESOURCES
        select
            ITINERARYSTAFFRESOURCE.ID as ID,
            ITINERARYSTAFFRESOURCE.QUANTITYNEEDED as QUANTITYNEEDED,
            ITINERARY.NAME,
            VOLUNTEERTYPE.NAME,
            dbo.[UFN_HOURMINUTE_GETFROMDATE](ITINERARY.STARTDATETIME) as STARTTIME,
            dbo.[UFN_HOURMINUTE_GETFROMDATE](ITINERARY.ENDDATETIME) as ENDTIME,
            ITINERARYSTAFFRESOURCE.JOBOCCURRENCEID,
            ITINERARYSTAFFRESOURCE.FILLEDBYCODE
        from dbo.ITINERARYSTAFFRESOURCE
        inner join dbo.ITINERARY on
            ITINERARYSTAFFRESOURCE.ITINERARYID = ITINERARY.ID
        inner join dbo.VOLUNTEERTYPE on
            ITINERARYSTAFFRESOURCE.VOLUNTEERTYPEID = VOLUNTEERTYPE.ID
        where
            ITINERARY.RESERVATIONID = @SALESORDERID and
            ITINERARY.STARTDATETIME is not null and
            ITINERARY.ENDDATETIME is not null


        declare @ITINERARYITEMSTAFFRESOURCES table
        (
            ID uniqueidentifier,
            QUANTITYNEEDED int,
            ITINERARYNAME nvarchar(154),
            ITINERARYITEMNAME nvarchar(100),
            VOLUNTEERTYPE nvarchar(100),
            STARTTIME dbo.UDT_HOURMINUTE,
            ENDTIME dbo.UDT_HOURMINUTE,
            JOBOCCURRENCEID uniqueidentifier,
            FILLEDBYCODE tinyint
        )
        insert into @ITINERARYITEMSTAFFRESOURCES
        select
            ITINERARYITEMSTAFFRESOURCE.ID as ID,
            ITINERARYITEMSTAFFRESOURCE.QUANTITYNEEDED as QUANTITYNEEDED,
            ITINERARY.NAME,
            ITINERARYITEM.NAME,
            VOLUNTEERTYPE.NAME,
            ITINERARYITEM.STARTTIME, 
            ITINERARYITEM.ENDTIME,
            ITINERARYITEMSTAFFRESOURCE.JOBOCCURRENCEID,
            ITINERARYITEMSTAFFRESOURCE.FILLEDBYCODE
        from dbo.ITINERARYITEMSTAFFRESOURCE
        inner join dbo.ITINERARYITEM on
            ITINERARYITEMSTAFFRESOURCE.ITINERARYITEMID = ITINERARYITEM.ID
        inner join dbo.ITINERARY on
            ITINERARYITEM.ITINERARYID = ITINERARY.ID
        inner join dbo.VOLUNTEERTYPE on
            ITINERARYITEMSTAFFRESOURCE.VOLUNTEERTYPEID = VOLUNTEERTYPE.ID
        where
            ITINERARY.RESERVATIONID = @SALESORDERID and 
            ITINERARYITEM.ITEMTYPECODE <> 3

        declare @LIST table
        (
            ID uniqueidentifier,
            ITINERARYNAME nvarchar(154),
            ITINERARYITEMNAME nvarchar(100),
            STARTTIME dbo.UDT_HOURMINUTE,
            ENDTIME dbo.UDT_HOURMINUTE,
            VOLUNTEERTYPE nvarchar(100),
            ASSIGNEDTO nvarchar(154),
            QUANTITYOPEN int,
            ISSCHEDULED bit,
            FILLEDBYCODE tinyint,
            ISITINERARYLEVEL bit,
            CONSTITUENTID uniqueidentifier
        );

        -- 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
        )
        insert into @LIST
        select
            STAFFRESOURCES.ID as ID,
            STAFFRESOURCES.ITINERARYNAME as ITINERARYNAME,
            '' as ITINERARYITEMNAME,
            STAFFRESOURCES.STARTTIME as STARTTIME,
            STAFFRESOURCES.ENDTIME as ENDTIME,
            STAFFRESOURCES.VOLUNTEERTYPE as VOLUNTEERTYPE,
            '(Unassigned)' as ASSIGNEDTO,
            STAFFRESOURCES.QUANTITYNEEDED - coalesce(COUNT.ASSIGNMENTCOUNT,0) as QUANTITYOPEN,
            0 as ISSCHEDULED,
            STAFFRESOURCES.FILLEDBYCODE,
            1 as ISITINERARYLEVEL,
            null as CONSTITUENTID
        from @ITINERARYSTAFFRESOURCES as STAFFRESOURCES
        left join COUNT_CTE as COUNT on
            STAFFRESOURCES.ID = COUNT.ID
        where
            STAFFRESOURCES.FILLEDBYCODE <> 0 and
            (
                COUNT.ID is null 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
        )
        insert into @LIST
        select
            STAFFRESOURCES.ID as ID,
            STAFFRESOURCES.ITINERARYNAME as ITINERARYNAME,
            STAFFRESOURCES.ITINERARYITEMNAME as ITINERARYITEMNAME,
            STAFFRESOURCES.STARTTIME as STARTTIME,
            STAFFRESOURCES.ENDTIME as ENDTIME,
            STAFFRESOURCES.VOLUNTEERTYPE as VOLUNTEERTYPE,
            '(Unassigned)' as ASSIGNEDTO,
            STAFFRESOURCES.QUANTITYNEEDED - coalesce(COUNT.ASSIGNMENTCOUNT,0) as QUANTITYOPEN,
            0 as ISSCHEDULED,
            STAFFRESOURCES.FILLEDBYCODE,
            0 as ISITINERARYLEVEL,
            null as CONSTITUENTID
        from @ITINERARYITEMSTAFFRESOURCES as STAFFRESOURCES
        left join COUNT_CTE as COUNT on
            STAFFRESOURCES.ID = COUNT.ID
        where
            STAFFRESOURCES.FILLEDBYCODE <> 0 and
            (
                COUNT.ID is null or
                STAFFRESOURCES.QUANTITYNEEDED <> COUNT.ASSIGNMENTCOUNT
            )

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

        insert into @LIST
        select
            STAFFRESOURCES.ID as ID,
            STAFFRESOURCES.ITINERARYNAME as ITINERARYNAME,
            '' as ITINERARYITEMNAME,
            STAFFRESOURCES.STARTTIME as STARTTIME,
            STAFFRESOURCES.ENDTIME as ENDTIME,
            STAFFRESOURCES.VOLUNTEERTYPE as VOLUNTEERTYPE,
            dbo.UFN_CONSTITUENT_BUILDNAME(ITINERARYSTAFFRESOURCEASSIGNMENT.CONSTITUENTID) as ASSIGNEDTO,
            null as QUANTITYOPEN,
            1 as ISSCHEDULED,
            STAFFRESOURCES.FILLEDBYCODE,
            1 as ISITINERARYLEVEL,
            ITINERARYSTAFFRESOURCEASSIGNMENT.CONSTITUENTID as CONSTITUENTID
        from dbo.ITINERARYSTAFFRESOURCEASSIGNMENT
        inner join @ITINERARYSTAFFRESOURCES as STAFFRESOURCES on
            STAFFRESOURCES.ID = ITINERARYSTAFFRESOURCEASSIGNMENT.ITINERARYSTAFFRESOURCEID
        where
            STAFFRESOURCES.FILLEDBYCODE <> 0

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

        insert into @LIST
        select
            STAFFRESOURCES.ID as ID,
            STAFFRESOURCES.ITINERARYNAME as ITINERARYNAME,
            STAFFRESOURCES.ITINERARYITEMNAME as ITINERARYITEMNAME,
            STAFFRESOURCES.STARTTIME as STARTTIME,
            STAFFRESOURCES.ENDTIME as ENDTIME,
            STAFFRESOURCES.VOLUNTEERTYPE as VOLUNTEERTYPE,
            dbo.UFN_CONSTITUENT_BUILDNAME(ITINERARYITEMSTAFFRESOURCEASSIGNMENT.CONSTITUENTID) as ASSIGNEDTO,
            null as QUANTITYOPEN,
            1 as ISSCHEDULED,
            STAFFRESOURCES.FILLEDBYCODE,
            0 as ISITINERARYLEVEL,
            ITINERARYITEMSTAFFRESOURCEASSIGNMENT.CONSTITUENTID as CONSTITUENTID
        from dbo.ITINERARYITEMSTAFFRESOURCEASSIGNMENT
        inner join @ITINERARYITEMSTAFFRESOURCES as STAFFRESOURCES on
            STAFFRESOURCES.ID = ITINERARYITEMSTAFFRESOURCEASSIGNMENT.ITINERARYITEMSTAFFRESOURCEID
        where
            STAFFRESOURCES.FILLEDBYCODE <> 0;


        -- 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
        )
        insert into @LIST
        select
            STAFFRESOURCES.ID as ID,
            STAFFRESOURCES.ITINERARYNAME as ITINERARYNAME,
            '' as ITINERARYITEMNAME,
            STAFFRESOURCES.STARTTIME as STARTTIME,
            STAFFRESOURCES.ENDTIME as ENDTIME,
            STAFFRESOURCES.VOLUNTEERTYPE as VOLUNTEERTYPE,
            '(Unassigned)' as ASSIGNEDTO,
            STAFFRESOURCES.QUANTITYNEEDED - coalesce(COUNT.ASSIGNMENTCOUNT,0) as QUANTITYOPEN,
            0 as ISSCHEDULED,
            STAFFRESOURCES.FILLEDBYCODE,
            1 as ISITINERARYLEVEL,
            null as CONSTITUENTID
        from @ITINERARYSTAFFRESOURCES as STAFFRESOURCES
        left join COUNT_CTE as COUNT on
            STAFFRESOURCES.JOBOCCURRENCEID = COUNT.ID
        where
            STAFFRESOURCES.FILLEDBYCODE = 0 and
            (
                COUNT.ID is null 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
        )
        insert into @LIST
        select
            STAFFRESOURCES.ID as ID,
            STAFFRESOURCES.ITINERARYNAME as ITINERARYNAME,
            STAFFRESOURCES.ITINERARYITEMNAME as ITINERARYITEMNAME,
            STAFFRESOURCES.STARTTIME as STARTTIME,
            STAFFRESOURCES.ENDTIME as ENDTIME,
            STAFFRESOURCES.VOLUNTEERTYPE as VOLUNTEERTYPE,
            '(Unassigned)' as ASSIGNEDTO,
            STAFFRESOURCES.QUANTITYNEEDED - coalesce(COUNT.ASSIGNMENTCOUNT,0) as QUANTITYOPEN,
            0 as ISSCHEDULED,
            STAFFRESOURCES.FILLEDBYCODE,
            0 as ISITINERARYLEVEL,
            null as CONSTITUENTID
        from @ITINERARYITEMSTAFFRESOURCES as STAFFRESOURCES
        left join COUNT_CTE as COUNT on
            STAFFRESOURCES.JOBOCCURRENCEID = COUNT.ID
        where
            STAFFRESOURCES.FILLEDBYCODE = 0 and
            (
                COUNT.ID is null or
                STAFFRESOURCES.QUANTITYNEEDED <> COUNT.ASSIGNMENTCOUNT
            )

        -- Select all volunteer type itinerary staff resources with assignments

        insert into @LIST
        select
            STAFFRESOURCES.ID as ID,
            STAFFRESOURCES.ITINERARYNAME as ITINERARYNAME,
            '' as ITINERARYITEMNAME,
            STAFFRESOURCES.STARTTIME as STARTTIME,
            STAFFRESOURCES.ENDTIME as ENDTIME,
            STAFFRESOURCES.VOLUNTEERTYPE as VOLUNTEERTYPE,
            dbo.UFN_CONSTITUENT_BUILDNAME(VOLUNTEERASSIGNMENT.VOLUNTEERID) as ASSIGNEDTO,
            null as QUANTITYOPEN,
            1 as ISSCHEDULED,
            STAFFRESOURCES.FILLEDBYCODE,
            1 as ISITINERARYLEVEL,
            VOLUNTEERASSIGNMENT.VOLUNTEERID as CONSTITUENTID
        from dbo.VOLUNTEERASSIGNMENT
        inner join @ITINERARYSTAFFRESOURCES as STAFFRESOURCES on
            VOLUNTEERASSIGNMENT.JOBOCCURRENCEID = STAFFRESOURCES.JOBOCCURRENCEID
        where
            STAFFRESOURCES.FILLEDBYCODE = 0

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

        insert into @LIST
        select
            STAFFRESOURCES.ID as ID,
            STAFFRESOURCES.ITINERARYNAME as ITINERARYNAME,
            STAFFRESOURCES.ITINERARYITEMNAME as ITINERARYITEMNAME,
            STAFFRESOURCES.STARTTIME as STARTTIME,
            STAFFRESOURCES.ENDTIME as ENDTIME,
            STAFFRESOURCES.VOLUNTEERTYPE as VOLUNTEERTYPE,
            dbo.UFN_CONSTITUENT_BUILDNAME(VOLUNTEERASSIGNMENT.VOLUNTEERID) as ASSIGNEDTO,
            null as QUANTITYOPEN,
            1 as ISSCHEDULED,
            STAFFRESOURCES.FILLEDBYCODE,
            0 as ISITINERARYLEVEL,
            VOLUNTEERASSIGNMENT.VOLUNTEERID as CONSTITUENTID
        from dbo.VOLUNTEERASSIGNMENT
        inner join @ITINERARYITEMSTAFFRESOURCES as STAFFRESOURCES on
            VOLUNTEERASSIGNMENT.JOBOCCURRENCEID = STAFFRESOURCES.JOBOCCURRENCEID
        where
            STAFFRESOURCES.FILLEDBYCODE = 0

        insert into @RESERVATIONSTAFFASSIGNMENT (ID, VOLUNTEERTYPE, ASSIGNEDTO, STARTTIME, ENDTIME, INITERARYNAME, ITINERARYITEMNAME, QUANTITYOPEN, ISASSIGNED, FILLEDBYCODE, ISITINERARYLEVEL, CONSTITUENTID)
        select
            ID,
            VOLUNTEERTYPE,
            case 
                when coalesce(QUANTITYOPEN,0) < 0 then '(Overassigned)'
                else ASSIGNEDTO
            end as ASSIGNEDTO,
            STARTTIME,
            ENDTIME,
            ITINERARYNAME,
            ITINERARYITEMNAME,
            QUANTITYOPEN,
            case 
                when ISSCHEDULED = 1 then 'Assigned' 
                else
                    case 
                        when coalesce(QUANTITYOPEN,0) < 0 then 'Overassigned'
                        else 'Unassigned' 
                    end 
            end as ISASSIGNED,
            FILLEDBYCODE,
            ISITINERARYLEVEL,
            CONSTITUENTID
        from @LIST

        return

        end