UFN_JOBOCCURRENCE_VACANTSPECIFICDAYS

Returns days that need filled for a given time range.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@DAYLIST nvarchar(max) IN
@JOBOCCURRENCEID uniqueidentifier IN
@JOBID uniqueidentifier IN

Definition

Copy


            CREATE function [dbo].[UFN_JOBOCCURRENCE_VACANTSPECIFICDAYS](@DAYLIST nvarchar(max), @JOBOCCURRENCEID uniqueidentifier, @JOBID uniqueidentifier)
            returns @T table (ASSIGNMENTDATE datetime, OCCURRENCEID uniqueidentifier, JOBID uniqueidentifier, VOLUNTEERSNEEDED int, OPENINGS int)

            begin
                --Create work tables

                declare @DAY table (DY datetime);

                --populate day

                declare @DATE nvarchar(8)

                Set @DAYLIST = ltrim(rtrim(@DAYLIST))
                while len(@DAYLIST) >= 8
                begin
                    set @DATE = left(@DAYLIST, 8)
                    insert into @DAY(DY) values(cast(@DATE as datetime));
                    if len(@DAYLIST) > 8
                        set @DAYLIST = right(@DAYLIST, len(@DAYLIST) - 8)
                    else
                        set @DAYLIST = ''
                end

                insert into @T(ASSIGNMENTDATE, OCCURRENCEID, JOBID, VOLUNTEERSNEEDED, OPENINGS)
                select dytbl.DY assignmentdate, JO.ID, JO.JOBID, JO.VOLUNTEERSNEEDED, JO.VOLUNTEERSNEEDED - count(VA.ID)
                from JOBOCCURRENCE JO
                inner join @day dytbl
                    on dbo.UFN_JOBSCHEDULE_DATEVALID2(dytbl.DY,JO.TYPECODE,JO.STARTDATE,JO.RECURRENCESTARTDATE,JO.ENDDATE,JO.RECURRENCEENDDATE) = 1
                        and dbo.UFN_VOLUNTEER_DAYOFWEEKMATCHES(JO.DAYOFWEEKCODE, dytbl.DY) = 1
                left outer join VOLUNTEERASSIGNMENT VA
                    on VA.JOBOCCURRENCEID = JO.ID
                        and dytbl.DY = VA.DATE
                where JO.ID = coalesce(@JOBOCCURRENCEID, JO.ID)
                    and JO.JOBID = coalesce(@JOBID, JO.JOBID)
                group by dytbl.DY, JO.ID, JO.JOBID, JO.VOLUNTEERSNEEDED
                having VOLUNTEERSNEEDED > count(VA.ID);

                return;
            end