From de469bc17b5fbcc4c8dc1aa5e29538f93c09fbf5 Mon Sep 17 00:00:00 2001
From: PavelBegunkov <asml.Silence@gmail.com>
Date: Mon, 16 Feb 2015 00:20:12 +0300
Subject: [PATCH] REF: comments

---
 db/StoredFunctions.sql  |  36 ++---
 db/StoredProcedures.sql | 340 +++++++++++++++++-----------------------
 db/Views.sql            |   8 +-
 3 files changed, 165 insertions(+), 219 deletions(-)

diff --git a/db/StoredFunctions.sql b/db/StoredFunctions.sql
index ed30f575d..2340aec60 100644
--- a/db/StoredFunctions.sql
+++ b/db/StoredFunctions.sql
@@ -26,13 +26,10 @@ CREATE FUNCTION `InternalIsMapLocked`
     (`pDisciplineID` INT) RETURNS BOOLEAN
     NO SQL
 BEGIN
-    DECLARE vChecker boolean DEFAULT -1;
-
-    SELECT disciplines.isLocked INTO vChecker
-        FROM `disciplines`
-        WHERE pDisciplineID = disciplines.ID
-    LIMIT 1;
-    RETURN  ( vChecker > 0 );
+    RETURN EXISTS(
+        SELECT * FROM `disciplines`
+        WHERE disciplines.ID = pDisciplineID AND disciplines.isLocked = 1
+    );
 END //
 
 
@@ -446,7 +443,7 @@ BEGIN
         LIMIT 1;
 
     IF (ROW_COUNT() = 0) THEN
-        RETURN -2;
+        RETURN -2; # account with this Code not found
     END IF;
     RETURN @vAccountID;
 END //
@@ -680,7 +677,7 @@ BEGIN
 END //
 
 
-# TODO: ?#$@! magic
+
 DROP FUNCTION IF EXISTS CreateStudentEx//
 CREATE FUNCTION `CreateStudentEx`
     (   `pLastName` VARCHAR(30) CHARSET utf8,
@@ -821,7 +818,6 @@ CREATE FUNCTION `ChangeDisciplineSubject`
     ) RETURNS int(11)
     NO SQL
 BEGIN
-    DECLARE vChecker INT;
     DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -1;
 
     IF NOT InternalIsTeacherAuthor(pTeacherID, pDisciplineID) OR
@@ -845,7 +841,7 @@ CREATE FUNCTION `ChangeDisciplineGrade`
     ) RETURNS int(11)
     NO SQL
 BEGIN
-    DECLARE vChecker INT DEFAULT -1;
+    DECLARE vCurGradeID INT DEFAULT -1;
     DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -1;
 
     IF  InternalIsMapLocked(pDisciplineID) OR
@@ -854,18 +850,22 @@ BEGIN
         RETURN -1;
     END IF;
 
-    SELECT disciplines.GradeID INTO vChecker
+    # get current grade
+    SELECT disciplines.GradeID INTO vCurGradeID
         FROM `disciplines`
         WHERE disciplines.ID = pDisciplineID
         LIMIT 1;
-
-    IF vChecker != pGradeID THEN
-        DELETE FROM `disciplines_groups`
-            WHERE disciplines_groups.DisciplineID = pDisciplineID;
-        DELETE FROM `disciplines_students`
-            WHERE disciplines_students.DisciplineID = pDisciplineID;
+    IF vCurGradeID = pGradeID THEN
+        RETURN 0;
     END IF;
 
+    # delete all students
+    DELETE FROM `disciplines_groups`
+        WHERE disciplines_groups.DisciplineID = pDisciplineID;
+    DELETE FROM `disciplines_students`
+        WHERE disciplines_students.DisciplineID = pDisciplineID;
+
+    # set grade
     UPDATE `disciplines`
         SET disciplines.GradeID = pGradeID
         WHERE disciplines.ID = pDisciplineID
diff --git a/db/StoredProcedures.sql b/db/StoredProcedures.sql
index bcf338303..12568e83a 100644
--- a/db/StoredProcedures.sql
+++ b/db/StoredProcedures.sql
@@ -355,8 +355,7 @@ CREATE PROCEDURE `SearchTeachers`
     NO SQL
 BEGIN
     DECLARE vAuthorID INT DEFAULT -1;
