diff --git a/db/StoredProcedures.sql b/db/StoredProcedures.sql index d0feb3a6ed53c653ba6caf553716b4bf32a25b7c..e9aa59517232706c6fabc2d25bc1885998b02f3b 100644 --- a/db/StoredProcedures.sql +++ b/db/StoredProcedures.sql @@ -1107,7 +1107,7 @@ DROP PROCEDURE IF EXISTS GetDisciplineInfoByID// CREATE PROCEDURE `GetDisciplineInfoByID`( IN `DiscID` INT ) NO SQL BEGIN - + -- TODO: Inline InternalCheckRate SELECT disciplines.AuthorID, disciplines.Grade AS 'DisciplineGrade', disciplines.ExamType, @@ -1326,44 +1326,41 @@ CREATE FUNCTION `SetStudentRate`( `TeacherID` INT, RETURNS int(11) NO SQL BEGIN - DECLARE checker, discID, groupID, semID INT; + DECLARE checker, discID, groupID, semID, rateID INT; SET discID = -1; SET groupID = -1; - SELECT disciplines.ID + SELECT modules.DisciplineID INTO discID FROM `submodules` - INNER JOIN `modules` ON submodules.ModuleID = modules.ID - INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID + INNER JOIN `modules` ON submodules.ModuleID = modules.ID WHERE submodules.ID = SubmoduleID LIMIT 1; + IF NOT (discID>0) THEN + RETURN -1; + END IF; - SELECT disciplines.ID - INTO checker - FROM `disciplines` - INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND - disciplines_teachers.TeacherID = TeacherID - WHERE disciplines.ID = discID + SELECT disciplines_teachers.ID + INTO checker + FROM `disciplines_teachers` + WHERE disciplines_teachers.DisciplineID = discID AND + disciplines_teachers.TeacherID = TeacherID LIMIT 1; IF NOT (checker > 0) THEN RETURN -1; END IF; - SELECT COUNT(rating_table.ID) - INTO checker - FROM `rating_table` - WHERE rating_table.SubmoduleID = SubmoduleID AND - rating_table.TeacherID = TeacherID AND - rating_table.StudentID = StudentID; - IF NOT (checker = 0) THEN - RETURN -1; - END IF; + SELECT students.StudyGroupID + INTO groupID + FROM `students` + WHERE students.ID = StudentID + LIMIT 1; - SELECT students.StudyGroupID INTO groupID FROM `students` WHERE students.ID = StudentID LIMIT 1; SET semID = GetCurSemesterID(); - - SELECT disciplines.ID INTO checker + SET checker = -1; + SELECT disciplines.ID + INTO checker FROM `disciplines` LEFT JOIN `disciplines_groups` ON disciplines_groups.DisciplineID = disciplines.ID AND disciplines_groups.StudyGroupID = groupID @@ -1375,106 +1372,36 @@ BEGIN ((disciplines_students.Type IS NULL OR disciplines_students.Type != 'detach') AND disciplines_groups.StudyGroupID = groupID ) ) LIMIT 1; - IF NOT (checker > 0) THEN RETURN -1; END IF; - - INSERT INTO `rating_table` ( rating_table.StudentID, rating_table.TeacherID, rating_table.SubmoduleID, rating_table.Rate, rating_table.Date ) - VALUES ( StudentID, TeacherID, SubmoduleID, Rate, CURDATE() ); - RETURN 0; -END // --- Рзменение баллов для данного студента -DROP FUNCTION IF EXISTS ChangeStudentRate// -CREATE FUNCTION `ChangeStudentRate` ( `TeacherID` INT, - `StudentID` INT, - `SubmoduleID` INT, - `Rate` INT - ) RETURNS int(11) - NO SQL -BEGIN - DECLARE checker, discID, OldVal, accID, groupID, rateID, semID INT; - SET discID = -1; - SET groupID = -1; - - SELECT disciplines.ID - INTO discID - FROM `submodules` - INNER JOIN `modules` ON submodules.ModuleID = modules.ID - INNER JOIN `disciplines` ON disciplines.ID = modules.DisciplineID - WHERE submodules.ID = SubmoduleID - LIMIT 1; - - SELECT disciplines.ID - INTO checker - FROM `disciplines` - INNER JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = disciplines.ID AND - disciplines_teachers.TeacherID = TeacherID - WHERE disciplines.ID = discID + SELECT rating_table.ID + INTO rateID + FROM `rating_table` + WHERE rating_table.SubmoduleID = SubmoduleID AND + rating_table.StudentID = StudentID LIMIT 1; + IF rateID > 0 THEN + UPDATE `rating_table` + SET rating_table.TeacherID = TeacherID, + rating_table.Rate = Rate, + rating_table.Date = CURDATE() + WHERE rating_table.ID = rateID; - - IF checker > 0 THEN - SELECT rating_table.ID - INTO rateID - FROM `rating_table` - WHERE rating_table.SubmoduleID = SubmoduleID AND - rating_table.TeacherID = TeacherID AND - rating_table.StudentID = StudentID - LIMIT 1; - - IF checker > 0 THEN - SELECT students.StudyGroupID INTO groupID FROM `students` WHERE students.ID = StudentID LIMIT 1; - SET semID = GetCurSemesterID(); - - SELECT disciplines.ID INTO checker - FROM `disciplines` - LEFT JOIN `disciplines_groups` ON disciplines_groups.DisciplineID = disciplines.ID AND - disciplines_groups.StudyGroupID = groupID - LEFT JOIN `disciplines_students` ON disciplines_students.DisciplineID = disciplines.ID AND - disciplines_students.StudentID = StudentID - WHERE disciplines.SubjectID = SubjectID AND - disciplines.SemesterID = semID AND - ( disciplines_students.Type = 'attach' OR - ((disciplines_students.Type IS NULL OR disciplines_students.Type != 'detach') AND disciplines_groups.StudyGroupID = groupID ) - ) - LIMIT 1; - - IF checker > 0 THEN - SELECT rating_table.Rate - INTO OldVal - FROM `rating_table` - WHERE rating_table.ID = rateID - LIMIT 1; - - - SELECT accounts.ID - INTO accID - FROM `teachers` - INNER JOIN `accounts` ON teachers.AccountID = accounts.ID - WHERE teachers.ID = TeacherID - LIMIT 1; - - INSERT INTO `logs` ( logs.RatingTableID, logs.AccountID, logs.OldValue, logs.NewValue, logs.Date ) - VALUES ( rateID, accID, OldVal, Rate, NOW() ); - - - UPDATE `rating_table` - SET rating_table.Rate = Rate - WHERE rating_table.ID = rateID; - - RETURN 0; - - - END IF; - END IF; + ELSE + INSERT INTO `rating_table` ( rating_table.StudentID, + rating_table.TeacherID, + rating_table.SubmoduleID, + rating_table.Rate, + rating_table.Date + ) + VALUES ( StudentID, TeacherID, SubmoduleID, Rate, CURDATE() ); END IF; - RETURN -1; -END // - + RETURN 0; +END //