UFN_JOBOCCURRENCE_SCHEDULE

Returns schedule 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_SCHEDULE](@FROM datetime, @TO datetime, @JOBOCCURRENCEID uniqueidentifier, @JOBID uniqueidentifier)
            returns @T table (ASSIGNMENTDATE datetime, OCCURRENCEID uniqueidentifier, JOBID uniqueidentifier, JOBSTARTTIME dbo.UDT_HOURMINUTE, JOBENDTIME dbo.UDT_HOURMINUTE, VOLUNTEERSNEEDED int, OPENINGS int)

            begin
                declare @tempdate datetime;

                --Adjust the start and end dates to fit within the occurrence's constraints if given

                declare @RECURRENCESTARTDATE datetime;
                declare @RECURRENCEENDDATE datetime;

                select
                    @RECURRENCESTARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(RECURRENCESTARTDATE),
                    @RECURRENCEENDDATE = dbo.UFN_DATE_GETEARLIESTTIME(RECURRENCEENDDATE)
                from dbo.JOBOCCURRENCE
                where
                    ID = @JOBOCCURRENCEID

                if @RECURRENCESTARTDATE > @FROM
                    set @FROM = @RECURRENCESTARTDATE
                if @RECURRENCEENDDATE < @TO
                    set @TO = @RECURRENCEENDDATE

                --Create work tables

                declare @day table (dy datetime);

                --populate day

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

                insert into @T(ASSIGNMENTDATE, OCCURRENCEID, JOBID, JOBSTARTTIME, JOBENDTIME, VOLUNTEERSNEEDED, OPENINGS)
                select dytbl.DY assignmentdate, JO.ID, JO.JOBID, 
                        JO.STARTTIME, JO.ENDTIME,
                        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 dytbl.DY between @FROM and @TO
                    and JO.ID = coalesce(@JOBOCCURRENCEID, JO.ID)
                    and JO.JOBID = coalesce(@JOBID, JO.JOBID)
                group by dytbl.DY, JO.ID, JO.JOBID, JO.STARTTIME, JO.ENDTIME, JO.VOLUNTEERSNEEDED;

                return;
            end