113 lines
3.0 KiB
Dart
113 lines
3.0 KiB
Dart
import "package:flutter/material.dart";
|
|
|
|
import "category.dart";
|
|
import "subject.dart";
|
|
import "teacher.dart";
|
|
|
|
class Absence {
|
|
Map? json;
|
|
String id;
|
|
DateTime date;
|
|
int delay;
|
|
DateTime submitDate;
|
|
Teacher teacher;
|
|
Justification state;
|
|
Category? justification;
|
|
Category? type;
|
|
Category? mode;
|
|
GradeSubject subject;
|
|
DateTime lessonStart;
|
|
DateTime lessonEnd;
|
|
int? lessonIndex;
|
|
String group;
|
|
bool isSeen;
|
|
@override
|
|
bool operator ==(Object other) =>
|
|
identical(this, other) ||
|
|
other is Absence && runtimeType == other.runtimeType && id == other.id;
|
|
|
|
@override
|
|
int get hashCode => id.hashCode;
|
|
|
|
Absence({
|
|
required this.id,
|
|
required this.date,
|
|
required this.delay,
|
|
required this.submitDate,
|
|
required this.teacher,
|
|
required this.state,
|
|
this.justification,
|
|
this.type,
|
|
this.mode,
|
|
required this.subject,
|
|
required this.lessonStart,
|
|
required this.lessonEnd,
|
|
this.lessonIndex,
|
|
required this.group,
|
|
this.json,
|
|
this.isSeen = false,
|
|
});
|
|
|
|
factory Absence.fromJson(Map json) {
|
|
DateTime lessonStart;
|
|
DateTime lessonEnd;
|
|
int? lessonIndex;
|
|
// bool isSeen = json["isSeen"] ?? false;
|
|
if (json["Ora"] != null) {
|
|
lessonStart = json["Ora"]["KezdoDatum"] != null
|
|
? DateTime.parse(json["Ora"]["KezdoDatum"]).toLocal()
|
|
: DateTime(0);
|
|
lessonEnd = json["Ora"]["VegDatum"] != null
|
|
? DateTime.parse(json["Ora"]["VegDatum"]).toLocal()
|
|
: DateTime(0);
|
|
lessonIndex = json["Ora"]["Oraszam"];
|
|
} else {
|
|
lessonStart = DateTime(0);
|
|
lessonEnd = DateTime(0);
|
|
}
|
|
return Absence(
|
|
id: json["Uid"],
|
|
date: json["Datum"] != null
|
|
? DateTime.parse(json["Datum"]).toLocal()
|
|
: DateTime(0),
|
|
delay: json["KesesPercben"] ?? 0,
|
|
submitDate: json["KeszitesDatuma"] != null
|
|
? DateTime.parse(json["KeszitesDatuma"]).toLocal()
|
|
: DateTime(0),
|
|
teacher: Teacher.fromString((json["RogzitoTanarNeve"] ?? "").trim()),
|
|
state: json["IgazolasAllapota"] == "Igazolt"
|
|
? Justification.excused
|
|
: json["IgazolasAllapota"] == "Igazolando"
|
|
? Justification.pending
|
|
: Justification.unexcused,
|
|
justification: json["IgazolasTipusa"] != null
|
|
? Category.fromJson(json["IgazolasTipusa"])
|
|
: null,
|
|
type: json["Tipus"] != null ? Category.fromJson(json["Tipus"]) : null,
|
|
mode: json["Mod"] != null ? Category.fromJson(json["Mod"]) : null,
|
|
subject: GradeSubject.fromJson(json["Tantargy"] ?? {}),
|
|
lessonStart: lessonStart,
|
|
lessonEnd: lessonEnd,
|
|
lessonIndex: lessonIndex,
|
|
group:
|
|
json["OsztalyCsoport"] != null ? json["OsztalyCsoport"]["Uid"] : "",
|
|
isSeen: json["isSeen"] ?? false,
|
|
json: json,
|
|
);
|
|
}
|
|
}
|
|
|
|
enum Justification { excused, unexcused, pending }
|
|
|
|
class AbsenceChartData {
|
|
double start;
|
|
double end;
|
|
Color color;
|
|
|
|
AbsenceChartData({
|
|
required this.start,
|
|
required this.end,
|
|
this.color = Colors.transparent,
|
|
});
|
|
}
|