diff --git a/db/postgresql/issue570_double_export.sql b/db/postgresql/issue570_double_export.sql index 48ae6a881f6a8e65af56e9d1579ec7ca33c7634f..3070fc420fe0c49dc15f1a387baa1bb146499966 100644 --- a/db/postgresql/issue570_double_export.sql +++ b/db/postgresql/issue570_double_export.sql @@ -151,3 +151,88 @@ BEGIN where (D."IsInactive" = true and D."IsGlobal" = true) or (D."IsInactive" = false and D."IsGlobal" = false); end; $function$; + +DROP FUNCTION IF EXISTS public.finalreport_getbysemesteryeardisciplinegroup(pyear integer, pnum integer, pdisciplineid integer, pgroupid integer); +CREATE OR REPLACE FUNCTION public.finalreport_getbysemesteryeardisciplinegroup(pyear integer, pnum integer, pdisciplineid integer, pgroupid integer) + RETURNS TABLE("SemesterYear" integer, "SemesterNum" integer, "PlanExternalID" integer, "SubjectExternalID" character varying, "RecordBookExternalID" character varying, "ExamType" exam_credit_grading_credit, "SemesterRate" bigint, "ExamRate" integer, "Exam2Rate" integer, "Exam3Rate" integer, "ExtraRate" integer, "Extra2Rate" integer, "BonusRate" integer) + LANGUAGE plpgsql +AS $function$ +declare + vSubjectId character varying default NULL; + vSemesterId integer default -1; + vPlanExtID integer default -1; + vExamType exam_credit_grading_credit default 'credit'; +BEGIN + + select semesters.id + into vSemesterId + from semesters + where semesters.year = pyear + and semesters.num = pnum; + + select subjects.externalid + into vSubjectId + from subjects + join disciplines on disciplines.subjectid = subjects.id + where disciplines.id = pdisciplineid; + + select disciplines.examtype into vExamType + from disciplines + where disciplines.id = pdisciplineid; + + select study_plans.externalid into vPlanExtID + from study_plans + join disciplines_study_plans on study_plans.id = disciplines_study_plans.studyplanid + join disciplines on disciplines.id = disciplines_study_plans.disciplineid + where disciplines.id = pdisciplineid; + + + return query + select DisciplineGrades.SemesterYear as "SemesterYear", + DisciplineGrades.SemesterNum as "SemesterNum", + DisciplineGrades.PlanExternalID as "PlanExternalID", + DisciplineGrades.SubjectExternalID as "SubjectExternalID", + DisciplineGrades.RecordBookExternalID as "RecordBookExternalID", + DisciplineGrades.ExamType as "ExamType", + DisciplineGrades.SemesterRate as "SemesterRate", + DisciplineGrades.ExamRate as "ExamRate", + DisciplineGrades.Exam2Rate as "Exam2Rate", + DisciplineGrades.Exam3Rate as "Exam3Rate", + DisciplineGrades.ExtraRate as "ExtraRate", + DisciplineGrades.Extra2Rate as "Extra2Rate", + DisciplineGrades.BonusRate as "BonusRate" + from (SELECT * + FROM view_final_report + WHERE view_final_report.SemesterYear = pyear + and view_final_report.SemesterNum = pnum + and view_final_report.SubjectExternalID = vSubjectId + and (view_final_report.semesterrate IS NOT NULL or + view_final_report.examrate IS NOT NULL or + view_final_report.exam2rate IS NOT NULL or + view_final_report.exam3rate IS NOT NULL or + view_final_report.extrarate IS NOT NULL or + view_final_report.extra2rate IS NOT null or + view_final_report.bonusrate IS NOT NULL) + UNION + SELECT * + FROM view_global_final_report + WHERE view_global_final_report.SemesterYear = pyear + and view_global_final_report.SemesterNum = pnum + and view_global_final_report.SubjectExternalID = vSubjectId + and (view_global_final_report.semesterrate IS NOT NULL or + view_global_final_report.examrate IS NOT NULL or + view_global_final_report.exam2rate IS NOT NULL or + view_global_final_report.exam3rate IS NOT NULL or + view_global_final_report.extrarate IS NOT NULL or + view_global_final_report.extra2rate IS NOT null or + view_global_final_report.bonusrate IS NOT NULL) + ) as DisciplineGrades + join record_books on record_books.externalid = DisciplineGrades.recordbookexternalid + join students_groups on students_groups.recordbookid = record_books.id + where students_groups.semesterid = vSemesterId + and students_groups.groupid = pgroupid + and DisciplineGrades.PlanExternalID = vPlanExtID + and DisciplineGrades.ExamType = vExamType; +END +$function$; +