USP_REPORT_FACULTYSCHEDULE

Returns data used for displaying the faculty 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_FACULTYSCHEDULE(
    @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 @FACULTYQUERY_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 @FACULTYQUERY_IDS
                select 
                    SELECTION.ID
                from 
                    dbo.UFN_IDSETREADER_GETRESULTS_GUID(@RECORDQUERYID) SELECTION 
        end

    -- single faculty, selection or all faculty; filter by session dates and enrollment                

    declare @FACULTYIDS table (ID uniqueidentifier)
    insert into @FACULTYIDS 
        select 
            FACULTY.ID
        from dbo.FACULTY
            left join @FACULTYQUERY_IDS SELECTION 
                on SELECTION.ID = FACULTY.ID
        where (@RECORDQUERYID is null or SELECTION.ID is not null)
            and (@RECORDID_SINGLE is null or FACULTY.ID = @RECORDID_SINGLE)
            and exists 
                (select 
                    FACULTYCOURSE.FACULTYID 
                from dbo.FACULTYCOURSE 
                    inner join dbo.FACULTYCLASSMEETINGGROUP 
                        on FACULTYCLASSMEETINGGROUP.FACULTYCOURSEID = FACULTYCOURSE.ID
                    inner join dbo.CLASSMEETINGGROUP 
                        on CLASSMEETINGGROUP.ID = FACULTYCLASSMEETINGGROUP.CLASSMEETINGGROUPID
                    inner join dbo.COURSE 
                        on COURSE.ID = FACULTYCOURSE.COURSEID
                where 
                    FACULTYCOURSE.FACULTYID = FACULTY.ID and 
                    COURSE.SCHOOLID = @SCHOOLID and
                    COURSE.PRINTONSCHEDULE = 1 and
                    not (CLASSMEETINGGROUP.ENDDATE < @SESSION_STARTDATE or 
                    CLASSMEETINGGROUP.STARTDATE > @SESSION_ENDDATE)
                )

    --create map of possible terms/days/times/periods for each faculty in query...this should reflect what we see in the grid

    --only create terms for faculty that actually have meeting data...avoid empty grids

    declare @SCHEDULE table (ID int NOT NULL IDENTITY(1,1), FACULTYID uniqueidentifier, 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), LENGTHINPERIODS int, PERIODCOUNT int, INTERVAL int, STARTTIME smalldatetime, ENDTIME smalldatetime, HIDEGRID bit, HIDENOMEETINGSGRID bit)

    if @BREAKDOWNBY = 0 --Periods

        begin
            insert into @SCHEDULE (FACULTYID, TERMID, CYCLEDAYID, PERIOD, PERIOD_SEQUENCE, CYCLEDAYCOUNT, ACADEMICYEAR)
            select
                FACULTY.ID,
                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 @FACULTYIDS as FACULTY
                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 FACULTYCOURSE.ID 
                    from dbo.FACULTYCOURSE 
                        inner join dbo.FACULTYCLASSMEETINGGROUP 
                            on FACULTYCLASSMEETINGGROUP.FACULTYCOURSEID = FACULTYCOURSE.ID
                        inner join dbo.CLASSMEETINGGROUP 
                            on CLASSMEETINGGROUP.ID = FACULTYCLASSMEETINGGROUP.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 = FACULTYCOURSE.COURSEID
                    where 
                        FACULTY.ID = FACULTYCOURSE.FACULTYID and
                        COURSE.SCHOOLID = @SCHOOLID and
                        COURSE.PRINTONSCHEDULE = 1)

            --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
            from @SCHEDULE as SCHEDULE
                cross join dbo.CLASSMEETINGGROUP
                inner join dbo.FACULTYCLASSMEETINGGROUP           
                    on CLASSMEETINGGROUP.ID = FACULTYCLASSMEETINGGROUP.CLASSMEETINGGROUPID
                inner join dbo.FACULTYCOURSE                      
                    on FACULTYCLASSMEETINGGROUP.FACULTYCOURSEID = FACULTYCOURSE.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
                FACULTYCOURSE.FACULTYID = SCHEDULE.FACULTYID and
                SCHEDULE.PERIOD = MEETING_PERIODS.PERIOD and 
                COURSE.PRINTONSCHEDULE = 1    
        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 (FACULTYID, TERMID, CYCLEDAYID, INTERVAL, STARTTIME, ENDTIME, CYCLEDAYCOUNT, ACADEMICYEAR)
            select
                FACULTY.ID,
                TERMS.ELEMENT_VALUE as TERMID,
                CYCLEDAYS.ELEMENT_VALUE as CYCLEDAYID,
                TIMES.INTERVAL,
                TIMES.STARTTIME,
                TIMES.ENDTIME,
                CYCLEDAYCOUNT = @CYCLEDAYCOUNT,
                ACADEMICYEAR = @ACADEMICYEAR
            from @FACULTYIDS as FACULTY
                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 FACULTYCOURSE.ID 
                    from dbo.FACULTYCOURSE 
                        inner join dbo.FACULTYCLASSMEETINGGROUP 
                            on FACULTYCLASSMEETINGGROUP.FACULTYCOURSEID = FACULTYCOURSE.ID
                        inner join dbo.CLASSMEETINGGROUP 
                            on CLASSMEETINGGROUP.ID = FACULTYCLASSMEETINGGROUP.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 = FACULTYCOURSE.COURSEID
                    where 
                        FACULTY.ID = FACULTYCOURSE.FACULTYID and
                        COURSE.SCHOOLID = @SCHOOLID and
                        COURSE.PRINTONSCHEDULE = 1)

            --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,
                    PERIOD = I.PERIOD
            from @SCHEDULE as SCHEDULE
            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.FACULTYID) OVER (PARTITION BY T.FACULTYID, T.TERMID, T.CYCLEDAYCODE, T.CLASSID) end,
                    TIMEROW_COUNT = 
                        case when T.CLASSID is null 
                            then null
                            else ROW_NUMBER() OVER (PARTITION BY T.FACULTYID, T.TERMID, T.CYCLEDAYCODE, T.CLASSID order by T.INTERVAL) end,
                    PERIOD = T.PERIOD
                from
                    (select 
                        SCHEDULE.ID,
                        SCHEDULE.INTERVAL,
                        SCHEDULE.STARTTIME as ROW_STARTTIME,
                        SCHEDULE.ENDTIME as ROW_ENDTIME,
                        SCHEDULE.FACULTYID as FACULTYID,
                        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.FACULTYID, 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.FACULTYCLASSMEETINGGROUP           
                            on CLASSMEETINGGROUP.ID = FACULTYCLASSMEETINGGROUP.CLASSMEETINGGROUPID
                        inner join dbo.FACULTYCOURSE                      
                            on FACULTYCLASSMEETINGGROUP.FACULTYCOURSEID = FACULTYCOURSE.ID
                            and FACULTYCOURSE.FACULTYID = SCHEDULE.FACULTYID
                        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
                        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 (FACULTYID, TERMID, CLASSID, NAME, CLASSNAME, ACADEMICYEAR)
            select
                FACULTY.ID,
                TERM.ID,
                CLASSID = CLASSMEETINGGROUP.CLASSID,
                NAME = COURSE.[COURSEID] + ' - ' + CLASS.[SECTION],
                CLASSNAME = CLASS.[NAME],
                ACADEMICYEAR = @ACADEMICYEAR
            from @FACULTYIDS as FACULTY
                cross join dbo.CLASSMEETINGGROUP
                inner join dbo.FACULTYCLASSMEETINGGROUP           
                    on CLASSMEETINGGROUP.ID = FACULTYCLASSMEETINGGROUP.CLASSMEETINGGROUPID
                inner join dbo.FACULTYCOURSE                      
                    on FACULTYCLASSMEETINGGROUP.FACULTYCOURSEID = FACULTYCOURSE.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 
                FACULTYCOURSE.FACULTYID = FACULTY.ID and
                COURSE.PRINTONSCHEDULE = 1 and
                not exists (select ID from dbo.CLASSMEETINGTEMPLATE where CLASSMEETINGGROUPID = CLASSMEETINGGROUP.ID)

    --set faculty/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.FACULTYID = SCHEDULE.FACULTYID 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.FACULTYID = SCHEDULE.FACULTYID 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?FACULTYID=' + CONVERT(nvarchar(36), FACULTYID) as FACULTYID, 
        FACULTY.NAME as FACULTYNAME, 
        FACULTY.KEYNAME as FACULTY_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,
        HIDEGRID,
        HIDENOMEETINGSGRID,
        @INCLUDENOMEETINGS as INCLUDENOMEETINGS,
        @DISPLAYBY as DISPLAYBY,
        @INTERVAL as INTERVAL,
        @BREAKDOWNBY as BREAKDOWNBY 
    from @SCHEDULE as SCHEDULE
        inner join dbo.CONSTITUENT FACULTY 
            on FACULTY.ID = SCHEDULE.FACULTYID
        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