USP_REPORT_STUDENTSCHEDULE
Returns data used for displaying the student schedule report.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@RECORDQUERYID | uniqueidentifier | IN | |
@RECORDID_SINGLE | uniqueidentifier | IN | |
@SCHOOLID | uniqueidentifier | IN | |
@ACADEMICYEARID | uniqueidentifier | IN | |
@SESSIONID | uniqueidentifier | IN | |
@TERMS | nvarchar(max) | IN | |
@DISPLAYBY | tinyint | IN | |
@INCLUDENOMEETINGS | bit | IN | |
@PERIODS | nvarchar(max) | IN | |
@CYCLEDAYS | nvarchar(max) | IN | |
@STARTTIME | smalldatetime | IN | |
@ENDTIME | smalldatetime | IN | |
@INTERVAL | tinyint | IN | |
@BREAKDOWNBY | tinyint | IN |
Definition
Copy
CREATE procedure dbo.USP_REPORT_STUDENTSCHEDULE(
@RECORDQUERYID uniqueidentifier = null,
@RECORDID_SINGLE uniqueidentifier = null,
@SCHOOLID uniqueidentifier = null,
@ACADEMICYEARID uniqueidentifier = null,
@SESSIONID uniqueidentifier = null,
@TERMS nvarchar(max) = null,
@DISPLAYBY tinyint = null,
@INCLUDENOMEETINGS bit = null,
@PERIODS nvarchar(max) = null,
@CYCLEDAYS nvarchar(max) = null,
@STARTTIME smalldatetime = null,
@ENDTIME smalldatetime = null,
@INTERVAL tinyint = null,
@BREAKDOWNBY tinyint = null
)
as
begin
declare @SESSION_STARTDATE date
declare @SESSION_ENDDATE date
select
@SESSION_STARTDATE = STARTDATE,
@SESSION_ENDDATE = ENDDATE
from
dbo.UFN_SESSION_GETDATES(@SESSIONID)
declare @ACADEMICYEAR nvarchar(100)
set @ACADEMICYEAR = dbo.UFN_ACADEMICYEAR_GETNAME(@ACADEMICYEARID)
declare @CYCLEDAYCOUNT int
select @CYCLEDAYCOUNT = COUNT(1) from dbo.UFN_PARSE_STRING(@CYCLEDAYS,',')
declare @STUDENTQUERY_IDS table (ID uniqueidentifier)
if not @RECORDQUERYID is null
begin
if not exists(select ID from dbo.IDSETREGISTER where ID = @RECORDQUERYID)
raiserror('Selection ID set does not exist in the database.', 15, 1)
insert into @STUDENTQUERY_IDS
select
SELECTION.ID
from
dbo.UFN_IDSETREADER_GETRESULTS_GUID(@RECORDQUERYID) SELECTION
end
-- single student, selection or all students; filter by session dates and enrollment
declare @STUDENTIDS table (ID uniqueidentifier, HOMEROOMTEACHERNAME nvarchar(100), HOMEROOMTEACHER_KEYNAME nvarchar(100), ADVISORNAME nvarchar(100), ADVISOR_KEYNAME nvarchar(100), GRADELEVEL nvarchar(100), GRADELEVEL_SEQ int)
insert into @STUDENTIDS
select
STUDENT.ID,
HOMEROOMTEACHER.NAME as HOMEROOMTEACHERNAME,
HOMEROOMTEACHER.KEYNAME as HOMEROOMTEACHER_KEYNAME,
ADVISOR.NAME as ADVISORNAME,
ADVISOR.KEYNAME as ADVISOR_KEYNAME,
GRADELEVEL.DESCRIPTION as GRADELEVEL,
GRADELEVEL.SEQUENCE as GRADELEVEL_SEQ
from STUDENT
inner join dbo.EDUCATIONALHISTORY
on STUDENT.ID = EDUCATIONALHISTORY.CONSTITUENTID
inner join dbo.STUDENTPROGRESSION
on EDUCATIONALHISTORY.ID = STUDENTPROGRESSION.ENROLLMENTID
left join dbo.CONSTITUENT HOMEROOMTEACHER
on HOMEROOMTEACHER.ID = STUDENTPROGRESSION.HOMEROOMTEACHERID
left join dbo.STUDENTADVISOR
on STUDENTPROGRESSION.ID = STUDENTADVISOR.STUDENTPROGRESSIONID
left join dbo.CONSTITUENT ADVISOR
on ADVISOR.ID = STUDENTADVISOR.FACULTYID
inner join SCHOOLGRADELEVEL
on SCHOOLGRADELEVEL.ID = STUDENTPROGRESSION.SCHOOLGRADELEVELID
inner join GRADELEVEL
on GRADELEVEL.ID = SCHOOLGRADELEVEL.GRADELEVELID
left join @STUDENTQUERY_IDS SELECTION
on SELECTION.ID = STUDENT.ID
where STUDENTPROGRESSION.STARTDATE <= @SESSION_STARTDATE
and STUDENTPROGRESSION.ENDDATE >= @SESSION_ENDDATE
and SCHOOLGRADELEVEL.SCHOOLID = @SCHOOLID
and (@RECORDQUERYID is null or SELECTION.ID is not null)
and (@RECORDID_SINGLE is null or STUDENT.ID = @RECORDID_SINGLE)
and exists
(select
STUDENTCOURSE.STUDENTID
from dbo.STUDENTCOURSE
inner join dbo.STUDENTCLASSMEETINGGROUP
on STUDENTCLASSMEETINGGROUP.STUDENTCOURSEID = STUDENTCOURSE.ID
inner join dbo.CLASSMEETINGGROUP
on CLASSMEETINGGROUP.ID = STUDENTCLASSMEETINGGROUP.CLASSMEETINGGROUPID
inner join dbo.COURSE
on COURSE.ID = STUDENTCOURSE.COURSEID
where
STUDENTCOURSE.STUDENTID = STUDENT.ID and
COURSE.SCHOOLID = @SCHOOLID and
COURSE.PRINTONSCHEDULE = 1 and
STUDENTCLASSMEETINGGROUP.STATUSCODE = 0 and --enrolled
not (CLASSMEETINGGROUP.ENDDATE < @SESSION_STARTDATE or
CLASSMEETINGGROUP.STARTDATE > @SESSION_ENDDATE)
)
--create map of possible terms/days/times/periods for each student in query...this should reflect what we see in the grid
--only create terms for students that actually have meeting data...avoid empty grids
declare @SCHEDULE table (ID int NOT NULL IDENTITY(1,1), STUDENTID uniqueidentifier, HOMEROOMTEACHERNAME nvarchar(100), HOMEROOMTEACHER_KEYNAME nvarchar(100), ADVISORNAME nvarchar(100), ADVISOR_KEYNAME nvarchar(100), GRADELEVEL nvarchar(100), GRADELEVEL_SEQ int, TERMID uniqueidentifier, CYCLEDAYID uniqueidentifier, PERIOD nvarchar(60), PERIOD_SEQUENCE int, LENGTHIN_TIMEROWS int, TIMEROW_COUNT int, CYCLEDAYCOUNT int, CLASSID uniqueidentifier, NAME nvarchar(32), CLASSNAME nvarchar(60), CLASS_STARTTIME smalldatetime, CLASS_ENDTIME smalldatetime, ACADEMICYEAR nvarchar(100), FACULTY nvarchar(100), LENGTHINPERIODS int, PERIODCOUNT int, INTERVAL int, STARTTIME smalldatetime, ENDTIME smalldatetime, HIDEGRID bit, HIDENOMEETINGSGRID bit)
if @BREAKDOWNBY = 0 --Periods
begin
insert into @SCHEDULE (STUDENTID, HOMEROOMTEACHERNAME, HOMEROOMTEACHER_KEYNAME, ADVISORNAME, ADVISOR_KEYNAME, GRADELEVEL, GRADELEVEL_SEQ, TERMID, CYCLEDAYID, PERIOD, PERIOD_SEQUENCE, CYCLEDAYCOUNT, ACADEMICYEAR)
select
STUDENTS.ID,
STUDENTS.HOMEROOMTEACHERNAME,
STUDENTS.HOMEROOMTEACHER_KEYNAME,
STUDENTS.ADVISORNAME,
STUDENTS.ADVISOR_KEYNAME,
STUDENTS.GRADELEVEL,
STUDENTS.GRADELEVEL_SEQ,
TERMS.ELEMENT_VALUE as TERMID,
CYCLEDAYS.ELEMENT_VALUE as CYCLEDAYID,
PERIODS.ELEMENT_VALUE,
--period start time on the first cycle day with a matching period description...used to order report
(select top 1 TIMETABLEDAYPERIOD.STARTTIME
from dbo.TIMETABLEDAYPERIOD
inner join dbo.TIMETABLEDAY
on TIMETABLEDAY.ID = TIMETABLEDAYPERIOD.TIMETABLEDAYID
inner join dbo.CYCLEDAY
on CYCLEDAY.ID = TIMETABLEDAY.CYCLEDAYID
inner join SESSION
on SESSION.TIMETABLEID = TIMETABLEDAY.TIMETABLEID
where
SESSION.ID = @SESSIONID and TIMETABLEDAYPERIOD.PERIOD = PERIODS.ELEMENT_VALUE
order by CYCLEDAY.SEQUENCE) as PERIOD_SEQUENCE,
CYCLEDAYCOUNT = @CYCLEDAYCOUNT,
ACADEMICYEAR = @ACADEMICYEAR
from @STUDENTIDS as STUDENTS
cross join dbo.UFN_PARSE_STRING(@CYCLEDAYS,',') CYCLEDAYS
cross join dbo.UFN_PARSE_STRING(@PERIODS,',') as PERIODS
cross join dbo.UFN_PARSE_STRING(@TERMS,',') TERMS
where exists(
select
STUDENTCOURSE.ID
from dbo.STUDENTCOURSE
inner join dbo.STUDENTCLASSMEETINGGROUP
on STUDENTCLASSMEETINGGROUP.STUDENTCOURSEID = STUDENTCOURSE.ID
inner join dbo.CLASSMEETINGGROUP
on CLASSMEETINGGROUP.ID = STUDENTCLASSMEETINGGROUP.CLASSMEETINGGROUPID
inner join dbo.TERM
on TERM.SESSIONID = @SESSIONID
and TERM.STARTDATE = CLASSMEETINGGROUP.STARTDATE
and TERM.ENDDATE = CLASSMEETINGGROUP.ENDDATE
and TERM.ID = TERMS.ELEMENT_VALUE
inner join dbo.CLASSMEETINGTEMPLATE
on CLASSMEETINGTEMPLATE.CLASSMEETINGGROUPID = CLASSMEETINGGROUP.ID
inner join dbo.COURSE
on COURSE.ID = STUDENTCOURSE.COURSEID
where
STUDENTS.ID = STUDENTCOURSE.STUDENTID and
COURSE.SCHOOLID = @SCHOOLID and
COURSE.PRINTONSCHEDULE = 1 and
STUDENTCLASSMEETINGGROUP.STATUSCODE = 0) --enrolled
--populate all period data for each class meeting
update @SCHEDULE
set
CLASSID = CLASSMEETINGGROUP.CLASSID,
NAME = COURSE.[COURSEID] + ' - ' + CLASS.[SECTION],
CLASSNAME = CLASS.[NAME],
CLASS_STARTTIME = dbo.UFN_DATE_ADDHOURMINUTE('19000101', CLASSMEETINGTEMPLATE.STARTTIME),
CLASS_ENDTIME = dbo.UFN_DATE_ADDHOURMINUTE('19000101', CLASSMEETINGTEMPLATE.ENDTIME),
LENGTHINPERIODS = CLASSMEETINGTEMPLATE.LENGTHINPERIODS,
PERIODCOUNT = MEETING_PERIODS.ROW,
FACULTY = dbo.UFN_CLASSMEETINGGROUP_GETFACULTYSTRING(CLASSMEETINGGROUP.[ID])
from @SCHEDULE as SCHEDULE
cross join dbo.CLASSMEETINGGROUP
inner join dbo.STUDENTCLASSMEETINGGROUP
on CLASSMEETINGGROUP.ID = STUDENTCLASSMEETINGGROUP.CLASSMEETINGGROUPID
inner join dbo.STUDENTCOURSE
on STUDENTCLASSMEETINGGROUP.STUDENTCOURSEID = STUDENTCOURSE.ID
inner join dbo.CLASS
on CLASSMEETINGGROUP.CLASSID = CLASS.ID
inner join dbo.CLASSMEETINGTEMPLATE
on CLASSMEETINGTEMPLATE.CLASSMEETINGGROUPID = CLASSMEETINGGROUP.ID
inner join dbo.COURSE
on CLASS.COURSEID = COURSE.ID
inner join dbo.TERM
on TERM.SESSIONID = @SESSIONID
and TERM.STARTDATE = CLASSMEETINGGROUP.STARTDATE
and TERM.ENDDATE = CLASSMEETINGGROUP.ENDDATE
inner join dbo.CYCLEDAY
on CYCLEDAY.ID = CLASSMEETINGTEMPLATE.CYCLEDAYID
cross apply --get all periods for the class; sql copied from UFN_CLASSMEETINGTEMPLATE_GETPERIODSTRING
(select
T.PERIOD, T.ROW
from
(select
[PEER].PERIOD as PERIOD,
[PEER].STARTTIME,
ROW_NUMBER() over (order by [PEER].STARTTIME) as ROW
from dbo.CLASSMEETINGTEMPLATE CMT
left join dbo.TIMETABLEDAYPERIOD [PRIMARY] on CMT.TIMETABLEDAYPERIODID = [PRIMARY].ID
left join dbo.TIMETABLEDAYPERIOD [PEER] on [PRIMARY].TIMETABLEDAYID = [PEER].TIMETABLEDAYID
where CMT.ID = CLASSMEETINGTEMPLATE.ID
and ([PRIMARY].ID is null or [PEER].STARTTIME >= [PRIMARY].STARTTIME)
) T
where ROW <= CLASSMEETINGTEMPLATE.LENGTHINPERIODS) MEETING_PERIODS
where
TERM.ID = SCHEDULE.TERMID and
CYCLEDAY.ID = SCHEDULE.CYCLEDAYID and
STUDENTCOURSE.STUDENTID = SCHEDULE.STUDENTID and
SCHEDULE.PERIOD = MEETING_PERIODS.PERIOD and
COURSE.PRINTONSCHEDULE = 1 and
STUDENTCLASSMEETINGGROUP.STATUSCODE = 0 --enrolled
end
else --Interval
begin
--number of time slices/rows in each grid
declare @FACTOR float(2) = (1440/@INTERVAL)
declare @ADJUSTED_STARTTIME smalldatetime = Floor(Cast(@STARTTIME as float(2))*@FACTOR)/@FACTOR
declare @ADJUSTED_ENDTIME smalldatetime = Ceiling(Cast(@ENDTIME as float(2))*@FACTOR)/@FACTOR
declare @TIME_ROWS int = DateDiff(minute, @ADJUSTED_STARTTIME, @ADJUSTED_ENDTIME) / @INTERVAL
declare @TIME_INTERVALS table (INTERVAL int, STARTTIME smalldatetime, ENDTIME smalldatetime)
insert into @TIME_INTERVALS
select
NUM,
DateAdd(minute, NUM * @INTERVAL, @ADJUSTED_STARTTIME),
DateAdd(minute, (NUM + 1) * @INTERVAL, @ADJUSTED_STARTTIME)
from
dbo.NUMBERS with (nolock)
where
NUM < @TIME_ROWS
insert into @SCHEDULE (STUDENTID, HOMEROOMTEACHERNAME, HOMEROOMTEACHER_KEYNAME, ADVISORNAME, ADVISOR_KEYNAME, GRADELEVEL, GRADELEVEL_SEQ, TERMID, CYCLEDAYID, INTERVAL, STARTTIME, ENDTIME, CYCLEDAYCOUNT, ACADEMICYEAR)
select
STUDENTS.ID,
STUDENTS.HOMEROOMTEACHERNAME,
STUDENTS.HOMEROOMTEACHER_KEYNAME,
STUDENTS.ADVISORNAME,
STUDENTS.ADVISOR_KEYNAME,
STUDENTS.GRADELEVEL,
STUDENTS.GRADELEVEL_SEQ,
TERMS.ELEMENT_VALUE as TERMID,
CYCLEDAYS.ELEMENT_VALUE as CYCLEDAYID,
TIMES.INTERVAL,
TIMES.STARTTIME,
TIMES.ENDTIME,
CYCLEDAYCOUNT = @CYCLEDAYCOUNT,
ACADEMICYEAR = @ACADEMICYEAR
from @STUDENTIDS as STUDENTS
cross join dbo.UFN_PARSE_STRING(@TERMS,',') TERMS
cross join dbo.UFN_PARSE_STRING(@CYCLEDAYS,',') CYCLEDAYS
cross join @TIME_INTERVALS as TIMES
where exists(
select STUDENTCOURSE.ID
from dbo.STUDENTCOURSE
inner join dbo.STUDENTCLASSMEETINGGROUP
on STUDENTCLASSMEETINGGROUP.STUDENTCOURSEID = STUDENTCOURSE.ID
inner join dbo.CLASSMEETINGGROUP
on CLASSMEETINGGROUP.ID = STUDENTCLASSMEETINGGROUP.CLASSMEETINGGROUPID
inner join dbo.TERM
on TERM.SESSIONID = @SESSIONID
and TERM.STARTDATE = CLASSMEETINGGROUP.STARTDATE
and TERM.ENDDATE = CLASSMEETINGGROUP.ENDDATE
and TERM.ID = TERMS.ELEMENT_VALUE
inner join dbo.CLASSMEETINGTEMPLATE
on CLASSMEETINGTEMPLATE.CLASSMEETINGGROUPID = CLASSMEETINGGROUP.ID
inner join dbo.COURSE
on COURSE.ID = STUDENTCOURSE.COURSEID
where
STUDENTS.ID = STUDENTCOURSE.STUDENTID and
COURSE.SCHOOLID = @SCHOOLID and
COURSE.PRINTONSCHEDULE = 1 and
STUDENTCLASSMEETINGGROUP.STATUSCODE = 0) --enrolled
--populate time data for each class meeting
update @SCHEDULE
set
CLASSID = I.CLASSID,
NAME = I.NAME,
CLASSNAME = I.CLASSNAME,
CLASS_STARTTIME = I.CLASS_STARTTIME,
CLASS_ENDTIME = I.CLASS_ENDTIME,
LENGTHIN_TIMEROWS = I.LENGTHIN_TIMEROWS,
TIMEROW_COUNT = I.TIMEROW_COUNT,
FACULTY = I.FACULTY,
PERIOD = I.PERIOD
from @SCHEDULE as SCHEDULE
inner join (
select ID = T.ID,
CLASSID = T.CLASSID,
NAME = T.NAME,
CLASSNAME = T.CLASSNAME,
CLASS_STARTTIME,
CLASS_ENDTIME,
LENGTHIN_TIMEROWS =
case when T.CLASSID is null
then null
else COUNT(T.STUDENTID) OVER (PARTITION BY T.STUDENTID, T.TERMID, T.CYCLEDAYCODE, T.CLASSID) end,
TIMEROW_COUNT =
case when T.CLASSID is null
then null
else ROW_NUMBER() OVER (PARTITION BY T.STUDENTID, T.TERMID, T.CYCLEDAYCODE, T.CLASSID order by T.INTERVAL) end,
FACULTY = dbo.UFN_CLASSMEETINGGROUP_GETFACULTYSTRING(T.CLASSMEETINGGROUPID),
PERIOD = T.PERIOD
from
(select
SCHEDULE.ID,
SCHEDULE.INTERVAL,
SCHEDULE.STARTTIME as ROW_STARTTIME,
SCHEDULE.ENDTIME as ROW_ENDTIME,
SCHEDULE.STUDENTID as STUDENTID,
case when CMT.ID is null
then null
else CLASSMEETINGGROUP.CLASSID
end as CLASSID,
COURSE.[COURSEID] + ' - ' + CLASS.[SECTION] as NAME,
CLASS.[NAME] as CLASSNAME,
CMT.STARTTIME as CLASS_STARTTIME,
CMT.ENDTIME as CLASS_ENDTIME,
CYCLEDAY.CODE as CYCLEDAYCODE,
TERM.ID as TERMID,
CLASSMEETINGGROUP.ID as CLASSMEETINGGROUPID,
TIMETABLEDAYPERIOD.PERIOD as PERIOD,
ROW_NUMBER() OVER (PARTITION BY SCHEDULE.STUDENTID, TERM.ID, SCHEDULE.INTERVAL, CYCLEDAY.ID order by SCHEDULE.INTERVAL, CLASSMEETINGGROUP.ID desc) as ROWNUMBER
from @SCHEDULE as SCHEDULE
cross join dbo.CLASSMEETINGGROUP
inner join dbo.STUDENTCLASSMEETINGGROUP
on CLASSMEETINGGROUP.ID = STUDENTCLASSMEETINGGROUP.CLASSMEETINGGROUPID
inner join dbo.STUDENTCOURSE
on STUDENTCLASSMEETINGGROUP.STUDENTCOURSEID = STUDENTCOURSE.ID
and STUDENTCOURSE.STUDENTID = SCHEDULE.STUDENTID
inner join dbo.CLASS
on CLASSMEETINGGROUP.CLASSID = CLASS.ID
inner join (
select
ID,
CLASSMEETINGGROUPID,
CYCLEDAYID,
TIMETABLEDAYPERIODID,
dbo.UFN_DATE_ADDHOURMINUTE('19000101', CLASSMEETINGTEMPLATE.STARTTIME) as STARTTIME,
dbo.UFN_DATE_ADDHOURMINUTE('19000101', CLASSMEETINGTEMPLATE.ENDTIME) as ENDTIME,
DateDiff(minute, dbo.UFN_DATE_ADDHOURMINUTE('19000101', CLASSMEETINGTEMPLATE.STARTTIME), dbo.UFN_DATE_ADDHOURMINUTE('19000101', CLASSMEETINGTEMPLATE.ENDTIME)) as DIFF,
DateAdd(minute, -@INTERVAL, dbo.UFN_DATE_ADDHOURMINUTE('19000101', CLASSMEETINGTEMPLATE.STARTTIME)) as STARTTIME_MINUS_INTERVAL
from dbo.CLASSMEETINGTEMPLATE) CMT
on CMT.CLASSMEETINGGROUPID = CLASSMEETINGGROUP.ID
inner join dbo.COURSE
on CLASS.COURSEID = COURSE.ID
and COURSE.PRINTONSCHEDULE = 1
inner join dbo.TERM
on TERM.SESSIONID = @SESSIONID
and TERM.STARTDATE = CLASSMEETINGGROUP.STARTDATE
and TERM.ENDDATE = CLASSMEETINGGROUP.ENDDATE
and TERM.ID = SCHEDULE.TERMID
inner join dbo.CYCLEDAY
on CYCLEDAY.ID = CMT.CYCLEDAYID
and CYCLEDAY.ID = SCHEDULE.CYCLEDAYID
left join dbo.TIMETABLEDAYPERIOD on TIMETABLEDAYPERIOD.ID = CMT.TIMETABLEDAYPERIODID
where
STUDENTCLASSMEETINGGROUP.STATUSCODE = 0 and --enrolled
SCHEDULE.STARTTIME > CMT.STARTTIME_MINUS_INTERVAL and
((SCHEDULE.ENDTIME <= CMT.ENDTIME) or
((@INTERVAL > CMT.DIFF) and (SCHEDULE.STARTTIME < CMT.ENDTIME)))
) T
where T.ROWNUMBER = 1
) I on I.ID = SCHEDULE.ID
end
--insert classes without meetings
if @INCLUDENOMEETINGS = 1
insert into @SCHEDULE (STUDENTID, HOMEROOMTEACHERNAME, HOMEROOMTEACHER_KEYNAME, ADVISORNAME, ADVISOR_KEYNAME, GRADELEVEL, GRADELEVEL_SEQ, TERMID, CLASSID, NAME, CLASSNAME, FACULTY, ACADEMICYEAR)
select
STUDENTS.ID,
STUDENTS.HOMEROOMTEACHERNAME,
STUDENTS.HOMEROOMTEACHER_KEYNAME,
STUDENTS.ADVISORNAME,
STUDENTS.ADVISOR_KEYNAME,
STUDENTS.GRADELEVEL,
STUDENTS.GRADELEVEL_SEQ,
TERM.ID,
CLASSID = CLASSMEETINGGROUP.CLASSID,
NAME = COURSE.[COURSEID] + ' - ' + CLASS.[SECTION],
CLASSNAME = CLASS.[NAME],
FACULTY = dbo.UFN_CLASSMEETINGGROUP_GETFACULTYSTRING(CLASSMEETINGGROUP.[ID]),
ACADEMICYEAR = @ACADEMICYEAR
from @STUDENTIDS as STUDENTS
cross join dbo.CLASSMEETINGGROUP
inner join dbo.STUDENTCLASSMEETINGGROUP
on CLASSMEETINGGROUP.ID = STUDENTCLASSMEETINGGROUP.CLASSMEETINGGROUPID
inner join dbo.STUDENTCOURSE
on STUDENTCLASSMEETINGGROUP.STUDENTCOURSEID = STUDENTCOURSE.ID
inner join dbo.CLASS
on CLASSMEETINGGROUP.CLASSID = CLASS.ID
inner join dbo.COURSE
on CLASS.COURSEID = COURSE.ID
inner join dbo.ACADEMICYEAR
on COURSE.SCHOOLID = ACADEMICYEAR.SCHOOLID
inner join dbo.SESSION
on ACADEMICYEAR.ID = SESSION.ACADEMICYEARID
inner join dbo.TERM
on SESSION.ID = TERM.SESSIONID
and TERM.STARTDATE = CLASSMEETINGGROUP.STARTDATE
and TERM.ENDDATE = CLASSMEETINGGROUP.ENDDATE
inner join dbo.UFN_PARSE_STRING(@TERMS,',') TERMS
on TERM.ID = TERMS.ELEMENT_VALUE
where
STUDENTCOURSE.STUDENTID = STUDENTS.ID and
COURSE.PRINTONSCHEDULE = 1 and
STUDENTCLASSMEETINGGROUP.STATUSCODE = 0 and --enrolled
not exists (select ID from dbo.CLASSMEETINGTEMPLATE where CLASSMEETINGGROUPID = CLASSMEETINGGROUP.ID)
--set student/term group specific column saying if grid and no meetings grid is visible
--not visible when there are no classes with meetings
update @SCHEDULE
set
HIDEGRID =
case when (select count(1)
from @SCHEDULE as LOOK
where
LOOK.STUDENTID = SCHEDULE.STUDENTID and
LOOK.TERMID = SCHEDULE.TERMID and
not LOOK.CYCLEDAYID is null
) = 0 then 1 else 0 end,
HIDENOMEETINGSGRID =
case when (select count(1)
from @SCHEDULE as LOOK
where
LOOK.STUDENTID = SCHEDULE.STUDENTID and
LOOK.TERMID = SCHEDULE.TERMID and
LOOK.CYCLEDAYID is null
) = 0 then 1 else 0 end
from @SCHEDULE as SCHEDULE
select
'http://www.blackbaud.com?STUDENTID=' + CONVERT(nvarchar(36), STUDENTID) as STUDENTID,
STUDENT.NAME as STUDENTNAME,
STUDENT.KEYNAME as STUDENT_KEYNAME,
GRADELEVEL,
GRADELEVEL_SEQ,
HOMEROOMTEACHERNAME,
HOMEROOMTEACHER_KEYNAME,
ADVISORNAME,
ADVISOR_KEYNAME,
TERM.ID as TERMID,
TERMNAMECODE.DESCRIPTION as TERM,
TERM.STARTDATE as TERM_STARTDATE,
ACADEMICYEAR,
CYCLEDAYCOUNT,
CYCLEDAY.CODE as CYCLEDAYCODE,
CYCLEDAY.SEQUENCE as CYCLEDAY_SEQUENCE,
PERIOD,
PERIOD_SEQUENCE, --start time
'http://www.blackbaud.com?CLASSID=' + CONVERT(nvarchar(36), CLASSID) as CLASSID,
LENGTHINPERIODS,
PERIODCOUNT,
STARTTIME as INTERVAL_STARTTIME,
LENGTHIN_TIMEROWS as LENGTHIN_TIMEROWS,
TIMEROW_COUNT as TIMEROW_COUNT,
SCHEDULE.NAME,
CLASSNAME,
case
when (@BREAKDOWNBY = 1 and not PERIOD is null) then
PERIOD + ' ' +
dbo.fnFormatDateTime(CLASS_STARTTIME,'HH:MM 12') + ' - ' +
dbo.fnFormatDateTime(CLASS_ENDTIME,'HH:MM 12')
else
dbo.fnFormatDateTime(CLASS_STARTTIME,'HH:MM 12') + ' - ' +
dbo.fnFormatDateTime(CLASS_ENDTIME,'HH:MM 12') end as TIMES,
FACULTY,
HIDEGRID,
HIDENOMEETINGSGRID,
@INCLUDENOMEETINGS as INCLUDENOMEETINGS,
@DISPLAYBY as DISPLAYBY,
@INTERVAL as INTERVAL,
@BREAKDOWNBY as BREAKDOWNBY
from @SCHEDULE as SCHEDULE
inner join dbo.CONSTITUENT STUDENT
on STUDENT.ID = SCHEDULE.STUDENTID
inner join dbo.TERM
on TERM.ID = SCHEDULE.TERMID
inner join dbo.TERMNAMECODE
on TERMNAMECODE.ID = TERM.TERMNAMECODEID
left join dbo.CYCLEDAY
on CYCLEDAY.ID = SCHEDULE.CYCLEDAYID
end