UFN_JOBOCCURRENCE_VACANTDAYS
Returns days that need filled 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_VACANTDAYS]
(
@FROM datetime,
@TO datetime,
@JOBOCCURRENCEID uniqueidentifier,
@JOBID uniqueidentifier
)
returns @T table
(
ASSIGNMENTDATE datetime,
OCCURRENCEID uniqueidentifier,
JOBID uniqueidentifier,
VOLUNTEERSNEEDED int,
OPENINGS int
)
begin
declare @TEMPDATE datetime;
--Create work tables
declare @DAY table (SINGLEDAY datetime);
--populate day
set @TEMPDATE = dbo.[UFN_DATE_GETEARLIESTTIME](@FROM);
while @TEMPDATE <= @TO and @TEMPDATE < '99991231'
begin
insert into @DAY(SINGLEDAY)
values(@TEMPDATE);
set @TEMPDATE = dateadd(d, 1, @TEMPDATE);
end
insert into @T
(
ASSIGNMENTDATE,
OCCURRENCEID,
JOBID,
VOLUNTEERSNEEDED,
OPENINGS
)
select
DAYTABLE.SINGLEDAY as ASSIGNMENTDATE,
JO.ID as OCCURRENCEID,
JO.JOBID as JOBID,
JO.VOLUNTEERSNEEDED as VOLUNTEERSNEEDED,
JO.VOLUNTEERSNEEDED - count(VA.ID) as OPENINGS
from dbo.JOBOCCURRENCE JO
inner join @DAY DAYTABLE on
dbo.UFN_VOLUNTEER_DAYOFWEEKMATCHES_VALID(DAYTABLE.SINGLEDAY,JO.TYPECODE,JO.STARTDATE,JO.STARTMONTHDAY,JO.ENDDATE,JO.ENDMONTHDAY, JO.DAYOFWEEKCODE) = 1
left outer join dbo.VOLUNTEERASSIGNMENT VA
on VA.JOBOCCURRENCEID = JO.ID
and DAYTABLE.SINGLEDAY = VA.DATE
where DAYTABLE.SINGLEDAY between @FROM and @TO
and JO.ID = isnull(@JOBOCCURRENCEID, JO.ID)
and JO.JOBID = isnull(@JOBID, JO.JOBID)
group by DAYTABLE.SINGLEDAY, JO.ID, JO.JOBID, JO.VOLUNTEERSNEEDED
having VOLUNTEERSNEEDED > count(VA.ID);
return;
end