UFN_VOLUNTEER_AVAILABLEDAYS

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@FROM datetime IN
@TO datetime IN
@VOLUNTEERID uniqueidentifier IN

Definition

Copy


            create function [dbo].[UFN_VOLUNTEER_AVAILABLEDAYS](@FROM datetime, @TO datetime, @VOLUNTEERID uniqueidentifier)
            returns @T table (AVAILABLEDATE datetime, VOLUNTEERID uniqueidentifier, STARTTIME dbo.UDT_HOURMINUTE, ENDTIME dbo.UDT_HOURMINUTE)

            begin
                declare @tempdate datetime;

                --Create work tables

                declare @day table (dy datetime);

                --populate day

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

                insert into @T(AVAILABLEDATE, VOLUNTEERID, STARTTIME, ENDTIME)
                select dytbl.DY, VA.VOLUNTEERID, STARTTIME, ENDTIME
                from dbo.VOLUNTEERAVAILABILITY VA
                inner join @day dytbl on
                        dbo.UFN_SCHEDULE_DATEVALID2(dytbl.DY, VA.FULLSTARTDATE,VA.FULLENDDATE) = 1
                        and dbo.UFN_VOLUNTEER_DAYOFWEEKMATCHES(VA.DAYOFWEEKCODE, dytbl.DY) = 1
                left outer join dbo.VOLUNTEER on VOLUNTEERID = VOLUNTEER.ID
                where VA.VOLUNTEERID = coalesce(@VOLUNTEERID, VA.VOLUNTEERID)
                    and (dytbl.DY < coalesce(UNAVAILABLEFROM, '01/01/9999')
                        or dytbl.DY > coalesce(UNAVAILABLETO, '01/01/1753'))
                union
                select VOLAVAIL.DY, VOLAVAIL.ID, '', ''
                from 
                    (select dytbl.DY, CONSTITUENT.ID
                    from dbo.CONSTITUENT left join dbo.VOLUNTEER on VOLUNTEER.ID = CONSTITUENT.ID,
                    @day dytbl
                    where CONSTITUENT.ID = coalesce(@VOLUNTEERID, CONSTITUENT.ID)
                        and (dytbl.DY < coalesce(UNAVAILABLEFROM, '01/01/9999')
                        or dytbl.DY > coalesce(UNAVAILABLETO, '01/01/1753'))
                        and dbo.UFN_CONSTITUENT_ISVOLUNTEER(CONSTITUENT.ID) = 1) VOLAVAIL
                left outer join dbo.VOLUNTEERAVAILABILITY VA
                    on VA.VOLUNTEERID = VOLAVAIL.ID
                where VA.VOLUNTEERID is null;

                return;
            end