USP_STUDENTSKILL_ADDCOURSES

Add skill to multiple courses with date range and marking columns.

Parameters

Parameter Parameter Type Mode Description
@STUDENTSKILLS xml IN
@CHANGEAGENTID uniqueidentifier IN
@CURRENTDATE datetime IN
@STARTINACADEMICYEARNAMECODEID uniqueidentifier IN
@STOPAFTERACADEMICYEARNAMECODEID uniqueidentifier IN
@STUDENTSKILLMARKINGCOLUMNS xml IN
@STUDENTSKILLCOURSES xml IN

Definition

Copy


CREATE procedure dbo.USP_STUDENTSKILL_ADDCOURSES
(
    @STUDENTSKILLS xml,
    @CHANGEAGENTID uniqueidentifier = null,
    @CURRENTDATE datetime = null,
    @STARTINACADEMICYEARNAMECODEID uniqueidentifier,
    @STOPAFTERACADEMICYEARNAMECODEID uniqueidentifier = null,
    @STUDENTSKILLMARKINGCOLUMNS xml = null,
    @STUDENTSKILLCOURSES xml = null
)
as
begin

    set nocount on;

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

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

    declare @skillcourse table(ID uniqueidentifier, COURSEID uniqueidentifier, STUDENTSKILLID uniqueidentifier, STARTDATE date, ENDDATE date, MAXSEQUENCE integer, STUDENTSKILLSEQUENCE integer)
    declare @skillcourseMC table(ID uniqueidentifier, SKILLCOURSEID uniqueidentifier, MCID uniqueidentifier)

    -- add skill to all selected courses

    insert into @skillcourse 
        (ID, COURSEID, STUDENTSKILLID, STUDENTSKILLSEQUENCE)
        select
            newid(),
            c.value('COURSEID[1]', 'uniqueidentifier'),
            S.STUDENTSKILLID,
            S.SEQUENCE
        from @STUDENTSKILLCOURSES.nodes('/STUDENTSKILLCOURSES/ITEM') as T(c)        
        cross join
            (select c.value('ID[1]', 'uniqueidentifier') 'STUDENTSKILLID'
                c.value('SEQUENCE[1]', 'integer') 'SEQUENCE'
                from @STUDENTSKILLS.nodes('/STUDENTSKILLS/ITEM') as T(c)) S

    -- get max sequence currently on each course

    update SC
        set MAXSEQUENCE = 
            (select coalesce(max(STUDENTSKILLCOURSE.SEQUENCE), -1) from dbo.STUDENTSKILLCOURSE where SC.COURSEID = STUDENTSKILLCOURSE.COURSEID)
        from @skillcourse SC        

    -- get start date based on school and selected code table entry

    update SC
        set STARTDATE =
            ACADEMICYEAR.STARTDATE
        from
            @skillcourse SC
        inner join
            dbo.COURSE on SC.COURSEID = COURSE.ID
        inner join
            dbo.ACADEMICYEAR on COURSE.SCHOOLID = ACADEMICYEAR.SCHOOLID
        where
            ACADEMICYEAR.ACADEMICYEARNAMECODEID = @STARTINACADEMICYEARNAMECODEID

    -- get end date based on school and selected code table entry

    if (@STOPAFTERACADEMICYEARNAMECODEID is not null)
    begin
        update SC
        set ENDDATE =
            ACADEMICYEAR.ENDDATE
        from
            @skillcourse SC
        inner join
            dbo.COURSE on SC.COURSEID = COURSE.ID
        inner join
            dbo.ACADEMICYEAR on COURSE.SCHOOLID = ACADEMICYEAR.SCHOOLID
        where
            ACADEMICYEAR.ACADEMICYEARNAMECODEID = @STOPAFTERACADEMICYEARNAMECODEID
     end       

     if exists (select ID from @skillcourse where STARTDATE is null)
        raiserror('BBERR_STUDENTSKILLCOURSE_STARTDATE_ACADEMICYEARNOTAVAILABLE', 13, 1)

     if exists (select ID from @skillcourse where ENDDATE is null) and (@STOPAFTERACADEMICYEARNAMECODEID is not null)
        raiserror('BBERR_STUDENTSKILLCOURSE_ENDDATE_ACADEMICYEARNOTAVAILABLE', 13, 1)

    -- and add MC's to all skill courses just created

    if exists(select ID from @skillcourse)
    begin
        insert into @skillcourseMC
            select
                newid(),
                SC.ID,
                c.value('MARKINGCOLUMNDESCRIPTIONCODEID[1]', 'uniqueidentifier')
            from @skillcourse SC
                cross join @STUDENTSKILLMARKINGCOLUMNS.nodes('/STUDENTSKILLMARKINGCOLUMNS/ITEM') as T(c)
    end

    if (select count(*) from @skillcourse) > 0 and (select count(*) from @skillcourseMC) = 0
        raiserror('BBERR_STUDENTSKILLCOURSE_MARKINGCOLUMNS_REQUIRED', 13, 1)

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

    insert into dbo.STUDENTSKILLCOURSEMARKINGCOLUMN
        (ID, STUDENTSKILLCOURSEID, MARKINGCOLUMNDESCRIPTIONCODEID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
    select
        SCMC.ID,
        SCMC.SKILLCOURSEID,
        SCMC.MCID,
        @CHANGEAGENTID
        @CHANGEAGENTID
        @CURRENTDATE
        @CURRENTDATE
    from @skillcourseMC SCMC

end