-    SELECT disciplines.AuthorID
-        INTO vAuthorID
+    SELECT disciplines.AuthorID INTO vAuthorID
         FROM `disciplines`
         WHERE disciplines.ID = pDisciplineID
         LIMIT 1;
@@ -370,12 +369,8 @@ BEGIN
             view_teachers.DepName,
             (view_teachers.TeacherID = vAuthorID) AS 'IsAuthor'
         FROM `view_teachers`
-        WHERE NOT EXISTS(   SELECT disciplines_teachers.ID
-                                FROM `disciplines_teachers`
-                                WHERE   disciplines_teachers.TeacherID = view_teachers.TeacherID AND
-                                        disciplines_teachers.DisciplineID = pDisciplineID)  AND
-            (pDepartmentID = 0 OR pDepartmentID = view_teachers.DepID ) AND
-            pFacultyID = view_teachers.FacultyID AND
+        WHERE InternalIsTeacherBounded(view_teachers.TeacherID, pDisciplineID) AND
+            view_teachers.FacultyID = pFacultyID AND
             CONCAT( view_teachers.LastName, view_teachers.FirstName, view_teachers.SecondName)
                 LIKE CONCAT('%', pFullName, '%')
         ORDER BY view_teachers.FacultyID ASC,view_teachers.DepName ASC,
@@ -392,7 +387,7 @@ DROP PROCEDURE IF EXISTS GetStudents//
 CREATE PROCEDURE `GetStudents`  (IN `pGroupID` INT)
     NO SQL
 BEGIN
-    SELECT  view_students.StudentID     AS 'ID',
+    SELECT  view_students.StudentID AS 'ID',
             view_students.LastName,
             view_students.FirstName,
             view_students.SecondName,
@@ -413,7 +408,7 @@ CREATE PROCEDURE `GetStudentsByFaculty` (   IN `pFacultyID` INT
                                         )
     NO SQL
 BEGIN
-    SELECT  view_students.StudentID     AS 'ID',
+    SELECT  view_students.StudentID AS 'ID',
             view_students.LastName,
             view_students.FirstName,
             view_students.SecondName,
@@ -435,61 +430,61 @@ CREATE PROCEDURE `SearchStudents`
     (   IN `pGradeID` INT, IN `pGroupID` INT, IN `pFacultyID` INT,
         IN `pFullName` VARCHAR(100) CHARSET utf8,
         IN `pDisciplineID` INT)
-NO SQL
-    BEGIN
-        SELECT  view_students.StudentID     AS 'ID',
-                view_students.LastName,
-                view_students.FirstName,
-                view_students.SecondName,
-                view_students.GradeID,
-                view_students.GradeNum,
-                view_students.Degree,
-                view_students.GroupID,
-                view_students.GroupNum
-        FROM `view_students`
-            LEFT JOIN `disciplines_students` ON disciplines_students.StudentID = view_students.StudentID AND
-                                                disciplines_students.DisciplineID = pDisciplineID
-            LEFT JOIN `disciplines_groups` ON   disciplines_groups.GroupID = view_students.GroupID AND
-                                                disciplines_groups.DisciplineID = pDisciplineID
-        WHERE   view_students.FacultyID = pFacultyID AND
-                view_students.GradeID = pGradeID AND
-                (view_students.GroupID = pGroupID OR pGroupID = 0) AND
-                CONCAT(view_students.LastName, view_students.FirstName, view_students.SecondName)
+    NO SQL
+BEGIN
+    SELECT  view_students.StudentID AS 'ID',
+            view_students.LastName,
+            view_students.FirstName,
+            view_students.SecondName,
+            view_students.GradeID,
+            view_students.GradeNum,
+            view_students.Degree,
+            view_students.GroupID,
+            view_students.GroupNum
+    FROM `view_students`
+        LEFT JOIN `disciplines_students` ON disciplines_students.StudentID = view_students.StudentID AND
+                                            disciplines_students.DisciplineID = pDisciplineID
+        LEFT JOIN `disciplines_groups` ON   disciplines_groups.GroupID = view_students.GroupID AND
+                                            disciplines_groups.DisciplineID = pDisciplineID
+    WHERE   view_students.FacultyID = pFacultyID AND
+            view_students.GradeID = pGradeID AND
+            (view_students.GroupID = pGroupID OR pGroupID = 0) AND
+            CONCAT(view_students.LastName, view_students.FirstName, view_students.SecondName)
                 LIKE CONCAT('%', pFullName, '%') AND
