Skip to content

Commit c639664

Browse files
WIP competence feature: server fix competence check endpoint, client get rid of expansion tiles, implement TODOs, bug fixes
1 parent c030bc8 commit c639664

13 files changed

Lines changed: 458 additions & 352 deletions

File tree

school_data_hub_client/lib/src/protocol/client.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -971,6 +971,8 @@ class EndpointCompetenceCheck extends _i1.EndpointRef {
971971
String? comment,
972972
required double valueFactor,
973973
required String createdBy,
974+
String? groupCheckId,
975+
String? groupCheckName,
974976
}) =>
975977
caller.callServerEndpoint<_i7.PupilData>(
976978
'competenceCheck',
@@ -982,6 +984,8 @@ class EndpointCompetenceCheck extends _i1.EndpointRef {
982984
'comment': comment,
983985
'valueFactor': valueFactor,
984986
'createdBy': createdBy,
987+
'groupCheckId': groupCheckId,
988+
'groupCheckName': groupCheckName,
985989
},
986990
);
987991

school_data_hub_flutter/lib/features/learning/data/competence_check_api_service.dart

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import 'dart:io';
22

3+
import 'package:flutter_it/flutter_it.dart';
34
import 'package:school_data_hub_client/school_data_hub_client.dart';
45
import 'package:school_data_hub_flutter/common/data/file_upload_service.dart';
56
import 'package:school_data_hub_flutter/common/models/enums.dart';
67
import 'package:school_data_hub_flutter/core/client/client_helper.dart';
7-
import 'package:flutter_it/flutter_it.dart';
88

99
class CompetenceCheckApiService {
1010
Client get _client => di<Client>();
@@ -15,15 +15,21 @@ class CompetenceCheckApiService {
1515
required int pupilId,
1616
required String createdBy,
1717
String? comment,
18+
int? score,
19+
double? valueFactor,
20+
String? groupCheckId,
21+
String? groupCheckName,
1822
}) async {
1923
final PupilData? pupil = await ClientHelper.apiCall(
2024
call: () => _client.competenceCheck.postCompetenceCheck(
2125
competenceId: competenceId,
2226
pupilId: pupilId,
23-
score: 0,
24-
valueFactor: 1,
27+
score: score ?? 0,
28+
valueFactor: valueFactor ?? 1,
2529
comment: comment,
2630
createdBy: createdBy,
31+
groupCheckId: groupCheckId,
32+
groupCheckName: groupCheckName,
2733
),
2834
);
2935
return pupil;

school_data_hub_flutter/lib/features/learning/domain/competence_manager.dart

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,10 @@ class CompetenceManager {
269269
pupilId: pupilId,
270270
competenceId: competenceId,
271271
createdBy: createdBy!,
272+
comment: competenceComment,
273+
score: score,
274+
valueFactor: 1,
275+
groupCheckId: groupId,
272276
);
273277
if (updatedPupilData == null) {
274278
return;
@@ -283,6 +287,60 @@ class CompetenceManager {
283287
return;
284288
}
285289

290+
Future<void> postCompetenceCheckWithFile({
291+
required int pupilId,
292+
required int competenceId,
293+
required int score,
294+
required String? competenceComment,
295+
required String? groupId,
296+
required File file,
297+
}) async {
298+
final createdBy = di<HubSessionManager>().userName;
299+
300+
// First, create the competence check
301+
final PupilData? updatedPupilData = await _competenceCheckApiService
302+
.postCompetenceCheck(
303+
pupilId: pupilId,
304+
competenceId: competenceId,
305+
createdBy: createdBy!,
306+
comment: competenceComment,
307+
score: score,
308+
valueFactor: 1,
309+
groupCheckId: groupId,
310+
);
311+
312+
if (updatedPupilData == null) {
313+
return;
314+
}
315+
316+
// Find the newly created competence check
317+
final newCheck = updatedPupilData.competenceChecks
318+
?.where((check) => check.competenceId == competenceId)
319+
.lastOrNull;
320+
321+
if (newCheck == null) {
322+
_notificationService.showSnackBar(
323+
NotificationType.error,
324+
'Fehler beim Erstellen des Kompetenzchecks',
325+
);
326+
return;
327+
}
328+
329+
// Encrypt and add the file
330+
final File encryptedFile = await customEncrypter.encryptFile(file);
331+
final PupilData updatedPupilDataWithFile = await _competenceCheckApiService
332+
.addFileToCompetenceCheck(newCheck.checkId, encryptedFile, createdBy);
333+
334+
di<PupilProxyManager>().updatePupilProxyWithPupilData(updatedPupilDataWithFile);
335+
336+
_notificationService.showSnackBar(
337+
NotificationType.success,
338+
'Kompetenzcheck mit Datei erstellt',
339+
);
340+
341+
return;
342+
}
343+
286344
Future<void> postCompetenceGoal({
287345
required int pupilId,
288346
required int competenceId,

school_data_hub_flutter/lib/features/learning/presentation/multi_pupil_competence_check_page/widgets/multi_pupil_competence_check_card.dart

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'dart:io';
22

33
import 'package:flutter/material.dart';
4+
import 'package:flutter_it/flutter_it.dart';
45
import 'package:gap/gap.dart';
56
import 'package:school_data_hub_client/school_data_hub_client.dart';
67
import 'package:school_data_hub_flutter/app_utils/create_and_crop_image_file.dart';
@@ -16,7 +17,6 @@ import 'package:school_data_hub_flutter/features/learning/domain/competence_mana
1617
import 'package:school_data_hub_flutter/features/pupil/domain/models/pupil_proxy.dart';
1718
import 'package:school_data_hub_flutter/features/pupil/presentation/pupil_profile_page/pupil_profile_page.dart';
1819
import 'package:school_data_hub_flutter/features/pupil/presentation/widgets/avatar.dart';
19-
import 'package:flutter_it/flutter_it.dart';
2020

2121
class MultiPupilCompetenceCheckCard extends WatchingWidget {
2222
final String groupId;
@@ -141,7 +141,7 @@ class MultiPupilCompetenceCheckCard extends WatchingWidget {
141141
}
142142
await di<CompetenceManager>()
143143
.postCompetenceCheck(
144-
pupilId: pupil.internalId,
144+
pupilId: pupil.pupilId,
145145
competenceId: competenceId,
146146
competenceComment: '',
147147
groupId: groupId,
@@ -248,15 +248,15 @@ class MultiPupilCompetenceCheckCard extends WatchingWidget {
248248
await createAndCropImageFile(context);
249249

250250
if (file == null) return;
251-
// TODO: Uncomment this when postCompetenceCheckWithFile is implemented
252-
// await di<CompetenceManager>()
253-
// .postCompetenceCheckWithFile(
254-
// pupilId: pupil.internalId,
255-
// competenceId: competenceId,
256-
// competenceComment: '',
257-
// groupId: groupId,
258-
// competenceStatus: 0,
259-
// file: file);
251+
await di<CompetenceManager>()
252+
.postCompetenceCheckWithFile(
253+
pupilId: pupil.pupilId,
254+
competenceId: competenceId,
255+
competenceComment: '',
256+
groupId: groupId,
257+
score: 0,
258+
file: file,
259+
);
260260
},
261261
child: SizedBox(
262262
height: 70,

0 commit comments

Comments
 (0)