diff --git a/db/postgresql/add_final_report_04_12_18.sql b/db/postgresql/add_final_report_04_12_18.sql index d82ecbd7f8df356be15dda36dcdad93e2543f8d9..cf2719bd386eaceac693c5ae812ac8d87ddd9ae6 100644 --- a/db/postgresql/add_final_report_04_12_18.sql +++ b/db/postgresql/add_final_report_04_12_18.sql @@ -14,9 +14,10 @@ BEGIN END $function$; +DROP FUNCTION IF EXISTS public.finalreport_getbysemesteryearplan(pyear integer, pnum integer, pplanexternalid integer); CREATE OR REPLACE FUNCTION public.finalreport_getbysemesteryearplan(pyear integer, pnum integer, pplanexternalid integer) RETURNS TABLE("SemesterYear" integer, "SemesterNum" integer, "PlanExternalID" integer, - "SubjectExternalID" character varying, "RecordBookExternalID" character varying, + "SubjectExternalID" character varying, "RecordBookExternalID" character varying, "ExamType" exam_credit_grading_credit, "SemesterRate" bigint, "ExamRate" integer, "Exam2Rate" integer, "Exam3Rate" integer, "ExtraRate" integer, "Extra2Rate" integer) LANGUAGE plpgsql @@ -31,9 +32,10 @@ BEGIN END $function$; +DROP FUNCTION IF EXISTS public.finalreport_getbysemesteryeardiscipline(pyear integer, pnum integer, pdisciplineexternalid character varying); CREATE OR REPLACE FUNCTION public.finalreport_getbysemesteryeardiscipline(pyear integer, pnum integer, pdisciplineexternalid character varying) RETURNS TABLE("SemesterYear" integer, "SemesterNum" integer, "PlanExternalID" integer, - "SubjectExternalID" character varying, "RecordBookExternalID" character varying, + "SubjectExternalID" character varying, "RecordBookExternalID" character varying, "ExamType" exam_credit_grading_credit, "SemesterRate" bigint, "ExamRate" integer, "Exam2Rate" integer, "Exam3Rate" integer, "ExtraRate" integer, "Extra2Rate" integer) LANGUAGE plpgsql @@ -48,78 +50,62 @@ BEGIN END $function$; -CREATE OR REPLACE VIEW view_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, - ( - SELECT SUM(rating_table.Rate) - FROM rating_table - INNER JOIN submodules ON rating_table.SubmoduleID = submodules.ID - INNER JOIN modules ON submodules.ModuleID = modules.ID - WHERE modules.DisciplineID = disciplines.ID AND - modules.Type = 'regular' AND - rating_table.RecordBookID = record_books.ID - GROUP BY modules.DisciplineID, rating_table.RecordBookID - ) AS SemesterRate, - ( - SELECT rating_table.Rate - FROM rating_table - INNER JOIN submodules ON rating_table.SubmoduleID = submodules.ID - INNER JOIN modules ON submodules.ModuleID = modules.ID - WHERE modules.DisciplineID = disciplines.ID AND - modules.Type = 'exam' AND - rating_table.RecordBookID = record_books.ID - LIMIT 1 - ) AS ExamRate, - ( - SELECT rating_table.Rate - FROM rating_table - INNER JOIN submodules ON rating_table.SubmoduleID = submodules.ID - INNER JOIN modules ON submodules.ModuleID = modules.ID - WHERE modules.DisciplineID = disciplines.ID AND - modules.Type = 'exam' AND - rating_table.RecordBookID = record_books.ID - LIMIT 1 OFFSET 1 - ) AS Exam2Rate, - ( - SELECT rating_table.Rate - FROM rating_table - INNER JOIN submodules ON rating_table.SubmoduleID = submodules.ID - INNER JOIN modules ON submodules.ModuleID = modules.ID - WHERE modules.DisciplineID = disciplines.ID AND - modules.Type = 'exam' AND - rating_table.RecordBookID = record_books.ID - LIMIT 1 OFFSET 2 - ) AS Exam3Rate, - ( - SELECT rating_table.Rate - FROM rating_table - INNER JOIN submodules ON rating_table.SubmoduleID = submodules.ID - INNER JOIN modules ON submodules.ModuleID = modules.ID - WHERE modules.DisciplineID = disciplines.ID AND - modules.Type = 'extra' AND - rating_table.RecordBookID = record_books.ID - LIMIT 1 - ) AS ExtraRate, - ( - SELECT rating_table.Rate - FROM rating_table - INNER JOIN submodules ON rating_table.SubmoduleID = submodules.ID - INNER JOIN modules ON submodules.ModuleID = modules.ID - WHERE modules.DisciplineID = disciplines.ID AND - modules.Type = 'extra' AND - rating_table.RecordBookID = record_books.ID - LIMIT 1 OFFSET 1 - ) AS Extra2Rate - FROM semesters - INNER JOIN disciplines ON disciplines.SemesterID = semesters.ID - INNER JOIN disciplines_study_plans ON disciplines_study_plans.DisciplineID = disciplines.ID - INNER JOIN study_plans ON study_plans.ID = disciplines_study_plans.StudyPlanID - INNER JOIN subjects ON subjects.ID = disciplines.SubjectID - INNER JOIN view_disciplines_recordbooks ON view_disciplines_recordbooks.DisciplineID = disciplines.ID AND - 'attach' = coalesce(view_disciplines_recordbooks.Type, 'attach') - INNER JOIN record_books ON record_books.ID = view_disciplines_recordbooks.RecordBookID; \ No newline at end of file +drop view if exists public.view_final_report; +CREATE OR REPLACE VIEW public.view_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, + disciplines.examtype as 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 = disciplines.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 rating_table.rate + FROM rating_table + JOIN submodules ON rating_table.submoduleid = submodules.id + JOIN modules ON submodules.moduleid = modules.id + WHERE modules.disciplineid = disciplines.id AND modules.type = 'exam'::regular_exam_bonus_extra AND rating_table.recordbookid = record_books.id + LIMIT 1) AS examrate, + ( 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 = disciplines.id AND modules.type = 'exam'::regular_exam_bonus_extra AND rating_table.recordbookid = record_books.id + OFFSET 1 + LIMIT 1) AS exam2rate, + ( 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 = disciplines.id AND modules.type = 'exam'::regular_exam_bonus_extra AND rating_table.recordbookid = record_books.id + 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 = disciplines.id AND modules.type = 'extra'::regular_exam_bonus_extra AND rating_table.recordbookid = record_books.id + 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 = disciplines.id AND modules.type = 'extra'::regular_exam_bonus_extra AND rating_table.recordbookid = record_books.id + OFFSET 1 + LIMIT 1) AS extra2rate + FROM semesters + JOIN disciplines ON disciplines.semesterid = semesters.id + JOIN disciplines_study_plans ON disciplines_study_plans.disciplineid = disciplines.id + JOIN study_plans ON study_plans.id = disciplines_study_plans.studyplanid + JOIN subjects ON subjects.id = disciplines.subjectid + JOIN view_disciplines_recordbooks ON view_disciplines_recordbooks.disciplineid = disciplines.id AND 'attach'::attach_detach = COALESCE(view_disciplines_recordbooks.type, 'attach'::attach_detach) + JOIN record_books ON record_books.id = view_disciplines_recordbooks.recordbookid; + +-- Permissions + +ALTER TABLE public.view_final_report OWNER TO postgres; +GRANT ALL ON TABLE public.view_final_report TO postgres; diff --git a/~dev_rating/application/classes/Controller/Api/V0/FinalReport.php b/~dev_rating/application/classes/Controller/Api/V0/FinalReport.php index a8b54ba5fff05faad5c33d603714483ec12d2428..1f2fc72a558914757f805dfc2f819c3b81fa4ecc 100644 --- a/~dev_rating/application/classes/Controller/Api/V0/FinalReport.php +++ b/~dev_rating/application/classes/Controller/Api/V0/FinalReport.php @@ -20,7 +20,8 @@ class Controller_Api_V0_FinalReport extends Controller_Handler_Api { $response = []; /** @var Model_FinalReportItem $row */ foreach ($finalReport as $row) { - $response[$row->PlanExternalID][$row->SubjectExternalID][$row->RecordBookExternalID] = [ + $response[$row->PlanExternalID][$row->SubjectExternalID]['type'] = $row->ExamType; + $response[$row->PlanExternalID][$row->SubjectExternalID]['students'][$row->RecordBookExternalID] = [ 'semester' => $row->SemesterRate, 'exam' => [$row->ExamRate, $row->Exam2Rate, $row->Exam3Rate], 'extra' => [$row->ExtraRate, $row->Extra2Rate], diff --git a/~dev_rating/application/classes/Model/FinalReportItem.php b/~dev_rating/application/classes/Model/FinalReportItem.php index 8dcbbb896027595ca0f501c25de70ca7b0e2f86e..39be1c5625dd14132b1bcae8d3837d184a895f78 100644 --- a/~dev_rating/application/classes/Model/FinalReportItem.php +++ b/~dev_rating/application/classes/Model/FinalReportItem.php @@ -23,6 +23,7 @@ class Model_FinalReportItem extends Model $this->PlanExternalID = str_pad($row['PlanExternalID'], 9, '0', STR_PAD_LEFT); $this->SubjectExternalID = $row['SubjectExternalID']; $this->RecordBookExternalID = $row['RecordBookExternalID']; + $this->ExamType = $row['ExamType']; $this->SemesterRate = isset($row['SemesterRate']) ? (int)$row['SemesterRate'] : null; $this->ExamRate = isset($row['ExamRate']) ? (int)$row['ExamRate'] : null; $this->Exam2Rate = isset($row['Exam2Rate']) ? (int)$row['Exam2Rate'] : null;