USP_JOBOCCURRENCE_CALENDARITEMS
Returns a list of job occurrence calendar items.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@JOBOCCURRENCEID | uniqueidentifier | IN | |
@STARTDATE | datetime | IN | |
@ENDDATE | datetime | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN | |
@INCLUDE_OPENINGS | bit | IN |
Definition
Copy
CREATE procedure dbo.USP_JOBOCCURRENCE_CALENDARITEMS
(
@JOBOCCURRENCEID uniqueidentifier = null,
@STARTDATE datetime = null,
@ENDDATE datetime = null,
@CURRENTAPPUSERID uniqueidentifier = null,
@INCLUDE_OPENINGS bit = 1
)
as
begin
set nocount on;
declare @ISADMIN bit;
declare @APPUSER_IN_NONRACROLE bit;
declare @APPUSER_IN_NOSECGROUPROLE bit;
declare @APPUSER_IN_NONSITEROLE bit;
declare @APPUSER_IN_NOSITEROLE bit;
set @ISADMIN = dbo.UFN_APPUSER_ISSYSADMIN(@CURRENTAPPUSERID);
set @APPUSER_IN_NONRACROLE = dbo.UFN_SECURITY_APPUSER_IN_NONRACROLE(@CURRENTAPPUSERID);
set @APPUSER_IN_NOSECGROUPROLE = dbo.UFN_SECURITY_APPUSER_IN_NO_SECURITY_GROUP_ROLE(@CURRENTAPPUSERID);
set @APPUSER_IN_NONSITEROLE = dbo.UFN_SECURITY_APPUSER_IN_NONSITEROLE(@CURRENTAPPUSERID);
set @APPUSER_IN_NOSITEROLE = dbo.UFN_SECURITY_APPUSER_IN_NO_SITE_ROLE(@CURRENTAPPUSERID);
--Adjust the start and end dates to fit within the occurrence's constraints if given
declare @RECURRENCESTARTDATE datetime;
declare @RECURRENCEENDDATE datetime;
select
@RECURRENCESTARTDATE = dbo.UFN_DATE_GETEARLIESTTIME(RECURRENCESTARTDATE),
@RECURRENCEENDDATE = dbo.UFN_DATE_GETEARLIESTTIME(RECURRENCEENDDATE)
from dbo.JOBOCCURRENCE
where
ID = @JOBOCCURRENCEID
if @RECURRENCESTARTDATE > @STARTDATE
set @STARTDATE = @RECURRENCESTARTDATE
if @RECURRENCEENDDATE < @ENDDATE
set @ENDDATE = @RECURRENCEENDDATE
declare @DATES table ([DATE] date)
insert into @DATES (DATE)
select
DATEADD(d,NUM,@STARTDATE)
from
NUMBERS
where
DATEADD(d,NUM,@STARTDATE) <= @ENDDATE
select
JOBOCCURRENCE.JOBID,
ITEMS.ASSIGNMENTDATE,
JOBOCCURRENCE.DESCRIPTION NAME,
JOBOCCURRENCE.STARTTIME,
JOBOCCURRENCE.ENDTIME,
case
when @INCLUDE_OPENINGS = 0 then
(case
when ITEMS.OPENINGS = 0 then
'(No openings)'
when ITEMS.OPENINGS < 0 then
'(Overbooked by ' + cast(abs(ITEMS.OPENINGS) as varchar)+ ')' end )
else
(case
when ITEMS.OPENINGS = 1 then
'(' + cast(coalesce(ITEMS.OPENINGS, -1) as varchar) + ' Opening)'
else
'(' + cast(coalesce(ITEMS.OPENINGS, -1) as varchar) + ' Openings)' end) end
+ CHAR(10) + 'Volunteers: ' + CHAR(10) +
(select stuff((
select ';' + CHAR(10) + NF.NAME
from dbo.VOLUNTEERASSIGNMENT VA
left outer join dbo.CONSTITUENT
on VA.VOLUNTEERID = CONSTITUENT.ID
outer apply dbo.UFN_CONSTITUENT_DISPLAYNAME(CONSTITUENT.ID) NF
where
VA.JOBOCCURRENCEID = @JOBOCCURRENCEID and
ITEMS.ASSIGNMENTDATE = VA.DATE and
(@ISADMIN = 1 or
(@APPUSER_IN_NONRACROLE = 1 or
dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT(@CURRENTAPPUSERID, CONSTITUENT.ID, @APPUSER_IN_NOSECGROUPROLE) = 1)
and
(@APPUSER_IN_NONSITEROLE = 1 or
dbo.UFN_SECURITY_APPUSER_GRANTED_CONSTITID_FORREPORT_BYSITE(@CURRENTAPPUSERID, CONSTITUENT.ID, @APPUSER_IN_NOSITEROLE) = 1)
)
order by CONSTITUENT.KEYNAME
for xml path(''), type).value('.', 'nvarchar(max)'), 1, 2, '')) AS DESCRIPTION
from (
select JOBOCCURRENCE.VOLUNTEERSNEEDED - count(VOLUNTEERASSIGNMENT.ID) OPENINGS, DATES.ASSIGNMENTDATE
from (
select
TEMP.DATE ASSIGNMENTDATE
from JOBOCCURRENCE
inner join @DATES TEMP
on dbo.UFN_JOBSCHEDULE_DATEVALID2(TEMP.DATE,JOBOCCURRENCE.TYPECODE,JOBOCCURRENCE.STARTDATE,JOBOCCURRENCE.RECURRENCESTARTDATE,JOBOCCURRENCE.ENDDATE,JOBOCCURRENCE.RECURRENCEENDDATE) = 1
and dbo.UFN_VOLUNTEER_DAYOFWEEKMATCHES(JOBOCCURRENCE.DAYOFWEEKCODE, TEMP.DATE) = 1
where JOBOCCURRENCE.ID = @JOBOCCURRENCEID
UNION
select
VOLUNTEERASSIGNMENT.DATE ASSIGNMENTDATE
from dbo.VOLUNTEERASSIGNMENT
where VOLUNTEERASSIGNMENT.JOBOCCURRENCEID = @JOBOCCURRENCEID
and (VOLUNTEERASSIGNMENT.DATE is null or VOLUNTEERASSIGNMENT.DATE between @STARTDATE and @ENDDATE)) DATES
left outer join VOLUNTEERASSIGNMENT
on VOLUNTEERASSIGNMENT.DATE = DATES.ASSIGNMENTDATE
and JOBOCCURRENCEID = @JOBOCCURRENCEID
inner join dbo.JOBOCCURRENCE
on JOBOCCURRENCE.ID = @JOBOCCURRENCEID
group by JOBOCCURRENCE.VOLUNTEERSNEEDED, DATES.ASSIGNMENTDATE) ITEMS
inner join dbo.JOBOCCURRENCE
on JOBOCCURRENCE.ID = @JOBOCCURRENCEID
where
(@INCLUDE_OPENINGS = 0 and ITEMS.OPENINGS <= 0) or
(@INCLUDE_OPENINGS = 1 and ITEMS.OPENINGS > 0);
end