Skip to content
Snippets Groups Projects
Commit f952ba54 authored by Vladislav Yakovlev's avatar Vladislav Yakovlev
Browse files

fix: final-report

parent 4bc6cf61
Branches
No related merge requests found
......@@ -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
......
<?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;
}
}
......@@ -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;
}
}
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