USP_DATAFORMTEMPLATE_ADD_COURSESTUDENTSKILL

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

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT The output parameter indicating the ID of the record added.
@COPYSTUDENTSKILLID uniqueidentifier IN Copy existing skill
@COURSEID uniqueidentifier IN Input parameter indicating the context ID for the record being added.
@CHANGEAGENTID uniqueidentifier IN Input parameter indicating the ID of the change agent invoking the procedure.
@STUDENTSKILLRATINGGROUPID uniqueidentifier IN Ratings table
@COURSESEARCHID uniqueidentifier IN Add to course
@STARTINACADEMICYEARNAMECODEID uniqueidentifier IN Start in
@STOPAFTERACADEMICYEARNAMECODEID uniqueidentifier IN Stop after
@STUDENTSKILLCOURSEMARKINGCOLUMNS xml IN Marking Columns
@STUDENTSKILLS xml IN Skills

Definition

Copy


CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_COURSESTUDENTSKILL
(
    @ID uniqueidentifier = null output,
    @COPYSTUDENTSKILLID uniqueidentifier = null,
    @COURSEID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
    @STUDENTSKILLRATINGGROUPID uniqueidentifier,
    @COURSESEARCHID uniqueidentifier = null,
    @STARTINACADEMICYEARNAMECODEID uniqueidentifier,
    @STOPAFTERACADEMICYEARNAMECODEID uniqueidentifier = null,
    @STUDENTSKILLCOURSEMARKINGCOLUMNS xml,
    @STUDENTSKILLS xml
)
as

set nocount on;

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

declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()

begin try

    declare @SKILLCOURSE table(STUDENTSKILLCOURSEID uniqueidentifier, STUDENTSKILLID uniqueidentifier, 
                                NAME nvarchar(400), STUDENTSKILLCATEGORYCODEID uniqueidentifier, 
                                SEQUENCE integer primary key identity)
    declare @SKILLCOURSEMC table(ID uniqueidentifier, SKILLCOURSEID uniqueidentifier, MCID uniqueidentifier)

    insert into @SKILLCOURSE
        (STUDENTSKILLCOURSEID, STUDENTSKILLID, NAME, STUDENTSKILLCATEGORYCODEID)
    select
        newid(),
        newid(),        
        T.c.value('(NAME)[1]','nvarchar(400)') AS 'NAME',
        T.c.value('(STUDENTSKILLCATEGORYCODEID)[1]','uniqueidentifier') AS 'STUDENTSKILLCATEGORYCODEID'
    from @STUDENTSKILLS.nodes('/STUDENTSKILLS/ITEM') T(c)      

    -- handle inserting the data

    insert into dbo.STUDENTSKILL
        (ID, STUDENTSKILLRATINGGROUPID, NAME, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, STUDENTSKILLCATEGORYCODEID)
    select
        SC.STUDENTSKILLID,
        @STUDENTSKILLRATINGGROUPID,
        SC.NAME,
        @CHANGEAGENTID,
        @CHANGEAGENTID,
        @CURRENTDATE,
        @CURRENTDATE,
        SC.STUDENTSKILLCATEGORYCODEID
    from
        @SKILLCOURSE SC

    --If a contextID is not passed in, course search field will replace the course label

    if @COURSEID = '00000000-0000-0000-0000-000000000000'
    begin
        if (@COURSESEARCHID is not null) and (@COURSESEARCHID <> '00000000-0000-0000-0000-000000000000')
            set @COURSEID = @COURSESEARCHID
        else
        begin
            raiserror('BBERR_STUDENTSKILLCOURSE_COURSEIDNOTFOUND', 13, 1);
            return 1;            
        end
    end

    -- add a skill course record for all the skills

    if exists(select STUDENTSKILLID from @SKILLCOURSE)
    begin                    
        --Get the dates

        declare @STARTDATE datetime = null, @ENDDATE datetime = null

        if @STARTINACADEMICYEARNAMECODEID is not null
            select @STARTDATE = ACADEMICYEAR.STARTDATE from dbo.ACADEMICYEAR 
            inner join dbo.COURSE on ACADEMICYEAR.SCHOOLID = COURSE.SCHOOLID
            where ACADEMICYEAR.ACADEMICYEARNAMECODEID = @STARTINACADEMICYEARNAMECODEID and
                COURSE.ID = @COURSEID

        if @STOPAFTERACADEMICYEARNAMECODEID is not null
            select @ENDDATE = ACADEMICYEAR.ENDDATE from dbo.ACADEMICYEAR 
            inner join dbo.COURSE on ACADEMICYEAR.SCHOOLID = COURSE.SCHOOLID
            where ACADEMICYEAR.ACADEMICYEARNAMECODEID = @STOPAFTERACADEMICYEARNAMECODEID and
                COURSE.ID = @COURSEID

        if (@STARTDATE is null
            raiserror('BBERR_STUDENTSKILLCOURSE_STARTDATE_ACADEMICYEARNOTAVAILABLE', 13, 1)

        if ((@ENDDATE is null) and (@STOPAFTERACADEMICYEARNAMECODEID is not null))
            raiserror('BBERR_STUDENTSKILLCOURSE_ENDDATE_ACADEMICYEARNOTAVAILABLE', 13, 1)

        declare @MAXSEQUENCE integer
        set @MAXSEQUENCE = (select coalesce(max(SSC.SEQUENCE), -1) from dbo.STUDENTSKILLCOURSE SSC where SSC.COURSEID=@COURSEID

        insert into dbo.STUDENTSKILLCOURSE
            (ID, COURSEID, STUDENTSKILLID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, STARTDATE, ENDDATE, SEQUENCE)
        select
            SC.STUDENTSKILLCOURSEID,
            @COURSEID,
            SC.STUDENTSKILLID,
            @CHANGEAGENTID
            @CHANGEAGENTID
            @CURRENTDATE
            @CURRENTDATE,
            @STARTDATE
            @ENDDATE,
            @MAXSEQUENCE + SC.SEQUENCE
        from @SKILLCOURSE SC

        insert into dbo.STUDENTSKILLCOURSEMARKINGCOLUMN
            (ID, STUDENTSKILLCOURSEID, MARKINGCOLUMNDESCRIPTIONCODEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
        select
            newid(),
            SC.STUDENTSKILLCOURSEID,
            c.value('MARKINGCOLUMNDESCRIPTIONCODEID[1]', 'uniqueidentifier'),
            @CHANGEAGENTID
            @CHANGEAGENTID
            @CURRENTDATE
            @CURRENTDATE
        from @SKILLCOURSE SC
            cross join @STUDENTSKILLCOURSEMARKINGCOLUMNS.nodes('/STUDENTSKILLCOURSEMARKINGCOLUMNS/ITEM') as T(c)
    end
    else        
        raiserror('BBERR_STUDENTSKILLCOURSE_SKILLS_REQUIRED', 13, 1)

end try

begin catch
    exec dbo.USP_RAISE_ERROR
    return 1
end catch

return 0