diff options
| author | Aldrik Ramaekers <aldrik@amftech.nl> | 2022-08-17 13:54:48 +0200 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrik@amftech.nl> | 2022-08-17 13:54:48 +0200 |
| commit | 8ed1b574e8b5e9fc806aedc87af7aabcf73da6e6 (patch) | |
| tree | 5126fb297b9df2829b6b34f966f615183b4c73af /lib | |
| parent | 3d25fdc99fd37f3b5e37f25b7a38804a02130426 (diff) | |
b0.2
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/events/RefreshWeekEvent.dart | 1 | ||||
| -rw-r--r-- | lib/main.dart | 4 | ||||
| -rw-r--r-- | lib/pages/agenda_page.dart | 20 | ||||
| -rw-r--r-- | lib/pages/home_page.dart | 4 | ||||
| -rw-r--r-- | lib/pages/logbook_page.dart | 9 | ||||
| -rw-r--r-- | lib/services/ishift_provider_service.dart | 2 | ||||
| -rw-r--r-- | lib/services/local_shift_provider_service.dart | 18 | ||||
| -rw-r--r-- | lib/services/messaging_service.dart | 9 | ||||
| -rw-r--r-- | lib/services/mock_shift_provider_service.dart | 5 | ||||
| -rw-r--r-- | lib/shift.dart | 5 | ||||
| -rw-r--r-- | lib/utils/date.dart | 20 | ||||
| -rw-r--r-- | lib/widgets/agenda_week.dart | 14 | ||||
| -rw-r--r-- | lib/widgets/agenda_week_item.dart | 68 |
13 files changed, 127 insertions, 52 deletions
diff --git a/lib/events/RefreshWeekEvent.dart b/lib/events/RefreshWeekEvent.dart new file mode 100644 index 0000000..6f8fc52 --- /dev/null +++ b/lib/events/RefreshWeekEvent.dart @@ -0,0 +1 @@ +class RefreshWeekEvent {} diff --git a/lib/main.dart b/lib/main.dart index d5c1f21..6e15b59 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,6 +1,7 @@ import 'package:event_bus/event_bus.dart'; import 'package:flutter/material.dart'; import 'package:training_planner/services/ishift_provider_service.dart'; +import 'package:training_planner/services/messaging_service.dart'; import 'package:training_planner/services/mock_shift_provider_service.dart'; import 'package:training_planner/services/local_shift_provider_service.dart'; import 'pages/home_page.dart'; @@ -10,8 +11,9 @@ void main() { runApp(const MyApp()); } -IProgramProviderService shiftProvider = LocalShiftProviderService(); +final IProgramProviderService shiftProvider = LocalShiftProviderService(); final LocalAuthentication auth = LocalAuthentication(); +final MessagingService messageService = MessagingService(); EventBus eventBus = EventBus(); diff --git a/lib/pages/agenda_page.dart b/lib/pages/agenda_page.dart index eca39fe..26eb877 100644 --- a/lib/pages/agenda_page.dart +++ b/lib/pages/agenda_page.dart @@ -1,10 +1,12 @@ 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/events/RefreshWeekEvent.dart'; import 'package:training_planner/main.dart'; import 'package:training_planner/pages/home_page.dart'; import 'package:training_planner/shift.dart'; import 'package:training_planner/style/style.dart'; +import 'package:training_planner/utils/date.dart'; import 'package:training_planner/widgets/agenda_week.dart'; class AgendaPage extends StatefulWidget { @@ -76,7 +78,15 @@ class _AgendaPageState extends State<AgendaPage> { break; } - await shiftProvider.addShift(Shift(start: dayOfWeek, type: type)); + bool success = + await shiftProvider.addShift(Shift(start: dayOfWeek, type: type)); + if (!success) { + messageService.showMessage( + context, + '\'' + + DateHelper.getWeekdayNameFull(dayOfWeek.weekday) + + '\' is al ingepland'); + } } } @@ -98,7 +108,6 @@ class _AgendaPageState extends State<AgendaPage> { child: Text("Ok"), onPressed: () async { await addShiftsFromDialog(); - setState(() {}); Navigator.pop(context); }, ); @@ -221,12 +230,7 @@ class _AgendaPageState extends State<AgendaPage> { floatingActionButton: FloatingActionButton( onPressed: () async { await showAddShiftDialog(); - Navigator.pushReplacement( - context, - MaterialPageRoute( - builder: (BuildContext context) => HomePage( - agendaWeekNr: currentSelectedPageIndex, - ))); + eventBus.fire(RefreshWeekEvent()); }, backgroundColor: Style.titleColor, child: const Icon(Icons.add), diff --git a/lib/pages/home_page.dart b/lib/pages/home_page.dart index 6b81451..3b57a0f 100644 --- a/lib/pages/home_page.dart +++ b/lib/pages/home_page.dart @@ -31,6 +31,10 @@ class _HomePageState extends State<HomePage> { void _onItemTapped(int index) { setState(() { widget.agendaWeekNr = 0; + _widgetOptions = <Widget>[ + new AgendaPage(agendaWeekNr: widget.agendaWeekNr), + new LogbookPage(), + ]; _selectedIndex = index; }); } diff --git a/lib/pages/logbook_page.dart b/lib/pages/logbook_page.dart index 0849cda..a9ef211 100644 --- a/lib/pages/logbook_page.dart +++ b/lib/pages/logbook_page.dart @@ -106,14 +106,9 @@ class _LogbookPageState extends State<LogbookPage> { Text('Gewerkt: ' + month.totalWorkedTime.inHours.toString() + ' uur'), - Text('Verdiend: ' + + Text('Verdiend: €' + month.expectedSalary.toStringAsFixed(2) + - (month.shifts.isNotEmpty - ? ' (' + - (month.shifts[0].getMinutePayRate() * 60) - .toStringAsFixed(2) + - '/uur)' - : '')), + ' (schatting)'), Padding(padding: EdgeInsets.only(left: 5, bottom: 5, right: 5)), ], ), diff --git a/lib/services/ishift_provider_service.dart b/lib/services/ishift_provider_service.dart index 7f0e6d5..68f4277 100644 --- a/lib/services/ishift_provider_service.dart +++ b/lib/services/ishift_provider_service.dart @@ -6,6 +6,6 @@ abstract class IProgramProviderService { Future<List<Shift>> getPastShifts(); Future<List<Shift>> getShiftsForWeek(DateTime firstDayOfWeek); Future<void> updateShift(Shift shift); - Future<void> addShift(Shift shift); + Future<bool> addShift(Shift shift); Future<void> deleteShift(Shift shift); } diff --git a/lib/services/local_shift_provider_service.dart b/lib/services/local_shift_provider_service.dart index 263d747..2d00a1e 100644 --- a/lib/services/local_shift_provider_service.dart +++ b/lib/services/local_shift_provider_service.dart @@ -8,9 +8,7 @@ import 'package:in_date_utils/in_date_utils.dart' as DateUtilities; import 'package:path_provider/path_provider.dart'; class LocalShiftProviderService extends IProgramProviderService { - LocalShiftProviderService() { - writeShiftsFromFile([]); - } + LocalShiftProviderService() {} Future<String> get _localPath async { final directory = await getApplicationDocumentsDirectory(); @@ -19,6 +17,15 @@ class LocalShiftProviderService extends IProgramProviderService { Future<File> get _localFile async { final path = await _localPath; + File file = File('$path/shifts.json'); + + bool exists = await file.exists(); + if (!exists) { + print('created shifts.json'); + await file.create(); + await writeShiftsFromFile([]); + } + return File('$path/shifts.json'); } @@ -67,16 +74,17 @@ class LocalShiftProviderService extends IProgramProviderService { } @override - Future<void> addShift(Shift shift) async { + Future<bool> addShift(Shift shift) async { List<Shift> savedShifts = await readShiftsFromFile(); for (var item in savedShifts) { if (DateUtilities.DateUtils.isSameDay(shift.start, item.start)) { - return; + return false; } } savedShifts.add(shift); await writeShiftsFromFile(savedShifts); + return true; } @override diff --git a/lib/services/messaging_service.dart b/lib/services/messaging_service.dart new file mode 100644 index 0000000..e601abb --- /dev/null +++ b/lib/services/messaging_service.dart @@ -0,0 +1,9 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class MessagingService { + void showMessage(BuildContext context, String message) { + ScaffoldMessenger.of(context) + .showSnackBar(SnackBar(content: Text(message))); + } +} diff --git a/lib/services/mock_shift_provider_service.dart b/lib/services/mock_shift_provider_service.dart index 8f8db3e..c7bc865 100644 --- a/lib/services/mock_shift_provider_service.dart +++ b/lib/services/mock_shift_provider_service.dart @@ -56,13 +56,14 @@ class MockShiftProviderService extends IProgramProviderService { } @override - Future<void> addShift(Shift shift) async { + Future<bool> addShift(Shift shift) async { for (var item in savedShifts) { if (DateUtilities.DateUtils.isSameDay(shift.start, item.start)) { - return; + return false; } } savedShifts.add(shift); + return true; } @override diff --git a/lib/shift.dart b/lib/shift.dart index eecf4cc..c444b38 100644 --- a/lib/shift.dart +++ b/lib/shift.dart @@ -120,6 +120,11 @@ class Shift { getMinutePayRate() * 1.35; } + if (start.weekday == 7) { + return endToCalculate.difference(start).inMinutes * + getMinutePayRate() * + 2; + } return endToCalculate.difference(start).inMinutes * getMinutePayRate(); } diff --git a/lib/utils/date.dart b/lib/utils/date.dart index 7a66c03..07596a2 100644 --- a/lib/utils/date.dart +++ b/lib/utils/date.dart @@ -1,4 +1,24 @@ class DateHelper { + static String getWeekdayNameFull(int nr) { + switch (nr) { + case DateTime.monday: + return 'Maandag'; + case DateTime.tuesday: + return 'Dinsdag'; + case DateTime.wednesday: + return 'Woensdag'; + case DateTime.thursday: + return 'Donderdag'; + case DateTime.friday: + return 'Vrijdag'; + case DateTime.saturday: + return 'Zaterdag'; + case DateTime.sunday: + return 'Zondag'; + } + return ''; + } + static String getWeekdayName(int nr) { switch (nr) { case DateTime.monday: diff --git a/lib/widgets/agenda_week.dart b/lib/widgets/agenda_week.dart index 543e0ff..a8f9350 100644 --- a/lib/widgets/agenda_week.dart +++ b/lib/widgets/agenda_week.dart @@ -1,4 +1,7 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; +import 'package:training_planner/events/RefreshWeekEvent.dart'; import 'package:training_planner/main.dart'; import 'package:training_planner/shift.dart'; import 'package:training_planner/style/style.dart'; @@ -24,6 +27,7 @@ class AgendaWeek extends StatefulWidget { class _AgendaWeekState extends State<AgendaWeek> { List<Widget> weekItems = []; + StreamSubscription? eventbusSubscription; void updateItems() { setState(() { @@ -58,6 +62,16 @@ class _AgendaWeekState extends State<AgendaWeek> { void initState() { super.initState(); updateItems(); + + eventbusSubscription = eventBus.on<RefreshWeekEvent>().listen((event) { + updateItems(); + }); + } + + @override + void dispose() { + eventbusSubscription?.cancel(); + super.dispose(); } @override diff --git a/lib/widgets/agenda_week_item.dart b/lib/widgets/agenda_week_item.dart index b74cabd..20d237b 100644 --- a/lib/widgets/agenda_week_item.dart +++ b/lib/widgets/agenda_week_item.dart @@ -150,6 +150,10 @@ class _ExerciseEntryState extends State<AgendaWeekItem> { } Future requestStartAndEndTimeForShift() async { + bool alsoAskForEndTime = + widget.shift.getShiftStatus() == ShiftStatus.OldOpen || + widget.shift.getShiftStatus() == ShiftStatus.Closed; + final TimeOfDay? startTime = await showTimePicker( context: context, helpText: 'Begin tijd', @@ -162,17 +166,26 @@ class _ExerciseEntryState extends State<AgendaWeekItem> { return; } - final TimeOfDay? endTime = await showTimePicker( - context: context, - helpText: 'Eind tijd', - initialTime: TimeOfDay( - hour: widget.shift.expectedEndTime().hour, - minute: widget.shift.expectedEndTime().minute), - initialEntryMode: TimePickerEntryMode.input, - ); + if (alsoAskForEndTime) { + final TimeOfDay? endTime = await showTimePicker( + context: context, + helpText: 'Eind tijd', + initialTime: TimeOfDay( + hour: widget.shift.expectedEndTime().hour, + minute: widget.shift.expectedEndTime().minute), + initialEntryMode: TimePickerEntryMode.input, + ); + + if (endTime == null) { + return; + } - if (endTime == null) { - return; + widget.shift.end = DateTime( + widget.shift.start.year, + widget.shift.start.month, + widget.shift.start.day, + endTime.hour, + endTime.minute); } widget.shift.start = DateTime( @@ -182,13 +195,6 @@ class _ExerciseEntryState extends State<AgendaWeekItem> { startTime.hour, startTime.minute); - widget.shift.end = DateTime( - widget.shift.start.year, - widget.shift.start.month, - widget.shift.start.day, - endTime.hour, - endTime.minute); - await shiftProvider.updateShift(widget.shift); } @@ -229,7 +235,7 @@ class _ExerciseEntryState extends State<AgendaWeekItem> { }, ); Widget continueButton = FlatButton( - child: Text("Verwijder"), + child: Text("Verwijderen"), onPressed: () async { await shiftProvider.deleteShift(widget.shift); Navigator.pop(context); @@ -325,18 +331,24 @@ class _ExerciseEntryState extends State<AgendaWeekItem> { ), width: widthOfWeekday, ), - Container( - child: RichText( - text: TextSpan( - style: TextStyle(color: Colors.black), - children: [ - TextSpan(text: ' | ' + shiftTime), - TextSpan( - text: shiftTimeEnd, style: endDateTextStyle) - ], + GestureDetector( + onLongPress: () { + requestStartAndEndTimeForShift() + .then((e) => {setState(() {})}); + }, + child: Container( + child: RichText( + text: TextSpan( + style: TextStyle(color: Colors.black), + children: [ + TextSpan(text: ' | ' + shiftTime), + TextSpan( + text: shiftTimeEnd, style: endDateTextStyle) + ], + ), ), + width: widthOfDates, ), - width: widthOfDates, ), Container( child: Text( |
