USP_DATALIST_FACULTY_CLASSCALENDAR

Returns the class meeting times for faculty within the specified time frame.

Parameters

Parameter Parameter Type Mode Description
@FACULTYID uniqueidentifier IN Input parameter indicating the context ID for the data list.
@CONTEXTRECORDID uniqueidentifier IN
@ACADEMICYEARID uniqueidentifier IN Academic Year
@SESSIONID uniqueidentifier IN Session
@TERMID uniqueidentifier IN Term

Definition

Copy


CREATE procedure dbo.USP_DATALIST_FACULTY_CLASSCALENDAR
(
    @FACULTYID uniqueidentifier,
    @CONTEXTRECORDID uniqueidentifier = null,
    @ACADEMICYEARID uniqueidentifier = null,
    @SESSIONID uniqueidentifier = null,
    @TERMID uniqueidentifier = null
)
as
    set nocount on;

    declare @CURRENTDATE date = getdate()

    declare @CLASSMAP table
    (
        ID uniqueidentifier,
        NAME nvarchar(200),
        COLORSTYLECODE int
    )

    declare @SCHOOLID uniqueidentifier = dbo.UFN_ACADEMICYEAR_GETSCHOOL_GROUPBYTIMEFILTER(@ACADEMICYEARID)
    if @SCHOOLID is null
        select @SCHOOLID = dbo.UFN_SESSION_GETSCHOOL_GROUPBYTIMEFILTER(@ACADEMICYEARID, @SESSIONID)

    if @TERMID is not null and @TERMID != '00000000-0000-0000-0000-000000000000'
    begin    
        if @SCHOOLID is null
            select @SCHOOLID = dbo.UFN_TERM_GETSCHOOL_GROUPBYTIMEFILTER(@SESSIONID, @TERMID)

        insert into @CLASSMAP
        select
            CLASS.ID,
            COURSE.[COURSEID] + ' - ' + CLASS.[SECTION] as NAME,
            (ROW_NUMBER() over (order by CLASS.STARTDATE, CLASS.SECTION) -1) % 12
        from dbo.CLASS
            inner join dbo.COURSE on CLASS.COURSEID = COURSE.ID
            inner join dbo.CLASSMEETINGGROUP on CLASS.ID = CLASSMEETINGGROUP.CLASSID
            inner join dbo.TERM on TERM.ID = @TERMID
                and CLASSMEETINGGROUP.STARTDATE >= TERM.STARTDATE
                and CLASSMEETINGGROUP.ENDDATE <= TERM.ENDDATE
            inner join dbo.FACULTYCLASSMEETINGGROUP on CLASSMEETINGGROUP.ID = FACULTYCLASSMEETINGGROUP.CLASSMEETINGGROUPID
            inner join dbo.FACULTYCOURSE on FACULTYCLASSMEETINGGROUP.FACULTYCOURSEID = FACULTYCOURSE.ID
        where FACULTYCOURSE.FACULTYID = @FACULTYID
            and (@SCHOOLID is null or @SCHOOLID = COURSE.SCHOOLID)
    end
    else if @SESSIONID is not null and @SESSIONID != '00000000-0000-0000-0000-000000000000'
    begin
        insert into @CLASSMAP
        select
            CLASS.ID,
            COURSE.[COURSEID] + ' - ' + CLASS.[SECTION] + ' - ' + TERMNAMECODE.DESCRIPTION as NAME,
            (ROW_NUMBER() over (order by CLASS.STARTDATE, CLASS.SECTION) -1) % 12
        from dbo.CLASS
            inner join dbo.COURSE on CLASS.COURSEID = COURSE.ID
            inner join dbo.CLASSMEETINGGROUP on CLASS.ID = CLASSMEETINGGROUP.CLASSID
            inner join dbo.UFN_SESSION_GETDATES(@SESSIONID) as SESSION on
                CLASS.STARTDATE >= SESSION.STARTDATE and
                CLASS.ENDDATE <= SESSION.ENDDATE
            inner join dbo.TERM on @SESSIONID = TERM.SESSIONID
                and CLASS.STARTDATE = TERM.STARTDATE
            inner join dbo.TERMNAMECODE on TERM.TERMNAMECODEID = TERMNAMECODE.ID
            inner join dbo.FACULTYCLASSMEETINGGROUP on CLASSMEETINGGROUP.ID = FACULTYCLASSMEETINGGROUP.CLASSMEETINGGROUPID
            inner join dbo.FACULTYCOURSE on FACULTYCLASSMEETINGGROUP.FACULTYCOURSEID = FACULTYCOURSE.ID
        where FACULTYCOURSE.FACULTYID = @FACULTYID
            and (@SCHOOLID is null or @SCHOOLID = COURSE.SCHOOLID)
        group by CLASS.ID, COURSE.COURSEID, CLASS.SECTION, CLASS.STARTDATE, CLASS.SECTION, TERMNAMECODE.DESCRIPTION
    end

    select
        T.ID,
        CLASS.ID as CLASSID,
        T.CYCLEDAYID,
        @CURRENTDATE as STARTDATE,
        CLASS.NAME,
        coalesce(TIMETABLEDAYPERIOD.PERIOD, '') + coalesce(' (' + PATTERNBLOCK.NAME + ')', '')
            + char(10) + '(' + cast(dbo.UFN_CLASS_GETNUMBERENROLLED(CLASS.ID) as nvarchar) + ')' as DESCRIPTION,
        T.STARTTIME,
        T.ENDTIME,
        CLASS.COLORSTYLECODE
    from (
        select
            CLASSMEETINGTEMPLATE.ID,
            CLASSMEETINGTEMPLATE.CYCLEDAYID,
            CLASSMEETINGTEMPLATE.STARTTIME,
            CLASSMEETINGTEMPLATE.ENDTIME,
            CLASSMEETINGTEMPLATE.TIMETABLEDAYPERIODID,
            CLASSMEETINGGROUP.CLASSID,
            CLASSMEETINGGROUP.PATTERNBLOCKID,
            ROW_NUMBER() OVER (PARTITION BY
                CLASSMEETINGTEMPLATE.CYCLEDAYID,
                CLASSMEETINGTEMPLATE.STARTTIME,
                CLASSMEETINGTEMPLATE.ENDTIME,
                CLASSMEETINGTEMPLATE.TIMETABLEDAYPERIODID,
                CLASSMEETINGGROUP.CLASSID
                ORDER BY CLASSMEETINGTEMPLATE.DATEADDED DESC
            ) ROW
        from dbo.CLASSMEETINGTEMPLATE
            inner join dbo.CLASSMEETINGGROUP on CLASSMEETINGTEMPLATE.CLASSMEETINGGROUPID = CLASSMEETINGGROUP.ID
    ) T
        inner join @CLASSMAP CLASS on T.CLASSID = CLASS.ID
        inner join dbo.CYCLEDAY on T.CYCLEDAYID = CYCLEDAY.ID
        left join dbo.TIMETABLEDAYPERIOD on T.TIMETABLEDAYPERIODID = TIMETABLEDAYPERIOD.ID
        left join dbo.PATTERNBLOCK on T.PATTERNBLOCKID = PATTERNBLOCK.ID
    where T.ROW = 1
    order by CYCLEDAY.SEQUENCE, T.STARTTIME