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