From e92939c7e06084bb7cf0d7471e01fe6f6922d3dc Mon Sep 17 00:00:00 2001 From: Armand <4831c0@proton.me> Date: Tue, 2 Sep 2025 13:46:22 +0200 Subject: [PATCH] tt_mo: add unexcused --- firka/lib/helpers/api/model/omission.dart | 8 +-- .../phone/pages/home/home_timetable_mo.dart | 65 ++++++++++++++++--- 2 files changed, 59 insertions(+), 14 deletions(-) diff --git a/firka/lib/helpers/api/model/omission.dart b/firka/lib/helpers/api/model/omission.dart index 2bf9492..6db31fa 100644 --- a/firka/lib/helpers/api/model/omission.dart +++ b/firka/lib/helpers/api/model/omission.dart @@ -35,12 +35,12 @@ class Omission { uid: json['Uid'], subject: Subject.fromJson(json['Tantargy']), c: json['Osztaly'] != null ? Class.fromJson(json['Osztaly']) : null, - date: DateTime.parse(json['Datum']), + date: DateTime.parse(json['Datum']).toLocal(), teacher: json['RogzitoTanarNeve'], type: json['Tipus'] != null ? NameUidDesc.fromJson(json['Tipus']) : null, mode: json['Mod'] != null ? NameUidDesc.fromJson(json['Mod']) : null, lateForMin: json['KesesPercben'], - createdAt: DateTime.parse(json['KeszitesDatuma']), + createdAt: DateTime.parse(json['KeszitesDatuma']).toLocal(), state: json['IgazolasAllapota'], proofType: json['IgazolasTipusa'] != null ? NameUidDesc.fromJson(json['IgazolasTipusa']) @@ -83,8 +83,8 @@ class Class { factory Class.fromJson(Map json) { return Class( - start: DateTime.parse(json['KezdoDatum']), - end: DateTime.parse(json['VegDatum']), + start: DateTime.parse(json['KezdoDatum']).toLocal(), + end: DateTime.parse(json['VegDatum']).toLocal(), classNo: json['Oraszam'], ); } diff --git a/firka/lib/ui/phone/pages/home/home_timetable_mo.dart b/firka/lib/ui/phone/pages/home/home_timetable_mo.dart index 35afef0..05a012e 100644 --- a/firka/lib/ui/phone/pages/home/home_timetable_mo.dart +++ b/firka/lib/ui/phone/pages/home/home_timetable_mo.dart @@ -1,4 +1,5 @@ import 'package:firka/helpers/api/consts.dart'; +import 'package:firka/helpers/api/model/omission.dart'; import 'package:firka/helpers/api/model/timetable.dart'; import 'package:firka/helpers/debug_helper.dart'; import 'package:firka/helpers/extensions.dart'; @@ -37,6 +38,7 @@ class _HomeTimetableMonthlyScreen extends State { List? lessons; List? tests; List? dates; + List? omissions; DateTime? now; int active = 0; ActiveFilter activeFilter = ActiveFilter.lessonNo; @@ -44,6 +46,9 @@ class _HomeTimetableMonthlyScreen extends State { _HomeTimetableMonthlyScreen(); Future initForMonth(DateTime now, {bool forceCache = true}) async { + if (!forceCache) { + widget.data.client.evictMemCache(); + } final monthStart = DateTime.utc(now.year, now.month, 1); final monthEnd = DateTime.utc(now.year, now.month + 1).subtract(Duration(days: 1)); @@ -57,6 +62,8 @@ class _HomeTimetableMonthlyScreen extends State { var lessonsResp = await widget.data.client .getTimeTable(monthStart, monthEnd, forceCache: forceCache); var testsResp = await widget.data.client.getTests(forceCache: forceCache); + var omissionsResp = + await widget.data.client.getOmissions(forceCache: forceCache); List dates = List.empty(growable: true); for (var i = 0; i < days; i++) { @@ -69,6 +76,7 @@ class _HomeTimetableMonthlyScreen extends State { .toList(); } tests = testsResp.response; + omissions = omissionsResp.response; if (mounted) { setState(() { @@ -112,7 +120,10 @@ class _HomeTimetableMonthlyScreen extends State { @override Widget build(BuildContext context) { - if (lessons != null && tests != null && dates != null) { + if (lessons != null && + omissions != null && + tests != null && + dates != null) { List ttDays = []; final meow = dates![20]; @@ -195,16 +206,50 @@ class _HomeTimetableMonthlyScreen extends State { case ActiveFilter.omissions: if (omissionType != null) { switch (omissionType.studentPresence!.name) { - case OmissionConsts.na: case OmissionConsts.absence: - body = Center( - child: FirkaIconWidget( - FirkaIconType.majesticons, - Majesticon.multiplySolid, - size: 20.0, - color: appStyle.colors.accent, - ), - ); + final omission = omissions!.firstWhereOrNull((omission) { + // debugPrint(omission.toString()); + // debugPrint(omissionType.toString()); + return omission.date + .getMidnight() + .millisecondsSinceEpoch == + omissionType.start + .getMidnight() + .millisecondsSinceEpoch && + omission.subject.uid == omissionType.subject?.uid; + }); + if (omission != null) { + switch (omission.state) { + case "Igazolando": + body = Center( + child: FirkaIconWidget( + FirkaIconType.majesticons, + Majesticon.restrictedSolid, + size: 20.0, + color: appStyle.colors.errorAccent, + ), + ); + break; + default: + body = Center( + child: FirkaIconWidget( + FirkaIconType.majesticons, + Majesticon.multiplySolid, + size: 20.0, + color: appStyle.colors.accent, + ), + ); + } + } else { + body = Center( + child: FirkaIconWidget( + FirkaIconType.majesticons, + Majesticon.multiplySolid, + size: 20.0, + color: appStyle.colors.accent, + ), + ); + } break; default: debugPrint(omissionType.studentPresence!.name);