-                disciplines_groups.ID IS NULL AND
-                (disciplines_students.Type IS NULL OR disciplines_students.Type != 'attach')
-        ORDER BY    view_students.GradeID ASC,
-            view_students.GroupID ASC;
-    END //
+            disciplines_groups.ID IS NULL AND
+            (disciplines_students.Type IS NULL OR disciplines_students.Type != 'attach')
+    ORDER BY    view_students.GradeID ASC,
+        view_students.GroupID ASC;
+END //
 
 
 # TODO: --TeacherID param
 # TODO: only this procedure
-# all students takes that course or detached
+# all students in general groups, that take course (with detached)
 DROP PROCEDURE IF EXISTS GetStudentsForDiscipline//
 CREATE PROCEDURE `GetStudentsForDiscipline`
     (   IN `pTeacherID` INT, IN `pDisciplineID` INT)
-NO SQL
-    BEGIN
-        SELECT  view_disciplines_students.StudentID     AS 'ID',
-                view_disciplines_students.LastName,
-                view_disciplines_students.FirstName,
-                view_disciplines_students.SecondName,
-                view_disciplines_students.GradeID,
-                view_disciplines_students.GradeNum,
-                view_disciplines_students.Degree,
-                view_disciplines_students.GroupID,
-                view_disciplines_students.GroupNum,
-                view_disciplines_students.AttachType    AS 'AttachType'
-        FROM `view_disciplines_students`
-        WHERE view_disciplines_students.DisciplineID = pDisciplineID
-        ORDER BY    (view_disciplines_students.AttachType IS NULL OR
-                     view_disciplines_students.AttachType = 'detach') DESC,
-            view_disciplines_students.GradeID ASC,
-            view_disciplines_students.GroupNum ASC,
-            view_disciplines_students.LastName ASC,
-            view_disciplines_students.FirstName ASC;
-    END //
+    NO SQL
+BEGIN
+    SELECT  view_disciplines_students.StudentID AS 'ID',
+            view_disciplines_students.LastName,
+            view_disciplines_students.FirstName,
+            view_disciplines_students.SecondName,
+            view_disciplines_students.GradeID,
+            view_disciplines_students.GradeNum,
+            view_disciplines_students.Degree,
+            view_disciplines_students.GroupID,
+            view_disciplines_students.GroupNum,
+            view_disciplines_students.AttachType AS 'AttachType'
+    FROM `view_disciplines_students`
+    WHERE view_disciplines_students.DisciplineID = pDisciplineID
+    ORDER BY    (view_disciplines_students.AttachType IS NULL OR
+                    view_disciplines_students.AttachType = 'detach') DESC,
+        view_disciplines_students.GradeID ASC,
+        view_disciplines_students.GroupNum ASC,
+        view_disciplines_students.LastName ASC,
+        view_disciplines_students.FirstName ASC;
+END //
 
 
 # TODO: --TeacherID param
@@ -497,28 +492,27 @@ NO SQL
 DROP PROCEDURE IF EXISTS GetStudentsForRating//
 CREATE PROCEDURE `GetStudentsForRating`
     (   IN `TeacherID` INT, IN `pDisciplineID` INT)
