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