diff --git a/db/postgresql/add_export_bonus_04_02_19.sql b/db/postgresql/add_export_bonus_04_02_19.sql new file mode 100644 index 0000000000000000000000000000000000000000..3ff48b0489004e8b2889d6cba341b31b782e1f36 --- /dev/null +++ b/db/postgresql/add_export_bonus_04_02_19.sql @@ -0,0 +1,106 @@ +DROP FUNCTION IF EXISTS public.finalreport_getbysemesteryeardisciplinegroup(pyear integer, pnum integer, pdisciplineexternalid character varying, pgroupid integer); +CREATE OR REPLACE FUNCTION public.finalreport_getbysemesteryeardisciplinegroup(pyear integer, pnum integer, pdisciplineexternalid character varying, 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 vSemesterId integer default -1; +BEGIN + + select semesters.id into vSemesterId + from semesters + where semesters.year = pyear and semesters.num = pnum; + + return query + select DisciplineGrades.SemesterYear as "SemesterYear", + DisciplineGrades.SemesterNum as "SemesterNum", + DisciplineGrades.PlanExternalID as "PlanExternalDI", + 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 = pdisciplineexternalid) 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; +END +$function$; + +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, + ( 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 + ORDER BY submodules.ordernum + 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 + ORDER BY submodules.ordernum + 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 + ORDER BY submodules.ordernum + 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 + 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 = disciplines.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 = disciplines.id AND modules.type = 'bonus'::regular_exam_bonus_extra AND rating_table.recordbookid = record_books.id + LIMIT 1) AS bonusrate + 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 + JOIN record_books_plans ON record_books.id = record_books_plans.recordbookid AND record_books_plans.studyplanid = study_plans.id; \ No newline at end of file diff --git a/~dev_rating/application/classes/Controller/Api/V0/FinalReport.php b/~dev_rating/application/classes/Controller/Api/V0/FinalReport.php index 8f22c9e30c25bbc7afd310e6692dc0c847bcc48e..c602b7b169480d83971f3a042a60ea8e463df83e 100644 --- a/~dev_rating/application/classes/Controller/Api/V0/FinalReport.php +++ b/~dev_rating/application/classes/Controller/Api/V0/FinalReport.php @@ -51,7 +51,8 @@ class Controller_Api_V0_FinalReport extends Controller_Handler_Api * "extra": [ * null, * null - * ] + * ], + * "bonus": [null] * } * } * } @@ -92,6 +93,7 @@ class Controller_Api_V0_FinalReport extends Controller_Handler_Api 'semester' => $row->SemesterRate, 'exam' => [$row->ExamRate, $row->Exam2Rate, $row->Exam3Rate], 'extra' => [$row->ExtraRate, $row->Extra2Rate], + 'bonus' => [$row->BonusRate] ]; } diff --git a/~dev_rating/application/classes/Model/FinalReportItem.php b/~dev_rating/application/classes/Model/FinalReportItem.php index 39be1c5625dd14132b1bcae8d3837d184a895f78..e3cadf0d4cd5110e89fe4426fa595b52067061a9 100644 --- a/~dev_rating/application/classes/Model/FinalReportItem.php +++ b/~dev_rating/application/classes/Model/FinalReportItem.php @@ -14,6 +14,7 @@ * @property int Exam3Rate * @property int ExtraRate * @property int Extra2Rate + * @property int BonusRate */ class Model_FinalReportItem extends Model { @@ -30,5 +31,6 @@ class Model_FinalReportItem extends Model $this->Exam3Rate = isset($row['Exam3Rate']) ? (int)$row['Exam3Rate'] : null; $this->ExtraRate = isset($row['ExtraRate']) ? (int)$row['ExtraRate'] : null; $this->Extra2Rate = isset($row['Extra2Rate']) ? (int)$row['Extra2Rate'] : null; + $this->BonusRate = isset($row['BonusRate']) ? (int)$row['BonusRate'] : null; } }