firka: ignore final and percent grades in averages

This commit is contained in:
2026-03-05 10:15:55 +01:00
parent be6d28cfe3
commit 71b4b6aec7
3 changed files with 40 additions and 8 deletions

View File

@@ -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<Grade> 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;

View File

@@ -146,7 +146,7 @@ class _HomeGradesScreen extends FirkaState<HomeGradesScreen> {
double avg = double.nan;
if (subjectGrades.isNotEmpty) {
avg = grades!.response!.getAverageBySubject(subject);
avg = subjectGrades.getAverageBySubject(subject);
}
if (avg.isNaN) {

View File

@@ -65,9 +65,22 @@ Color getGradeColor(
}
(int total, List<int> countsByGrade) getGradeDistribution(List<Grade> 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<Grade> {
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;
}