From a5188ce24a0cc2121418f53b4bda5d470c9930b9 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Thu, 22 Jan 2026 10:45:15 +0100 Subject: [PATCH] new component AverageGrade showing no grades if zeugnisnote is not existing yet --- .../Cis/Mylv/Semester/Studiengang.js | 8 +- .../Mylv/Semester/Studiengang/AverageGrade.js | 94 ++++++++++++ .../Cis/Mylv/Semester/Studiengang/Lv.js | 6 +- system/phrasesupdate.php | 142 ++++++++++++++++++ 4 files changed, 245 insertions(+), 5 deletions(-) create mode 100644 public/js/components/Cis/Mylv/Semester/Studiengang/AverageGrade.js diff --git a/public/js/components/Cis/Mylv/Semester/Studiengang.js b/public/js/components/Cis/Mylv/Semester/Studiengang.js index 15d210796..7e09f67b0 100644 --- a/public/js/components/Cis/Mylv/Semester/Studiengang.js +++ b/public/js/components/Cis/Mylv/Semester/Studiengang.js @@ -1,9 +1,11 @@ import MylvSemesterStudiengangLv from "./Studiengang/Lv.js"; +import MylvSemesterStudiengangAverageGrade from "./Studiengang/AverageGrade.js"; import Phrasen from "../../../../mixins/Phrasen.js"; export default { components: { - MylvSemesterStudiengangLv + MylvSemesterStudiengangLv, + MylvSemesterStudiengangAverageGrade }, mixins: [ Phrasen @@ -29,9 +31,10 @@ export default { methods: { note(lv) { return lv.benotung ? lv.znote || lv.lvnote || null : null; - } + }, }, template: `
+

{{$p.user_language.value === 'English' ? sg_bezeichnung_eng : bezeichnung}} - {{kuerzel}} {{semester}}.{{$p.t('lehre/semester')}} @@ -41,6 +44,7 @@ export default {

+ ` }; \ No newline at end of file diff --git a/public/js/components/Cis/Mylv/Semester/Studiengang/AverageGrade.js b/public/js/components/Cis/Mylv/Semester/Studiengang/AverageGrade.js new file mode 100644 index 000000000..5fcc6262a --- /dev/null +++ b/public/js/components/Cis/Mylv/Semester/Studiengang/AverageGrade.js @@ -0,0 +1,94 @@ +import Phrasen from "../../../../../mixins/Phrasen.js"; + +export default { + mixins: [ + Phrasen + ], + props: { + lvs: Array, + }, + data: ( ) =>{ + return { + gradeAverage: null, + gradeWeightedAverage: null, + existingGrades: false + } + }, + methods: { + calculateAverages(){ + let sum = 0; + let count = 0; + let sumWeighted = 0; + let sumEcts = 0; + + this.lvs.forEach((lv) => { + if ((lv.znote >= 1 && lv.znote <= 5) && lv.znote!= null) { + this.existingGrades = true; + sum+= lv.znote; + count++; + sumWeighted += lv.znote * Number(lv.ects); + sumEcts += Number(lv.ects); + } + }); + this.gradeAverage = (sum/count).toFixed(2); + this.gradeWeightedAverage = (sumWeighted/sumEcts).toFixed(2); + } + }, + watch: { + lvs: { + handler() { + this.calculateAverages(); + }, + deep: true, + immediate: true + } + }, + mounted(){ + this.calculateAverages(); + }, + template: /*html*/` +
+ +
+
{{$p.t('lehre/notenstatistik')}}
+
+ +
+ + + + + + + + + + + +
+ {{$p.t('lehre/headerAverage')}} + + {{ gradeAverage }} +
+ {{$p.t('lehre/headerWeightedAverage')}} + + {{ gradeWeightedAverage }} +
+
+
+

{{$p.t('lehre/info_noGradesYet')}}

+
+ + + +
+ ` +} diff --git a/public/js/components/Cis/Mylv/Semester/Studiengang/Lv.js b/public/js/components/Cis/Mylv/Semester/Studiengang/Lv.js index 3fd5e6900..a8cb2bc97 100644 --- a/public/js/components/Cis/Mylv/Semester/Studiengang/Lv.js +++ b/public/js/components/Cis/Mylv/Semester/Studiengang/Lv.js @@ -73,11 +73,11 @@ export default { }, grade() { const languageIndex = this.$p.user_language.value === 'English' ? 1 : 0 + // no more showing of grade LV, if grade Zeugnis is not existing yet if(this.benotung && this.znotebez?.length) { return this.znotebez[languageIndex] - } else if(this.benotung && this.lvnotebez?.length) { - return this.lvnotebez[languageIndex] - } else return null + } + else return null }, LvHasPruefungenInformation(){ return this.pruefungenData && this.pruefungenData.length > 0; diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index ab5885b19..c4ec45ad6 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -52851,6 +52851,148 @@ I have been informed that I am under no obligation to consent to the transmissio ) ), // ### Refactor Messages END + // ### Start Notenstatistik + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'hinweis', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Hinweis', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Notice', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehre', + 'phrase' => 'noticeAverage', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Bitte beachten Sie, dass außercurriculare Lehrveranstaltungen (zB Freifächer) den errechneten Notendurchschnitt verfälschen können.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Please note that extracurricular courses (e.g., electives) can distort the calculated grade point average.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehre', + 'phrase' => 'noticeWeightedAverage', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Der gewichtete Notendurchschnitt errechnet sich aus der Note der Lehrveranstaltung, multipliziert mit deren ECTS, dividiert durch die Summe aller ECTS.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'The weighted average grade is calculated by multiplying the grade of the course by its ECTS credits and dividing by the sum of all ECTS credits.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehre', + 'phrase' => 'headerAverage', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Notendurchschnitt* der Zeugnisnote', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Average grade* of report card grade', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehre', + 'phrase' => 'headerWeightedAverage', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Gewichteter** Notendurchschnitt* der Zeugnisnote', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Weighted** average grade* of report card grade', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehre', + 'phrase' => 'notenstatistik', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Leistungsübersicht', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Performance overview', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'lehre', + 'phrase' => 'info_noGradesYet', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Es wurden noch keine Beurteilungen eingetragen.', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'No grades have been entered yet.', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + // ### End Notenstatistik );