UFN_STUDENT_GETCLASSMEETINGSTATUS

Returns the previous, current, and next meeting information for a student given a date. By default the current date and time will be used.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@STUDENTID uniqueidentifier IN
@DATETIME datetime IN

Definition

Copy


CREATE function dbo.UFN_STUDENT_GETCLASSMEETINGSTATUS
(
    @STUDENTID uniqueidentifier,
    @DATETIME datetime = null
)
returns @RESULTS TABLE
(
    [PREVIOUS_CLASSMEETINGID] uniqueidentifier,
    [CURRENT_CLASSMEETINGID] uniqueidentifier,
    [NEXT_CLASSMEETINGID] uniqueidentifier
)
as begin
    if @DATETIME is null
        set @DATETIME = getdate()

    declare @DATE date = @DATETIME

    declare @TempTbl table (
        [ID] uniqueidentifier,
        [START] datetime,
        [END] datetime,
        [ROW] int
    )

    insert into @TempTbl
    select
        CLASSMEETING.ID,
        dbo.UFN_DATE_ADDHOURMINUTE(EDUCATIONMEETING.STARTDATE, EDUCATIONMEETING.STARTTIME) as [START],
        dbo.UFN_DATE_ADDHOURMINUTE(EDUCATIONMEETING.ENDDATE, EDUCATIONMEETING.ENDTIME) as [END],
        ROW_NUMBER() over (order by EDUCATIONMEETING.STARTDATE, EDUCATIONMEETING.STARTTIME, EDUCATIONMEETING.ENDDATE, EDUCATIONMEETING.ENDTIME) as ROW
    from dbo.STUDENTCOURSE
        inner join dbo.STUDENTCLASSMEETINGGROUP on STUDENTCOURSE.ID = STUDENTCLASSMEETINGGROUP.STUDENTCOURSEID
        inner join dbo.CLASSMEETING on STUDENTCLASSMEETINGGROUP.CLASSMEETINGGROUPID = CLASSMEETING.CLASSMEETINGGROUPID
        inner join dbo.EDUCATIONMEETING on CLASSMEETING.EDUCATIONMEETINGID = EDUCATIONMEETING.ID
            and EDUCATIONMEETING.STARTDATE = @DATE
            and EDUCATIONMEETING.ENDDATE = @DATE
    where STUDENTCOURSE.STUDENTID = @STUDENTID
      and STUDENTCLASSMEETINGGROUP.STATUSCODE = 0

    insert into @RESULTS
    select 
        (
            select top(1) ID
            from @TempTbl
            where [END] <= @DATETIME
            order by ROW desc
        ) as [PREVIOUS_CLASSMEETINGID],
        (
            select top(1) ID
            from @TempTbl
            where [START] <= @DATETIME and [END] >= @DATETIME
            order by ROW
        ) as [CURRENT_CLASSMEETINGID],
        (
            select top(1) ID
            from @TempTbl
            where [START] >= @DATETIME
            order by ROW
        ) as [NEXT_CLASSMEETINGID]

    return
end