From 9649d80a2b0a0c46a8ae68606d3e0cfe6f49faee Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Wed, 17 Aug 2022 11:09:46 +0200 Subject: v0.1 --- lib/pages/agenda_page.dart | 243 +++++++++++++++++++++++++++++++++------------ 1 file changed, 181 insertions(+), 62 deletions(-) (limited to 'lib/pages/agenda_page.dart') diff --git a/lib/pages/agenda_page.dart b/lib/pages/agenda_page.dart index f052434..eca39fe 100644 --- a/lib/pages/agenda_page.dart +++ b/lib/pages/agenda_page.dart @@ -2,12 +2,10 @@ 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/main.dart'; -import 'package:training_planner/pages/add_shift_page.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'; -import 'package:flutter_local_notifications/flutter_local_notifications.dart'; class AgendaPage extends StatefulWidget { final int agendaWeekNr; @@ -19,95 +17,216 @@ class AgendaPage extends StatefulWidget { } class _AgendaPageState extends State { - int weekToStartAt = 0; - List weekNrs = []; - List dateTimes = []; int currentSelectedPageIndex = 0; - int currentSelectedPageNr = 0; - DateTime currentSelectedWeek = DateTime.now(); @override initState() { super.initState(); - - weekToStartAt = widget.agendaWeekNr; - getWeeks(); - currentSelectedPageIndex = weekToStartAt; - currentSelectedPageNr = weekNrs[weekToStartAt]; - currentSelectedWeek = dateTimes[weekToStartAt]; + currentSelectedPageIndex = getStartPageIndex(); } - List getWeeks() { - List result = []; - List weekNrs = []; - DateTime startDate = - DateUtilities.DateUtils.firstDayOfWeek(DateTime(2020, 1, 1)); - DateTime today = DateTime.now(); - DateTime firstDayOfCurrentWeek = - DateUtilities.DateUtils.firstDayOfWeek(today); - int difference = today.difference(startDate).inDays; - - int totalWeeks = (difference / 7.0).ceil() + 4; - - for (int i = 0; i < totalWeeks; i++) { - DateTime mondayOfWeek = startDate.add(Duration(days: 7 * i)); - int weekNr = DateUtilities.DateUtils.getWeekNumber(mondayOfWeek); - - bool isCurrentWeek = false; - if (mondayOfWeek == firstDayOfCurrentWeek) { - if (weekToStartAt == 0) weekToStartAt = i; - isCurrentWeek = true; + Future addShiftsFromDialog() async { + DateTime startDate = getWeek(currentSelectedPageIndex).mondayOfWeek; + String dropdownValue = 'Maandag'; + + for (int i = 0; i < 7; i++) { + DateTime dayOfWeek = startDate; + if (!dayIsSelected[i]) continue; + + switch (i) { + case 0: + dayOfWeek = startDate.add(Duration(days: 0)); + break; + case 1: + dayOfWeek = startDate.add(Duration(days: 1)); + break; + case 2: + dayOfWeek = startDate.add(Duration(days: 2)); + break; + case 3: + dayOfWeek = startDate.add(Duration(days: 3)); + break; + case 4: + dayOfWeek = startDate.add(Duration(days: 4)); + break; + case 5: + dayOfWeek = startDate.add(Duration(days: 5)); + break; + case 6: + dayOfWeek = startDate.add(Duration(days: 6)); + break; } - result.add( - AgendaWeek( - weekNr: weekNr, - mondayOfWeek: mondayOfWeek, - isCurrentWeek: isCurrentWeek, - ), - ); - weekNrs.add(weekNr); - dateTimes.add(mondayOfWeek); + 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; + } + + await shiftProvider.addShift(Shift(start: dayOfWeek, type: type)); + } + } + + List dayIsSelected = [false, false, false, false, false, false, false]; + List shiftsSelected = [false, true, false]; + + Future showAddShiftDialog() async { + dayIsSelected = [false, false, false, false, false, false, false]; + shiftsSelected = [false, true, false]; + + // set up the buttons + Widget cancelButton = FlatButton( + child: Text("Terug"), + onPressed: () { + Navigator.pop(context); + }, + ); + Widget continueButton = FlatButton( + child: Text("Ok"), + onPressed: () async { + await addShiftsFromDialog(); + setState(() {}); + Navigator.pop(context); + }, + ); + + // show the dialog + await showDialog( + context: context, + builder: (BuildContext context) { + return StatefulBuilder(builder: (context, setState) { + return AlertDialog( + title: Text("Wanneer wil je werken?"), + content: Row(children: [ + ToggleButtons( + direction: Axis.vertical, + children: [ + Padding(padding: const EdgeInsets.all(15), child: Text('Ma')), + Padding(padding: const EdgeInsets.all(15), child: Text('Di')), + Padding(padding: const EdgeInsets.all(15), child: Text('Wo')), + Padding(padding: const EdgeInsets.all(15), child: Text('Do')), + Padding(padding: const EdgeInsets.all(15), child: Text('Vr')), + Padding(padding: const EdgeInsets.all(15), child: Text('Za')), + Padding(padding: const EdgeInsets.all(15), child: Text('Zo')), + ], + onPressed: (int index) { + setState(() { + dayIsSelected[index] = !dayIsSelected[index]; + }); + }, + isSelected: dayIsSelected, + ), + Padding(padding: const EdgeInsets.all(20)), + ToggleButtons( + direction: Axis.vertical, + children: [ + Padding( + padding: const EdgeInsets.all(15), child: Text('Dagrit')), + Padding( + padding: const EdgeInsets.all(15), + child: Text('Avondrit')), + Padding( + padding: const EdgeInsets.all(15), + child: Text('Terugscan')), + ], + onPressed: (int index) { + setState(() { + shiftsSelected = [false, false, false]; + shiftsSelected[index] = true; + }); + }, + isSelected: shiftsSelected, + ), + ]), + actions: [ + cancelButton, + continueButton, + ], + ); + }); + }, + ); + } + + DateTime getStartWeek() { + return DateTime(2000, 1, 1); + } + + int getStartPageIndex() { + if (widget.agendaWeekNr != 0) return widget.agendaWeekNr; + Duration diff = DateTime.now().difference(getStartWeek()); + int index = diff.inDays ~/ 7; + + if (getWeek(index).mondayOfWeek != + DateUtilities.DateUtils.firstDayOfWeek(DateTime.now())) { + return index + 1; } - this.weekNrs = weekNrs; + return index; + } - return result; + int getMaxNumberOfWeeksToDisplay() { + DateTime start = getStartWeek(); + DateTime end = DateTime.now().add(Duration(days: 365)); + + return end.difference(start).inDays ~/ 7; + } + + AgendaWeek getWeek(int index) { + DateTime weekday = getStartWeek().add(Duration(days: index * 7)); + DateTime mondayOfWeek = DateUtilities.DateUtils.firstDayOfWeek(weekday); + DateTime mondayOfCurrentWeek = + DateUtilities.DateUtils.firstDayOfWeek(DateTime.now()); + + return AgendaWeek( + weekNr: DateUtilities.DateUtils.getWeekNumber(mondayOfWeek), + mondayOfWeek: mondayOfWeek, + isCurrentWeek: + DateUtilities.DateUtils.isSameDay(mondayOfWeek, mondayOfCurrentWeek), + ); } @override Widget build(BuildContext context) { - List weeks = getWeeks(); - return Scaffold( body: Padding( padding: const EdgeInsets.all(0), - child: CarouselSlider( + child: CarouselSlider.builder( options: CarouselOptions( onPageChanged: (index, _) { currentSelectedPageIndex = index; - currentSelectedPageNr = weekNrs[index]; - currentSelectedWeek = dateTimes[index]; }, height: MediaQuery.of(context).size.height - 163, viewportFraction: 1.0, enlargeCenterPage: false, enableInfiniteScroll: false, - initialPage: weekToStartAt, // Week nr + initialPage: getStartPageIndex(), // Week nr ), - items: weeks, + itemCount: getMaxNumberOfWeeksToDisplay(), + itemBuilder: (context, index, realIndex) => getWeek(index), ), ), floatingActionButton: FloatingActionButton( - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => AddShiftPage( - pageNr: currentSelectedPageNr, - pageIndex: currentSelectedPageIndex, - mondayOfWeek: currentSelectedWeek, - updateParent: weeks[currentSelectedPageIndex].updateFunc!)), - ); + onPressed: () async { + await showAddShiftDialog(); + Navigator.pushReplacement( + context, + MaterialPageRoute( + builder: (BuildContext context) => HomePage( + agendaWeekNr: currentSelectedPageIndex, + ))); }, backgroundColor: Style.titleColor, child: const Icon(Icons.add), -- cgit v1.2.3-70-g09d2