UFN_STUDENTCOURSEREQUESTS_GETEXCEPTIONS

Returns the exceptions for a given student and set of requests.

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@STUDENTID uniqueidentifier IN
@SESSIONID uniqueidentifier IN
@COURSEREQUESTS xml IN

Definition

Copy


CREATE function dbo.UFN_STUDENTCOURSEREQUESTS_GETEXCEPTIONS(
    @STUDENTID uniqueidentifier, 
    @SESSIONID uniqueidentifier,
    @COURSEREQUESTS xml)

returns @RESULTS table
(
    ID uniqueidentifier,
    COURSEID uniqueidentifier,
    STARTTERMID uniqueidentifier,
    COURSE nvarchar(100),
    EXCEPTION nvarchar(100)
)    
as begin
    declare @SESSION_STARTDATE date
    declare @SESSION_ENDDATE date

    select 
        @SESSION_STARTDATE = STARTDATE, 
        @SESSION_ENDDATE = ENDDATE 
    from 
        dbo.UFN_SESSION_GETDATES(@SESSIONID)

    declare @COURSEREQUESTS_TEMP table
    (
        [COURSEID] uniqueidentifier,
        [ID] uniqueidentifier,
        [STARTTERMID] uniqueidentifier
    )

    insert into @COURSEREQUESTS_TEMP
    (
        COURSEID,
        ID,
        STARTTERMID
    )
    select
        COURSEID,
        ID,
        STARTTERMID
    from (select
        T.c.value('(COURSEID)[1]','uniqueidentifier') AS 'COURSEID',
        T.c.value('(ID)[1]','uniqueidentifier') AS 'ID',
        T.c.value('(STARTTERMID)[1]','uniqueidentifier') AS 'STARTTERMID'
        from @COURSEREQUESTS.nodes('/COURSEREQUESTS/ITEM') T(c)) COURSEREQUESTS

    insert into @RESULTS
    select 
        COURSEREQUESTS.ID, 
        COURSEREQUESTS.COURSEID, 
        COURSEREQUESTS.STARTTERMID,
        COURSE.COURSEID + ' - ' + COURSE.NAME as COURSE, 
        EXCEPTIONS.EXCEPTIONLIST as EXCEPTION
    from dbo.COURSE
    inner join @COURSEREQUESTS_TEMP COURSEREQUESTS
        on COURSEREQUESTS.COURSEID = COURSE.ID
    cross apply 
        dbo.UFN_STUDENTCOURSEREQUEST_GETEXCEPTIONLIST(@STUDENTID,COURSEREQUESTS.COURSEID,@SESSIONID,COURSEREQUESTS.STARTTERMID) as EXCEPTIONS
    where 
        --ID not in db and either no match by course/student/date or adding more than one of the same by course

        not exists (select ID from dbo.STUDENTCOURSE where STUDENTCOURSE.ID = COURSEREQUESTS.ID) 
        and (not exists (
                select STUDENTCOURSEREQUEST.ID 
                from dbo.STUDENTCOURSEREQUEST 
                join dbo.STUDENTCOURSE 
                    on STUDENTCOURSE.ID = STUDENTCOURSEREQUEST.ID
                where STUDENTCOURSE.COURSEID = COURSEREQUESTS.COURSEID and
                    STUDENTCOURSE.STUDENTID = @STUDENTID and
                    STUDENTCOURSEREQUEST.STARTDATE >= @SESSION_STARTDATE and
                    STUDENTCOURSEREQUEST.ENDDATE <= @SESSION_ENDDATE) or
             (select count(1) from @COURSEREQUESTS_TEMP REQS where REQS.COURSEID = COURSEREQUESTS.COURSEID) > 1
            )                

    return
end