diff --git a/db/StoredProcedures.sql b/db/StoredProcedures.sql index e9aa59517232706c6fabc2d25bc1885998b02f3b..cd70d23540bf6f2f3624956df4925fbebb540879 100644 --- a/db/StoredProcedures.sql +++ b/db/StoredProcedures.sql @@ -1325,7 +1325,8 @@ CREATE FUNCTION `SetStudentRate`( `TeacherID` INT, `Rate` INT ) RETURNS int(11) NO SQL -BEGIN +BEGIN + -- TODO: log DECLARE checker, discID, groupID, semID, rateID INT; SET discID = -1; SET groupID = -1; @@ -1680,41 +1681,67 @@ END // +DROP FUNCTION IF EXISTS ChangeDisciplineSubject// +CREATE FUNCTION `ChangeDisciplineSubject` ( `TeacherID` INT, + `DisciplineID` INT, + `SubjectID` INT + ) RETURNS int(11) + NO SQL +BEGIN + DECLARE checker INT; + + SELECT disciplines.ID + INTO checker + FROM `disciplines` + WHERE disciplines.ID = DisciplineID AND + disciplines.AuthorID = TeacherID + LIMIT 1; + IF NOT (checker > 0) THEN + RETURN -1; + END IF; -DROP FUNCTION IF EXISTS ChangeDiscipline// -CREATE FUNCTION `ChangeDiscipline` ( `TeacherID` INT, - `DisciplineID` INT, - `ExamType` VARCHAR(30), - `LectionCount` INT, - `PracticeCount` INT, - `Grade` INT, - `SubjectID` INT - ) RETURNS int(11) + SELECT subjects.ID + INTO checker + FROM `subjects` + WHERE subjects.ID = SubjectID + LIMIT 1; + IF NOT (checker > 0) THEN + RETURN -1; + END IF; + + UPDATE `disciplines` + SET disciplines.SubjectID = SubjectID + WHERE disciplines.ID = DisciplineID; + + RETURN 0; +END // + +DROP FUNCTION IF EXISTS ChangeDisciplineGrade// +CREATE FUNCTION `ChangeDisciplineGrade` ( `TeacherID` INT, + `DisciplineID` INT, + `Grade` INT + ) RETURNS int(11) NO SQL BEGIN DECLARE checker INT; + + -- TODO: Grade IF NOT (Grade > 0) THEN RETURN -1; END IF; - SELECT disciplines_teachers.ID + SELECT disciplines.ID INTO checker - FROM `disciplines_teachers` - WHERE disciplines_teachers.DisciplineID = DisciplineID AND disciplines_teachers.TeacherID = TeacherID + FROM `disciplines` + WHERE disciplines.ID = DisciplineID AND + disciplines.AuthorID = TeacherID LIMIT 1; IF NOT (checker > 0) THEN RETURN -1; END IF; - SET checker = -1; - SELECT rating_table.ID - INTO checker - FROM `rating_table` - INNER JOIN `submodules` ON submodules.ID = rating_table.SubmoduleID - INNER JOIN `modules` ON modules.ID = submodules.ModuleID - WHERE modules.DisciplineID = DisciplineID - LIMIT 1; + SET checker = InternalCheckRate(DisciplineID); IF checker > 0 THEN RETURN -1; END IF; @@ -1735,25 +1762,99 @@ BEGIN UPDATE `disciplines` - SET disciplines.ExamType = ExamType, - disciplines.LectionCount = LectionCount, - disciplines.PracticeCount = PracticeCount, - disciplines.Grade = Grade, - disciplines.SubjectID = SubjectID + SET disciplines.Grade = Grade WHERE disciplines.ID = DisciplineID; + RETURN 0; - -- TODO: добавить проверки на изменение - IF ExamType = 'exam' THEN - SET checker = AddModuleExam(TeacherID, DisciplineID); - ELSE - SET checker = DeleteModuleExam(TeacherID, DisciplineID); +END // + + +DROP FUNCTION IF EXISTS ChangeDisciplineControl// +CREATE FUNCTION `ChangeDisciplineControl` ( `TeacherID` INT, + `DisciplineID` INT, + `ExamType` VARCHAR(30) + ) RETURNS int(11) + NO SQL +BEGIN + DECLARE checker INT; + + + SELECT disciplines.ID + INTO checker + FROM `disciplines` + WHERE disciplines.ID = DisciplineID AND + disciplines.AuthorID = TeacherID + LIMIT 1; + IF NOT (checker > 0) THEN + RETURN -1; END IF; + SET checker = InternalCheckRate(DisciplineID); + IF checker > 0 THEN + RETURN -1; + END IF; + + SELECT disciplines.ExamType + INTO checker + FROM `disciplines` + WHERE disciplines.ID = DisciplineID + LIMIT 1; + + + IF (checker = 0 AND ExamType = 'credit') OR + (checker = 1 AND ExamType = 'exam') + THEN + UPDATE `disciplines` + SET disciplines.ExamType = ExamType + WHERE disciplines.ID = DisciplineID; + + IF ExamType = 'exam' THEN + SET checker = AddModuleExam(TeacherID, DisciplineID); + ELSE + SET checker = DeleteModuleExam(TeacherID, DisciplineID); + END IF; + END IF; RETURN 0; +END // + +DROP FUNCTION IF EXISTS ChangeDisciplineHours// +CREATE FUNCTION `ChangeDisciplineHours` ( `TeacherID` INT, + `DisciplineID` INT, + `Hours` INT, + `Type` INT + -- Type: 0 - Practice Hours, 1 - Lection Hours + ) RETURNS int(11) + NO SQL +BEGIN + DECLARE checker INT; + + SELECT disciplines.ID + INTO checker + FROM `disciplines` + WHERE disciplines.ID = DisciplineID AND + disciplines.AuthorID = TeacherID + LIMIT 1; + IF NOT (checker > 0) THEN + RETURN -1; + END IF; + -- TODO: switch + IF Type = 0 THEN + UPDATE `disciplines` + SET disciplines.PracticeCount = Hours + WHERE disciplines.ID = DisciplineID; + END IF; + IF Type = 1 THEN + UPDATE `disciplines` + SET disciplines.LectionCount = Hours + WHERE disciplines.ID = DisciplineID; + END IF; + + RETURN 0; END // + DROP FUNCTION IF EXISTS BindGroup// CREATE FUNCTION `BindGroup` ( `AccessedTeacherID` INT, `DisciplineID` INt,