USP_CLASSCATEGORY_EDIT

Used for inserting, updating, and deleting class categories

Parameters

Parameter Parameter Type Mode Description
@CLASSID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@CATEGORIES xml IN

Definition

Copy


CREATE procedure dbo.USP_CLASSCATEGORY_EDIT
(
    @CLASSID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier = null,
    @CATEGORIES 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 @temp table (
            ID uniqueidentifier NOT NULL,
            CLASSID uniqueidentifier NOT NULL,
            NAME nvarchar(60) NOT NULL,
            DEFAULTNAME nvarchar(60) NOT NULL,
            ISGRADED bit NOT NULL,
            GRADINGSCALEID uniqueidentifier NULL,
            MAXPOINTS decimal(14,2) NOT NULL,
            AVERAGINGMETHODCODE tinyint NOT NULL,
            TOTALGRADEPERCENTAGE decimal(14,2) NOT NULL
        );

        insert into @temp (
            ID,
            CLASSID,
            NAME,
            DEFAULTNAME,
            ISGRADED,
            GRADINGSCALEID,
            MAXPOINTS,
            AVERAGINGMETHODCODE,
            TOTALGRADEPERCENTAGE)
        select
            isnull(ID, NEWID()),
            @CLASSID,
            NAME,
            DEFAULTNAME,
            ISGRADED,
            GRADINGSCALEID,
            MAXPOINTS,
            AVERAGINGMETHODCODE,
            TOTALGRADEPERCENTAGE
        from dbo.UFN_CLASS_GETCATEGORIES_FROMITEMLISTXML(@CATEGORIES)

        if (select count(ID) from @temp) = 0 and (select USECATEGORYPERCENTAGES from dbo.CLASS where ID = @CLASSID) = 1
            raiserror('BBERR_CLASSCATEGORY_PERCENTAGESNOTEQUALHUNDRED', 13,1);

        --Cache current context information 

        declare @CONTEXTCACHE varbinary(128); 
        set @CONTEXTCACHE = CONTEXT_INFO(); 
        set CONTEXT_INFO @CHANGEAGENTID

        merge dbo.CLASSCATEGORY as target
        using (select
                ID,
                CLASSID,
                NAME,
                DEFAULTNAME,
                ISGRADED,
                GRADINGSCALEID,
                MAXPOINTS,
                AVERAGINGMETHODCODE,
                TOTALGRADEPERCENTAGE
                from @temp) as source (
                    ID,
                    CLASSID,
                    NAME,
                    DEFAULTNAME,
                    ISGRADED,
                    GRADINGSCALEID,
                    MAXPOINTS,
                    AVERAGINGMETHODCODE,
                    TOTALGRADEPERCENTAGE)
        on (target.ID = source.ID and target.CLASSID = @CLASSID)
        when not matched by source and target.CLASSID = @CLASSID then DELETE
        when matched then
            update set
                ID = source.ID,
                CLASSID = source.CLASSID,
                NAME = source.NAME,
                DEFAULTNAME = source.DEFAULTNAME,
                ISGRADED = source.ISGRADED,
                GRADINGSCALEID = source.GRADINGSCALEID,
                MAXPOINTS = source.MAXPOINTS,
                AVERAGINGMETHODCODE = source.AVERAGINGMETHODCODE,
                TOTALGRADEPERCENTAGE = source.TOTALGRADEPERCENTAGE,
                CHANGEDBYID = @CHANGEAGENTID,
                DATECHANGED = @CURRENTDATE
        when not matched then
            insert (
                ID,
                CLASSID,
                NAME,
                DEFAULTNAME,
                ISGRADED,
                GRADINGSCALEID,
                MAXPOINTS,
                AVERAGINGMETHODCODE,
                TOTALGRADEPERCENTAGE,
                ADDEDBYID,
                DATEADDED,
                CHANGEDBYID,
                DATECHANGED)
            values (
                source.ID,
                source.CLASSID,
                source.NAME,
                source.DEFAULTNAME,
                source.ISGRADED,
                source.GRADINGSCALEID,
                source.MAXPOINTS,
                source.AVERAGINGMETHODCODE,
                source.TOTALGRADEPERCENTAGE,
                @CHANGEAGENTID,
                @CURRENTDATE,
                @CHANGEAGENTID,
                @CURRENTDATE);

       if not @CONTEXTCACHE is null 
        set CONTEXT_INFO @CONTEXTCACHE;
    end try

    begin catch
        exec dbo.USP_RAISE_ERROR
        return 1
    end catch

    return 0;