Skip to content
Snippets Groups Projects
Commit 4348b7e2 authored by RomanSteinberg's avatar RomanSteinberg
Browse files

ADD: GetRatesForGroupByStage2 to DB

parent f42f2084
Branches
Tags
No related merge requests found
......@@ -1524,5 +1524,73 @@ BEGIN
LIMIT 1;
END //
# something useful! may be is replaced yet!
DROP PROCEDURE IF EXISTS GetRatesForGroupByStage2//
CREATE PROCEDURE `GetRatesForGroupByStage2` (
IN `pDisciplineID` INT,
IN `pGroupID` INT,
IN `pMilestone` INT
) NO SQL
BEGIN
DECLARE vSemesterID, vGroupID INT DEFAULT -1;
SET vSemesterID = GetDisciplineProperty(pDisciplineID, 'semester');
DROP TABLE IF EXISTS tStudents;
CREATE TEMPORARY TABLE tStudents (
`StudentID` INT NOT NULL
);
# check that group attached to discipline. Otherwise vGroupID = -1;
SELECT disciplines_groups.GroupID INTO vGroupID
FROM `disciplines_groups`
WHERE disciplines_groups.GroupID = pGroupID AND
disciplines_groups.DisciplineID = pDisciplineID
LIMIT 1;
# get all students from group, that take this discipline
IF vGroupID <= 0 THEN # doesn't attached
INSERT INTO tStudents (`StudentID`)
SELECT disciplines_students.StudentID
FROM `disciplines_students`
WHERE disciplines_students.DisciplineID = pDisciplineID AND
disciplines_students.Type = 'attach';
ELSE # attached group
INSERT INTO tStudents (`StudentID`)
SELECT students_groups.StudentID
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(tRate.Rate*(tMap.ModuleType = 'exam')*(tMap.SubmoduleOrderNum < pMilestone - 1)) AS 'PrePreviousExam',
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 //
DELIMITER ;
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