-NO SQL
-    BEGIN
-        SELECT  view_disciplines_students.StudentID     AS 'ID',
-                view_disciplines_students.LastName,
-                view_disciplines_students.FirstName,
-                view_disciplines_students.SecondName,
-                view_disciplines_students.GradeID,
-                view_disciplines_students.GradeNum,
-                view_disciplines_students.Degree,
-                view_disciplines_students.GroupID,
-                view_disciplines_students.GroupNum,
-                (view_disciplines_students.AttachType IS NOT NULL AND
-                 view_disciplines_students.AttachType = 'attach') AS 'IsAttached'
-        FROM `view_disciplines_students`
-        WHERE   view_disciplines_students.DisciplineID = pDisciplineID AND
-                (view_disciplines_students.AttachType IS NULL OR
-                 view_disciplines_students.AttachType = 'attach')
-        ORDER BY    view_disciplines_students.GradeID ASC,
-            view_disciplines_students.GroupNum ASC,
-            view_disciplines_students.LastName ASC,
-            view_disciplines_students.FirstName ASC;
-    END //
+    NO SQL
+BEGIN
+    SELECT  view_disciplines_students.StudentID AS 'ID',
+            view_disciplines_students.LastName,
+            view_disciplines_students.FirstName,
+            view_disciplines_students.SecondName,
+            view_disciplines_students.GradeID,
+            view_disciplines_students.GradeNum,
+            view_disciplines_students.Degree,
+            view_disciplines_students.GroupID,
+            view_disciplines_students.GroupNum,
+            (view_disciplines_students.AttachType IS NOT NULL) AS 'IsAttached'
+    FROM `view_disciplines_students`
+    WHERE   view_disciplines_students.DisciplineID = pDisciplineID AND
+            (view_disciplines_students.AttachType IS NULL OR
+                view_disciplines_students.AttachType = 'attach')
+    ORDER BY    view_disciplines_students.GradeID ASC,
+        view_disciplines_students.GroupNum ASC,
+        view_disciplines_students.LastName ASC,
+        view_disciplines_students.FirstName ASC;
+END //
 
 
 
@@ -528,7 +522,8 @@ NO SQL
 # Label: disciplines
 # -------------------------------------------------------------------------------------------
 
-
+# TODO: haven't reference on it
+# all disciplines for faculty in current semester
 DROP PROCEDURE IF EXISTS GetDisciplines//
 CREATE PROCEDURE `GetDisciplines` (  IN `pFacultyID` INT )
     NO SQL
@@ -537,7 +532,7 @@ BEGIN
             view_disciplines.SubjectID,
             view_disciplines.SubjectName,
             view_disciplines.ExamType,
-            (view_disciplines_results.DisciplineRateMax = 100)
+            (view_disciplines_results.DisciplineRateMax = 100) AS 'IsMapCreated'
         FROM `view_disciplines`
         INNER JOIN `view_disciplines_results`
             ON view_disciplines_results.DisciplineID = view_disciplines.DisciplineID
@@ -548,12 +543,13 @@ END //
 
 
 
-# variant 2
+# processed format of output (after desequentialization)
+# discipline1 {group1, group2, ...}, discipline2 {groupN, ...}, ...
 DROP PROCEDURE IF EXISTS GetDisciplinesForTeacher//
 CREATE PROCEDURE `GetDisciplinesForTeacher`(IN `pTeacherID` INT)
     NO SQL
 BEGIN
-    SELECT DISTINCT view_disciplines.DisciplineID       AS 'ID',
+    SELECT DISTINCT view_disciplines.DisciplineID AS 'ID',
                     view_disciplines.ExamType,
                     view_disciplines.GradeID,
                     view_disciplines.GradeNum,
@@ -568,9 +564,10 @@ BEGIN
                     view_disciplines.IsLocked
     FROM `disciplines_teachers`
     LEFT JOIN `disciplines_groups` ON disciplines_groups.DisciplineID = disciplines_teachers.DisciplineID
+        # left -> inner join with maybe NULL ?
     LEFT JOIN `view_groups` ON view_groups.GroupID = disciplines_groups.GroupID
     INNER JOIN `view_disciplines` ON disciplines_teachers.DisciplineID = view_disciplines.DisciplineID
-    LEFT JOIN `view_disciplines_results` ON view_disciplines_results.DisciplineID = view_disciplines.DisciplineID
+    INNER JOIN `view_disciplines_results` ON view_disciplines_results.DisciplineID = view_disciplines.DisciplineID
     WHERE disciplines_teachers.TeacherID = pTeacherID AND
             view_disciplines.SemesterID = @CurrentSemesterID
     ORDER BY    view_disciplines.GradeID ASC,
@@ -580,7 +577,7 @@ BEGIN
 END //
 
 
-# TODO: slowpoke
+# TODO: check this, review this
 DROP PROCEDURE IF EXISTS GetDisciplinesForStudent//
 CREATE PROCEDURE `GetDisciplinesForStudent`(IN `pStudentID` INT)
     NO SQL
