UFN_VOLUNTEER_AVAILABLESPECIFICDAYS_2
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@DAYSXML | xml | IN | |
@VOLUNTEERID | uniqueidentifier | IN | |
@CURRENTDATE | datetime | IN |
Definition
Copy
CREATE function [dbo].[UFN_VOLUNTEER_AVAILABLESPECIFICDAYS_2](@DAYSXML xml, @VOLUNTEERID uniqueidentifier, @CURRENTDATE datetime)
returns table as return
select
T.c.value('(DATE)[1]', 'Date') AVAILABLEDATE,
VOLUNTEERAVAILABILITY.VOLUNTEERID,
STARTTIME,
ENDTIME
from
dbo.VOLUNTEERAVAILABILITY
inner join @DAYSXML.nodes('ITEM') T(c) on
dbo.UFN_SCHEDULE_DATEVALID2(T.c.value('(DATE)[1]', 'Date'), VOLUNTEERAVAILABILITY.FULLSTARTDATE, VOLUNTEERAVAILABILITY.FULLENDDATE) = 1
and dbo.UFN_VOLUNTEER_DAYOFWEEKMATCHES(VOLUNTEERAVAILABILITY.DAYOFWEEKCODE, T.c.value('(DATE)[1]', 'Date')) = 1
inner join dbo.VOLUNTEERDATERANGE on VOLUNTEERDATERANGE.CONSTITUENTID = VOLUNTEERAVAILABILITY.VOLUNTEERID
left join dbo.VOLUNTEER on VOLUNTEER.ID = VOLUNTEERDATERANGE.CONSTITUENTID
where
(VOLUNTEERAVAILABILITY.VOLUNTEERID = @VOLUNTEERID or @VOLUNTEERID is null)
and (cast(VOLUNTEERDATERANGE.DATEFROM as DATE) <= cast(@CURRENTDATE as DATE) or VOLUNTEERDATERANGE.DATEFROM is null)
and (cast(VOLUNTEERDATERANGE.DATETO as DATE) >= cast(@CURRENTDATE as DATE) or VOLUNTEERDATERANGE.DATETO is null)
and ((T.c.value('(DATE)[1]', 'Date') < VOLUNTEER.UNAVAILABLEFROM or VOLUNTEER.UNAVAILABLEFROM is null)
or (T.c.value('(DATE)[1]', 'Date') > VOLUNTEER.UNAVAILABLETO or VOLUNTEER.UNAVAILABLETO is null ))
union
select
VOLUNTEERAVAILABLE.AVAILABLEDATE,
VOLUNTEERAVAILABLE.ID,
'',
''
from
(
select
T.c.value('(DATE)[1]', 'Date') AVAILABLEDATE,
CONSTITUENT.ID
from dbo.CONSTITUENT
inner join dbo.VOLUNTEER on VOLUNTEER.ID = CONSTITUENT.ID
cross join @DAYSXML.nodes('ITEM') T(c)
where (@VOLUNTEERID is null or (@VOLUNTEERID is not null and CONSTITUENT.ID = @VOLUNTEERID))
and (
(UNAVAILABLEFROM is null or (UNAVAILABLEFROM is not null and T.c.value('(DATE)[1]', 'Date') < UNAVAILABLEFROM))
or (UNAVAILABLETO is null or (UNAVAILABLETO is not null and T.c.value('(DATE)[1]', 'Date') > UNAVAILABLETO))
)
) VOLUNTEERAVAILABLE
inner join dbo.VOLUNTEERDATERANGE on VOLUNTEERDATERANGE.CONSTITUENTID = VOLUNTEERAVAILABLE.ID
left join dbo.VOLUNTEER on VOLUNTEER.ID = VOLUNTEERDATERANGE.CONSTITUENTID
left outer join dbo.VOLUNTEERAVAILABILITY on VOLUNTEERAVAILABILITY.VOLUNTEERID = VOLUNTEERAVAILABLE.ID
where VOLUNTEERAVAILABILITY.VOLUNTEERID is null
and (cast(VOLUNTEERDATERANGE.DATEFROM as DATE) <= cast(@CURRENTDATE as DATE) or VOLUNTEERDATERANGE.DATEFROM is null)
and (cast(VOLUNTEERDATERANGE.DATETO as DATE) >= cast(@CURRENTDATE as DATE) or VOLUNTEERDATERANGE.DATETO is null)
and ((VOLUNTEERAVAILABLE.AVAILABLEDATE < VOLUNTEER.UNAVAILABLEFROM or VOLUNTEER.UNAVAILABLEFROM is null)
or (VOLUNTEERAVAILABLE.AVAILABLEDATE > VOLUNTEER.UNAVAILABLETO or VOLUNTEER.UNAVAILABLETO is null ))