diff --git a/db/StoredFunctions.sql b/db/StoredFunctions.sql index f3c1503736dc82de37a87c64b9f348b9bdda1d84..2e17a8d2c57169531fc1188af5a2b66cdc475319 100644 --- a/db/StoredFunctions.sql +++ b/db/StoredFunctions.sql @@ -805,6 +805,22 @@ END // +DROP FUNCTION IF EXISTS GetDisciplineSemesterID// +CREATE FUNCTION `GetDisciplineSemesterID` ( + `pDisciplineID` INT +) RETURNS int(11) + NO SQL +BEGIN + DECLARE vSemesterID INT DEFAULT -1; + + SELECT disciplines.SemesterID INTO vSemesterID + FROM `disciplines` + WHERE disciplines.ID = pDisciplineID + LIMIT 1; + + RETURN vSemesterID; +END // + DROP FUNCTION IF EXISTS AddDiscipline// DROP FUNCTION IF EXISTS Discipline_Create// CREATE FUNCTION `Discipline_Create` ( diff --git a/db/StoredProcedures.sql b/db/StoredProcedures.sql index 9cf8beaad31f1b0cdd94d55f7ca7d7d6377c9e33..d7aedae59de5e69aa035c95aed79bda98fef1a94 100644 --- a/db/StoredProcedures.sql +++ b/db/StoredProcedures.sql @@ -459,7 +459,8 @@ CREATE PROCEDURE `SearchStudents` ( IN `pGroupID` INT, IN `pFacultyID` INT, IN `pFullName` VARCHAR(100) CHARSET utf8, - IN `pDisciplineID` INT + IN `pDisciplineID` INT, + IN `pSemesterID` INT ) NO SQL BEGIN @@ -477,7 +478,7 @@ BEGIN disciplines_students.DisciplineID = pDisciplineID LEFT JOIN `disciplines_groups` ON disciplines_groups.GroupID = view_students.GroupID AND disciplines_groups.DisciplineID = pDisciplineID - WHERE view_students.SemesterID = @CurrentSemesterID AND + WHERE view_students.SemesterID = pSemesterID AND view_students.FacultyID = pFacultyID AND view_students.GradeID = pGradeID AND (view_students.GroupID = pGroupID OR pGroupID = 0) AND @@ -727,17 +728,23 @@ END // # ------------------------------------------------------------------------------------------- DROP PROCEDURE IF EXISTS GetRatesForGroup// -CREATE PROCEDURE `GetRatesForGroup` - ( IN `pDisciplineID` INT, IN `pGroupID` INT) +CREATE PROCEDURE `GetRatesForGroup` ( + IN `pDisciplineID` INT, + IN `pGroupID` INT +) NO SQL BEGIN DECLARE vChecker BOOLEAN DEFAULT FALSE; + DECLARE vSemesterID INT DEFAULT -1; + SELECT disciplines_groups.ID IS NOT NULL INTO vChecker FROM `disciplines_groups` WHERE disciplines_groups.DisciplineID = pDisciplineID AND disciplines_groups.GroupID = pGroupID LIMIT 1; + SET vSemesterID = GetDisciplineSemesterID(pDisciplineID); + IF !vChecker THEN SELECT students.ID, students.LastName, @@ -750,7 +757,7 @@ BEGIN LEFT JOIN `view_rating_result` ON view_rating_result.DisciplineID = pDisciplineID AND view_rating_result.StudentID = students.ID INNER JOIN `students_groups` ON students_groups.StudentID = students.ID AND - students_groups.SemesterID = @CurrentSemesterID + students_groups.SemesterID = vSemesterID WHERE students_groups.GroupID = pGroupID AND EXISTS(SELECT * FROM `disciplines_students` WHERE disciplines_students.DisciplineID = pDisciplineID AND @@ -769,7 +776,7 @@ BEGIN LEFT JOIN `view_rating_result` ON view_rating_result.DisciplineID = pDisciplineID AND view_rating_result.StudentID = students.ID INNER JOIN `students_groups` ON students_groups.StudentID = students.ID AND - students_groups.SemesterID = @CurrentSemesterID + students_groups.SemesterID = vSemesterID WHERE students_groups.GroupID = pGroupID AND NOT EXISTS(SELECT * FROM `disciplines_students` WHERE disciplines_students.DisciplineID = pDisciplineID AND @@ -1048,8 +1055,10 @@ END // DROP PROCEDURE IF EXISTS GetFinalFormInfo// -CREATE PROCEDURE `GetFinalFormInfo` -(IN `pDisciplineID` INT, IN `pGroupID` INT) +CREATE PROCEDURE `GetFinalFormInfo` ( + IN `pDisciplineID` INT, + IN `pGroupID` INT +) NO SQL BEGIN SELECT study_groups.GroupNum AS 'GroupNum', @@ -1086,7 +1095,7 @@ BEGIN INNER JOIN `teachers` ON teachers.ID = disciplines.AuthorID INNER JOIN `departments` ON departments.ID = teachers.DepartmentID INNER JOIN `job_positions` ON job_positions.ID = teachers.JobPositionID - INNER JOIN `semesters` ON semesters.ID = @CurrentSemesterID + INNER JOIN `semesters` ON disciplines.SemesterID WHERE study_groups.ID = pGroupID LIMIT 1; END // diff --git a/~dev_rating/application/classes/Model/Students.php b/~dev_rating/application/classes/Model/Students.php index a9278ca04a48e5fbadd1bbd1150d6ba2918935a7..eac86847e0f99dcc0949ff466cabe44818979094 100644 --- a/~dev_rating/application/classes/Model/Students.php +++ b/~dev_rating/application/classes/Model/Students.php @@ -37,7 +37,8 @@ class Model_Students extends Model public static function searchStudents($GradeID, $GroupID, $FacultyID, $Name, $DisciplineID) { $Name = Database::instance()->escape($Name); - $sql = "CALL `SearchStudents`('$GradeID', '$GroupID', '$FacultyID', $Name, '$DisciplineID'); "; + $semesterID = User::instance()->offsetGet('SemesterID'); + $sql = "CALL `SearchStudents`('$GradeID', '$GroupID', '$FacultyID', $Name, '$DisciplineID', $semesterID); "; return DB::query(Database::SELECT, $sql)->execute(); }