USP_STUDENTCLASS_ADD

Add a student to a class

Parameters

Parameter Parameter Type Mode Description
@STUDENTID uniqueidentifier IN
@CLASSID uniqueidentifier IN
@ALLOWOVERTARGET bit IN
@CHANGEAGENTID uniqueidentifier IN
@STUDENTCOURSEID uniqueidentifier IN
@STARTTERMID uniqueidentifier IN

Definition

Copy


CREATE procedure dbo.USP_STUDENTCLASS_ADD
(
    @STUDENTID uniqueidentifier,
    @CLASSID uniqueidentifier,
    @ALLOWOVERTARGET bit,
    @CHANGEAGENTID uniqueidentifier,
    @STUDENTCOURSEID uniqueidentifier = null,    -- Used by Transfer Class

    @STARTTERMID uniqueidentifier = null
)
as
begin

    if @CHANGEAGENTID is null  
    exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output

    declare @CURRENTDATE datetime
    set @CURRENTDATE = getdate()

    begin try
        declare @TARGETSIZE int
        declare @MAXSIZE int
        declare @NUMBERENROLLED int

        declare @CLASS_STARTDATE date
        declare @CLASS_ENDDATE date
        declare @COURSEID uniqueidentifier

        select
           @TARGETSIZE = CLASS.CLASSSIZETARGET,
           @MAXSIZE = case when CLASS.CLASSSIZEMAXIMUM = 0 then null else Cast(COURSE.CLASSSIZEMAXIMUM as varchar(10)) end,
           @NUMBERENROLLED = dbo.UFN_CLASS_GETNUMBERENROLLED(@CLASSID),
           @CLASS_STARTDATE = CLASS.STARTDATE,
           @CLASS_ENDDATE = CLASS.ENDDATE,
           @COURSEID = CLASS.COURSEID
        from dbo.CLASS
            left join dbo.COURSE on dbo.CLASS.COURSEID = dbo.COURSE.ID
        where dbo.CLASS.ID = @CLASSID

        if not exists (
            select 1
            from dbo.EDUCATIONALHISTORY
                inner join dbo.STUDENTPROGRESSION on EDUCATIONALHISTORY.ID = STUDENTPROGRESSION.ENROLLMENTID
            where EDUCATIONALHISTORY.CONSTITUENTID = @STUDENTID
                and STUDENTPROGRESSION.STARTDATE <= @CLASS_STARTDATE
                and STUDENTPROGRESSION.ENDDATE >= @CLASS_ENDDATE 
            )
        begin
            raiserror('BBERR_STUDENTCLASS_ELIGIBLESTUDENT', 13, 1);
        end

        if @NUMBERENROLLED >= @MAXSIZE
            raiserror('BBERR_STUDENTCLASS_MAXSIZE_EXCEEDED', 13, 1);

        if @NUMBERENROLLED >= @TARGETSIZE and @ALLOWOVERTARGET = 0
            raiserror('BBERR_STUDENTCLASS_TARGETSIZE_EXCEEDED', 13, 1);

        declare @WITHDRAWN_TRANSFERRED int = 0

        if @STUDENTCOURSEID is null
        begin
            -- Select the existing class enrollment if one exists,

            --   to prevent adding the student to a class they are already in


            select
                @STUDENTCOURSEID = STUDENTCOURSE.ID,
                @WITHDRAWN_TRANSFERRED = count(case when STUDENTCLASSMEETINGGROUP.STATUSCODE in (2,3) then 1 else null end) over (partition by STUDENTCLASSMEETINGGROUP.STUDENTCOURSEID)
            from dbo.STUDENTCOURSE
                inner join dbo.STUDENTCLASSMEETINGGROUP on STUDENTCOURSE.ID = STUDENTCLASSMEETINGGROUP.STUDENTCOURSEID
                inner join dbo.CLASSMEETINGGROUP on STUDENTCLASSMEETINGGROUP.CLASSMEETINGGROUPID = CLASSMEETINGGROUP.ID
            where STUDENTCOURSE.COURSEID = @COURSEID
                and STUDENTCOURSE.STUDENTID = @STUDENTID
                and CLASSMEETINGGROUP.CLASSID = @CLASSID
        end
        else
        begin
            -- Handle the case where we transfer from one class to another, where we were previously enrolled with the current student course record

            select
                @WITHDRAWN_TRANSFERRED = count(case when STUDENTCLASSMEETINGGROUP.STATUSCODE in (2,3) then 1 else null end) over (partition by STUDENTCLASSMEETINGGROUP.STUDENTCOURSEID)
            from dbo.STUDENTCLASSMEETINGGROUP
                inner join dbo.CLASSMEETINGGROUP on STUDENTCLASSMEETINGGROUP.CLASSMEETINGGROUPID = CLASSMEETINGGROUP.ID
            where STUDENTCLASSMEETINGGROUP.STUDENTCOURSEID = @STUDENTCOURSEID
                and CLASSMEETINGGROUP.CLASSID = @CLASSID
        end

        -- If the student is being added to a class they withdrew/transferred from, simply reactivate the old enrollment.

        if @WITHDRAWN_TRANSFERRED > 0
        begin
            -- handle updating the data

            update dbo.STUDENTCLASSMEETINGGROUP set
                STATUSCODE = 0,
                STATUSDATE = null,
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = @CURRENTDATE
            from  dbo.STUDENTCOURSE
                inner join dbo.STUDENTCLASSMEETINGGROUP on STUDENTCOURSE.ID = STUDENTCLASSMEETINGGROUP.STUDENTCOURSEID
                inner join dbo.CLASSMEETINGGROUP on STUDENTCLASSMEETINGGROUP.CLASSMEETINGGROUPID = CLASSMEETINGGROUP.ID
            where STUDENTCOURSE.COURSEID = @COURSEID
                and STUDENTCOURSE.STUDENTID = @STUDENTID
                and CLASSMEETINGGROUP.CLASSID = @CLASSID
        end
        else
        begin
            -- Select the first non-fulfilled request if one exists

            if @STUDENTCOURSEID is null
            begin
                select @STUDENTCOURSEID = STUDENTCOURSE.ID
                from dbo.STUDENTCOURSE
                    left join dbo.STUDENTCOURSEREQUEST on STUDENTCOURSE.ID = STUDENTCOURSEREQUEST.ID
                where STUDENTCOURSE.COURSEID = @COURSEID and STUDENTCOURSE.STUDENTID = @STUDENTID
                    and STUDENTCOURSEREQUEST.STARTDATE <= @CLASS_STARTDATE
                    and STUDENTCOURSEREQUEST.ENDDATE >= @CLASS_ENDDATE
                    and (
                            STUDENTCOURSEREQUEST.CLASSSTARTDATE is null or
                            STUDENTCOURSEREQUEST.CLASSSTARTDATE = @CLASS_STARTDATE
                        )
                    and not exists (select ID from dbo.STUDENTCLASSMEETINGGROUP where STUDENTCOURSEID = STUDENTCOURSE.ID)
            end

            if @STUDENTCOURSEID is null
            begin
                set @STUDENTCOURSEID = newid()

                -- add the student to the student course

                insert into dbo.STUDENTCOURSE
                (
                    ID,
                    STUDENTID,
                    COURSEID,
                    ADDEDBYID,
                    CHANGEDBYID,
                    DATEADDED,
                    DATECHANGED
                )
                values
                (
                    @STUDENTCOURSEID,
                    @STUDENTID,
                    @COURSEID,
                    @CHANGEAGENTID,
                    @CHANGEAGENTID,
                    @CURRENTDATE,
                    @CURRENTDATE
                )
            end

            declare @TERM_STARTDATE date
            if @STARTTERMID is not null
                select @TERM_STARTDATE = TERM.STARTDATE
                from dbo.TERM
                where TERM.ID = @STARTTERMID

            -- handle inserting the data

            insert into dbo.STUDENTCLASSMEETINGGROUP
            (
                ID,
                STUDENTCOURSEID,
                CLASSMEETINGGROUPID,
                ADDEDBYID,
                CHANGEDBYID,
                DATEADDED,
                DATECHANGED
            )
            select
                newid(),
                @STUDENTCOURSEID,
                ID,
                @CHANGEAGENTID,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CURRENTDATE
            from dbo.CLASSMEETINGGROUP
            where CLASSMEETINGGROUP.CLASSID = @CLASSID
                and (@STARTTERMID is null or CLASSMEETINGGROUP.STARTDATE >= @TERM_STARTDATE)
        end
    end try

    begin catch
        exec dbo.USP_RAISE_ERROR
        return 1
    end catch

end