@@ -609,7 +606,39 @@ BEGIN
 END //
 
 
+# get all disciplines for group, including disciplines, where students have attached status
+DROP PROCEDURE IF EXISTS GetDisciplinesForGroup//
+CREATE PROCEDURE `GetDisciplinesForGroup`(IN `pGroupID` INT)
+    NO SQL
+BEGIN
+    (SELECT view_disciplines.DisciplineID,
+            view_disciplines.SubjectName,
+            view_disciplines.ExamType
+        FROM `disciplines_groups`
+        INNER JOIN `view_disciplines` ON view_disciplines.DisciplineID = disciplines_groups.DisciplineID
+        WHERE disciplines_groups.GroupID = pGroupID
+    ) UNION DISTINCT
+    (SELECT view_disciplines.DisciplineID,
+            view_disciplines.SubjectName,
+            view_disciplines.ExamType
+        FROM `disciplines_students`
+        INNER JOIN `students` ON disciplines_students.StudentID = students.ID
+        INNER JOIN `view_disciplines` ON view_disciplines.DisciplineID = disciplines_students.DisciplineID
+        WHERE students.GroupID = pGroupID
+    );
+END //
+
+
+
+
+
+
+
 
+
+# TODO: kill view_rating
+# TODO: slowpoke
+# TODO: rename GetRatesForStudent
 DROP PROCEDURE IF EXISTS GetMapForStudent//
 CREATE PROCEDURE `GetMapForStudent`
     (   IN `pStudentID` INT, IN `pDisciplineID` INT)
@@ -657,28 +686,7 @@ BEGIN
 END //
 
 
-DROP PROCEDURE IF EXISTS GetMapForStudentExam//
-CREATE PROCEDURE `GetMapForStudentExam`
-    (   IN `pStudentID` INT, IN `pDisciplineID` INT)
-    NO SQL
-BEGIN
-    SELECT  view_rating.ModuleID,
-            view_rating.ModuleName,
-            view_rating.SubmoduleID,
-            view_rating.SubmoduleName,
-            view_rating.SubmoduleRate  AS 'MaxRate',
-            view_rating.SubmoduleType,
-            view_rating.Rate,
-            view_rating.Date,
-            view_rating.ModuleType
-        FROM `view_rating`
-        WHERE view_rating.StudentID = pStudentID AND
-                view_rating.DisciplineID = pDisciplineID
-        ORDER BY    OrderModuleTypesForSession(view_rating.ModuleType) ASC,
-                    view_rating.SubmoduleOrderNum ASC;
-END //
-
-
+# TODO: rename ~ GetRatesForStudent, Rating
 DROP PROCEDURE IF EXISTS GetMapForStudentExam//
 CREATE PROCEDURE `GetMapForStudentExam`
     (	IN `pStudentID` INT, IN `pDisciplineID` INT)
@@ -702,34 +710,39 @@ BEGIN
 END //
 
 
-
+# TODO: rename GetRoadMap
+# TODO: kill first param
+# TODO: order hardcode
+# get roadmap of discipline
 DROP PROCEDURE IF EXISTS GetMapForDiscipline//
 CREATE PROCEDURE `GetMapForDiscipline`  (   IN `TeacherID`      INT,
                                             IN `pDisciplineID`   INT
                                         )
     NO SQL
 BEGIN
