From 71b4b6aec779f4fbc48a595642b4c2f414c7c3e3 Mon Sep 17 00:00:00 2001 From: Armand <4831c0@proton.me> Date: Thu, 5 Mar 2026 10:15:55 +0100 Subject: [PATCH] firka: ignore final and percent grades in averages --- firka/lib/core/average_helper.dart | 16 +++++++++- .../lib/ui/phone/pages/home/home_grades.dart | 2 +- .../lib/ui/components/grade_helpers.dart | 30 +++++++++++++++---- 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/firka/lib/core/average_helper.dart b/firka/lib/core/average_helper.dart index 98c2e6f..ff37068 100644 --- a/firka/lib/core/average_helper.dart +++ b/firka/lib/core/average_helper.dart @@ -5,12 +5,26 @@ bool _isPercentageGrade(Grade grade) { return name.contains('szazalek') || name.contains('percent'); } +bool _shouldIgnoreInAverage(Grade grade) { + if (_isPercentageGrade(grade)) { + return true; + } + + final typeName = grade.type.name?.toLowerCase() ?? ''; + if (typeName == 'felevi_jegy_ertekeles' || + typeName == 'evvegi_jegy_ertekeles') { + return true; + } + + return false; +} + double calculateAverage(List sortedGrades) { double totalWeight = 0.0; double weightedSum = 0.0; for (final grade in sortedGrades) { - if (_isPercentageGrade(grade)) continue; + if (_shouldIgnoreInAverage(grade)) continue; final value = grade.numericValue; final weight = grade.weightPercentage; diff --git a/firka/lib/ui/phone/pages/home/home_grades.dart b/firka/lib/ui/phone/pages/home/home_grades.dart index 0bb968c..f3625a4 100644 --- a/firka/lib/ui/phone/pages/home/home_grades.dart +++ b/firka/lib/ui/phone/pages/home/home_grades.dart @@ -146,7 +146,7 @@ class _HomeGradesScreen extends FirkaState { double avg = double.nan; if (subjectGrades.isNotEmpty) { - avg = grades!.response!.getAverageBySubject(subject); + avg = subjectGrades.getAverageBySubject(subject); } if (avg.isNaN) { diff --git a/firka_common/lib/ui/components/grade_helpers.dart b/firka_common/lib/ui/components/grade_helpers.dart index 4f202b4..f66b5f5 100644 --- a/firka_common/lib/ui/components/grade_helpers.dart +++ b/firka_common/lib/ui/components/grade_helpers.dart @@ -65,9 +65,22 @@ Color getGradeColor( } (int total, List countsByGrade) getGradeDistribution(List grades) { - final filtered = grades - .where((g) => g.type.name != "felevi_jegy_ertekeles") - .toList(); + final filtered = grades.where((g) { + final typeName = g.type.name?.toLowerCase() ?? ''; + if (typeName == 'felevi_jegy_ertekeles' || + typeName == 'evvegi_jegy_ertekeles') { + return false; + } + + final valueTypeName = g.valueType.name?.toLowerCase() ?? ''; + final isPercentage = + valueTypeName.contains('szazalek') || valueTypeName.contains('percent'); + if (isPercentage) { + return false; + } + + return true; + }).toList(); final counts = [0, 0, 0, 0, 0]; for (final g in filtered) { if (g.numericValue == null) continue; @@ -86,11 +99,16 @@ extension GradeListExtension on List { for (var grade in this) { if (grade.subject.uid == subject.uid) { - final name = grade.valueType.name?.toLowerCase() ?? ''; + final valueTypeName = grade.valueType.name?.toLowerCase() ?? ''; final isPercentage = - name.contains('szazalek') || name.contains('percent'); + valueTypeName.contains('szazalek') || + valueTypeName.contains('percent'); - if (isPercentage) { + final typeName = grade.type.name?.toLowerCase() ?? ''; + final isHalfYear = typeName == 'felevi_jegy_ertekeles'; + final isEndYear = typeName == 'evvegi_jegy_ertekeles'; + + if (isPercentage || isHalfYear || isEndYear) { continue; }