Skip to content

Commit 9d1f2e6

Browse files
timetable wip
1 parent 82df225 commit 9d1f2e6

9 files changed

Lines changed: 252 additions & 122 deletions

File tree

school_data_hub_flutter/lib/features/timetable/domain/managers/timetable_crud_manager.dart

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,27 @@ class TimetableCrudManager {
185185
}
186186
}
187187

188+
Future<bool?> updatePupilMembershipsForLessonGroup(
189+
int lessonGroupId,
190+
List<int> pupilDataIds,
191+
) async {
192+
try {
193+
final result = await _apiService.updatePupilMembershipsForLessonGroup(
194+
lessonGroupId,
195+
pupilDataIds,
196+
);
197+
if (result == true) {
198+
_log.info(
199+
'Pupil memberships updated for lesson group $lessonGroupId',
200+
);
201+
}
202+
return result;
203+
} catch (e) {
204+
_log.info('Error updating pupil memberships: $e');
205+
rethrow;
206+
}
207+
}
208+
188209
// Timetable CRUD operations
189210
Future<void> createTimetable(Timetable timetable) async {
190211
try {

school_data_hub_flutter/lib/features/timetable/domain/timetable_manager.dart

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,11 +172,12 @@ class TimetableManager {
172172
}
173173

174174
// CRUD Operations for Lesson Groups
175-
Future<void> addLessonGroup(LessonGroup lessonGroup) async {
175+
Future<LessonGroup?> addLessonGroup(LessonGroup lessonGroup) async {
176176
final createdLessonGroup = await _crudManager.addLessonGroup(lessonGroup);
177177
if (createdLessonGroup != null) {
178178
_dataManager.addLessonGroup(createdLessonGroup);
179179
}
180+
return createdLessonGroup;
180181
}
181182

182183
Future<void> updateLessonGroup(LessonGroup lessonGroup) async {
@@ -328,10 +329,10 @@ class TimetableManager {
328329
);
329330
}
330331

331-
void updatePupilMembershipsForLessonGroup(
332+
Future<void> updatePupilMembershipsForLessonGroup(
332333
int lessonGroupId,
333334
List<int> pupilDataIds,
334-
) {
335+
) async {
335336
_membershipManager.updatePupilMembershipsForLessonGroup(
336337
lessonGroupId,
337338
pupilDataIds,
@@ -340,6 +341,10 @@ class TimetableManager {
340341
_dataManager.updateScheduledLessonGroupMemberships(updatedMemberships);
341342
},
342343
);
344+
await _crudManager.updatePupilMembershipsForLessonGroup(
345+
lessonGroupId,
346+
pupilDataIds,
347+
);
343348
}
344349

345350
bool isPupilMemberOfLessonGroup(int lessonGroupId, int pupilDataId) {

school_data_hub_flutter/lib/features/timetable/presentation/learning_group_list_page/widgets/learning_group_list_card.dart

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,9 @@ class LearningGroupListCard extends StatelessWidget {
2020
margin: const EdgeInsets.only(bottom: 8),
2121
child: ListTile(
2222
leading: CircleAvatar(
23-
backgroundColor:
24-
lessonGroup.color != null
25-
? TimetableUtils.parseColor(lessonGroup.color!)
26-
: Theme.of(context).colorScheme.primary,
23+
backgroundColor: lessonGroup.color != null
24+
? TimetableUtils.parseColor(lessonGroup.color!)
25+
: Theme.of(context).colorScheme.primary,
2726
child: Text(
2827
lessonGroup.name.isNotEmpty
2928
? lessonGroup.name[0].toUpperCase()
@@ -39,7 +38,7 @@ class LearningGroupListCard extends StatelessWidget {
3938
style: const TextStyle(fontWeight: FontWeight.w600),
4039
),
4140
subtitle: Text(
42-
'Farbe: ${lessonGroup.color ?? 'Standard'}',
41+
'Mitglieder: ${lessonGroup.memberships?.length ?? 0}',
4342
style: TextStyle(color: Colors.grey.shade600),
4443
),
4544
trailing: Row(

school_data_hub_flutter/lib/features/timetable/presentation/new_lesson_group_page/new_lesson_group_page.dart

Lines changed: 56 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -165,50 +165,72 @@ class NewLessonGroupPage extends WatchingWidget {
165165
modifiedAt: now,
166166
);
167167

168-
if (_isEditing) {
169-
// Update existing lesson group
170-
timetableManager.updateLessonGroup(lessonGroupData);
168+
Future<void> doSave() async {
169+
try {
170+
if (_isEditing) {
171+
await timetableManager
172+
.updateLessonGroup(lessonGroupData);
171173

172-
// Update pupil memberships for existing lesson group
173-
if (lessonGroup?.id != null) {
174-
timetableManager
175-
.updatePupilMembershipsForLessonGroup(
174+
if (lessonGroup?.id != null) {
175+
await timetableManager
176+
.updatePupilMembershipsForLessonGroup(
176177
lessonGroup!.id!,
177178
selectedPupilIds.value,
178179
);
179-
}
180-
181-
ScaffoldMessenger.of(context).showSnackBar(
182-
const SnackBar(
183-
content: Text('Klasse erfolgreich aktualisiert'),
184-
backgroundColor: Colors.green,
185-
),
186-
);
180+
}
187181

188-
Navigator.of(context).pop();
189-
} else {
190-
// Create new lesson group
191-
timetableManager.addLessonGroup(lessonGroupData);
182+
if (context.mounted) {
183+
ScaffoldMessenger.of(context).showSnackBar(
184+
const SnackBar(
185+
content: Text(
186+
'Klasse erfolgreich aktualisiert',
187+
),
188+
backgroundColor: Colors.green,
189+
),
190+
);
191+
Navigator.of(context).pop();
192+
}
193+
} else {
194+
final created = await timetableManager
195+
.addLessonGroup(lessonGroupData);
192196

193-
// Add pupil memberships for new lesson group
194-
if (lessonGroupData.id != null &&
195-
selectedPupilIds.value.isNotEmpty) {
196-
timetableManager
197-
.updatePupilMembershipsForLessonGroup(
198-
lessonGroupData.id!,
197+
if (created?.id != null &&
198+
selectedPupilIds.value.isNotEmpty) {
199+
await timetableManager
200+
.updatePupilMembershipsForLessonGroup(
201+
created!.id!,
199202
selectedPupilIds.value,
200203
);
201-
}
202-
203-
ScaffoldMessenger.of(context).showSnackBar(
204-
const SnackBar(
205-
content: Text('Klasse erfolgreich erstellt'),
206-
backgroundColor: Colors.green,
207-
),
208-
);
204+
}
209205

210-
Navigator.of(context).pop(lessonGroupData);
206+
if (context.mounted) {
207+
ScaffoldMessenger.of(context).showSnackBar(
208+
const SnackBar(
209+
content: Text(
210+
'Klasse erfolgreich erstellt',
211+
),
212+
backgroundColor: Colors.green,
213+
),
214+
);
215+
Navigator.of(context).pop(
216+
created ?? lessonGroupData,
217+
);
218+
}
219+
}
220+
} catch (e) {
221+
if (context.mounted) {
222+
ScaffoldMessenger.of(context).showSnackBar(
223+
SnackBar(
224+
content: Text(
225+
'Fehler: $e',
226+
),
227+
backgroundColor: Colors.red,
228+
),
229+
);
230+
}
231+
}
211232
}
233+
doSave();
212234
},
213235
onCancel: () => Navigator.of(context).pop(),
214236
onDelete: _isEditing

school_data_hub_flutter/lib/features/timetable/presentation/new_lesson_group_page/widgets/pupil_management_section.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class PupilManagementSection extends WatchingWidget {
4141
mainAxisAlignment: MainAxisAlignment.spaceBetween,
4242
children: [
4343
const Text(
44-
'Schüler in dieser Klasse',
44+
'Schüler in dieser Lerngruppe',
4545
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600),
4646
),
4747
Row(

0 commit comments

Comments
 (0)