Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion assets/translations/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -375,5 +375,20 @@
"filter_custom": "Eigener Zeitraum",
"parent_summary": "Elterngespräch",
"work_habits": "Arbeitsverhalten",
"empty_grades": "Noch keine Noten erfasst"
"empty_grades": "Noch keine Noten erfasst",
"lesson_not_started": "Noch nicht begonnen",
"start_lesson": "Stunde starten",
"continue_lesson": "Stunde fortsetzen",
"resolve_conflict": "Konflikt lösen",
"backup_conflict_detected": "Sicherungskonflikt",
"backup_conflict_detected_hint": "Ein anderes Gerät hat Änderungen an dieser Bibliothek gesichert, die diesem Gerät noch nicht bekannt sind.",
"backup_conflict_explanation": "Ein anderes Gerät hat nach der letzten Synchronisierung dieses Geräts Änderungen an dieser Bibliothek hochgeladen. Es wird nichts gelöscht — die gewählte Version wird zur aktiven Bibliothek, die andere bleibt in der Sicherungsliste verfügbar.",
"this_device_version": "Version dieses Geräts",
"server_version": "Version auf dem Server",
"keep_this_device_version": "Version dieses Geräts behalten",
"use_server_version": "Version auf dem Server verwenden",
"conflict_resolved": "Konflikt gelöst.",
"unknown_device": "Unbekanntes Gerät",
"call_name": "Rufname",
"call_name_hint": "Falls abweichend vom Vornamen"
}
17 changes: 16 additions & 1 deletion assets/translations/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -375,5 +375,20 @@
"filter_custom": "Custom range",
"parent_summary": "Parent meeting",
"work_habits": "Work habits",
"empty_grades": "No grades recorded yet"
"empty_grades": "No grades recorded yet",
"lesson_not_started": "Not started yet",
"start_lesson": "Start lesson",
"continue_lesson": "Continue lesson",
"resolve_conflict": "Resolve conflict",
"backup_conflict_detected": "Backup conflict",
"backup_conflict_detected_hint": "Another device backed up changes to this library that this device hasn't synced yet. Resolve it to keep backups in sync.",
"backup_conflict_explanation": "Another device uploaded changes to this library after this device's last sync. Nothing has been deleted — pick which version becomes your active library. The version you don't choose stays available in your backup list.",
"this_device_version": "This device's version",
"server_version": "Server version",
"keep_this_device_version": "Keep this device's version",
"use_server_version": "Use the server version",
"conflict_resolved": "Conflict resolved.",
"unknown_device": "Unknown device",
"call_name": "Call name",
"call_name_hint": "If different from the first name"
}
5 changes: 4 additions & 1 deletion lib/core/database/app_database.dart
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ class AppDatabase extends _$AppDatabase {
final String databasePath;

@override
int get schemaVersion => 21;
int get schemaVersion => 22;

@override
MigrationStrategy get migration => MigrationStrategy(
Expand Down Expand Up @@ -197,6 +197,9 @@ class AppDatabase extends _$AppDatabase {
if (from < 21) {
await migrator.createTable(timeframeGradesTable);
}
if (from < 22) {
await migrator.addColumn(studentsTable, studentsTable.callName);
}
},
);

Expand Down
72 changes: 72 additions & 0 deletions lib/core/database/app_database.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions lib/core/database/tables/students_table.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@ class StudentsTable extends Table {

TextColumn get lastName => text().withLength(min: 1, max: 100)();

/// Informal name a teacher actually calls the student by (German
/// "Rufname"), shown instead of [firstName] wherever the surname is
/// still displayed alongside it. `null` means "same as firstName".
TextColumn get callName => text().nullable()();

IntColumn get groupId =>
integer().references(GroupsTable, #id, onDelete: KeyAction.cascade)();

Expand Down
Loading