fixed exam subject rename thing

This commit is contained in:
Kima 2023-10-12 21:06:53 +02:00
parent a4207b8348
commit 1cc885e4b7
4 changed files with 63 additions and 16 deletions

View File

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

View File

@ -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();
} }
} }

View File

@ -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),

View File

@ -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),