USP_DATALIST_STUDENT_CLASSCALENDAR

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

Parameters

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

Definition

Copy


CREATE procedure dbo.USP_DATALIST_STUDENT_CLASSCALENDAR
(
    @STUDENTID uniqueidentifier,
    @CONTEXTRECORDID uniqueidentifier = null,
    @SCHOOLID 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
    )

    if @TERMID is not null and @TERMID != '00000000-0000-0000-0000-000000000000'
    begin
        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.STUDENTCLASSMEETINGGROUP on CLASSMEETINGGROUP.ID = STUDENTCLASSMEETINGGROUP.CLASSMEETINGGROUPID
            inner join dbo.STUDENTCOURSE on STUDENTCLASSMEETINGGROUP.STUDENTCOURSEID = STUDENTCOURSE.ID
        where STUDENTCOURSE.STUDENTID = @STUDENTID
            and COURSE.SCHOOLID = @SCHOOLID
      and STUDENTCLASSMEETINGGROUP.STATUSCODE = 0
    end
    else if @SESSIONID is not null and @SESSIONID != '00000000-0000-0000-0000-000000000000'
    begin
        with CLASSMAP_CTE (CLASSID, CLASSNAME, TERMNAME, STARTDATE, ROW)
        as
        (
            select
                CLASS.ID,
                COURSE.[COURSEID] + ' - ' + CLASS.[SECTION] + ' - ' as NAME,
                TERMNAMECODE.DESCRIPTION as TERMNAME,
                CLASSMEETINGGROUP.STARTDATE,
                (ROW_NUMBER() over (partition by CLASS.ID, CLASS.SECTION order by CLASSMEETINGGROUP.STARTDATE)) as ROW
            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 CLASSMEETINGGROUP.STARTDATE = TERM.STARTDATE
                    and CLASSMEETINGGROUP.ENDDATE = TERM.ENDDATE
                inner join dbo.TERMNAMECODE on TERM.TERMNAMECODEID = TERMNAMECODE.ID
                inner join dbo.STUDENTCLASSMEETINGGROUP on CLASSMEETINGGROUP.ID = STUDENTCLASSMEETINGGROUP.CLASSMEETINGGROUPID
                inner join dbo.STUDENTCOURSE on STUDENTCLASSMEETINGGROUP.STUDENTCOURSEID = STUDENTCOURSE.ID
            where STUDENTCOURSE.STUDENTID = @STUDENTID
                and COURSE.SCHOOLID = @SCHOOLID
        and STUDENTCLASSMEETINGGROUP.STATUSCODE = 0
        )
        insert into @CLASSMAP
        select
            T.ID,            
            T.CLASSNAME +
                case when T.CLASSRANK > 1
                    then (select stuff(
                            (select ', ' + LOCAL_CTE.TERMNAME
                            from CLASSMAP_CTE LOCAL_CTE
                            where LOCAL_CTE.CLASSID = T.ID
                            order by LOCAL_CTE.STARTDATE
                            for xml path('')),
                        1, 2, ''))
                    else T.TERMNAME
                end as NAME,
            T.COLORSTYLECODE
        from
            (
                select
                    CLASSMAP_CTE.CLASSID as ID,
                    CLASSMAP_CTE.CLASSNAME,
                    CLASSMAP_CTE.TERMNAME,
                    rank() over (order by CLASSMAP_CTE.CLASSID) as CLASSRANK,
                    (ROW_NUMBER() over (order by CLASSMAP_CTE.CLASSNAME) -1) % 12 as COLORSTYLECODE,
                    CLASSMAP_CTE.ROW
                from
                    CLASSMAP_CTE
            ) T
        where T.ROW = 1
    end

    select
        T.ID,
        CLASS.ID as CLASSID,
        T.CYCLEDAYID,
        @CURRENTDATE as STARTDATE,
        CLASS.NAME as NAME,
        coalesce(TIMETABLEDAYPERIOD.PERIOD, '') + coalesce(' (' + PATTERNBLOCK.NAME + ')', '')
            + coalesce(char(10) + T.FACULTY, '') as DESCRIPTION,
        T.STARTTIME,
        T.ENDTIME,
        CLASS.COLORSTYLECODE
    from (
        select
            CLASSMEETINGTEMPLATE.ID,
            CLASSMEETINGTEMPLATE.CYCLEDAYID,
            CLASSMEETINGTEMPLATE.STARTTIME,
            CLASSMEETINGTEMPLATE.ENDTIME,
            CLASSMEETINGTEMPLATE.TIMETABLEDAYPERIODID,
            CLASSMEETINGGROUP.CLASSID,
            CLASSMEETINGGROUP.PATTERNBLOCKID,
            CONSTITUENT.KEYNAME + ', ' + CONSTITUENT.FIRSTNAME as FACULTY,
            ROW_NUMBER() OVER (PARTITION BY
                CLASSMEETINGTEMPLATE.CYCLEDAYID,
                CLASSMEETINGTEMPLATE.STARTTIME,
                CLASSMEETINGTEMPLATE.ENDTIME,
                CLASSMEETINGTEMPLATE.TIMETABLEDAYPERIODID,
                CLASSMEETINGGROUP.CLASSID
                ORDER BY CLASSMEETINGGROUP.STARTDATE DESC
            ) ROW
        from dbo.CLASSMEETINGTEMPLATE
            inner join dbo.CLASSMEETINGGROUP on CLASSMEETINGTEMPLATE.CLASSMEETINGGROUPID = CLASSMEETINGGROUP.ID
            left join dbo.FACULTYCLASSMEETINGGROUP on CLASSMEETINGGROUP.ID = FACULTYCLASSMEETINGGROUP.CLASSMEETINGGROUPID
            left join dbo.FACULTYCOURSE on FACULTYCLASSMEETINGGROUP.FACULTYCOURSEID = FACULTYCOURSE.ID
            left join dbo.CONSTITUENT on FACULTYCOURSE.FACULTYID = CONSTITUENT.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