fixed exam subject rename thing
This commit is contained in:
parent
a4207b8348
commit
1cc885e4b7
@ -1,3 +1,5 @@
|
|||||||
|
import 'package:filcnaplo_kreta_api/models/subject.dart';
|
||||||
|
|
||||||
import 'category.dart';
|
import 'category.dart';
|
||||||
import 'teacher.dart';
|
import 'teacher.dart';
|
||||||
|
|
||||||
@ -6,8 +8,9 @@ class Exam {
|
|||||||
DateTime date;
|
DateTime date;
|
||||||
DateTime writeDate;
|
DateTime writeDate;
|
||||||
Category? mode;
|
Category? mode;
|
||||||
int? subjectIndex;
|
// int? subjectIndex;
|
||||||
String subjectName;
|
// String subjectName;
|
||||||
|
Subject subject;
|
||||||
Teacher teacher;
|
Teacher teacher;
|
||||||
String description;
|
String description;
|
||||||
String group;
|
String group;
|
||||||
@ -18,8 +21,9 @@ class Exam {
|
|||||||
required this.date,
|
required this.date,
|
||||||
required this.writeDate,
|
required this.writeDate,
|
||||||
this.mode,
|
this.mode,
|
||||||
this.subjectIndex,
|
// this.subjectIndex,
|
||||||
required this.subjectName,
|
// required this.subjectName,
|
||||||
|
required this.subject,
|
||||||
required this.teacher,
|
required this.teacher,
|
||||||
required this.description,
|
required this.description,
|
||||||
required this.group,
|
required this.group,
|
||||||
@ -36,8 +40,9 @@ class Exam {
|
|||||||
? DateTime.parse(json["Datum"]).toLocal()
|
? DateTime.parse(json["Datum"]).toLocal()
|
||||||
: DateTime(0),
|
: DateTime(0),
|
||||||
mode: json["Modja"] != null ? Category.fromJson(json["Modja"]) : null,
|
mode: json["Modja"] != null ? Category.fromJson(json["Modja"]) : null,
|
||||||
subjectIndex: json["OrarendiOraOraszama"],
|
// subjectIndex: json["OrarendiOraOraszama"],
|
||||||
subjectName: json["TantargyNeve"] ?? "",
|
// subjectName: json["TantargyNeve"] ?? "",
|
||||||
|
subject: Subject.fromJson(json["Tantargy"] ?? {}),
|
||||||
teacher: Teacher.fromString((json["RogzitoTanarNeve"] ?? "").trim()),
|
teacher: Teacher.fromString((json["RogzitoTanarNeve"] ?? "").trim()),
|
||||||
description: (json["Temaja"] ?? "").trim(),
|
description: (json["Temaja"] ?? "").trim(),
|
||||||
group: json["OsztalyCsoport"] != null
|
group: json["OsztalyCsoport"] != null
|
||||||
|
@ -27,19 +27,49 @@ class ExamProvider with ChangeNotifier {
|
|||||||
|
|
||||||
// Load exams from the database
|
// Load exams from the database
|
||||||
if (userId != null) {
|
if (userId != null) {
|
||||||
var dbExams = await Provider.of<DatabaseProvider>(_context, listen: false).userQuery.getExams(userId: userId);
|
var dbExams = await Provider.of<DatabaseProvider>(_context, listen: false)
|
||||||
|
.userQuery
|
||||||
|
.getExams(userId: userId);
|
||||||
_exams = dbExams;
|
_exams = dbExams;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
|
await convertBySettings();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for renamed subjects
|
||||||
|
Future<void> convertBySettings() async {
|
||||||
|
final _database = Provider.of<DatabaseProvider>(_context, listen: false);
|
||||||
|
Map<String, String> renamedSubjects =
|
||||||
|
(await _database.query.getSettings(_database)).renamedSubjectsEnabled
|
||||||
|
? await _database.userQuery.renamedSubjects(
|
||||||
|
userId:
|
||||||
|
Provider.of<UserProvider>(_context, listen: false).user!.id)
|
||||||
|
: {};
|
||||||
|
Map<String, String> renamedTeachers =
|
||||||
|
(await _database.query.getSettings(_database)).renamedTeachersEnabled
|
||||||
|
? await _database.userQuery.renamedTeachers(
|
||||||
|
userId:
|
||||||
|
Provider.of<UserProvider>(_context, listen: false).user!.id)
|
||||||
|
: {};
|
||||||
|
|
||||||
|
for (Exam exam in _exams) {
|
||||||
|
exam.subject.renamedTo =
|
||||||
|
renamedSubjects.isNotEmpty ? renamedSubjects[exam.subject.id] : null;
|
||||||
|
exam.teacher.renamedTo =
|
||||||
|
renamedTeachers.isNotEmpty ? renamedTeachers[exam.teacher.id] : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
// Fetches Exams from the Kreta API then stores them in the database
|
// Fetches Exams from the Kreta API then stores them in the database
|
||||||
Future<void> fetch() async {
|
Future<void> fetch() async {
|
||||||
User? user = Provider.of<UserProvider>(_context, listen: false).user;
|
User? user = Provider.of<UserProvider>(_context, listen: false).user;
|
||||||
if (user == null) throw "Cannot fetch Exams for User null";
|
if (user == null) throw "Cannot fetch Exams for User null";
|
||||||
String iss = user.instituteCode;
|
String iss = user.instituteCode;
|
||||||
|
|
||||||
List? examsJson = await Provider.of<KretaClient>(_context, listen: false).getAPI(KretaAPI.exams(iss));
|
List? examsJson = await Provider.of<KretaClient>(_context, listen: false)
|
||||||
|
.getAPI(KretaAPI.exams(iss));
|
||||||
if (examsJson == null) throw "Cannot fetch Exams for User ${user.id}";
|
if (examsJson == null) throw "Cannot fetch Exams for User ${user.id}";
|
||||||
List<Exam> exams = examsJson.map((e) => Exam.fromJson(e)).toList();
|
List<Exam> exams = examsJson.map((e) => Exam.fromJson(e)).toList();
|
||||||
|
|
||||||
@ -52,8 +82,11 @@ class ExamProvider with ChangeNotifier {
|
|||||||
if (user == null) throw "Cannot store Exams for User null";
|
if (user == null) throw "Cannot store Exams for User null";
|
||||||
String userId = user.id;
|
String userId = user.id;
|
||||||
|
|
||||||
await Provider.of<DatabaseProvider>(_context, listen: false).userStore.storeExams(exams, userId: userId);
|
await Provider.of<DatabaseProvider>(_context, listen: false)
|
||||||
|
.userStore
|
||||||
|
.storeExams(exams, userId: userId);
|
||||||
_exams = exams;
|
_exams = exams;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
|
await convertBySettings();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,8 @@ import 'package:filcnaplo/utils/format.dart';
|
|||||||
import 'package:flutter_feather_icons/flutter_feather_icons.dart';
|
import 'package:flutter_feather_icons/flutter_feather_icons.dart';
|
||||||
|
|
||||||
class ExamTile extends StatelessWidget {
|
class ExamTile extends StatelessWidget {
|
||||||
const ExamTile(this.exam, {Key? key, this.onTap, this.padding}) : super(key: key);
|
const ExamTile(this.exam, {Key? key, this.onTap, this.padding})
|
||||||
|
: super(key: key);
|
||||||
|
|
||||||
final Exam exam;
|
final Exam exam;
|
||||||
final void Function()? onTap;
|
final void Function()? onTap;
|
||||||
@ -22,26 +23,32 @@ class ExamTile extends StatelessWidget {
|
|||||||
visualDensity: VisualDensity.compact,
|
visualDensity: VisualDensity.compact,
|
||||||
contentPadding: const EdgeInsets.only(left: 8.0, right: 12.0),
|
contentPadding: const EdgeInsets.only(left: 8.0, right: 12.0),
|
||||||
onTap: onTap,
|
onTap: onTap,
|
||||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(14.0)),
|
shape:
|
||||||
|
RoundedRectangleBorder(borderRadius: BorderRadius.circular(14.0)),
|
||||||
leading: SizedBox(
|
leading: SizedBox(
|
||||||
width: 44,
|
width: 44,
|
||||||
height: 44,
|
height: 44,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.only(top: 2.0),
|
padding: const EdgeInsets.only(top: 2.0),
|
||||||
child: Icon(
|
child: Icon(
|
||||||
SubjectIcon.resolveVariant(subjectName: exam.subjectName, context: context),
|
SubjectIcon.resolveVariant(
|
||||||
|
subjectName: exam.subject.name, context: context),
|
||||||
size: 28.0,
|
size: 28.0,
|
||||||
color: AppColors.of(context).text.withOpacity(.75),
|
color: AppColors.of(context).text.withOpacity(.75),
|
||||||
),
|
),
|
||||||
)),
|
)),
|
||||||
title: Text(
|
title: Text(
|
||||||
exam.description != "" ? exam.description : (exam.mode?.description ?? "Számonkérés"),
|
exam.description != ""
|
||||||
|
? exam.description
|
||||||
|
: (exam.mode?.description ?? "Számonkérés"),
|
||||||
maxLines: 2,
|
maxLines: 2,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
style: const TextStyle(fontWeight: FontWeight.w600),
|
style: const TextStyle(fontWeight: FontWeight.w600),
|
||||||
),
|
),
|
||||||
subtitle: Text(
|
subtitle: Text(
|
||||||
exam.subjectName.capital(),
|
exam.subject.isRenamed
|
||||||
|
? exam.subject.renamedTo!
|
||||||
|
: exam.subject.name.capital(),
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
style: const TextStyle(fontWeight: FontWeight.w500),
|
style: const TextStyle(fontWeight: FontWeight.w500),
|
||||||
|
@ -29,13 +29,15 @@ class ExamView extends StatelessWidget {
|
|||||||
padding: const EdgeInsets.only(left: 6.0),
|
padding: const EdgeInsets.only(left: 6.0),
|
||||||
child: Icon(
|
child: Icon(
|
||||||
SubjectIcon.resolveVariant(
|
SubjectIcon.resolveVariant(
|
||||||
subjectName: exam.subjectName, context: context),
|
subjectName: exam.subject.name, context: context),
|
||||||
size: 36.0,
|
size: 36.0,
|
||||||
color: AppColors.of(context).text.withOpacity(.75),
|
color: AppColors.of(context).text.withOpacity(.75),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
title: Text(
|
title: Text(
|
||||||
exam.subjectName.capital(),
|
exam.subject.isRenamed
|
||||||
|
? exam.subject.renamedTo!
|
||||||
|
: exam.subject.name.capital(),
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
style: const TextStyle(fontWeight: FontWeight.w600),
|
style: const TextStyle(fontWeight: FontWeight.w600),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user