-# kill first param
-        SELECT  view_disciplines.SubjectID,
-                view_disciplines.SubjectName,
-                view_roadmap.ModuleID,
-                view_roadmap.ModuleName,
-                view_roadmap.ModuleType,
-                view_roadmap.SubmoduleID,
-                view_roadmap.SubmoduleName,
-                view_roadmap.SubmoduleRate AS 'MaxRate',
-                view_roadmap.SubmoduleType
-        FROM `view_roadmap`
-        INNER JOIN `view_disciplines` ON view_disciplines.DisciplineID = pDisciplineID
-        WHERE   view_roadmap.DisciplineID = pDisciplineID AND
-                (view_roadmap.ModuleType != 'exam' OR view_roadmap.SubmoduleOrderNum = 1)
-        ORDER BY    view_roadmap.ModuleType ^ 1 ASC,
-                    # 1, 3, 2, 4 ASC
-                    view_roadmap.ModuleOrderNum ASC,
-                    view_roadmap.SubmoduleOrderNum ASC;
+    SELECT  view_disciplines.SubjectID,
+            view_disciplines.SubjectName,
+            view_roadmap.ModuleID,
+            view_roadmap.ModuleName,
+            view_roadmap.ModuleType,
+            view_roadmap.SubmoduleID,
+            view_roadmap.SubmoduleName,
+            view_roadmap.SubmoduleRate AS 'MaxRate',
+            view_roadmap.SubmoduleType
+    FROM `view_roadmap`
+    INNER JOIN `view_disciplines` ON view_disciplines.DisciplineID = pDisciplineID
+    WHERE   view_roadmap.DisciplineID = pDisciplineID AND
+            (view_roadmap.ModuleType != 'exam' OR view_roadmap.SubmoduleOrderNum = 1)
+    ORDER BY    view_roadmap.ModuleType ^ 1 ASC,
+                # 1, 3, 2, 4 ASC
+                view_roadmap.ModuleOrderNum ASC,
+                view_roadmap.SubmoduleOrderNum ASC;
 END //
 
 
+# TODO: rename GetRoadMap
+# TODO: kill first param
+# get roadmap of discipline exam
 DROP PROCEDURE IF EXISTS GetMapForDisciplineExam//
 CREATE PROCEDURE `GetMapForDisciplineExam`
     (   IN `pTeacherID` INT, IN `pDisciplineID` INT)
@@ -754,7 +767,7 @@ BEGIN
 END //
 
 
-
+# TODO: rename GetDisciplineInfo
 DROP PROCEDURE IF EXISTS GetDisciplineInfoByID//
 CREATE PROCEDURE `GetDisciplineInfoByID`(   IN `pDisciplineID` INT )
     NO SQL
@@ -885,74 +898,8 @@ BEGIN
 END //
 
 
-# DROP PROCEDURE IF EXISTS GetReports//
-# CREATE PROCEDURE `GetReports`    (   IN `StudyGroupID` INT
-#                              )
-#     NO SQL
-# BEGIN 
-#      # CREATE TEMPORARY TABLE IF NOT EXISTS `temp_disciplines` (
-#      #      `DisciplineID` int(11) NOT NULL,
-#      #  `MaxRate` int(11) NOT NULL DEFAULT '0',
-#      #      PRIMARY KEY (`DisciplineID`)
-#      # ) ENGINE=MEMORY DEFAULT CHARSET=utf8 AS (
-#      #  SELECT disciplines_groups.DisciplineID,
-#      #                  0 AS 'MaxRate'
-#      #  FROM `disciplines_groups`
-#      #  WHERE disciplines_groups.StudyGroupID = StudyGroupID 
-#      #  UNION DISTINCT
-#      #  SELECT disciplines_students.DisciplineID,
-#      #                  0 AS 'MaxRate'
-#      #  FROM `disciplines_students`
-#      #  INNER JOIN `students` ON disciplines_students.ID = students.ID
-#      #  WHERE students.StudyGroupID = StudyGroupID
-#      # );
-
-#      CREATE TEMPORARY TABLE IF NOT EXISTS `temp_disciplines`
-#          SELECT disciplines_groups.DisciplineID,
-#                          0 AS 'MaxRate'
-#          FROM `disciplines_groups`
-#          WHERE disciplines_groups.StudyGroupID = StudyGroupID 
-#          UNION DISTINCT
-#          SELECT disciplines_students.DisciplineID,
-#                          0 AS 'MaxRate'
-#          FROM `disciplines_students`
-#          INNER JOIN `students` ON disciplines_students.ID = students.ID
-#          WHERE students.StudyGroupID = StudyGroupID;
-
-#      UPDATE `temp_disciplines`
-#      SET temp_disciplines.MaxRate = GetMaxRateForDisc(temp_disciplines.DisciplineID);
-
-#      SELECT  students.ID AS 'StudentID',
-#              temp_disciplines.DisciplineID,
-#              temp_disciplines.MaxRate,
-#              GetRateForDisc(students.ID, temp_disciplines.DisciplineID) AS 'Rate'
-#      FROM `students`
-#      LEFT JOIN `temp_disciplines` ON 1=1
-#      WHERE students.StudyGroupID = StudyGroupID;
-# END //
 
 
-DROP PROCEDURE IF EXISTS GetDisciplinesForGroup//
-CREATE PROCEDURE `GetDisciplinesForGroup`(IN `pGroupID` INT)
-    NO SQL
-BEGIN       
-    SELECT  disciplines_groups.DisciplineID AS 'DisciplineID',
-            subjects.Name AS 'SubjectName',
-            disciplines.ExamType AS 'ExamType'
-        FROM `disciplines_groups`
-        INNER JOIN `disciplines` ON disciplines.ID = disciplines_groups.DisciplineID
-        INNER JOIN `subjects` ON subjects.ID = disciplines.SubjectID
-        WHERE disciplines_groups.GroupID = pGroupID
-    UNION DISTINCT
-    SELECT  disciplines_students.DisciplineID  AS "DisciplineID",
-            subjects.Name AS "SubjectName",
-            disciplines.ExamType AS "ExamType"
-        FROM `disciplines_students`
-        INNER JOIN `students` ON disciplines_students.StudentID = students.ID
-        INNER JOIN `disciplines` ON disciplines.ID = disciplines_students.DisciplineID
-        INNER JOIN `subjects` ON subjects.ID = disciplines.SubjectID
-        WHERE students.GroupID = pGroupID;
-END //
 
 
 DROP PROCEDURE IF EXISTS GetRatesForStudentsGroup//
