Skip to content
Snippets Groups Projects
Commit 618b3363 authored by RomanSteinberg's avatar RomanSteinberg
Browse files

Merge branch 'silence/grade-issue32'

parents 9f5e3a1a 71275892
Branches
Tags
No related merge requests found
...@@ -838,7 +838,7 @@ BEGIN ...@@ -838,7 +838,7 @@ BEGIN
# 346 is used as a default id for scientific courseworks. # 346 is used as a default id for scientific courseworks.
# This constant is duplicated in Model_Helper_CourseWorkBuilder # This constant is duplicated in Model_Helper_CourseWorkBuilder
IF pSubtype IS NULL THEN IF pSubtype IS NOT NULL THEN
SET pSubjectID = 346; SET pSubjectID = 346;
END IF; END IF;
...@@ -2303,4 +2303,4 @@ BEGIN ...@@ -2303,4 +2303,4 @@ BEGIN
RETURN LAST_INSERT_ID(); RETURN LAST_INSERT_ID();
END // END //
DELIMITER ; DELIMITER ;
\ No newline at end of file
...@@ -1089,36 +1089,72 @@ BEGIN ...@@ -1089,36 +1089,72 @@ BEGIN
END // END //
# TODO: split into 2 procedures: get students, get rates
DROP PROCEDURE IF EXISTS GetRatesForGroupByStage// DROP PROCEDURE IF EXISTS GetRatesForGroupByStage//
CREATE PROCEDURE `GetRatesForGroupByStage` CREATE PROCEDURE `GetRatesForGroupByStage` (
( IN `pDisciplineID` INT, IN `pGroupID` INT, IN `pMilestone` INT) IN `pDisciplineID` INT,
NO SQL IN `pGroupID` INT,
IN `pMilestone` INT
) NO SQL
BEGIN BEGIN
SELECT view_disciplines_students.StudentID, DECLARE vSemesterID, vGroupID INT DEFAULT -1;
view_disciplines_students.LastName As 'LastName', SET vSemesterID = GetDisciplineProperty(pDisciplineID, 'semester');
view_disciplines_students.FirstName As 'FirstName', DROP TABLE IF EXISTS tStudents;
view_disciplines_students.SecondName As 'SecondName', CREATE TEMPORARY TABLE tStudents (
SUM(rating_table.Rate*(view_roadmap.ModuleType = 'regular')) AS 'Semester', `StudentID` INT NOT NULL
SUM(rating_table.Rate*(view_roadmap.ModuleType = 'bonus')) AS 'Bonus', );
SUM(rating_table.Rate*(view_roadmap.ModuleType = 'extra')) AS 'Extra',
SUM(rating_table.Rate*(view_roadmap.ModuleType = 'exam')*(view_roadmap.SubmoduleOrderNum = pMilestone)) AS 'Exam', # check that group attached to discipline. Otherwise vGroupID = -1;
MAX(rating_table.Rate*(view_roadmap.ModuleType = 'exam')*(view_roadmap.SubmoduleOrderNum < pMilestone)) AS 'PreviousExam', SELECT disciplines_groups.GroupID INTO vGroupID
MAX(IF(view_roadmap.SubmoduleOrderNum = pMilestone, exam_period_options.TYPE, NULL)) As 'Option', FROM `disciplines_groups`
MAX(IF(exam_period_options.TYPE = 'pass', 1, 0)) As 'AutoPassed' WHERE disciplines_groups.GroupID = pGroupID AND
FROM `view_disciplines_students` disciplines_groups.DisciplineID = pDisciplineID
LEFT JOIN `view_roadmap` ON view_roadmap.DisciplineID = view_disciplines_students.DisciplineID LIMIT 1;
LEFT JOIN `rating_table` ON rating_table.StudentID = view_disciplines_students.StudentID AND
rating_table.SubmoduleID = view_roadmap.SubmoduleID # get all students from group, that take this discipline
LEFT JOIN `exam_period_options` ON exam_period_options.submoduleID = view_roadmap.SubmoduleID AND IF vGroupID <= 0 THEN # doesn't attached
exam_period_options.StudentID = view_disciplines_students.StudentID INSERT INTO tStudents (`StudentID`)
WHERE view_disciplines_students.DisciplineID = pDisciplineID AND SELECT disciplines_students.StudentID
view_disciplines_students.GroupID = pGroupID AND FROM `disciplines_students`
NOT view_disciplines_students.AttachType <=> 'detach' AND WHERE disciplines_students.DisciplineID = pDisciplineID AND
( view_roadmap.ModuleType <> 'extra' OR disciplines_students.Type = 'attach';
(view_roadmap.ModuleType = 'extra' AND view_roadmap.SubmoduleOrderNum < pMilestone ) ELSE # attached group
) INSERT INTO tStudents (`StudentID`)
GROUP BY view_disciplines_students.StudentID SELECT students_groups.StudentID
ORDER BY LastName ASC, FirstName ASC, SecondName ASC; FROM `students_groups`
LEFT JOIN `disciplines_students` ON disciplines_students.StudentID = students_groups.StudentID AND
disciplines_students.DisciplineID = pDisciplineID
WHERE students_groups.GroupID = vGroupID AND
students_groups.SemesterID = vSemesterID AND
NOT disciplines_students.Type <=> 'detach'; # exclude detached students
END IF;
SELECT tRes.*,
students.LastName,
students.FirstName,
students.SecondName
FROM (
SELECT tStudents.StudentID,
SUM(tRate.Rate*(tMap.ModuleType = 'regular')) AS 'Semester',
SUM(tRate.Rate*(tMap.ModuleType = 'bonus')) AS 'Bonus',
SUM(tRate.Rate*(tMap.ModuleType = 'extra')*(tMap.SubmoduleOrderNum < pMilestone)) AS 'Extra',
SUM(tRate.Rate*(tMap.ModuleType = 'extra')*(tMap.SubmoduleOrderNum < pMilestone - 1)) AS 'PreviousExtra',
SUM(tRate.Rate*(tMap.ModuleType = 'exam')*(tMap.SubmoduleOrderNum = pMilestone)) AS 'Exam',
MAX(tRate.Rate*(tMap.ModuleType = 'exam')*(tMap.SubmoduleOrderNum < pMilestone)) AS 'PreviousExam',
MAX(IF(tMap.SubmoduleOrderNum = pMilestone, exam_period_options.TYPE, NULL)) As 'Option',
MAX(IF(exam_period_options.TYPE = 'pass', 1, 0)) As 'AutoPassed'
FROM `tStudents`
LEFT JOIN `view_roadmap` AS tMap ON tMap.DisciplineID = pDisciplineID
LEFT JOIN `rating_table` AS tRate ON tRate.StudentID = tStudents.StudentID AND
tRate.SubmoduleID = tMap.SubmoduleID
LEFT JOIN `exam_period_options` ON exam_period_options.submoduleID = tMap.SubmoduleID AND
exam_period_options.StudentID = tStudents.StudentID
GROUP BY tStudents.StudentID
) tRes
INNER JOIN `students` ON students.ID = tRes.StudentID
ORDER BY students.LastName ASC,
students.FirstName ASC,
students.SecondName ASC;
END // END //
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment