USP_DATAFORMTEMPLATE_ADD_STUDENTSCHEDULE

The save procedure used by the add dataform template "Student Schedule Add Data Form".

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@CURRENTAPPUSERID uniqueidentifier IN Input parameter indicating the ID of the current user.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@SESSIONID uniqueidentifier IN
@STUDENTID uniqueidentifier IN
@COURSEREQUESTS xml IN
@COURSETERMS xml IN
@OVERRIDEEXCEPTIONS bit IN

Definition

Copy


CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_STUDENTSCHEDULE
(
    @ID uniqueidentifier = null output,    --STUDENTID

    @CURRENTAPPUSERID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
    @SESSIONID uniqueidentifier = null,
    @STUDENTID uniqueidentifier = null,
    @COURSEREQUESTS xml = null,
    @COURSETERMS xml = null,
    @OVERRIDEEXCEPTIONS bit = 0
)
as
    set nocount on

    if @OVERRIDEEXCEPTIONS = 0 and (select count(COURSEID) from dbo.UFN_STUDENTCOURSEREQUESTS_GETEXCEPTIONS(@STUDENTID,@SESSIONID,@COURSEREQUESTS)) > 0
        raiserror('BBERR_STUDENTCOURSEREQUEST_EXCEPTIONS', 13, 1)

    declare @CHANGEDATE datetime = null

    if @CHANGEAGENTID is null
        exec USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output

    if @CHANGEDATE is null 
        set @CHANGEDATE = getdate()

    exec dbo.USP_STUDENTCOURSEREQUEST_UPDATEFROMXML @CURRENTAPPUSERID, @STUDENTID, @COURSEREQUESTS, @CHANGEAGENTID, @CHANGEDATE

    -- build a temporary table containing the values from the XML

    declare @TempTbl table (
       [ID] uniqueidentifier,
       [COURSEID] uniqueidentifier,
       [CLASSID] uniqueidentifier,
       [TERMID] uniqueidentifier)

    insert into @TempTbl
    select 
        T.c.value('(ID)[1]','uniqueidentifier') AS [ID],
        T.c.value('(COURSEID)[1]','uniqueidentifier') AS [COURSEID],
        T.c.value('(CLASSID)[1]','uniqueidentifier') AS [CLASSID],
        T.c.value('(TERMID)[1]','uniqueidentifier') AS [TERMID]
    from @COURSETERMS.nodes('/COURSETERMS/ITEM') T(c)

    declare @contextCache varbinary(128);
    declare @e int;

    -- cache current context information 

    set @contextCache = CONTEXT_INFO();

    -- set CONTEXT_INFO to @CHANGEAGENTID 

    if not @CHANGEAGENTID is null
        set CONTEXT_INFO @CHANGEAGENTID;

    -- delete any items that no longer exist in the XML table

    delete from dbo.[STUDENTCLASSMEETINGGROUP]
    from dbo.STUDENTCLASSMEETINGGROUP
        inner join dbo.STUDENTCOURSE on STUDENTCLASSMEETINGGROUP.STUDENTCOURSEID = STUDENTCOURSE.ID
        inner join dbo.CLASSMEETINGGROUP on STUDENTCLASSMEETINGGROUP.CLASSMEETINGGROUPID = CLASSMEETINGGROUP.ID
        inner join dbo.TERM on
            CLASSMEETINGGROUP.STARTDATE = TERM.STARTDATE and
            CLASSMEETINGGROUP.ENDDATE = TERM.ENDDATE
        left join @TempTbl COURSETERMS on
            STUDENTCOURSE.ID = COURSETERMS.ID and
            STUDENTCOURSE.COURSEID = COURSETERMS.COURSEID and
            CLASSMEETINGGROUP.CLASSID = COURSETERMS.CLASSID and
            TERM.ID = COURSETERMS.TERMID
    where COURSETERMS.ID is null
        and STUDENTCOURSE.STUDENTID = @STUDENTID
        and TERM.SESSIONID = @SESSIONID
        and STUDENTCLASSMEETINGGROUP.STATUSCODE = 0

    select @e=@@error;

    -- reset CONTEXT_INFO to previous value 

    if not @contextCache is null
        set CONTEXT_INFO @contextCache;

    if @e <> 0
        return 2;

    -- insert new items

    insert into [STUDENTCLASSMEETINGGROUP]
        ([ID],
        [STUDENTCOURSEID],
        [CLASSMEETINGGROUPID],
        ADDEDBYID, 
        CHANGEDBYID, 
        DATEADDED, 
        DATECHANGED)
    select
        newid(),
        COURSETERMS.ID,
        CLASSMEETINGGROUP.ID,
        @CHANGEAGENTID
        @CHANGEAGENTID
        @CHANGEDATE
        @CHANGEDATE
    from @TempTbl as COURSETERMS
        inner join dbo.STUDENTCOURSE on COURSETERMS.ID = STUDENTCOURSE.ID
        inner join dbo.TERM on COURSETERMS.TERMID = TERM.ID
        inner join dbo.CLASSMEETINGGROUP on
            CLASSMEETINGGROUP.CLASSID = COURSETERMS.CLASSID and 
            CLASSMEETINGGROUP.STARTDATE = TERM.STARTDATE and
            CLASSMEETINGGROUP.ENDDATE = TERM.ENDDATE
        left join dbo.STUDENTCLASSMEETINGGROUP on
            CLASSMEETINGGROUP.ID = STUDENTCLASSMEETINGGROUP.CLASSMEETINGGROUPID and
            STUDENTCLASSMEETINGGROUP.STUDENTCOURSEID = COURSETERMS.ID
    where STUDENTCLASSMEETINGGROUP.ID is null

    return 0