@@ -984,10 +931,7 @@ DROP PROCEDURE IF EXISTS GetFinalFormInfo//
 CREATE PROCEDURE `GetFinalFormInfo` 
 (IN `pDisciplineID` INT, IN `pGroupID` INT)
     NO SQL
-BEGIN 
-    DECLARE vCurSemester INT;
-    SET vCurSemester = @CurrentSemesterID;
-
+BEGIN
     SELECT  study_groups.GroupNum AS 'GroupNum', 
             study_groups.Name AS 'GroupName',
             grades.ID AS 'GradeID',
@@ -1022,7 +966,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 = vCurSemester
+        INNER JOIN `semesters` ON semesters.ID = @CurrentSemesterID
         WHERE study_groups.ID = pGroupID 
         LIMIT 1;
 END //
diff --git a/db/Views.sql b/db/Views.sql
index 9ca560966..7528ce2ad 100644
--- a/db/Views.sql
+++ b/db/Views.sql
@@ -11,6 +11,7 @@ CREATE OR REPLACE VIEW `view_groups` AS
             specializations.ID      AS 'SpecID',
             specializations.Name    AS 'SpecName',
             specializations.Abbr    AS 'SpecAbbr',
+            specializations.Code    AS 'SpecCode',
             faculties.ID        AS 'FacultyID', 
             faculties.Name      AS 'FacultyName', 
             faculties.Abbr      AS 'FacultyAbbr'
@@ -76,13 +77,14 @@ CREATE OR REPLACE VIEW `view_disciplines` AS
 
 
 CREATE OR REPLACE VIEW `view_disciplines_results` AS
-    SELECT  modules.DisciplineID,
+    SELECT  disciplines.ID AS 'DisciplineID',
             SUM(submodules.MaxRate) AS 'DisciplineRateMax',
             SUM(submodules.MaxRate*submodules.IsUsed) AS 'DisciplineRateCur'
         FROM `submodules`
         INNER JOIN `modules` ON modules.ID = submodules.ModuleID
+        RIGHT JOIN `disciplines` ON disciplines.ID = modules.DisciplineID
         WHERE (modules.Type = 'regular') OR (modules.Type = 'exam' AND submodules.OrderNum = 1)
-        GROUP BY modules.DisciplineID;
+        GROUP BY disciplines.ID;
 
 
 CREATE OR REPLACE VIEW `view_disciplines_teachers` AS 
@@ -112,7 +114,7 @@ CREATE OR REPLACE VIEW `view_disciplines_students` AS
                 WHERE disciplines_students.DisciplineID = disciplines_groups.DisciplineID AND
                     disciplines_students.StudentID = view_students.StudentID
             )
-    ); 
+    );
 
 
 CREATE OR REPLACE VIEW `view_roadmap` AS
-- 
GitLab