Newer
Older
DROP PROCEDURE IF EXISTS GetCurSemesterID//
DROP PROCEDURE IF EXISTS GetHashKey//
DROP PROCEDURE IF EXISTS GetStudyGroupsForDiscipline//
DROP PROCEDURE IF EXISTS GetStudyGroups//
DROP PROCEDURE IF EXISTS GetDisciplineInfoByID//
DROP PROCEDURE IF EXISTS GetMapForDisciplineExam//
DROP PROCEDURE IF EXISTS GetMapForDiscipline//
DROP PROCEDURE IF EXISTS GetMapForStudent//
DROP PROCEDURE IF EXISTS GetMapForStudentExam//
DROP PROCEDURE IF EXISTS GetRatesForStudentsGroup//
DROP PROCEDURE IF EXISTS GetReports//
DROP PROCEDURE IF EXISTS GetSettings//
# -------------------------------------------------------------------------------------------
# Label: abbreviations
# -------------------------------------------------------------------------------------------
# abbreviation: abbr
# specialization: spec
# department: dep
# -------------------------------------------------------------------------------------------
# Label: preferences
# Label: magic
# -------------------------------------------------------------------------------------------
# -------------------------------------------------------------------------------------------
# Label: semesters
# -------------------------------------------------------------------------------------------
CREATE PROCEDURE `GetSemesterInfo` (
IN `pSemesterID` INT
) NO SQL
SELECT semesters.ID AS 'ID',
semesters.Num As 'Num',
semesters.Year As 'Year'
FROM `semesters`
WHERE semesters.ID = pSemesterID
LIMIT 1;
CREATE PROCEDURE `GetSemesters` (
) NO SQL
BEGIN
SELECT semesters.ID,
semesters.Year,
semesters.Num
# -------------------------------------------------------------------------------------------
# Label: faculties
# -------------------------------------------------------------------------------------------
CREATE PROCEDURE `GetFaculties` (
) NO SQL
SELECT faculties.ID,
faculties.Name,
faculties.Abbr
FROM `faculties`
ORDER BY faculties.Name ASC;
# -------------------------------------------------------------------------------------------
# Label: departments
# -------------------------------------------------------------------------------------------
CREATE PROCEDURE `GetDepartments` (
IN `pFacultyID` INT
) NO SQL
FROM `departments`
WHERE departments.FacultyID = pFacultyID
ORDER BY departments.Name ASC;
# -------------------------------------------------------------------------------------------
# Label: specializations
# -------------------------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS GetSpecializations//
CREATE PROCEDURE `GetSpecializations` (
IN `pFacultyID` INT
) NO SQL
SELECT specializations.ID,
specializations.Name,
specializations.Abbr
FROM `specializations`
WHERE specializations.FacultyID = pFacultyID
ORDER BY subjects.Name ASC;
# -------------------------------------------------------------------------------------------
# Label: job positions
# -------------------------------------------------------------------------------------------
CREATE PROCEDURE `GetJobPositions` (
) NO SQL
FROM `job_positions`
ORDER BY job_positions.Name;
# -------------------------------------------------------------------------------------------
# Label: grades
# -------------------------------------------------------------------------------------------
CREATE PROCEDURE `GetGrades` (
) NO SQL
SELECT grades.ID,
grades.Num,
grades.Degree
FROM `grades`
# -------------------------------------------------------------------------------------------
# Label: study groups
# -------------------------------------------------------------------------------------------
CREATE PROCEDURE `GetGroups` (
IN `pGradeID` INT,
IN `pFacultyID` INT
) NO SQL
FROM `view_groups`
WHERE view_groups.GradeID = pGradeID AND
view_groups.FacultyID = pFacultyID
ORDER BY view_groups.GroupNum ASC;
CREATE PROCEDURE `GetGroupsForDiscipline` (
IN `pDisciplineID` INT
) NO SQL
view_groups.GroupNum,
view_groups.GradeID,
view_groups.GradeNum,
view_groups.Degree,
view_groups.SpecID,
view_groups.SpecName,
view_groups.SpecAbbr
INNER JOIN `view_groups` ON disciplines_groups.GroupID = view_groups.GroupID
WHERE disciplines_groups.DisciplineID = pDisciplineID
ORDER BY view_groups.GradeID ASC, view_groups.GroupID ASC;
# -------------------------------------------------------------------------------------------
# Label: subjects
# -------------------------------------------------------------------------------------------
CREATE PROCEDURE `GetSubjects` (
IN `pFacultyID` INT
) NO SQL
FROM `subjects_faculties`
INNER JOIN `subjects` ON subjects_faculties.SubjectID = subjects.ID
WHERE subjects_faculties.FacultyID = pFacultyID
# -------------------------------------------------------------------------------------------
# Label: accounts
# -------------------------------------------------------------------------------------------
# TODO: deprecated (see GetFullInfo)
CREATE PROCEDURE `GetAccountInfo` ( IN `pUserID` INT )
BEGIN
SELECT accounts.ID,
accounts.Login,
accounts.EMail,
user_roles.RoleName AS 'Role',
user_roles.Mark AS 'RoleMark',
FROM `accounts`
INNER JOIN `user_roles` ON accounts.UserRoleID = user_roles.ID
WHERE accounts.ID = pUserID
LIMIT 1;
# TODO: deprecated (see GetFullInfo)
CREATE PROCEDURE `GetPersonalInfo` (
IN `pUserID` INT,
IN `pSemesterID` INT
) NO SQL
INNER JOIN `user_roles` ON accounts.UserRoleID = user_roles.ID
WHERE accounts.ID = pUserID
SELECT view_students.LastName,
view_students.FirstName,
view_students.SecondName,
view_students.GradeID,
view_students.GradeNum,
view_students.Degree,
view_students.SpecID,
view_students.SpecName,
view_students.FacultyID,
view_students.FacultyName,
view_students.FacultyAbbr
view_students.SemesterID = pSemesterID
SELECT view_teachers.LastName,
view_teachers.FirstName,
view_teachers.SecondName,
view_teachers.DepID,
view_teachers.DepName,
view_teachers.JobPositionName,
view_teachers.FacultyID,
view_teachers.FacultyName,
view_teachers.FacultyAbbr
FROM `view_teachers`
WHERE view_teachers.AccountID = pUserID
LIMIT 1;
END IF;
DROP PROCEDURE IF EXISTS GetFullInfo//
CREATE PROCEDURE `GetFullInfo` (
) NO SQL
BEGIN
SELECT user_roles.Type INTO vAccountType
FROM `accounts`
INNER JOIN `user_roles` ON accounts.UserRoleID = user_roles.ID
WHERE accounts.ID = pUserID
LIMIT 1;
# type 1: student
# 2: teacher
IF vAccountType = 'student' THEN
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
SELECT # student info
view_students.LastName,
view_students.FirstName,
view_students.SecondName,
view_students.StudentID,
view_students.GradeID,
view_students.GradeNum,
view_students.GroupID,
view_students.GroupNum,
view_students.GroupName,
view_students.Degree,
view_students.SpecID,
view_students.SpecName,
view_students.SpecAbbr,
view_students.FacultyID,
view_students.FacultyName,
view_students.FacultyAbbr,
# account info
accounts.ID,
accounts.Login,
accounts.EMail,
user_roles.Type,
user_roles.RoleName AS 'Role',
user_roles.Mark AS 'RoleMark',
accounts.IsEnabled,
accounts.ActivationCode AS 'Code',
FROM `view_students`
INNER JOIN `accounts` ON accounts.ID = view_students.AccountID
INNER JOIN `user_roles` ON user_roles.ID = accounts.UserRoleID
WHERE view_students.AccountID = pUserID AND
LIMIT 1;
ELSE
SELECT # teacher info
view_teachers.LastName,
view_teachers.FirstName,
view_teachers.SecondName,
view_teachers.TeacherID,
view_teachers.DepID,
view_teachers.DepName,
view_teachers.JobPositionName,
view_teachers.FacultyID,
view_teachers.FacultyName,
view_teachers.FacultyAbbr,
# account info
accounts.ID,
accounts.Login,
accounts.EMail,
user_roles.Type,
user_roles.RoleName AS 'Role',
user_roles.Mark AS 'RoleMark',
accounts.IsEnabled,
accounts.ActivationCode AS 'Code',
FROM `view_teachers`
INNER JOIN `accounts` ON accounts.ID = view_teachers.AccountID
INNER JOIN `user_roles` ON user_roles.ID = accounts.UserRoleID
WHERE view_teachers.AccountID = pUserID
LIMIT 1;
END IF;
END //
# -------------------------------------------------------------------------------------------
# Label: teachers
# -------------------------------------------------------------------------------------------
# TODO: used in php
DROP PROCEDURE IF EXISTS GetTeachersByFaculty//
# CREATE PROCEDURE `GetTeachersByFaculty` (IN `pFacultyID` INT)
# NO SQL
# BEGIN
# SELECT view_teachers.TeacherID AS 'ID',
# view_teachers.LastName AS 'Last',
# view_teachers.FirstName AS 'First',
# view_teachers.SecondName AS 'Second',
# view_teachers.AccountID,
# view_teachers.JobPositionName,
# view_teachers.DepID,
# view_teachers.DepName
# FROM `view_teachers`
# WHERE view_teachers.FacultyID = pFacultyID
# ORDER BY view_teachers.LastName ASC, view_teachers.FirstName ASC;
# END //
DROP PROCEDURE IF EXISTS GetTeachersByDepartment//
CREATE PROCEDURE `GetTeachersByDepartment` (IN `pDepartmentID` INT)
SELECT view_teachers.TeacherID AS 'ID',
view_teachers.LastName,
view_teachers.FirstName,
view_teachers.SecondName,
view_teachers.AccountID,
view_teachers.JobPositionName,
view_teachers.DepID,
view_teachers.DepName
FROM `view_teachers`
ORDER BY view_teachers.LastName ASC, view_teachers.FirstName ASC;
# get teachers, that teach course
DROP PROCEDURE IF EXISTS GetTeachersForDiscipline//
CREATE PROCEDURE `GetTeachersForDiscipline`(IN `pDisciplineID` INT)
DECLARE vAuthorID INT DEFAULT -1;
SET vAuthorID = GetDisciplineProperty(pDisciplineID, 'author');
SELECT view_teachers.TeacherID AS 'ID',
view_teachers.LastName,
view_teachers.FirstName,
view_teachers.SecondName,
view_teachers.JobPositionID,
view_teachers.JobPositionName,
view_teachers.DepID,
view_teachers.DepName,
view_teachers.FacultyID,
view_teachers.FacultyAbbr,
( view_teachers.TeacherID = vAuthorID ) AS 'IsAuthor'
FROM `disciplines_teachers`
INNER JOIN `view_teachers` ON view_teachers.TeacherID = disciplines_teachers.TeacherID
WHERE disciplines_teachers.DisciplineID = pDisciplineID
ORDER BY view_teachers.TeacherID = vAuthorID DESC,
view_teachers.LastName ASC,
view_teachers.FirstName ASC;
PavelBegunkov
committed
DROP PROCEDURE IF EXISTS GetTeachersListForStudent//
CREATE PROCEDURE `GetTeachersListForStudent` (
IN `pStudentID` INT,
IN `pSemesterID` INT
# todo: new parameter, pLoadAll. See Model_Student::getTeachers().
PavelBegunkov
committed
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
) NO SQL
BEGIN
DECLARE vStudentGroup INT DEFAULT -1;
SET vStudentGroup = GetStudentGroup(pStudentID, pSemesterID);
# select all disciplines for user
CREATE TEMPORARY TABLE IF NOT EXISTS tDisciplines AS (
SELECT disc2.DisciplineID
FROM (
SELECT disc1.DisciplineID,
COALESCE(disc1.Type) AS 'Type'
FROM (
SELECT disciplines_students.DisciplineID,
disciplines_students.Type
FROM `disciplines_students`
WHERE disciplines_students.StudentID = pStudentID
UNION
SELECT disciplines_groups.DisciplineID,
NULL AS 'Type'
FROM `disciplines_groups`
WHERE disciplines_groups.GroupID = vStudentGroup
) AS disc1
INNER JOIN `disciplines` ON disciplines.ID = disc1.DisciplineID
WHERE disciplines.SemesterID = pSemesterID
GROUP BY disc1.DisciplineID
) AS disc2
WHERE NOT disc2.Type <=> 'detach'
);
SELECT tDisciplines.DisciplineID,
GROUP_CONCAT(
CONCAT(teachers.LastName, ' ', teachers.FirstName, ' ', teachers.SecondName)
ORDER BY teachers.ID = disciplines.AuthorID DESC,
teachers.LastName ASC,
teachers.FirstName ASC
SEPARATOR ';'
) AS 'FullNameList'
FROM tDisciplines
INNER JOIN `disciplines` ON disciplines.ID = tDisciplines.DisciplineID
LEFT JOIN `disciplines_teachers` ON disciplines_teachers.DisciplineID = tDisciplines.DisciplineID
INNER JOIN `teachers` ON teachers.ID = disciplines_teachers.TeacherID
GROUP BY tDisciplines.DisciplineID
ORDER BY tDisciplines.DisciplineID;
# todo: aggregation
# todo: return teachers' ID
PavelBegunkov
committed
END //
# get teachers, that don't teach course
DROP PROCEDURE IF EXISTS SearchTeachers//
CREATE PROCEDURE `SearchTeachers` (
IN `pFacultyID` INT,
IN `pDepartmentID` INT,
IN `pFullName` VARCHAR(100) CHARSET utf8,
# order: LastName + FirstName + SecondName
IN `pDisciplineID` INT
) NO SQL
DECLARE vFullNameReg VARCHAR(102) CHARSET utf8;
SET vAuthorID = GetDisciplineProperty(pDisciplineID, 'author');
SET vFullNameReg = CONCAT('%', pFullName, '%');
CREATE TEMPORARY TABLE IF NOT EXISTS tDiscTeachers AS (
SELECT disciplines_teachers.TeacherID
FROM disciplines_teachers
WHERE disciplines_teachers.DisciplineID = pDisciplineID
);
SELECT view_teachers.TeacherID AS 'ID',
view_teachers.LastName,
view_teachers.FirstName,
view_teachers.SecondName,
view_teachers.JobPositionName,
view_teachers.DepID,
( view_teachers.TeacherID = vAuthorID ) AS 'IsAuthor'
WHERE view_teachers.FacultyID = pFacultyID AND
CASE WHEN pDepartmentID != 0 THEN view_teachers.DepID = pDepartmentID ELSE TRUE END AND
NOT EXISTS (
SELECT * FROM tDiscTeachers
WHERE tDiscTeachers.TeacherID = view_teachers.TeacherID
LIMIT 1
) AND
CASE
WHEN pFullName != '' THEN
CONCAT( view_teachers.LastName, ' ', view_teachers.FirstName, ' ', view_teachers.SecondName)
LIKE vFullNameReg
ELSE
TRUE
END
ORDER BY view_teachers.FacultyID ASC,
view_teachers.DepName ASC,
view_teachers.LastName ASC,
view_teachers.FirstName ASC;
# -------------------------------------------------------------------------------------------
# Label: students
# -------------------------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS GetStudentsByStudyGroups//
DROP PROCEDURE IF EXISTS GetStudents//
CREATE PROCEDURE `GetStudents` (
IN `pGroupID` INT,
IN `pSemesterID` INT
) NO SQL
view_students.LastName,
view_students.FirstName,
view_students.SecondName,
view_students.AccountID,
view_students.GradeID,
view_students.GradeNum,
view_students.Degree,
view_students.GroupID,
view_students.GroupNum
FROM `view_students`
view_students.SemesterID = pSemesterID
ORDER BY view_students.LastName ASC, view_students.FirstName ASC;
CREATE PROCEDURE `GetStudentsByFaculty` (
IN `pFacultyID` INT,
IN `pGradeID` INT,
IN `pGroupID` INT,
IN `pSemesterID` INT
) NO SQL
view_students.LastName,
view_students.FirstName,
view_students.SecondName,
view_students.AccountID,
view_students.GradeID,
view_students.GradeNum,
view_students.Degree,
view_students.GroupID,
view_students.GroupNum
FROM `view_students`
WHERE view_students.FacultyID = pFacultyID AND
view_students.SemesterID = pSemesterID AND
CASE WHEN pGradeID != 0 THEN view_students.GradeID = pGradeID ELSE TRUE END AND
CASE WHEN pGroupID != 0 THEN view_students.GroupID = pGroupID ELSE TRUE END
ORDER BY view_students.LastName ASC, view_students.FirstName ASC;
END //
DROP PROCEDURE IF EXISTS SearchStudentsByName//
CREATE PROCEDURE `SearchStudentsByName`(
IN `pFullName` VARCHAR(100) CHARSET utf8,
IN `pFacultyID` INT,
IN `pGradeID` INT,
IN `pGroupID` INT,
IN `pSemesterID` INT
)
NO SQL
BEGIN
SELECT view_students.StudentID AS 'ID',
view_students.LastName,
view_students.FirstName,
view_students.SecondName,
view_students.AccountID,
view_students.GradeID,
view_students.GradeNum,
view_students.Degree,
view_students.GroupID,
view_students.GroupNum
FROM `view_students`
WHERE view_students.SemesterID = pSemesterID AND
(pFacultyID = 0 OR view_students.FacultyID = pFacultyID) AND
(pGradeID = 0 OR view_students.GradeID = pGradeID) AND
(pGroupID = 0 OR view_students.GroupID = pGroupID) AND
CONCAT(view_students.LastName, ' ', view_students.FirstName, ' ', view_students.SecondName)
LIKE CONCAT('%', pFullName, '%')
ORDER BY view_students.LastName ASC, view_students.FirstName ASC;
END //
# not in general groups, not attached
CREATE PROCEDURE `SearchStudents` (
IN `pGradeID` INT,
IN `pGroupID` INT,
IN `pFacultyID` INT,
IN `pFullName` VARCHAR(100) CHARSET utf8,
IN `pDisciplineID` INT
) NO SQL
DECLARE vSemesterID INT DEFAULT -1;
DECLARE vFullNameReg VARCHAR(102) CHARSET utf8;
DECLARE vIsGroupAttached BOOLEAN DEFAULT FALSE;
SET vSemesterID = GetDisciplineProperty(pDisciplineID, 'semester');
SET vFullNameReg = CONCAT('%', pFullName, '%');
CREATE TEMPORARY TABLE IF NOT EXISTS tDiscGroups AS (
SELECT disciplines_groups.GroupID
FROM `disciplines_groups`
WHERE disciplines_groups.DisciplineID = pDisciplineID
);
CREATE TEMPORARY TABLE IF NOT EXISTS tAttStud AS (
SELECT disciplines_students.StudentID
FROM `disciplines_students`
WHERE disciplines_students.DisciplineID = pDisciplineID AND
disciplines_students.Type = 'attach'
);
IF pGroupID != 0 THEN
SET vIsGroupAttached = EXISTS(
SELECT * FROM tDiscGroups WHERE tDiscGroups.GroupID = pGroupID LIMIT 1
);
END IF;
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
WHERE view_students.SemesterID = vSemesterID AND
CASE
WHEN pGroupID != 0 THEN
NOT vIsGroupAttached AND
view_students.GroupID = pGroupID
ELSE
NOT EXISTS( SELECT * FROM tDiscGroups WHERE tDiscGroups.GroupID = view_students.GroupID )
END AND
NOT EXISTS( SELECT * FROM tAttStud WHERE tAttStud.StudentID = view_students.StudentID LIMIT 1 ) AND
CASE
WHEN pFullName != '' THEN
CONCAT(view_students.LastName, ' ', view_students.FirstName, ' ', view_students.SecondName) LIKE vFullNameReg
ORDER BY view_students.GradeID ASC,
view_students.GroupID ASC;
# in general groups, attached or detached
CREATE PROCEDURE `GetStudentsForDiscipline` (
IN `pDisciplineID` INT
) NO SQL
DECLARE vSemesterID INT DEFAULT -1;
SET vSemesterID = GetDisciplineProperty(pDisciplineID, 'semester');
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
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,
tDiscStudents.Type AS 'AttachType'
FROM (
SELECT st.StudentID,
COALESCE(st.Type) AS 'Type'
FROM (
SELECT disciplines_students.StudentID,
disciplines_students.Type
FROM `disciplines_students`
WHERE disciplines_students.DisciplineID = pDisciplineID
UNION
SELECT students_groups.StudentID,
NULL AS 'Type'
FROM `disciplines_groups`
LEFT JOIN `students_groups` ON students_groups.SemesterID = vSemesterID AND
students_groups.GroupID = disciplines_groups.GroupID
WHERE disciplines_groups.DisciplineID = pDisciplineID
) as st
GROUP BY st.StudentID
) tDiscStudents
INNER JOIN `view_students` ON view_students.StudentID = tDiscStudents.StudentID AND
view_students.SemesterID = vSemesterID
ORDER BY ( tDiscStudents.Type <=> 'attach' ) ASC,
view_students.GradeID ASC,
view_students.GroupNum ASC,
view_students.LastName ASC,
view_students.FirstName ASC;
# in general groups + attached
CREATE PROCEDURE `GetStudentsForRating` (
IN `pDisciplineID` INT
) NO SQL
DECLARE vSemesterID INT DEFAULT -1;
SET vSemesterID = GetDisciplineProperty(pDisciplineID, 'semester');
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
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,
( tDiscStudents.Type IS NOT NULL ) AS 'IsAttached'
FROM (
SELECT st.StudentID,
COALESCE(st.Type) AS 'Type'
FROM (
SELECT disciplines_students.StudentID,
disciplines_students.Type
FROM `disciplines_students`
WHERE disciplines_students.DisciplineID = pDisciplineID
UNION
SELECT students_groups.StudentID,
NULL AS 'Type'
FROM `disciplines_groups`
LEFT JOIN `students_groups` ON students_groups.SemesterID = vSemesterID AND
students_groups.GroupID = disciplines_groups.GroupID
WHERE disciplines_groups.DisciplineID = pDisciplineID
) as st
GROUP BY st.StudentID
) tDiscStudents
INNER JOIN `view_students` ON view_students.StudentID = tDiscStudents.StudentID AND
view_students.SemesterID = vSemesterID
WHERE NOT tDiscStudents.Type <=> 'detach'
ORDER BY view_students.GradeID ASC,
view_students.GroupNum ASC,
view_students.LastName ASC,
view_students.FirstName ASC;
# -------------------------------------------------------------------------------------------
# Label: disciplines
# -------------------------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS GetDisciplineInfo//
DROP PROCEDURE IF EXISTS Discipline_GetInfo//
CREATE PROCEDURE `Discipline_GetInfo` (
IN `pDisciplineID` INT
) NO SQL
BEGIN
DECLARE vIsBonus BOOLEAN;
SET vIsBonus = EXISTS(
SELECT * FROM `modules`
WHERE modules.DisciplineID = pDisciplineID AND
modules.Type = 'bonus'
LIMIT 1
);
SELECT
view_disciplines.DisciplineID AS 'ID',
view_disciplines.AuthorID,
view_disciplines.GradeID,
view_disciplines.GradeNum,
view_disciplines.Degree,
view_disciplines.ExamType AS 'Type',
view_disciplines.LectureCount AS 'Lectures',
view_disciplines.PracticeCount AS 'Practice',
view_disciplines.LabCount AS 'Labs',
view_disciplines.SemesterID,
view_disciplines.SubjectID,
view_disciplines.SubjectName,
view_disciplines.SubjectAbbr,
view_disciplines.FacultyID,
view_disciplines.FacultyName,
view_disciplines.IsLocked,
view_disciplines.Milestone,
view_disciplines.Subtype,
vIsBonus AS 'IsBonus',
semesters.Num AS 'semesterNum', # TODO: Camelize
semesters.Year AS 'semesterYear'
INNER JOIN `semesters` ON semesters.ID = view_disciplines.SemesterID
WHERE view_disciplines.DisciplineID = pDisciplineID
LIMIT 1;
END //
# TODO: haven't reference on it
# all disciplines for faculty in current semester
CREATE PROCEDURE `GetDisciplines` (
IN `pFacultyID` INT,
IN `pSemesterID` INT
) NO SQL
SELECT view_disciplines.DisciplineID AS 'ID',
view_disciplines.SubjectID,
view_disciplines.SubjectName,
view_disciplines.ExamType AS 'Type',
(view_disciplines_results.DisciplineRateMax = 100) AS 'isMapCreated'
ON view_disciplines_results.DisciplineID = view_disciplines.DisciplineID
WHERE view_disciplines.SemesterID = pSemesterID AND
ORDER BY view_disciplines.SubjectName ASC;
# { discipline1 {group1, group2, ...}, discipline2 {groupN, ...}, ... }
DROP PROCEDURE IF EXISTS GetDisciplinesForTeacher//
CREATE PROCEDURE `GetDisciplinesForTeacher` (
IN `pTeacherID` INT,
IN `pSemesterID` INT
)
view_disciplines.ExamType AS 'Type',
view_disciplines.Subtype,
view_disciplines.GradeID,
view_disciplines.GradeNum,
view_disciplines.Degree,
view_groups.GroupID,
view_groups.GroupNum,
view_groups.GroupName,
view_disciplines.SubjectID,
view_disciplines.SubjectName,
view_disciplines.AuthorID,
view_disciplines.IsLocked AS 'IsLocked', # TODO: change column name
(view_disciplines_results.DisciplineRateMax = 100) AS 'IsMapCreated'
FROM `disciplines_teachers`
LEFT JOIN `disciplines_groups` ON disciplines_groups.DisciplineID = disciplines_teachers.DisciplineID
LEFT JOIN `view_groups` ON view_groups.GroupID = disciplines_groups.GroupID
LEFT JOIN `view_disciplines` ON disciplines_teachers.DisciplineID = view_disciplines.DisciplineID
LEFT JOIN `view_disciplines_results` ON view_disciplines_results.DisciplineID = view_disciplines.DisciplineID
WHERE disciplines_teachers.TeacherID = pTeacherID AND
view_disciplines.SemesterID = pSemesterID
view_disciplines.SubjectName ASC,
view_disciplines.DisciplineID ASC,
CREATE PROCEDURE `GetDisciplinesForStudent` (
IN `pStudentID` INT,
IN `pSemesterID` INT
) NO SQL
PavelBegunkov
committed
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
DECLARE vStudentGroup INT DEFAULT -1;
SET vStudentGroup = GetStudentGroup(pStudentID, pSemesterID);
# select all disciplines for user
CREATE TEMPORARY TABLE IF NOT EXISTS tDisciplines AS (
SELECT disc2.DisciplineID
FROM (
SELECT disc1.DisciplineID,
COALESCE(disc1.Type) AS 'Type'
FROM (
SELECT disciplines_students.DisciplineID,
disciplines_students.Type
FROM `disciplines_students`
WHERE disciplines_students.StudentID = pStudentID
UNION
SELECT disciplines_groups.DisciplineID,
NULL AS 'Type'
FROM `disciplines_groups`
WHERE disciplines_groups.GroupID = vStudentGroup
) AS disc1
INNER JOIN `disciplines` ON disciplines.ID = disc1.DisciplineID
WHERE disciplines.SemesterID = pSemesterID
GROUP BY disc1.DisciplineID
) AS disc2
WHERE NOT disc2.Type <=> 'detach'
);
# only Cthulhu knows, what happened here
SELECT view_disciplines.DisciplineID AS 'ID',
view_disciplines.SubjectID,
view_disciplines.SubjectName,
view_disciplines.ExamType AS 'Type',
view_disciplines.Subtype,
PavelBegunkov
committed
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
teachers.LastName,
teachers.FirstName,
teachers.SecondName,
( tDR.RateExam + tDR.RateMExam ) AS 'Rate',
( tDR.MaxRegularRate + tDR.MaxExamRate ) AS 'MaxCurrentRate'
FROM (
SELECT tRating.DisciplineID,
SUM(
IF( tRating.SubmoduleIsUsed AND tRating.ModuleType <=> 'regular',
tRating.SubmoduleRate, 0)
) AS 'MaxRegularRate',
MAX(
IF( tRating.SubmoduleIsUsed AND tRating.ModuleType <=> 'exam',
tRating.SubmoduleRate, 0)
) AS 'MaxExamRate',
SUM(IF(NOT tRating.ModuleType <=> 'exam', tRating.Rate, 0)) AS 'RateMExam',
MAX(IF(tRating.ModuleType <=> 'exam' AND tRating.Rate IS NOT NULL, tRating.Rate, 0)) AS 'RateExam'
FROM (
SELECT tDisciplines.DisciplineID,
vr.SubmoduleRate,
vr.ModuleType,
rt.Rate,
vr.SubmoduleIsUsed
FROM `tDisciplines`
LEFT JOIN `view_roadmap` AS vr ON vr.DisciplineID = tDisciplines.DisciplineID
LEFT JOIN `rating_table` AS rt ON rt.StudentID = pStudentID AND
rt.SubmoduleID = vr.SubmoduleID
) AS tRating
GROUP BY tRating.DisciplineID
) AS tDR
INNER JOIN `view_disciplines` ON view_disciplines.DisciplineID = tDR.DisciplineID
INNER JOIN `teachers` ON teachers.ID = view_disciplines.AuthorID
ORDER BY view_disciplines.ExamType ASC, view_disciplines.SubjectName ASC;
# get all disciplines for group, including disciplines, where students have attached status
DROP PROCEDURE IF EXISTS GetDisciplinesForGroup//