summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrik@amftech.nl>2022-08-18 21:59:18 +0200
committerAldrik Ramaekers <aldrik@amftech.nl>2022-08-18 21:59:18 +0200
commit943b3cf23987612153239e8e89226a9af71d2e16 (patch)
treeaca2bd1000757b672b6f5a77fff7d69d131acaba
parent1799d1324a9425e2f0f11c143c0c37cb042b05a7 (diff)
move hardcoded values to config
-rw-r--r--README5
-rw-r--r--lib/config/defaults.dart21
-rw-r--r--lib/pages/agenda_page.dart79
-rw-r--r--lib/pages/developer_page.dart59
-rw-r--r--lib/pages/home_page.dart8
-rw-r--r--lib/pages/logbook_page.dart6
-rw-r--r--lib/services/local_shift_provider_service.dart26
-rw-r--r--lib/services/mock_shift_provider_service.dart18
-rw-r--r--lib/services/settings_service.dart2
-rw-r--r--lib/shift.dart22
-rw-r--r--lib/widgets/agenda_week_item.dart13
11 files changed, 151 insertions, 108 deletions
diff --git a/README b/README
index 9d796af..ae88807 100644
--- a/README
+++ b/README
@@ -1,8 +1,11 @@
# Aanpassingen
- exceptions afhandelen binnen localShiftProvider en doorgeven aan ui
+- optie om bepaalde features aan en uit te zetten on config/config.dart
+- verplaats style naar config/style.dart
+- verplaats hardcoded kleuren naar style.dart
# Nog te doen
-- uurloon van gebruiker gebruiken in berekeningen
+- Laat gebruiker shift types aanpassen in instellingen pagina
# Features
- Aanmelden van werktijden
diff --git a/lib/config/defaults.dart b/lib/config/defaults.dart
index 2553bbe..d71df88 100644
--- a/lib/config/defaults.dart
+++ b/lib/config/defaults.dart
@@ -1,11 +1,13 @@
class ShiftType {
String name;
Duration startTime;
- Duration startTimeSturday;
+ Duration startTimeSaturday;
+ Duration expectedDuration;
ShiftType(
{required this.name,
required this.startTime,
- required this.startTimeSturday});
+ required this.startTimeSaturday,
+ required this.expectedDuration});
}
class DefaultConfig {
@@ -13,14 +15,23 @@ class DefaultConfig {
ShiftType(
name: 'Dagrit',
startTime: Duration(hours: 10),
- startTimeSturday: Duration(hours: 10)),
+ startTimeSaturday: Duration(hours: 10),
+ expectedDuration: Duration(hours: 8)),
ShiftType(
name: 'Avondrit',
startTime: Duration(hours: 17),
- startTimeSturday: Duration(hours: 15, minutes: 30)),
+ startTimeSaturday: Duration(hours: 15, minutes: 30),
+ expectedDuration: Duration(hours: 5)),
ShiftType(
name: 'Terugscan',
startTime: Duration(hours: 14, minutes: 30),
- startTimeSturday: Duration(hours: 13, minutes: 30)),
+ startTimeSaturday: Duration(hours: 13, minutes: 30),
+ expectedDuration: Duration(hours: 8)),
];
+
+ static ShiftType getShiftByName(String name) {
+ var result = shiftTypes.where((element) => element.name == name);
+ if (result.isEmpty) throw Exception('Type werkvorm bestaat niet [$name].');
+ return result.first;
+ }
}
diff --git a/lib/pages/agenda_page.dart b/lib/pages/agenda_page.dart
index b461791..174f71d 100644
--- a/lib/pages/agenda_page.dart
+++ b/lib/pages/agenda_page.dart
@@ -1,6 +1,7 @@
import 'package:carousel_slider/carousel_slider.dart';
import 'package:flutter/material.dart';
import 'package:in_date_utils/in_date_utils.dart' as DateUtilities;
+import 'package:training_planner/config/defaults.dart';
import 'package:training_planner/events/RefreshWeekEvent.dart';
import 'package:training_planner/main.dart';
import 'package:training_planner/pages/home_page.dart';
@@ -59,29 +60,14 @@ class _AgendaPageState extends State<AgendaPage> {
break;
}
- ShiftType type = ShiftType.Dagrit;
- if (shiftsSelected[1]) type = ShiftType.Avondrit;
- if (shiftsSelected[2]) type = ShiftType.Terugscannen;
-
- switch (type) {
- case ShiftType.Dagrit:
- dayOfWeek = dayOfWeek.add(Duration(hours: 10));
- break;
- case ShiftType.Avondrit:
- dayOfWeek = dayOfWeek.add(Duration(
- hours: dayOfWeek.weekday == 6 ? 15 : 17,
- minutes: dayOfWeek.weekday == 6 ? 30 : 0));
- break;
- case ShiftType.Terugscannen:
- dayOfWeek = dayOfWeek.add(
- Duration(hours: dayOfWeek.weekday == 6 ? 13 : 14, minutes: 30));
- break;
- }
+ ShiftType type = DefaultConfig.shiftTypes[currentSelectedShiftIndex];
+ dayOfWeek = dayOfWeek.add(
+ dayOfWeek.weekday != 6 ? type.startTime : type.startTimeSaturday);
Settings settings = await settingsService.readSettingsFromFile();
bool success = await shiftProvider.addShift(
- Shift(start: dayOfWeek, type: type, payRate: settings.salary));
+ Shift(start: dayOfWeek, type: type.name, payRate: settings.salary));
if (!success) {
messageService.showMessage(
context,
@@ -93,11 +79,14 @@ class _AgendaPageState extends State<AgendaPage> {
}
List<bool> dayIsSelected = [false, false, false, false, false, false, false];
- List<bool> shiftsSelected = [false, true, false];
+ List<bool> shiftsSelected =
+ DefaultConfig.shiftTypes.map((e) => false).toList();
+ int currentSelectedShiftIndex = 0;
Future<void> showAddShiftDialog() async {
dayIsSelected = [false, false, false, false, false, false, false];
- shiftsSelected = [false, true, false];
+ shiftsSelected = DefaultConfig.shiftTypes.map((e) => false).toList();
+ currentSelectedShiftIndex = 1;
// set up the buttons
Widget cancelButton = FlatButton(
@@ -131,15 +120,10 @@ class _AgendaPageState extends State<AgendaPage> {
!splitDays
? (ToggleButtons(
direction: Axis.vertical,
- children: <Widget>[
- Text('Ma'),
- Text('Di'),
- Text('Wo'),
- Text('Do'),
- Text('Vr'),
- Text('Za'),
- Text('Zo'),
- ],
+ children: [1, 2, 3, 4, 5, 6, 7]
+ .map((weekdayIndex) =>
+ Text(DateHelper.getWeekdayName(weekdayIndex)))
+ .toList(),
onPressed: (int index) {
setState(() {
dayIsSelected[index] = !dayIsSelected[index];
@@ -149,12 +133,10 @@ class _AgendaPageState extends State<AgendaPage> {
))
: (ToggleButtons(
direction: Axis.vertical,
- children: <Widget>[
- Text('Ma'),
- Text('Di'),
- Text('Wo'),
- Text('Do'),
- ],
+ children: [1, 2, 3, 4]
+ .map((weekdayIndex) =>
+ Text(DateHelper.getWeekdayName(weekdayIndex)))
+ .toList(),
onPressed: (int index) {
setState(() {
dayIsSelected[index] = !dayIsSelected[index];
@@ -165,11 +147,10 @@ class _AgendaPageState extends State<AgendaPage> {
splitDays
? (ToggleButtons(
direction: Axis.vertical,
- children: <Widget>[
- Text('Vr'),
- Text('Za'),
- Text('Zo'),
- ],
+ children: [5, 6, 7]
+ .map((weekdayIndex) =>
+ Text(DateHelper.getWeekdayName(weekdayIndex)))
+ .toList(),
onPressed: (int index) {
setState(() {
dayIsSelected[index + 4] = !dayIsSelected[index + 4];
@@ -181,19 +162,17 @@ class _AgendaPageState extends State<AgendaPage> {
ToggleButtons(
direction: Axis.vertical,
children: <Widget>[
- Padding(
- padding: const EdgeInsets.all(0), child: Text('Dagrit')),
- Padding(
- padding: const EdgeInsets.all(0),
- child: Text('Avondrit')),
- Padding(
- padding: const EdgeInsets.all(0),
- child: Text('Terugscan')),
+ for (int i = 0; i < DefaultConfig.shiftTypes.length; i++)
+ Padding(
+ padding: const EdgeInsets.all(0),
+ child: Text(DefaultConfig.shiftTypes[i].name)),
],
onPressed: (int index) {
setState(() {
- shiftsSelected = [false, false, false];
+ shiftsSelected =
+ DefaultConfig.shiftTypes.map((e) => false).toList();
shiftsSelected[index] = true;
+ currentSelectedShiftIndex = index;
});
},
isSelected: shiftsSelected,
diff --git a/lib/pages/developer_page.dart b/lib/pages/developer_page.dart
new file mode 100644
index 0000000..05a029a
--- /dev/null
+++ b/lib/pages/developer_page.dart
@@ -0,0 +1,59 @@
+import 'dart:io';
+
+import 'package:flutter/material.dart';
+import 'package:training_planner/events/RefreshWeekEvent.dart';
+import 'package:training_planner/main.dart';
+import 'package:training_planner/services/local_shift_provider_service.dart';
+import 'package:training_planner/services/settings_service.dart';
+import 'package:training_planner/style/style.dart';
+
+class DeveloperPage extends StatefulWidget {
+ @override
+ _DeveloperPageState createState() => _DeveloperPageState();
+
+ const DeveloperPage({Key? key}) : super(key: key);
+}
+
+class _DeveloperPageState extends State<DeveloperPage> {
+ @override
+ initState() {
+ super.initState();
+ }
+
+ void clearLocalFiles() async {
+ if (shiftProvider is LocalShiftProviderService) {
+ LocalShiftProviderService lsp =
+ shiftProvider as LocalShiftProviderService;
+ var fileList = await lsp.getStoredFileList();
+
+ for (var item in fileList) {
+ await File(item).delete();
+ }
+
+ eventBus.fire(RefreshWeekEvent());
+ }
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(
+ title: Text('Instellingen'),
+ backgroundColor: Style.background,
+ foregroundColor: Style.titleColor,
+ ),
+ body: Center(
+ child: Padding(
+ padding: const EdgeInsets.all(50),
+ child: Column(
+ children: [
+ TextButton(
+ onPressed: () async => clearLocalFiles(),
+ child: Text('Bestanden verwijderen')),
+ ],
+ ),
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/pages/home_page.dart b/lib/pages/home_page.dart
index 87d3ce7..ee2a5cd 100644
--- a/lib/pages/home_page.dart
+++ b/lib/pages/home_page.dart
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:training_planner/pages/agenda_page.dart';
+import 'package:training_planner/pages/developer_page.dart';
import 'package:training_planner/pages/logbook_page.dart';
import 'package:training_planner/pages/settings_page.dart';
import 'package:training_planner/shift.dart';
@@ -73,9 +74,12 @@ class _HomePageState extends State<HomePage> {
},
),
ListTile(
- title: const Text('Profiel'),
+ title: const Text('Ontwikkelaar'),
onTap: () {
- // ...
+ Navigator.push(
+ context,
+ MaterialPageRoute(builder: (context) => DeveloperPage()),
+ );
},
),
],
diff --git a/lib/pages/logbook_page.dart b/lib/pages/logbook_page.dart
index fb21c9a..be49ac8 100644
--- a/lib/pages/logbook_page.dart
+++ b/lib/pages/logbook_page.dart
@@ -124,6 +124,12 @@ class _LogbookPageState extends State<LogbookPage> {
Widget getDataList() {
var monthDataWidgets = createMonthDataWidgets();
+ if (monthDataWidgets.isEmpty) {
+ return Center(
+ child: Text('Geen data beschikbaar'),
+ );
+ }
+
return SafeArea(
child: CustomScrollView(
physics: null,
diff --git a/lib/services/local_shift_provider_service.dart b/lib/services/local_shift_provider_service.dart
index 4894820..a7dfa5b 100644
--- a/lib/services/local_shift_provider_service.dart
+++ b/lib/services/local_shift_provider_service.dart
@@ -20,6 +20,21 @@ class LocalShiftProviderService extends IProgramProviderService {
return directory.path;
}
+ Future<List<String>> getStoredFileList() async {
+ List<String> result = [];
+ Directory dir = await _localDir;
+ var list = dir.listSync();
+ for (var item in list) {
+ if (!item.path.endsWith('.json') || !item.path.contains('shifts')) {
+ continue;
+ }
+
+ result.add(item.path);
+ }
+
+ return result;
+ }
+
Future<File> _localFile(String postfix) async {
final path = await _localPath;
String fullPath = '$path/shifts_' + postfix + '.json';
@@ -100,16 +115,10 @@ class LocalShiftProviderService extends IProgramProviderService {
@override
Future<List<Shift>> getPastShifts() async {
- await Future.delayed(Duration(seconds: 1));
List<Shift> shifts = [];
- Directory dir = await _localDir;
- var list = dir.listSync();
+ var list = await getStoredFileList();
for (var item in list) {
- if (!item.path.endsWith('.json') || !item.path.contains('shifts')) {
- continue;
- }
-
- final file = File(item.path);
+ final file = File(item);
final contents = await file.readAsString();
final Iterable iterable = await jsonDecode(contents);
List<Shift> data =
@@ -124,7 +133,6 @@ class LocalShiftProviderService extends IProgramProviderService {
@override
Future<List<Shift>> getShiftsForWeek(DateTime firstDayOfWeek) async {
- await Future.delayed(Duration(seconds: 1));
var items = await readShiftsFromFile(
DateUtilities.DateUtils.firstDayOfWeek(firstDayOfWeek));
List<Shift> result = [];
diff --git a/lib/services/mock_shift_provider_service.dart b/lib/services/mock_shift_provider_service.dart
index e6c88e0..605ba19 100644
--- a/lib/services/mock_shift_provider_service.dart
+++ b/lib/services/mock_shift_provider_service.dart
@@ -13,41 +13,37 @@ class MockShiftProviderService extends IProgramProviderService {
Shift(
end: DateTime(2022, 8, 8, 20, 30),
start: DateTime(2022, 8, 8, 16, 30),
- type: ShiftType.Avondrit,
+ type: 'Avondrit',
payRate: 13.75),
);
shifts.add(Shift(
end: DateTime(2022, 8, 6, 20, 30),
start: DateTime(2022, 8, 6, 16, 30),
- type: ShiftType.Avondrit,
+ type: 'Avondrit',
payRate: 13.75));
shifts.add(Shift(
end: DateTime(2022, 8, 5, 20, 30),
start: DateTime(2022, 8, 5, 16, 30),
- type: ShiftType.Avondrit,
+ type: 'Avondrit',
payRate: 13.75));
shifts.add(Shift(
- start: DateTime(2022, 8, 4, 16, 30),
- type: ShiftType.Avondrit,
- payRate: 13.75));
+ start: DateTime(2022, 8, 4, 16, 30), type: 'Avondrit', payRate: 13.75));
shifts.add(Shift(
end: DateTime(2022, 8, 1, 17, 30),
start: DateTime(2022, 8, 1, 9, 30),
- type: ShiftType.Dagrit,
+ type: 'Dagrit',
payRate: 13.75));
shifts.add(Shift(
- start: DateTime(2022, 8, 22, 9, 30),
- type: ShiftType.Dagrit,
- payRate: 13.75));
+ start: DateTime(2022, 8, 22, 9, 30), type: 'Dagrit', payRate: 13.75));
shifts.add(Shift(
start: DateTime.now().subtract(Duration(hours: 2)),
- type: ShiftType.Dagrit,
+ type: 'Dagrit',
payRate: 13.75));
savedShifts = shifts;
diff --git a/lib/services/settings_service.dart b/lib/services/settings_service.dart
index 027ecc2..350d7bd 100644
--- a/lib/services/settings_service.dart
+++ b/lib/services/settings_service.dart
@@ -44,7 +44,7 @@ class SettingsService {
if (!exists) {
print('created settings.json');
await file.create();
- await writeSettingsToFile(DefaultSettings());
+ await file.writeAsString(jsonEncode(DefaultSettings()));
}
return File('$path/settings.json');
diff --git a/lib/shift.dart b/lib/shift.dart
index fb79a04..72679ce 100644
--- a/lib/shift.dart
+++ b/lib/shift.dart
@@ -1,12 +1,7 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:in_date_utils/in_date_utils.dart' as DateUtilities;
-
-enum ShiftType {
- Dagrit,
- Avondrit,
- Terugscannen,
-}
+import 'package:training_planner/config/defaults.dart';
enum ShiftStatus {
OldOpen,
@@ -19,7 +14,7 @@ enum ShiftStatus {
class Shift {
DateTime start;
DateTime? end;
- ShiftType type;
+ String type;
double payRate;
bool isActive = false;
@@ -32,7 +27,7 @@ class Shift {
Shift.fromJson(Map<String, dynamic> json)
: start = DateTime.parse(json['start']),
end = json['end'] == null ? null : DateTime.tryParse(json['end']),
- type = ShiftType.values.firstWhere((e) => e.toString() == json['type']),
+ type = json['type'],
isActive = json['isActive'] == 'true',
payRate = double.parse(json['payRate']);
@@ -40,7 +35,7 @@ class Shift {
return {
'start': start.toIso8601String(),
'end': end?.toIso8601String(),
- 'type': type.toString(),
+ 'type': type,
'isActive': isActive.toString(),
'payRate': payRate.toStringAsFixed(2),
};
@@ -87,14 +82,7 @@ class Shift {
}
DateTime expectedEndTime() {
- switch (type) {
- case ShiftType.Avondrit:
- return start.add(Duration(hours: 5));
- case ShiftType.Dagrit:
- return start.add(Duration(hours: 8));
- case ShiftType.Terugscannen:
- return start.add(Duration(hours: 8));
- }
+ return start.add(DefaultConfig.getShiftByName(type).expectedDuration);
}
Duration getElapsedSessionTime() {
diff --git a/lib/widgets/agenda_week_item.dart b/lib/widgets/agenda_week_item.dart
index 10ccba7..6a9fe19 100644
--- a/lib/widgets/agenda_week_item.dart
+++ b/lib/widgets/agenda_week_item.dart
@@ -74,18 +74,7 @@ class _ExerciseEntryState extends State<AgendaWeekItem> {
});
setState(() {
- switch (widget.shift.type) {
- case ShiftType.Avondrit:
- shiftTypeName = 'Avondrit';
- break;
- case ShiftType.Dagrit:
- shiftTypeName = 'Dagrit';
- break;
- case ShiftType.Terugscannen:
- shiftTypeName = 'Terugscannen';
- break;
- }
-
+ shiftTypeName = widget.shift.type;
setStartAndEndTime();
});
}