UFN_JOBOCCURRENCE_VACANTSPECIFICDAYS
Returns days that need filled for a given time range.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@DAYLIST | nvarchar(max) | IN | |
@JOBOCCURRENCEID | uniqueidentifier | IN | |
@JOBID | uniqueidentifier | IN |
Definition
Copy
CREATE function [dbo].[UFN_JOBOCCURRENCE_VACANTSPECIFICDAYS](@DAYLIST nvarchar(max), @JOBOCCURRENCEID uniqueidentifier, @JOBID uniqueidentifier)
returns @T table (ASSIGNMENTDATE datetime, OCCURRENCEID uniqueidentifier, JOBID uniqueidentifier, VOLUNTEERSNEEDED int, OPENINGS int)
begin
--Create work tables
declare @DAY table (DY datetime);
--populate day
declare @DATE nvarchar(8)
Set @DAYLIST = ltrim(rtrim(@DAYLIST))
while len(@DAYLIST) >= 8
begin
set @DATE = left(@DAYLIST, 8)
insert into @DAY(DY) values(cast(@DATE as datetime));
if len(@DAYLIST) > 8
set @DAYLIST = right(@DAYLIST, len(@DAYLIST) - 8)
else
set @DAYLIST = ''
end
insert into @T(ASSIGNMENTDATE, OCCURRENCEID, JOBID, VOLUNTEERSNEEDED, OPENINGS)
select dytbl.DY assignmentdate, JO.ID, JO.JOBID, 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 JO.ID = coalesce(@JOBOCCURRENCEID, JO.ID)
and JO.JOBID = coalesce(@JOBID, JO.JOBID)
group by dytbl.DY, JO.ID, JO.JOBID, JO.VOLUNTEERSNEEDED
having VOLUNTEERSNEEDED > count(VA.ID);
return;
end