TR_STUDENTMARKINGCOLUMNGRADE_INSERTUPDATE_VALIDGRADES

Definition

Copy


                    create trigger TR_STUDENTMARKINGCOLUMNGRADE_INSERTUPDATE_VALIDGRADES
                    on dbo.STUDENTMARKINGCOLUMNGRADE
                    after insert, update
                    not for replication        
                    as begin

                        -- Check that StudentClassMeetingGroup and CourseGradingMarkingColumn IDs match up. If we are trying to insert a grade for

                        --    one class, but passing in CourseGradingID for a completely different course, that is not a valid grade.

                        -- This could happen thru the API, but shouldn't happen thru our UI.


                        if exists 
                            (select * 
                            from Inserted I
                                left join dbo.STUDENTCLASSMEETINGGROUP on I.STUDENTCLASSMEETINGGROUPID = STUDENTCLASSMEETINGGROUP.ID
                                left join dbo.CLASSMEETINGGROUP on CLASSMEETINGGROUP.ID = STUDENTCLASSMEETINGGROUP.CLASSMEETINGGROUPID
                                left join dbo.CLASS on CLASSMEETINGGROUP.CLASSID = CLASS.ID
                                left join dbo.V_COURSEGRADING as COURSEGRADING on CLASS.COURSEID = COURSEGRADING.COURSEID
                                left join dbo.COURSEGRADINGMARKINGCOLUMN on COURSEGRADING.ID = COURSEGRADINGMARKINGCOLUMN.COURSEGRADINGID
                                    and I.COURSEGRADINGMARKINGCOLUMNID = COURSEGRADINGMARKINGCOLUMN.ID
                            where (CLASSMEETINGGROUP.STARTDATE >= COURSEGRADING.STARTDATE and CLASSMEETINGGROUP.ENDDATE <= COURSEGRADING.ENDDATE) and
                                (STUDENTCLASSMEETINGGROUP.ID is null or
                                COURSEGRADINGMARKINGCOLUMN.ID is null))

                            raiserror('BBERR_STUDENTMARKINGCOLUMNGRADE_UNRELATED_IDS', 13, 1)

                        -- GradeTypeCodes and ValuesAllowedCodes:  1 = Grade, 2 = Numeric


                        -- Check that Letter Grades are valid

                        if exists (
                            select * 
                            from Inserted I
                                inner join dbo.COURSEGRADINGMARKINGCOLUMN on I.COURSEGRADINGMARKINGCOLUMNID = COURSEGRADINGMARKINGCOLUMN.ID
                                left join dbo.TRANSLATIONTABLEGRADE on COURSEGRADINGMARKINGCOLUMN.TRANSLATIONTABLEID = TRANSLATIONTABLEGRADE.TRANSLATIONTABLEID
                                    and I.TRANSLATIONTABLEGRADEID = TRANSLATIONTABLEGRADE.ID
                            where 
                                -- Blank grades are always valid

                                I.GRADEISBLANK = 0 and
                                -- And we are only checking Letter grades with this sql

                                I.GRADETYPECODE = 1 and
                                -- Invalid criteria. If we get a record back now, it is invalid.

                                -- (grade not in the translation table) OR (MC not graded) OR 

                                --     (MC doesn't allow letter grades) OR (a Numeric Grade value is also specified)

                                (TRANSLATIONTABLEGRADE.ID is null or
                                COURSEGRADINGMARKINGCOLUMN.GRADED = 0 or
                                COURSEGRADINGMARKINGCOLUMN.VALUESALLOWEDCODE = 2 or
                                I.NUMERICGRADEVALUE is not null))

                            raiserror('BBERR_STUDENTMARKINGCOLUMNGRADE_INVALID_GRADE', 13, 1)

                        -- Check that Numeric Grades are valid

                        if exists (
                            select * 
                            from Inserted I
                                inner join dbo.COURSEGRADINGMARKINGCOLUMN on I.COURSEGRADINGMARKINGCOLUMNID = COURSEGRADINGMARKINGCOLUMN.ID
                                left join dbo.TRANSLATIONTABLE on COURSEGRADINGMARKINGCOLUMN.TRANSLATIONTABLEID = TRANSLATIONTABLE.ID
                            where 
                                -- Blank grades are always valid

                                I.GRADEISBLANK = 0 and
                                -- And we are only checking Numeric grades with this sql

                                I.GRADETYPECODE = 2 and
                                -- Invalid criteria. If we get a record back now, it is invalid.

                                -- (grade not in the translation table) OR (MC not graded) OR 

                                --     (MC doesn't allow numeric grades) OR (a Letter Grade value is also specified)

                                (TRANSLATIONTABLE.ID is null or 
                                    not I.NUMERICGRADEVALUE between TRANSLATIONTABLE.LOWESTSCOREALLOWED and TRANSLATIONTABLE.HIGHESTSCOREALLOWED or
                                COURSEGRADINGMARKINGCOLUMN.GRADED = 0 or
                                COURSEGRADINGMARKINGCOLUMN.VALUESALLOWEDCODE = 1 or
                                I.TRANSLATIONTABLEGRADEID is not null))

                            raiserror('BBERR_STUDENTMARKINGCOLUMNGRADE_INVALID_GRADE', 13, 1)

                    end