UFN_JOBOCCURRENCE_VACANTDAYS

Returns days that need filled for a given time range.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@FROM datetime IN
@TO datetime IN
@JOBOCCURRENCEID uniqueidentifier IN
@JOBID uniqueidentifier IN

Definition

Copy


            CREATE function [dbo].[UFN_JOBOCCURRENCE_VACANTDAYS]
            (
                @FROM datetime
                @TO datetime
                @JOBOCCURRENCEID uniqueidentifier, 
                @JOBID uniqueidentifier
            )
            returns @T table 
            (
                ASSIGNMENTDATE datetime
                OCCURRENCEID uniqueidentifier, 
                JOBID uniqueidentifier, 
                VOLUNTEERSNEEDED int
                OPENINGS int
            )
            begin
                declare @TEMPDATE datetime;

                --Create work tables

                declare @DAY table (SINGLEDAY datetime);

                --populate day

                set @TEMPDATE = dbo.[UFN_DATE_GETEARLIESTTIME](@FROM);
                while @TEMPDATE <= @TO and @TEMPDATE < '99991231'
                begin
                    insert into @DAY(SINGLEDAY) 
                    values(@TEMPDATE);
                    set @TEMPDATE = dateadd(d, 1, @TEMPDATE);
                end

                insert into @T
                (
                    ASSIGNMENTDATE, 
                    OCCURRENCEID, 
                    JOBID, 
                    VOLUNTEERSNEEDED, 
                    OPENINGS
                )
                select 
                    DAYTABLE.SINGLEDAY as ASSIGNMENTDATE, 
                    JO.ID as OCCURRENCEID, 
                    JO.JOBID as JOBID, 
                    JO.VOLUNTEERSNEEDED as VOLUNTEERSNEEDED, 
                    JO.VOLUNTEERSNEEDED - count(VA.ID) as OPENINGS
                from dbo.JOBOCCURRENCE JO
                inner join @DAY DAYTABLE on 
                    dbo.UFN_VOLUNTEER_DAYOFWEEKMATCHES_VALID(DAYTABLE.SINGLEDAY,JO.TYPECODE,JO.STARTDATE,JO.STARTMONTHDAY,JO.ENDDATE,JO.ENDMONTHDAY, JO.DAYOFWEEKCODE) = 1
                left outer join dbo.VOLUNTEERASSIGNMENT VA
                    on VA.JOBOCCURRENCEID = JO.ID
                        and DAYTABLE.SINGLEDAY = VA.DATE
                where DAYTABLE.SINGLEDAY between @FROM and @TO
                    and JO.ID = isnull(@JOBOCCURRENCEID, JO.ID)
                    and JO.JOBID = isnull(@JOBID, JO.JOBID)
                group by DAYTABLE.SINGLEDAY, JO.ID, JO.JOBID, JO.VOLUNTEERSNEEDED
                having VOLUNTEERSNEEDED > count(VA.ID);

                return;
            end