Skip to content
Snippets Groups Projects
Commit 3cf5c435 authored by Anton Bagliy's avatar Anton Bagliy
Browse files

FIX: db patch for global disc. ext. ids #510

parent ac9842cb
Branches
No related merge requests found
DROP TABLE global_disciplines;
DROP VIEW public.view_global_final_report;
ALTER TABLE ONLY global_disciplines
ADD CONSTRAINT global_extid_key UNIQUE (externalid);
DROP VIEW public.view_disciplines;
DROP TABLE global_disciplines;
CREATE TABLE global_disciplines
(
......@@ -49,3 +50,137 @@ begin
RETURN vID;
END;
$function$;
CREATE OR REPLACE VIEW public.view_global_final_report
AS SELECT DISTINCT semesters.year AS semesteryear,
semesters.num AS semesternum,
study_plans.externalid AS planexternalid,
subjects.externalid AS subjectexternalid,
record_books.externalid AS recordbookexternalid,
gd.examtype,
( SELECT sum(rating_table.rate) AS sum
FROM rating_table
JOIN submodules ON rating_table.submoduleid = submodules.id
JOIN modules ON submodules.moduleid = modules.id
WHERE modules.disciplineid = gd.id AND modules.type = 'regular'::regular_exam_bonus_extra AND rating_table.recordbookid = record_books.id
GROUP BY modules.disciplineid, rating_table.recordbookid) AS semesterrate,
( SELECT
CASE
WHEN rt.rate IS NOT NULL THEN rt.rate
WHEN rt.rate IS NULL THEN
CASE epo.type
WHEN 'pass'::absence_pass THEN '-2'::integer
WHEN 'absence'::absence_pass THEN '-1'::integer
ELSE NULL::integer
END
ELSE NULL::integer
END AS rate
FROM view_roadmap vr
LEFT JOIN rating_table rt ON vr.submoduleid = rt.submoduleid AND rt.recordbookid = record_books.id
LEFT JOIN exam_period_options epo ON epo.submoduleid = vr.submoduleid AND epo.recordbookid = record_books.id
WHERE vr.disciplineid = gd.id AND vr.moduletype = 'exam'::regular_exam_bonus_extra
ORDER BY vr.moduletype, vr.moduleordernum, vr.submoduleordernum
LIMIT 1) AS examrate,
( SELECT
CASE
WHEN rt.rate IS NOT NULL THEN rt.rate
WHEN rt.rate IS NULL THEN
CASE epo.type
WHEN 'pass'::absence_pass THEN 0
WHEN 'absence'::absence_pass THEN '-1'::integer
ELSE NULL::integer
END
ELSE NULL::integer
END AS rate
FROM view_roadmap vr
LEFT JOIN rating_table rt ON vr.submoduleid = rt.submoduleid AND rt.recordbookid = record_books.id
LEFT JOIN exam_period_options epo ON epo.submoduleid = vr.submoduleid AND epo.recordbookid = record_books.id
WHERE vr.disciplineid = gd.id AND vr.moduletype = 'exam'::regular_exam_bonus_extra
ORDER BY vr.moduletype, vr.moduleordernum, vr.submoduleordernum
OFFSET 1
LIMIT 1) AS exam2rate,
( SELECT
CASE
WHEN rt.rate IS NOT NULL THEN rt.rate
WHEN rt.rate IS NULL THEN
CASE epo.type
WHEN 'pass'::absence_pass THEN 0
WHEN 'absence'::absence_pass THEN '-1'::integer
ELSE NULL::integer
END
ELSE NULL::integer
END AS rate
FROM view_roadmap vr
LEFT JOIN rating_table rt ON vr.submoduleid = rt.submoduleid AND rt.recordbookid = record_books.id
LEFT JOIN exam_period_options epo ON epo.submoduleid = vr.submoduleid AND epo.recordbookid = record_books.id
WHERE vr.disciplineid = gd.id AND vr.moduletype = 'exam'::regular_exam_bonus_extra
ORDER BY vr.moduletype, vr.moduleordernum, vr.submoduleordernum
OFFSET 2
LIMIT 1) AS exam3rate,
( SELECT rating_table.rate
FROM rating_table
JOIN submodules ON rating_table.submoduleid = submodules.id
JOIN modules ON submodules.moduleid = modules.id
WHERE modules.disciplineid = gd.id AND modules.type = 'extra'::regular_exam_bonus_extra AND rating_table.recordbookid = record_books.id
ORDER BY submodules.ordernum
LIMIT 1) AS extrarate,
( SELECT rating_table.rate
FROM rating_table
JOIN submodules ON rating_table.submoduleid = submodules.id
JOIN modules ON submodules.moduleid = modules.id
WHERE modules.disciplineid = gd.id AND modules.type = 'extra'::regular_exam_bonus_extra AND rating_table.recordbookid = record_books.id
ORDER BY submodules.ordernum
OFFSET 1
LIMIT 1) AS extra2rate,
( SELECT rating_table.rate
FROM rating_table
JOIN submodules ON rating_table.submoduleid = submodules.id
JOIN modules ON submodules.moduleid = modules.id
WHERE modules.disciplineid = gd.id AND modules.type = 'bonus'::regular_exam_bonus_extra AND rating_table.recordbookid = record_books.id
LIMIT 1) AS bonusrate
FROM global_disciplines
JOIN semesters on global_disciplines.semesterid = semesters.id
JOIN disciplines gd on gd.id = global_disciplines.disciplineid
JOIN disciplines_students on gd.id = disciplines_students.disciplineid and disciplines_students.type = 'attach'::attach_detach
JOIN subjects on subjects.id = gd.subjectid
JOIN disciplines ld on ld.subjectid = gd.subjectid and ld.semesterid = gd.semesterid and ld.isglobal = TRUE and ld.isinactive = true
JOIN disciplines_study_plans on disciplines_study_plans.disciplineid = ld.id
JOIN study_plans ON study_plans.id = disciplines_study_plans.studyplanid
JOIN view_disciplines_recordbooks ON view_disciplines_recordbooks.disciplineid = ld.id AND 'attach'::attach_detach = COALESCE(view_disciplines_recordbooks.type, 'attach'::attach_detach)
JOIN record_books ON record_books.id = view_disciplines_recordbooks.recordbookid and record_books.id = disciplines_students.recordbookid
JOIN record_books_plans ON record_books.id = record_books_plans.recordbookid AND record_books_plans.studyplanid = study_plans.id;
CREATE OR REPLACE VIEW public.view_disciplines
AS SELECT disciplines.id AS disciplineid,
disciplines.authorid,
disciplines.examtype,
disciplines.lecturecount,
disciplines.practicecount,
disciplines.labcount,
disciplines.semesterid,
disciplines.islocked,
disciplines.milestone,
disciplines.subtype,
disciplines.compounddiscid,
disciplines.maxrate,
disciplines.currate,
disciplines.isinactive,
disciplines.isglobal,
grades.id AS gradeid,
grades.num AS gradenum,
grades.degree,
subjects.id AS subjectid,
subjects.name AS subjectname,
subjects.abbr AS subjectabbr,
faculties.id AS facultyid,
faculties.name AS facultyname,
faculties.abbr AS facultyabbr,
compound_disciplines.name AS compounddiscname,
global_disciplines.name AS globalname
FROM disciplines
JOIN subjects ON subjects.id = disciplines.subjectid
JOIN faculties ON faculties.id = disciplines.facultyid
LEFT JOIN grades ON grades.id = disciplines.gradeid
LEFT JOIN compound_disciplines ON compound_disciplines.id = disciplines.compounddiscid
LEFT JOIN global_disciplines ON global_disciplines.disciplineid = disciplines.id;
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