diff options
| author | Aldrik Ramaekers <aldrik@amftech.nl> | 2022-08-18 11:03:01 +0200 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrik@amftech.nl> | 2022-08-18 11:03:01 +0200 |
| commit | 349d704b67cf7d07bd8f8878735f98158a9a1756 (patch) | |
| tree | cd5a4772c4c9457f7b77f1fc20889544b472b7da | |
| parent | d7d1fccb42424c11e6a716558ac63fd633c9f3a4 (diff) | |
shifts worden per week opgeslagen in bestanden
| -rw-r--r-- | README | 4 | ||||
| -rw-r--r-- | lib/services/local_shift_provider_service.dart | 69 |
2 files changed, 50 insertions, 23 deletions
@@ -1,7 +1,5 @@ # Aanpassingen - exceptions afhandelen binnen localShiftProvider en doorgeven aan ui -- uursalaris opslaan per shift zodat aanpassingen oudere shifts niet aanpassen -- bestand per week maken # Nog te doen - laad animaties voor het lezen van locale bestanden (testen met delays) @@ -13,7 +11,7 @@ - Begin en eindtijd invullen/aanpassen per shift - Begin en eindtijd live bijhouden - Maandelijks overzicht van gewerkte uren en inkomen -- data wordt lokaal opgeslagen +- data wordt lokaal en veilig opgeslagen - gemakkelijk meerdere shifts tegelijk aanmelden - schatting over aantal ingeplande uren en inkomen - werkt on alle soorten schermen diff --git a/lib/services/local_shift_provider_service.dart b/lib/services/local_shift_provider_service.dart index 917e382..d6cec51 100644 --- a/lib/services/local_shift_provider_service.dart +++ b/lib/services/local_shift_provider_service.dart @@ -10,40 +10,50 @@ import 'package:path_provider/path_provider.dart'; class LocalShiftProviderService extends IProgramProviderService { LocalShiftProviderService() {} + Future<Directory> get _localDir async { + final directory = await getApplicationDocumentsDirectory(); + return directory; + } + Future<String> get _localPath async { final directory = await getApplicationDocumentsDirectory(); return directory.path; } - Future<File> get _localFile async { + Future<File> _localFile(String postfix) async { final path = await _localPath; - File file = File('$path/shifts.json'); + String fullPath = '$path/shifts_' + postfix + '.json'; + File file = File(fullPath); bool exists = await file.exists(); if (!exists) { - print('created shifts.json'); + print('creating ' + fullPath); await file.create(); - await writeShiftsFromFile([]); + await file.writeAsString(jsonEncode([])); } - return File('$path/shifts.json'); + return File(fullPath); } - Future<void> writeShiftsFromFile(List<Shift> shifts) async { + Future<void> writeShiftsToFile(List<Shift> shifts) async { try { - final file = await _localFile; - String content = jsonEncode(shifts); - print('writing content: ' + content); - await file.writeAsString(content); + for (var shift in shifts) { + final file = await _localFile( + DateUtilities.DateUtils.firstDayOfWeek(shift.start).toString()); + print(DateUtilities.DateUtils.firstDayOfWeek(shift.start).toString()); + String content = jsonEncode(shifts); + print('writing content to ' + file.path + ' -- ' + content); + await file.writeAsString(content); + } } catch (e, stacktrace) { print(stacktrace); print(e); } } - Future<List<Shift>> readShiftsFromFile() async { + Future<List<Shift>> readShiftsFromFile(DateTime startOfWeek) async { try { - final file = await _localFile; + final file = await _localFile(startOfWeek.toString()); final contents = await file.readAsString(); final Iterable iterable = await jsonDecode(contents); List<Shift> data = @@ -59,7 +69,8 @@ class LocalShiftProviderService extends IProgramProviderService { @override Future<void> updateShift(Shift shift) async { - List<Shift> savedShifts = await readShiftsFromFile(); + List<Shift> savedShifts = await readShiftsFromFile( + DateUtilities.DateUtils.firstDayOfWeek(shift.start)); for (var item in savedShifts) { if (DateUtilities.DateUtils.isSameDay(shift.start, item.start)) { item.isActive = shift.isActive; @@ -69,12 +80,13 @@ class LocalShiftProviderService extends IProgramProviderService { break; } } - await writeShiftsFromFile(savedShifts); + await writeShiftsToFile(savedShifts); } @override Future<bool> addShift(Shift shift) async { - List<Shift> savedShifts = await readShiftsFromFile(); + List<Shift> savedShifts = await readShiftsFromFile( + DateUtilities.DateUtils.firstDayOfWeek(shift.start)); for (var item in savedShifts) { if (DateUtilities.DateUtils.isSameDay(shift.start, item.start)) { return false; @@ -82,13 +94,28 @@ class LocalShiftProviderService extends IProgramProviderService { } savedShifts.add(shift); - await writeShiftsFromFile(savedShifts); + await writeShiftsToFile(savedShifts); return true; } @override Future<List<Shift>> getPastShifts() async { - List<Shift> shifts = await readShiftsFromFile(); + List<Shift> shifts = []; + Directory dir = await _localDir; + var list = dir.listSync(); + for (var item in list) { + if (!item.path.endsWith('.json') || !item.path.contains('shifts')) { + continue; + } + + final file = File(item.path); + final contents = await file.readAsString(); + final Iterable iterable = await jsonDecode(contents); + List<Shift> data = + List<Shift>.from(iterable.map((model) => Shift.fromJson(model))); + shifts.addAll(data); + } + shifts.sort((a, b) => a.start.compareTo(b.start)); return shifts; @@ -96,7 +123,8 @@ class LocalShiftProviderService extends IProgramProviderService { @override Future<List<Shift>> getShiftsForWeek(DateTime firstDayOfWeek) async { - var items = await getPastShifts(); + var items = await readShiftsFromFile( + DateUtilities.DateUtils.firstDayOfWeek(firstDayOfWeek)); List<Shift> result = []; for (var item in items) { @@ -111,13 +139,14 @@ class LocalShiftProviderService extends IProgramProviderService { @override Future<void> deleteShift(Shift shift) async { - List<Shift> savedShifts = await readShiftsFromFile(); + List<Shift> savedShifts = await readShiftsFromFile( + DateUtilities.DateUtils.firstDayOfWeek(shift.start)); for (var item in savedShifts) { if (DateUtilities.DateUtils.isSameDay(shift.start, item.start)) { savedShifts.remove(item); break; } } - await writeShiftsFromFile(savedShifts); + await writeShiftsToFile(savedShifts); } } |
