From f952ba54b983d7c427240e2de60288de9408e2d5 Mon Sep 17 00:00:00 2001 From: Vladislav Yakovlev <vlad309523@gmail.com> Date: Sun, 1 Apr 2018 17:00:56 +0300 Subject: [PATCH] fix: final-report --- db/migrations/stored/R__views.sql | 12 ++--- .../classes/Controller/Api/V0/FinalReport.php | 47 ++++--------------- .../classes/Model/FinalReportItem.php | 15 ++++-- 3 files changed, 28 insertions(+), 46 deletions(-) diff --git a/db/migrations/stored/R__views.sql b/db/migrations/stored/R__views.sql index 4f61e7460..1d5dac748 100644 --- a/db/migrations/stored/R__views.sql +++ b/db/migrations/stored/R__views.sql @@ -183,12 +183,12 @@ CREATE OR REPLACE VIEW `view_roadmap` AS CREATE OR REPLACE VIEW `view_final_report` AS - SELECT - semesters.Year AS 'SemesterYear', - semesters.Num AS 'SemesterNum', - study_plans.ExternalID AS 'PlanExternalID', - subjects.ExternalID AS 'SubjectExternalID', - record_books.ExternalID AS 'RecordBookExternalID', + 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 diff --git a/~dev_rating/application/classes/Controller/Api/V0/FinalReport.php b/~dev_rating/application/classes/Controller/Api/V0/FinalReport.php index 0a6626e6f..3ee329c1d 100644 --- a/~dev_rating/application/classes/Controller/Api/V0/FinalReport.php +++ b/~dev_rating/application/classes/Controller/Api/V0/FinalReport.php @@ -1,17 +1,7 @@ <?php class Controller_Api_V0_FinalReport extends Controller_Handler_Api { - public static function array_group_by($array, $key) { - $grouped = []; - foreach ($array as $value) { - $grouped[$value->{$key}][] = $value; - } - - return $grouped; - } - public function action_get_index() { - $finalReport = []; try { // Получаем год и номер семестра из query запроса @@ -21,38 +11,21 @@ class Controller_Api_V0_FinalReport extends Controller_Handler_Api { // Получаем ведомость из БД $finalReport = Model_FinalReport::getBySemesterYearNum($year, $num); - // Группируем ведомость по планам - $finalReport = Controller_Api_V0_FinalReport::array_group_by($finalReport, 'PlanExternalID'); - - // Группируем ведомость по предметам - foreach ($finalReport as $planExternalID => $row) { - $finalReport[$planExternalID] = Controller_Api_V0_FinalReport::array_group_by($row, 'SubjectExternalID'); - } - - // Группируем ведомость по студентам (у каждого студента одна строчка с оценками, при помощи группировки делаем словарь) - foreach ($finalReport as $planExternalID => $disciplines) { - foreach ($disciplines as $subjectExternalID => $row) { - $finalReport[$planExternalID][$subjectExternalID] = Controller_Api_V0_FinalReport::array_group_by($row, 'StudentExternalID'); - } + $response = []; + /** @var Model_FinalReportItem $row */ + foreach ($finalReport as $row) { + $response[$row->PlanExternalID][$row->SubjectExternalID][$row->RecordBookExternalID] = [ + 'semester' => $row->SemesterRate, + 'exam' => [$row->ExamRate, $row->Exam2Rate, $row->Exam3Rate], + 'extra' => [$row->ExtraRate, $row->Extra2Rate], + ]; } - // Перебираем все строки каждого студента и сохраняем результаты в задокументированном формате - foreach ($finalReport as $planExternalID => $disciplines) { - foreach ($disciplines as $subjectExternalID => $students) { - /** @var Model_FinalReportItem $row */ - foreach ($students as $recordBookExternalID => $row) { - $finalReport[$planExternalID][$subjectExternalID][$recordBookExternalID] = [ - 'semester' => $row->SemesterRate, - 'exam' => [$row->ExamRate, $row->Exam2Rate, $row->Exam3Rate], - 'extra' => [$row->ExtraRate, $row->Extra2Rate], - ]; - } - } - } + return $response; } catch (Exception $e) { $this->badRequestError($e->getMessage()); } - return $finalReport; + return null; } } diff --git a/~dev_rating/application/classes/Model/FinalReportItem.php b/~dev_rating/application/classes/Model/FinalReportItem.php index 0ec16fc31..8dcbbb896 100644 --- a/~dev_rating/application/classes/Model/FinalReportItem.php +++ b/~dev_rating/application/classes/Model/FinalReportItem.php @@ -5,6 +5,7 @@ * * @property int SemesterYear * @property int SemesterNum + * @property string PlanExternalID * @property string SubjectExternalID * @property string RecordBookExternalID * @property int SemesterRate @@ -17,8 +18,16 @@ class Model_FinalReportItem extends Model { public function __construct($row) { - foreach ($row as $key => $value) { - $this->{$key} = $value; - } + $this->SemesterYear = isset($row['SemesterYear']) ? (int)$row['SemesterYear'] : null; + $this->SemesterNum = isset($row['SemesterNum']) ? (int)$row['SemesterNum'] : null; + $this->PlanExternalID = str_pad($row['PlanExternalID'], 9, '0', STR_PAD_LEFT); + $this->SubjectExternalID = $row['SubjectExternalID']; + $this->RecordBookExternalID = $row['RecordBookExternalID']; + $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; + $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; } } -- GitLab