diff --git a/firka/lib/core/average_helper.dart b/firka/lib/core/average_helper.dart index 4f04b1a..b255c39 100644 --- a/firka/lib/core/average_helper.dart +++ b/firka/lib/core/average_helper.dart @@ -1,10 +1,17 @@ import 'package:kreta_api/kreta_api.dart'; +bool _isPercentageGrade(Grade grade) { + final name = grade.valueType.name.toLowerCase(); + return name.contains('szazalek') || name.contains('percent'); +} + double calculateAverage(List sortedGrades) { double totalWeight = 0.0; double weightedSum = 0.0; for (final grade in sortedGrades) { + if (_isPercentageGrade(grade)) continue; + final value = grade.numericValue; final weight = grade.weightPercentage; diff --git a/firka/lib/data/widget.dart b/firka/lib/data/widget.dart index ae4e347..20dbe03 100644 --- a/firka/lib/data/widget.dart +++ b/firka/lib/data/widget.dart @@ -322,6 +322,11 @@ class WidgetCacheHelper { var sum = 0.0; for (var grade in grades) { + final name = grade.valueType.name.toLowerCase(); + final isPercentage = + name.contains('szazalek') || name.contains('percent'); + if (isPercentage) continue; + if (grade.numericValue != null) { var weight = (grade.weightPercentage ?? 100) / 100.0; weightTotal += weight; diff --git a/firka/lib/ui/phone/pages/home/home_grades.dart b/firka/lib/ui/phone/pages/home/home_grades.dart index 35e98ba..c505a9b 100644 --- a/firka/lib/ui/phone/pages/home/home_grades.dart +++ b/firka/lib/ui/phone/pages/home/home_grades.dart @@ -146,18 +146,6 @@ class _HomeGradesScreen extends FirkaState { double avg = double.nan; if (subjectGrades.isNotEmpty) { - for (var grade in subjectGrades) { - if (grade.valueType.name == "Szazalekos") { - grade.valueType = NameUidDesc( - uid: "1,Osztalyzat", - name: "Osztalyzat", - description: "", - ); - if (grade.numericValue != null) { - grade.numericValue = percentageToGrade(grade.numericValue!); - } - } - } avg = grades!.response!.getAverageBySubject(subject); } diff --git a/firka/lib/ui/phone/widgets/grade_chart.dart b/firka/lib/ui/phone/widgets/grade_chart.dart index 918874d..78bb8fe 100644 --- a/firka/lib/ui/phone/widgets/grade_chart.dart +++ b/firka/lib/ui/phone/widgets/grade_chart.dart @@ -33,6 +33,10 @@ class _GradeChartState extends State { double totalWeight = 0; for (final g in grades) { if (g.subject.uid != subjectUid) continue; + final name = g.valueType.name.toLowerCase(); + final isPercentage = + name.contains('szazalek') || name.contains('percent'); + if (isPercentage) continue; final v = g.numericValue; final w = g.weightPercentage; if (v != null && w != null) { diff --git a/firka_common/lib/ui/components/grade_helpers.dart b/firka_common/lib/ui/components/grade_helpers.dart index 7d28172..d0b98f6 100644 --- a/firka_common/lib/ui/components/grade_helpers.dart +++ b/firka_common/lib/ui/components/grade_helpers.dart @@ -86,6 +86,14 @@ extension GradeListExtension on List { for (var grade in this) { if (grade.subject.uid == subject.uid) { + final name = grade.valueType.name.toLowerCase(); + final isPercentage = + name.contains('szazalek') || name.contains('percent'); + + if (isPercentage) { + continue; + } + if (grade.numericValue != null) { var weight = (grade.weightPercentage ?? 100) / 100.0; weightTotal += weight; @@ -95,6 +103,10 @@ extension GradeListExtension on List { } } + if (weightTotal == 0) { + return double.nan; + } + return sum / weightTotal; } }