diff --git a/application/controllers/api/frontend/v1/Lehre.php b/application/controllers/api/frontend/v1/Lehre.php index 10d945a3e..c2ebeb10b 100644 --- a/application/controllers/api/frontend/v1/Lehre.php +++ b/application/controllers/api/frontend/v1/Lehre.php @@ -38,7 +38,8 @@ class Lehre extends FHCAPI_Controller parent::__construct([ 'lvStudentenMail' => self::PERM_LOGGED, 'LV' => self::PERM_LOGGED, - 'Pruefungen' => self::PERM_LOGGED + 'Pruefungen' => self::PERM_LOGGED, + 'semesterAverageGrade' => self::PERM_LOGGED, ]); } @@ -100,5 +101,49 @@ class Lehre extends FHCAPI_Controller $this->terminateWithSuccess($result); } + + /** + * calculates and returns the grade average and weighted average for a specific semester + * @param string $studiensemester_kurzbz + * @return void + */ + + public function semesterAverageGrade($studiensemester_kurzbz) + { + $this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel'); + $semesterLvs = $this->LehrveranstaltungModel->getLvsByStudentWithGrades(getAuthUID(), $studiensemester_kurzbz, getUserLanguage()); + + if (isError($semesterLvs)) + return $this->outputJsonError(getError($semesterLvs)); + + $semesterLvsData = getData($semesterLvs); + + $doGradesExist = false; + $sum = 0; + $count = 0; + $sumWeighted = 0; + $sumEcts = 0; + + foreach ($semesterLvsData as $lv) { + if (!$lv->znote || $lv->znote < 1 || $lv->znote > 5) + continue; + + $doGradesExist = true; + + $sum += $lv->znote; + $count++; + $sumWeighted += $lv->znote * floatval($lv->ects); + $sumEcts += floatval($lv->ects); + } + + $averageGrade = null; + $weightedAverageGrade = null; + if ($doGradesExist) { + $averageGrade = $sum/$count; + $weightedAverageGrade = $sumWeighted/$sumEcts; + } + + $this->terminateWithSuccess(['average_grade' => $averageGrade, 'weighted_average_grade' => $weightedAverageGrade]); + } } diff --git a/public/js/api/factory/lehre.js b/public/js/api/factory/lehre.js index 84c8e8662..4f32a1e55 100644 --- a/public/js/api/factory/lehre.js +++ b/public/js/api/factory/lehre.js @@ -35,5 +35,11 @@ export default { method: 'get', url: `/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}` }; + }, + getSemesterAverageGrade(semester) { + return { + method: 'get', + url: `/api/frontend/v1/Lehre/semesterAverageGrade/${semester}` + } } }; \ No newline at end of file diff --git a/public/js/components/Cis/Mylv/Semester.js b/public/js/components/Cis/Mylv/Semester.js index 994a7c9ff..90dab5a32 100644 --- a/public/js/components/Cis/Mylv/Semester.js +++ b/public/js/components/Cis/Mylv/Semester.js @@ -36,8 +36,9 @@ export default { return this.lvs.filter(lv => lv.studiengang_kz == studiengang.studiengang_kz && lv.semester == studiengang.semester); } }, - template: `