From 5e85fb3a74f8d08e079fb40f9152a317bb8a5385 Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Sat, 2 Oct 2021 12:18:27 +0300 Subject: [PATCH 01/26] Add academic week number to the timetable. --- lib/pages/settings/view/settings_page.dart | 20 +- lib/pages/timetable/view/lead_header.dart | 182 +++++++++++++++++++ lib/pages/timetable/view/timetable_page.dart | 17 +- 3 files changed, 213 insertions(+), 6 deletions(-) create mode 100644 lib/pages/timetable/view/lead_header.dart diff --git a/lib/pages/settings/view/settings_page.dart b/lib/pages/settings/view/settings_page.dart index a9a59f998..8f8ef0dcc 100644 --- a/lib/pages/settings/view/settings_page.dart +++ b/lib/pages/settings/view/settings_page.dart @@ -5,6 +5,7 @@ import 'package:acs_upb_mobile/generated/l10n.dart'; import 'package:acs_upb_mobile/navigation/routes.dart'; import 'package:acs_upb_mobile/pages/settings/service/request_provider.dart'; import 'package:acs_upb_mobile/pages/timetable/service/uni_event_provider.dart'; +import 'package:acs_upb_mobile/pages/timetable/view/lead_header.dart'; import 'package:acs_upb_mobile/resources/locale_provider.dart'; import 'package:acs_upb_mobile/resources/utils.dart'; import 'package:acs_upb_mobile/widgets/icon_text.dart'; @@ -31,7 +32,7 @@ class _SettingsPageState extends State { // String describing the level of editing permissions that the user has. String userPermissionString = ''; - + bool isSwitched = false; @override void initState() { super.initState(); @@ -147,6 +148,23 @@ class _SettingsPageState extends State { subtitle: Text(S.current.infoExportToGoogleCalendar), ), ), + + + SwitchPreference( + 'Academic week number', + 'Academic week number', + + onEnable: () { + LeadHeader.academicWeekNumber=true; + }, + onDisable: () { + LeadHeader.academicWeekNumber=false; + }, + defaultVal: false + + ), + + Column( mainAxisSize: MainAxisSize.min, children: [ diff --git a/lib/pages/timetable/view/lead_header.dart b/lib/pages/timetable/view/lead_header.dart new file mode 100644 index 000000000..70bd4530f --- /dev/null +++ b/lib/pages/timetable/view/lead_header.dart @@ -0,0 +1,182 @@ + + +import 'package:acs_upb_mobile/authentication/model/user.dart'; +import 'package:acs_upb_mobile/authentication/service/auth_provider.dart'; +import 'package:acs_upb_mobile/pages/classes/model/class.dart'; +import 'package:acs_upb_mobile/pages/classes/service/class_provider.dart'; +import 'package:acs_upb_mobile/pages/people/model/person.dart'; +import 'package:acs_upb_mobile/pages/people/service/person_provider.dart'; +import 'package:acs_upb_mobile/pages/timetable/model/academic_calendar.dart'; +import 'package:acs_upb_mobile/pages/timetable/model/events/all_day_event.dart'; +import 'package:acs_upb_mobile/pages/timetable/model/events/uni_event.dart'; +import 'package:acs_upb_mobile/pages/timetable/service/uni_event_provider.dart'; +import 'package:acs_upb_mobile/widgets/toast.dart'; +import 'package:auto_size_text/auto_size_text.dart'; +import 'package:black_hole_flutter/black_hole_flutter.dart'; +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:flutter/material.dart'; +import 'package:time_machine/time_machine.dart'; +import 'package:time_machine/time_machine_text_patterns.dart'; +// ignore: implementation_imports +import 'package:timetable/src/header/date_indicator.dart'; +// ignore: implementation_imports +import 'package:timetable/src/theme.dart'; +// ignore: implementation_imports +import 'package:timetable/src/utils/utils.dart'; +import 'package:provider/provider.dart'; + +class LeadHeader extends StatefulWidget { + + const LeadHeader(this.date, {Key key}) : super(key: key); + + final LocalDate date; + + static var academicWeekNumber; + + @override + + _leadHeaderState createState() => _leadHeaderState(); + +} +class _leadHeaderState extends State { + List classHeaders = []; + List classTeachers = []; + User user; + AcademicCalendar calendar; + Map calendars = {}; + int academicWeek; + Set HolidayWeeks=new Set(); + @override + Widget build(BuildContext context) { + final theme = context.theme; + final timetableTheme = context.timetableTheme; + final defaultBackgroundColor = theme.contrastColor.withOpacity(0.12); + final textStyle = timetableTheme?.weekIndicatorTextStyle ?? + TextStyle( + color: defaultBackgroundColor + .alphaBlendOn(theme.scaffoldBackgroundColor) + .mediumEmphasisOnColor, + fontSize: 14 + ); + + return Container( + + + child: Center( + child: Container( + width: 27, + height: 20, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(2), + color: defaultBackgroundColor, + border: new Border.all( + color: defaultBackgroundColor, + width: 1 + + ) + ), child: + Text( + + getWeekNumber(), + style: textStyle, + textAlign: TextAlign.center, + ), + ), + ),); + } + + String getWeekNumber() { + if (calendar != null) { + // print(widget.date); + LocalDate first_sem_start = calendar.semesters.first.startDate; + Period dif; + var nonHolidayWeeks=calendar.nonHolidayWeeks; + // print(nonHolidayWeeks); + for(var i=1;i<53;i++){ + if(!nonHolidayWeeks.contains(i)) + HolidayWeeks.add(i); + } + // print(nonHolidayWeeks); + // print("----"); + // print(HolidayWeeks); + var week=((widget.date.dayOfYear - widget.date.dayOfWeek.value + 10) / 7) + .floor(); + if (LeadHeader.academicWeekNumber == false) { + return week + .toString(); + } + else { + if (HolidayWeeks.contains(week)) + return "-"; + dif = widget.date.periodSince(first_sem_start).normalize(); + //print(dif); + academicWeek= (dif.days / 7).floor() + 1; + // print(dif.weeks); + // print(dif.toString()+" "+academicWeek.toString()+" "); + // print((academicWeek + 5 * dif.months)+1); + if(dif.months>0) { + + academicWeek = (academicWeek + 4 * dif.months)+1; + } + + + getAcademicWeek(); + return academicWeek.toString(); + } + } + else + return "0"; + } + + @override + void initState() { + if (!mounted) { + return; + } + super.initState(); + user = + Provider + .of(context, listen: false) + .currentUserFromCache; + Provider.of(context, listen: false) + .fetchClassHeaders(uid: user.uid) + .then((headers) => setState(() => classHeaders = headers)); + Provider.of(context, listen: false) + .fetchPeople() + .then((teachers) => setState(() => classTeachers = teachers)); + Provider.of(context, listen: false) + .fetchCalendars() + .then((calendars) { + setState(() { + this.calendars = calendars; + calendar = calendars.values.last; + }); + }); + } + void getAcademicWeek(){ + int d=0; + // print(academicWeek); + if(widget.date.year==2021) { + return; + } + d+=1; + for( var h in HolidayWeeks){ + if(((widget.date.dayOfYear - widget.date.dayOfWeek.value + 10) / 7) + .floor()>h) { + d += 1; + } + } + + academicWeek-=d; + + + } + + + + +} + + + + diff --git a/lib/pages/timetable/view/timetable_page.dart b/lib/pages/timetable/view/timetable_page.dart index b55f66bc9..a436bb64b 100644 --- a/lib/pages/timetable/view/timetable_page.dart +++ b/lib/pages/timetable/view/timetable_page.dart @@ -6,6 +6,7 @@ import 'package:acs_upb_mobile/pages/classes/view/classes_page.dart'; import 'package:acs_upb_mobile/pages/filter/service/filter_provider.dart'; import 'package:acs_upb_mobile/pages/filter/view/filter_page.dart'; import 'package:acs_upb_mobile/pages/settings/service/request_provider.dart'; +import 'package:acs_upb_mobile/pages/settings/view/settings_page.dart'; import 'package:acs_upb_mobile/pages/timetable/model/events/uni_event.dart'; import 'package:acs_upb_mobile/pages/timetable/service/uni_event_provider.dart'; import 'package:acs_upb_mobile/pages/timetable/view/date_header.dart'; @@ -23,6 +24,8 @@ import 'package:recase/recase.dart'; import 'package:time_machine/time_machine.dart'; import 'package:timetable/timetable.dart'; +import 'lead_header.dart'; + class TimetablePage extends StatefulWidget { const TimetablePage({Key key}) : super(key: key); @@ -32,7 +35,6 @@ class TimetablePage extends StatefulWidget { class _TimetablePageState extends State { TimetableController _controller; - @override void dispose() { _controller?.dispose(); @@ -64,7 +66,7 @@ class _TimetablePageState extends State { : _controller.currentMonth.titleCase), ), needsToBeAuthenticated: true, - leading: AppScaffoldAction( + leading:AppScaffoldAction( icon: Icons.today_outlined, onPressed: () => !_controller.currentlyVisibleDates.contains(LocalDate.today()) @@ -73,6 +75,7 @@ class _TimetablePageState extends State { tooltip: S.current.actionJumpToToday, ), actions: [ + AppScaffoldAction( icon: FeatherIcons.bookOpen, tooltip: S.current.navigationClasses, @@ -96,9 +99,10 @@ class _TimetablePageState extends State { body: Padding( padding: const EdgeInsets.all(10), child: Stack( - children: [ - Timetable( - controller: _controller, + children: [ + Timetable( + leadingHeaderBuilder:(_,date)=> LeadHeader(date), + controller: _controller, dateHeaderBuilder: (_, date) => DateHeader(date), eventBuilder: (event) => UniEventWidget(event), allDayEventBuilder: (context, event, info) => @@ -328,8 +332,11 @@ class _TimetablePageState extends State { } } + + extension MonthController on TimetableController { String get currentMonth => LocalDateTime(2020, dateListenable.value.monthOfYear, 1, 1, 1, 1) .toString('MMMM'); } + From 86ebbff8b6763a2b8bf7b5d7b8f2243b8e2a84de Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Sat, 2 Oct 2021 12:19:44 +0300 Subject: [PATCH 02/26] Add academic week number to the timetable. --- lib/pages/filter/view/relevance_picker.dart | 1 + lib/pages/timetable/service/uni_event_provider.dart | 3 ++- lib/pages/timetable/view/date_header.dart | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/pages/filter/view/relevance_picker.dart b/lib/pages/filter/view/relevance_picker.dart index 7142ca81f..20be703b3 100644 --- a/lib/pages/filter/view/relevance_picker.dart +++ b/lib/pages/filter/view/relevance_picker.dart @@ -93,6 +93,7 @@ class RelevanceFormField extends ChipFormField> { controller._state._customSelected[node] = true; } } + AppToast.show(controller._state._customSelected.isEmpty.toString()); }, ), ), diff --git a/lib/pages/timetable/service/uni_event_provider.dart b/lib/pages/timetable/service/uni_event_provider.dart index 982a316ec..3c4c9d8fd 100644 --- a/lib/pages/timetable/service/uni_event_provider.dart +++ b/lib/pages/timetable/service/uni_event_provider.dart @@ -217,6 +217,7 @@ class UniEventProvider extends EventProvider fetchCalendars(); } + final Map _calendars = {}; ClassProvider _classProvider; FilterProvider _filterProvider; @@ -226,7 +227,7 @@ class UniEventProvider extends EventProvider Filter _filter; bool empty; - Future> fetchCalendars() async { + Future> fetchCalendars() async { final QuerySnapshot query = await FirebaseFirestore.instance.collection('calendars').get(); for (final doc in query.docs) { diff --git a/lib/pages/timetable/view/date_header.dart b/lib/pages/timetable/view/date_header.dart index 4d0ebb192..98b5807dd 100644 --- a/lib/pages/timetable/view/date_header.dart +++ b/lib/pages/timetable/view/date_header.dart @@ -1,3 +1,4 @@ +import 'package:acs_upb_mobile/widgets/toast.dart'; import 'package:auto_size_text/auto_size_text.dart'; import 'package:black_hole_flutter/black_hole_flutter.dart'; import 'package:flutter/material.dart'; @@ -21,6 +22,7 @@ class DateHeader extends StatelessWidget { @override Widget build(BuildContext context) { + return Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.center, From 2bf465beb93aeaff28c01cfef403ef0e2633091f Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Sat, 2 Oct 2021 12:22:04 +0300 Subject: [PATCH 03/26] Add academic week number to the timetable. --- lib/pages/filter/view/relevance_picker.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/pages/filter/view/relevance_picker.dart b/lib/pages/filter/view/relevance_picker.dart index 20be703b3..7142ca81f 100644 --- a/lib/pages/filter/view/relevance_picker.dart +++ b/lib/pages/filter/view/relevance_picker.dart @@ -93,7 +93,6 @@ class RelevanceFormField extends ChipFormField> { controller._state._customSelected[node] = true; } } - AppToast.show(controller._state._customSelected.isEmpty.toString()); }, ), ), From 064d9f330ef5b49c95f0c670fbf9651bebd492d6 Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Sat, 2 Oct 2021 13:44:13 +0300 Subject: [PATCH 04/26] Add academic week number to the timetable. --- lib/pages/settings/view/settings_page.dart | 22 +--- lib/pages/timetable/view/lead_header.dart | 132 ++++++++----------- lib/pages/timetable/view/timetable_page.dart | 15 +-- 3 files changed, 66 insertions(+), 103 deletions(-) diff --git a/lib/pages/settings/view/settings_page.dart b/lib/pages/settings/view/settings_page.dart index 8f8ef0dcc..8ed8b43f2 100644 --- a/lib/pages/settings/view/settings_page.dart +++ b/lib/pages/settings/view/settings_page.dart @@ -33,6 +33,7 @@ class _SettingsPageState extends State { // String describing the level of editing permissions that the user has. String userPermissionString = ''; bool isSwitched = false; + @override void initState() { super.initState(); @@ -148,23 +149,12 @@ class _SettingsPageState extends State { subtitle: Text(S.current.infoExportToGoogleCalendar), ), ), - - - SwitchPreference( - 'Academic week number', - 'Academic week number', - + SwitchPreference('Academic week number', 'Academic week number', onEnable: () { - LeadHeader.academicWeekNumber=true; - }, - onDisable: () { - LeadHeader.academicWeekNumber=false; - }, - defaultVal: false - - ), - - + LeadHeader.academicWeekNumber = true; + }, onDisable: () { + LeadHeader.academicWeekNumber = false; + }, defaultVal: false), Column( mainAxisSize: MainAxisSize.min, children: [ diff --git a/lib/pages/timetable/view/lead_header.dart b/lib/pages/timetable/view/lead_header.dart index 70bd4530f..75f6a955c 100644 --- a/lib/pages/timetable/view/lead_header.dart +++ b/lib/pages/timetable/view/lead_header.dart @@ -1,5 +1,3 @@ - - import 'package:acs_upb_mobile/authentication/model/user.dart'; import 'package:acs_upb_mobile/authentication/service/auth_provider.dart'; import 'package:acs_upb_mobile/pages/classes/model/class.dart'; @@ -17,27 +15,28 @@ import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; import 'package:time_machine/time_machine.dart'; import 'package:time_machine/time_machine_text_patterns.dart'; + // ignore: implementation_imports import 'package:timetable/src/header/date_indicator.dart'; + // ignore: implementation_imports import 'package:timetable/src/theme.dart'; + // ignore: implementation_imports import 'package:timetable/src/utils/utils.dart'; import 'package:provider/provider.dart'; class LeadHeader extends StatefulWidget { - const LeadHeader(this.date, {Key key}) : super(key: key); - - final LocalDate date; + + final LocalDate date; static var academicWeekNumber; @override - - _leadHeaderState createState() => _leadHeaderState(); - + _leadHeaderState createState() => _leadHeaderState(); } + class _leadHeaderState extends State { List classHeaders = []; List classTeachers = []; @@ -45,7 +44,8 @@ class _leadHeaderState extends State { AcademicCalendar calendar; Map calendars = {}; int academicWeek; - Set HolidayWeeks=new Set(); + Set HolidayWeeks = new Set(); + @override Widget build(BuildContext context) { final theme = context.theme; @@ -56,12 +56,9 @@ class _leadHeaderState extends State { color: defaultBackgroundColor .alphaBlendOn(theme.scaffoldBackgroundColor) .mediumEmphasisOnColor, - fontSize: 14 - ); + fontSize: 14); return Container( - - child: Center( child: Container( width: 27, @@ -69,62 +66,51 @@ class _leadHeaderState extends State { decoration: BoxDecoration( borderRadius: BorderRadius.circular(2), color: defaultBackgroundColor, - border: new Border.all( - color: defaultBackgroundColor, - width: 1 - - ) - ), child: - Text( - - getWeekNumber(), - style: textStyle, - textAlign: TextAlign.center, - ), + border: new Border.all(color: defaultBackgroundColor, width: 1)), + child: Text( + getWeekNumber(), + style: textStyle, + textAlign: TextAlign.center, + ), ), - ),); + ), + ); } String getWeekNumber() { if (calendar != null) { - // print(widget.date); + // print(widget.date); LocalDate first_sem_start = calendar.semesters.first.startDate; Period dif; - var nonHolidayWeeks=calendar.nonHolidayWeeks; - // print(nonHolidayWeeks); - for(var i=1;i<53;i++){ - if(!nonHolidayWeeks.contains(i)) - HolidayWeeks.add(i); + var nonHolidayWeeks = calendar.nonHolidayWeeks; + // print(nonHolidayWeeks); + for (var i = 1; i < 53; i++) { + if (!nonHolidayWeeks.contains(i)) HolidayWeeks.add(i); } - // print(nonHolidayWeeks); - // print("----"); - // print(HolidayWeeks); - var week=((widget.date.dayOfYear - widget.date.dayOfWeek.value + 10) / 7) - .floor(); + // print(nonHolidayWeeks); + // print("----"); + // print(HolidayWeeks); + var week = + ((widget.date.dayOfYear - widget.date.dayOfWeek.value + 10) / 7) + .floor(); if (LeadHeader.academicWeekNumber == false) { - return week - .toString(); - } - else { - if (HolidayWeeks.contains(week)) - return "-"; + return week.toString(); + } else { + if (HolidayWeeks.contains(week)) return "-"; dif = widget.date.periodSince(first_sem_start).normalize(); - //print(dif); - academicWeek= (dif.days / 7).floor() + 1; - // print(dif.weeks); - // print(dif.toString()+" "+academicWeek.toString()+" "); - // print((academicWeek + 5 * dif.months)+1); - if(dif.months>0) { - - academicWeek = (academicWeek + 4 * dif.months)+1; + //print(dif); + academicWeek = (dif.days / 7).floor() + 1; + // print(dif.weeks); + // print(dif.toString()+" "+academicWeek.toString()+" "); + // print((academicWeek + 5 * dif.months)+1); + if (dif.months > 0) { + academicWeek = (academicWeek + 4 * dif.months) + 1; } - getAcademicWeek(); return academicWeek.toString(); } - } - else + } else return "0"; } @@ -135,9 +121,7 @@ class _leadHeaderState extends State { } super.initState(); user = - Provider - .of(context, listen: false) - .currentUserFromCache; + Provider.of(context, listen: false).currentUserFromCache; Provider.of(context, listen: false) .fetchClassHeaders(uid: user.uid) .then((headers) => setState(() => classHeaders = headers)); @@ -153,30 +137,22 @@ class _leadHeaderState extends State { }); }); } - void getAcademicWeek(){ - int d=0; - // print(academicWeek); - if(widget.date.year==2021) { + + void getAcademicWeek() { + int d = 0; + // print(academicWeek); + if (widget.date.year == 2021) { return; } - d+=1; - for( var h in HolidayWeeks){ - if(((widget.date.dayOfYear - widget.date.dayOfWeek.value + 10) / 7) - .floor()>h) { - d += 1; - } + d += 1; + for (var h in HolidayWeeks) { + if (((widget.date.dayOfYear - widget.date.dayOfWeek.value + 10) / 7) + .floor() > + h) { + d += 1; + } } - academicWeek-=d; - - + academicWeek -= d; } - - - - } - - - - diff --git a/lib/pages/timetable/view/timetable_page.dart b/lib/pages/timetable/view/timetable_page.dart index a436bb64b..b5dca06ea 100644 --- a/lib/pages/timetable/view/timetable_page.dart +++ b/lib/pages/timetable/view/timetable_page.dart @@ -35,6 +35,7 @@ class TimetablePage extends StatefulWidget { class _TimetablePageState extends State { TimetableController _controller; + @override void dispose() { _controller?.dispose(); @@ -66,7 +67,7 @@ class _TimetablePageState extends State { : _controller.currentMonth.titleCase), ), needsToBeAuthenticated: true, - leading:AppScaffoldAction( + leading: AppScaffoldAction( icon: Icons.today_outlined, onPressed: () => !_controller.currentlyVisibleDates.contains(LocalDate.today()) @@ -75,7 +76,6 @@ class _TimetablePageState extends State { tooltip: S.current.actionJumpToToday, ), actions: [ - AppScaffoldAction( icon: FeatherIcons.bookOpen, tooltip: S.current.navigationClasses, @@ -99,10 +99,10 @@ class _TimetablePageState extends State { body: Padding( padding: const EdgeInsets.all(10), child: Stack( - children: [ - Timetable( - leadingHeaderBuilder:(_,date)=> LeadHeader(date), - controller: _controller, + children: [ + Timetable( + leadingHeaderBuilder: (_, date) => LeadHeader(date), + controller: _controller, dateHeaderBuilder: (_, date) => DateHeader(date), eventBuilder: (event) => UniEventWidget(event), allDayEventBuilder: (context, event, info) => @@ -332,11 +332,8 @@ class _TimetablePageState extends State { } } - - extension MonthController on TimetableController { String get currentMonth => LocalDateTime(2020, dateListenable.value.monthOfYear, 1, 1, 1, 1) .toString('MMMM'); } - From be030ab6c3286024b4a4ba268297021500a4dafd Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Sat, 2 Oct 2021 13:59:47 +0300 Subject: [PATCH 05/26] Add academic week number to the timetable. --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index d0a99d405..2e1a76c46 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -14,7 +14,7 @@ description: A mobile application for students at ACS UPB. # # ACS UPB Mobile uses semantic versioning. You can read more in the CONTRIBUTING.md file. -version: 1.3.0+32 +version: 1.3.0+33 environment: sdk: ">=2.7.0 <3.0.0" From 7b5be1f7b66be18da0d0dd9dc43710eeec100a67 Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Sun, 3 Oct 2021 10:42:35 +0300 Subject: [PATCH 06/26] Add academic week number to the timetable. --- lib/pages/timetable/view/lead_header.dart | 54 ++++++----------------- 1 file changed, 14 insertions(+), 40 deletions(-) diff --git a/lib/pages/timetable/view/lead_header.dart b/lib/pages/timetable/view/lead_header.dart index 75f6a955c..52e0c7ee0 100644 --- a/lib/pages/timetable/view/lead_header.dart +++ b/lib/pages/timetable/view/lead_header.dart @@ -79,38 +79,28 @@ class _leadHeaderState extends State { String getWeekNumber() { if (calendar != null) { - // print(widget.date); - LocalDate first_sem_start = calendar.semesters.first.startDate; - Period dif; - var nonHolidayWeeks = calendar.nonHolidayWeeks; - // print(nonHolidayWeeks); + + + ListnonHolidayWeeks = calendar.nonHolidayWeeks.toList(); + + for (var i = 1; i < 53; i++) { if (!nonHolidayWeeks.contains(i)) HolidayWeeks.add(i); } - // print(nonHolidayWeeks); - // print("----"); - // print(HolidayWeeks); var week = - ((widget.date.dayOfYear - widget.date.dayOfWeek.value + 10) / 7) - .floor(); + ((widget.date.dayOfYear - widget.date.dayOfWeek.value + 10) / 7) + .floor(); + if (LeadHeader.academicWeekNumber == false) { return week.toString(); } else { - if (HolidayWeeks.contains(week)) return "-"; - dif = widget.date.periodSince(first_sem_start).normalize(); - //print(dif); - academicWeek = (dif.days / 7).floor() + 1; - // print(dif.weeks); - // print(dif.toString()+" "+academicWeek.toString()+" "); - // print((academicWeek + 5 * dif.months)+1); - if (dif.months > 0) { - academicWeek = (academicWeek + 4 * dif.months) + 1; - } - - getAcademicWeek(); - return academicWeek.toString(); + if (!nonHolidayWeeks.contains(week)) + return "-"; + else + return (nonHolidayWeeks.indexOf(week) + 1).toString(); } - } else + } + else return "0"; } @@ -138,21 +128,5 @@ class _leadHeaderState extends State { }); } - void getAcademicWeek() { - int d = 0; - // print(academicWeek); - if (widget.date.year == 2021) { - return; - } - d += 1; - for (var h in HolidayWeeks) { - if (((widget.date.dayOfYear - widget.date.dayOfWeek.value + 10) / 7) - .floor() > - h) { - d += 1; - } - } - academicWeek -= d; - } } From f33ccefc1f273dd0c406de54038c5ce1554d6527 Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Sun, 3 Oct 2021 11:20:29 +0300 Subject: [PATCH 07/26] Add academic week number to the timetable. --- lib/pages/timetable/view/lead_header.dart | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/lib/pages/timetable/view/lead_header.dart b/lib/pages/timetable/view/lead_header.dart index 52e0c7ee0..12fc1bc1e 100644 --- a/lib/pages/timetable/view/lead_header.dart +++ b/lib/pages/timetable/view/lead_header.dart @@ -28,11 +28,8 @@ import 'package:provider/provider.dart'; class LeadHeader extends StatefulWidget { const LeadHeader(this.date, {Key key}) : super(key: key); - final LocalDate date; - static var academicWeekNumber; - @override _leadHeaderState createState() => _leadHeaderState(); } @@ -45,7 +42,6 @@ class _leadHeaderState extends State { Map calendars = {}; int academicWeek; Set HolidayWeeks = new Set(); - @override Widget build(BuildContext context) { final theme = context.theme; @@ -79,10 +75,9 @@ class _leadHeaderState extends State { String getWeekNumber() { if (calendar != null) { - - ListnonHolidayWeeks = calendar.nonHolidayWeeks.toList(); - + DateInterval winterSession=new DateInterval(calendar.exams.first.startDate, calendar.exams.first.endDate); + DateInterval summerSession=new DateInterval(calendar.exams.last.startDate, calendar.exams.last.endDate); for (var i = 1; i < 53; i++) { if (!nonHolidayWeeks.contains(i)) HolidayWeeks.add(i); @@ -90,12 +85,14 @@ class _leadHeaderState extends State { var week = ((widget.date.dayOfYear - widget.date.dayOfWeek.value + 10) / 7) .floor(); - if (LeadHeader.academicWeekNumber == false) { return week.toString(); } else { if (!nonHolidayWeeks.contains(week)) - return "-"; + if(winterSession.contains(widget.date)||summerSession.contains(widget.date)) + return 'S'; + else + return 'H'; else return (nonHolidayWeeks.indexOf(week) + 1).toString(); } @@ -103,7 +100,6 @@ class _leadHeaderState extends State { else return "0"; } - @override void initState() { if (!mounted) { @@ -127,6 +123,4 @@ class _leadHeaderState extends State { }); }); } - - } From 43c14bd6a79067b1e2c5b205c400578e47166105 Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Mon, 4 Oct 2021 15:52:02 +0300 Subject: [PATCH 08/26] Add academic week number to the timetable. --- lib/pages/timetable/view/lead_header.dart | 50 ++++++++++------------- 1 file changed, 22 insertions(+), 28 deletions(-) diff --git a/lib/pages/timetable/view/lead_header.dart b/lib/pages/timetable/view/lead_header.dart index 12fc1bc1e..c82db8606 100644 --- a/lib/pages/timetable/view/lead_header.dart +++ b/lib/pages/timetable/view/lead_header.dart @@ -5,43 +5,32 @@ import 'package:acs_upb_mobile/pages/classes/service/class_provider.dart'; import 'package:acs_upb_mobile/pages/people/model/person.dart'; import 'package:acs_upb_mobile/pages/people/service/person_provider.dart'; import 'package:acs_upb_mobile/pages/timetable/model/academic_calendar.dart'; -import 'package:acs_upb_mobile/pages/timetable/model/events/all_day_event.dart'; -import 'package:acs_upb_mobile/pages/timetable/model/events/uni_event.dart'; import 'package:acs_upb_mobile/pages/timetable/service/uni_event_provider.dart'; -import 'package:acs_upb_mobile/widgets/toast.dart'; -import 'package:auto_size_text/auto_size_text.dart'; import 'package:black_hole_flutter/black_hole_flutter.dart'; -import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; import 'package:time_machine/time_machine.dart'; -import 'package:time_machine/time_machine_text_patterns.dart'; - -// ignore: implementation_imports -import 'package:timetable/src/header/date_indicator.dart'; - // ignore: implementation_imports import 'package:timetable/src/theme.dart'; // ignore: implementation_imports -import 'package:timetable/src/utils/utils.dart'; import 'package:provider/provider.dart'; class LeadHeader extends StatefulWidget { const LeadHeader(this.date, {Key key}) : super(key: key); final LocalDate date; - static var academicWeekNumber; + static var academicWeekNumber=false; @override - _leadHeaderState createState() => _leadHeaderState(); + _LeadHeaderState createState() => _LeadHeaderState(); } -class _leadHeaderState extends State { +class _LeadHeaderState extends State { List classHeaders = []; List classTeachers = []; User user; AcademicCalendar calendar; Map calendars = {}; int academicWeek; - Set HolidayWeeks = new Set(); + Set holidayWeeks = {}; @override Widget build(BuildContext context) { final theme = context.theme; @@ -62,7 +51,7 @@ class _leadHeaderState extends State { decoration: BoxDecoration( borderRadius: BorderRadius.circular(2), color: defaultBackgroundColor, - border: new Border.all(color: defaultBackgroundColor, width: 1)), + border: Border.all(color: defaultBackgroundColor, width: 1)), child: Text( getWeekNumber(), style: textStyle, @@ -75,30 +64,35 @@ class _leadHeaderState extends State { String getWeekNumber() { if (calendar != null) { - ListnonHolidayWeeks = calendar.nonHolidayWeeks.toList(); - DateInterval winterSession=new DateInterval(calendar.exams.first.startDate, calendar.exams.first.endDate); - DateInterval summerSession=new DateInterval(calendar.exams.last.startDate, calendar.exams.last.endDate); - + final List nonHolidayWeeks = calendar.nonHolidayWeeks.toList(); + final DateInterval winterSession= DateInterval(calendar.exams.first.startDate, calendar.exams.first.endDate); + final DateInterval summerSession= DateInterval(calendar.exams.last.startDate, calendar.exams.last.endDate); for (var i = 1; i < 53; i++) { - if (!nonHolidayWeeks.contains(i)) HolidayWeeks.add(i); + if (!nonHolidayWeeks.contains(i)) holidayWeeks.add(i); } - var week = + final week = ((widget.date.dayOfYear - widget.date.dayOfWeek.value + 10) / 7) .floor(); if (LeadHeader.academicWeekNumber == false) { return week.toString(); } else { - if (!nonHolidayWeeks.contains(week)) - if(winterSession.contains(widget.date)||summerSession.contains(widget.date)) + if (!nonHolidayWeeks.contains(week)) { + if (winterSession.contains(widget.date) || + summerSession.contains(widget.date)) { return 'S'; - else + } + else { return 'H'; - else + } + } + else { return (nonHolidayWeeks.indexOf(week) + 1).toString(); + } } } - else - return "0"; + else { + return '0'; + } } @override void initState() { From 7e770488840116dfcf2990bb65305e9f10093878 Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Mon, 4 Oct 2021 16:15:30 +0300 Subject: [PATCH 09/26] Add academic week number to the timetable. --- lib/pages/settings/view/settings_page.dart | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/pages/settings/view/settings_page.dart b/lib/pages/settings/view/settings_page.dart index 8ed8b43f2..e6840210e 100644 --- a/lib/pages/settings/view/settings_page.dart +++ b/lib/pages/settings/view/settings_page.dart @@ -155,6 +155,15 @@ class _SettingsPageState extends State { }, onDisable: () { LeadHeader.academicWeekNumber = false; }, defaultVal: false), + PreferenceTitle(S.current.labelFeedback), + ListTile( + key: const ValueKey('feedback_and_issues'), + onTap: () { + Navigator.of(context).pushNamed(Routes.feedbackForm); + }, + title: Text(S.current.settingsFeedbackForm), + subtitle: Text(S.current.infoFeedbackForm), + ), Column( mainAxisSize: MainAxisSize.min, children: [ From b7a466d11f47904551774d9b1fc2301056d39d43 Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Mon, 4 Oct 2021 16:25:02 +0300 Subject: [PATCH 10/26] Add academic week number to the timetable. --- lib/pages/timetable/service/uni_event_provider.dart | 1 - lib/pages/timetable/view/date_header.dart | 1 - lib/pages/timetable/view/timetable_page.dart | 1 - 3 files changed, 3 deletions(-) diff --git a/lib/pages/timetable/service/uni_event_provider.dart b/lib/pages/timetable/service/uni_event_provider.dart index 3c4c9d8fd..458d2f9dd 100644 --- a/lib/pages/timetable/service/uni_event_provider.dart +++ b/lib/pages/timetable/service/uni_event_provider.dart @@ -217,7 +217,6 @@ class UniEventProvider extends EventProvider fetchCalendars(); } - final Map _calendars = {}; ClassProvider _classProvider; FilterProvider _filterProvider; diff --git a/lib/pages/timetable/view/date_header.dart b/lib/pages/timetable/view/date_header.dart index 98b5807dd..91169d5cb 100644 --- a/lib/pages/timetable/view/date_header.dart +++ b/lib/pages/timetable/view/date_header.dart @@ -1,4 +1,3 @@ -import 'package:acs_upb_mobile/widgets/toast.dart'; import 'package:auto_size_text/auto_size_text.dart'; import 'package:black_hole_flutter/black_hole_flutter.dart'; import 'package:flutter/material.dart'; diff --git a/lib/pages/timetable/view/timetable_page.dart b/lib/pages/timetable/view/timetable_page.dart index 5058f5235..33bb043e1 100644 --- a/lib/pages/timetable/view/timetable_page.dart +++ b/lib/pages/timetable/view/timetable_page.dart @@ -6,7 +6,6 @@ import 'package:acs_upb_mobile/pages/classes/view/classes_page.dart'; import 'package:acs_upb_mobile/pages/filter/service/filter_provider.dart'; import 'package:acs_upb_mobile/pages/filter/view/filter_page.dart'; import 'package:acs_upb_mobile/pages/settings/service/request_provider.dart'; -import 'package:acs_upb_mobile/pages/settings/view/settings_page.dart'; import 'package:acs_upb_mobile/pages/timetable/model/events/uni_event.dart'; import 'package:acs_upb_mobile/pages/timetable/service/uni_event_provider.dart'; import 'package:acs_upb_mobile/pages/timetable/view/date_header.dart'; From a744eb45033f828e6961200af7d3e7633e8ec7c3 Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Mon, 4 Oct 2021 16:27:15 +0300 Subject: [PATCH 11/26] Add academic week number to the timetable. --- lib/pages/timetable/view/date_header.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/pages/timetable/view/date_header.dart b/lib/pages/timetable/view/date_header.dart index 91169d5cb..4d0ebb192 100644 --- a/lib/pages/timetable/view/date_header.dart +++ b/lib/pages/timetable/view/date_header.dart @@ -21,7 +21,6 @@ class DateHeader extends StatelessWidget { @override Widget build(BuildContext context) { - return Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.center, From e8f55f1f87a15770e6570fb40bd9a6670ff2b8d6 Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Mon, 4 Oct 2021 16:40:38 +0300 Subject: [PATCH 12/26] Add academic week number to the timetable. --- .../timetable/service/uni_event_provider.dart | 2 +- lib/pages/timetable/view/lead_header.dart | 33 ++++++++++--------- lib/pages/timetable/view/timetable_page.dart | 1 - 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/lib/pages/timetable/service/uni_event_provider.dart b/lib/pages/timetable/service/uni_event_provider.dart index 458d2f9dd..982a316ec 100644 --- a/lib/pages/timetable/service/uni_event_provider.dart +++ b/lib/pages/timetable/service/uni_event_provider.dart @@ -226,7 +226,7 @@ class UniEventProvider extends EventProvider Filter _filter; bool empty; - Future> fetchCalendars() async { + Future> fetchCalendars() async { final QuerySnapshot query = await FirebaseFirestore.instance.collection('calendars').get(); for (final doc in query.docs) { diff --git a/lib/pages/timetable/view/lead_header.dart b/lib/pages/timetable/view/lead_header.dart index c82db8606..30c03e302 100644 --- a/lib/pages/timetable/view/lead_header.dart +++ b/lib/pages/timetable/view/lead_header.dart @@ -9,6 +9,7 @@ import 'package:acs_upb_mobile/pages/timetable/service/uni_event_provider.dart'; import 'package:black_hole_flutter/black_hole_flutter.dart'; import 'package:flutter/material.dart'; import 'package:time_machine/time_machine.dart'; + // ignore: implementation_imports import 'package:timetable/src/theme.dart'; @@ -18,7 +19,8 @@ import 'package:provider/provider.dart'; class LeadHeader extends StatefulWidget { const LeadHeader(this.date, {Key key}) : super(key: key); final LocalDate date; - static var academicWeekNumber=false; + static var academicWeekNumber = false; + @override _LeadHeaderState createState() => _LeadHeaderState(); } @@ -30,7 +32,8 @@ class _LeadHeaderState extends State { AcademicCalendar calendar; Map calendars = {}; int academicWeek; - Set holidayWeeks = {}; + Set holidayWeeks = {}; + @override Widget build(BuildContext context) { final theme = context.theme; @@ -51,7 +54,7 @@ class _LeadHeaderState extends State { decoration: BoxDecoration( borderRadius: BorderRadius.circular(2), color: defaultBackgroundColor, - border: Border.all(color: defaultBackgroundColor, width: 1)), + border: Border.all(color: defaultBackgroundColor, width: 1)), child: Text( getWeekNumber(), style: textStyle, @@ -64,15 +67,17 @@ class _LeadHeaderState extends State { String getWeekNumber() { if (calendar != null) { - final List nonHolidayWeeks = calendar.nonHolidayWeeks.toList(); - final DateInterval winterSession= DateInterval(calendar.exams.first.startDate, calendar.exams.first.endDate); - final DateInterval summerSession= DateInterval(calendar.exams.last.startDate, calendar.exams.last.endDate); + final List nonHolidayWeeks = calendar.nonHolidayWeeks.toList(); + final DateInterval winterSession = DateInterval( + calendar.exams.first.startDate, calendar.exams.first.endDate); + final DateInterval summerSession = DateInterval( + calendar.exams.last.startDate, calendar.exams.last.endDate); for (var i = 1; i < 53; i++) { if (!nonHolidayWeeks.contains(i)) holidayWeeks.add(i); } - final week = - ((widget.date.dayOfYear - widget.date.dayOfWeek.value + 10) / 7) - .floor(); + final week = + ((widget.date.dayOfYear - widget.date.dayOfWeek.value + 10) / 7) + .floor(); if (LeadHeader.academicWeekNumber == false) { return week.toString(); } else { @@ -80,20 +85,18 @@ class _LeadHeaderState extends State { if (winterSession.contains(widget.date) || summerSession.contains(widget.date)) { return 'S'; - } - else { + } else { return 'H'; } - } - else { + } else { return (nonHolidayWeeks.indexOf(week) + 1).toString(); } } - } - else { + } else { return '0'; } } + @override void initState() { if (!mounted) { diff --git a/lib/pages/timetable/view/timetable_page.dart b/lib/pages/timetable/view/timetable_page.dart index 33bb043e1..ca2230ece 100644 --- a/lib/pages/timetable/view/timetable_page.dart +++ b/lib/pages/timetable/view/timetable_page.dart @@ -22,7 +22,6 @@ import 'package:provider/provider.dart'; import 'package:recase/recase.dart'; import 'package:time_machine/time_machine.dart'; import 'package:timetable/timetable.dart'; - import 'lead_header.dart'; class TimetablePage extends StatefulWidget { From a63224d7e830e0a73ddc7859c1a9f39b222056d5 Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Thu, 7 Oct 2021 14:38:59 +0300 Subject: [PATCH 13/26] Add academic week number to the timetable. --- lib/pages/settings/view/settings_page.dart | 23 ++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/lib/pages/settings/view/settings_page.dart b/lib/pages/settings/view/settings_page.dart index e6840210e..99419af51 100644 --- a/lib/pages/settings/view/settings_page.dart +++ b/lib/pages/settings/view/settings_page.dart @@ -149,12 +149,23 @@ class _SettingsPageState extends State { subtitle: Text(S.current.infoExportToGoogleCalendar), ), ), - SwitchPreference('Academic week number', 'Academic week number', - onEnable: () { - LeadHeader.academicWeekNumber = true; - }, onDisable: () { - LeadHeader.academicWeekNumber = false; - }, defaultVal: false), + Column( + children: [ + SwitchPreference( + 'Academic week number ', + 'Academic week number', + onEnable: () { + LeadHeader.academicWeekNumber = true; + }, + onDisable: () { + LeadHeader.academicWeekNumber = false; + }, + defaultVal: false, + desc: + "show number of week in the semester instead of the calendar year", + ), + ], + ), PreferenceTitle(S.current.labelFeedback), ListTile( key: const ValueKey('feedback_and_issues'), From 15852c8d2b5a3a03b8f87b109929e8c577b65175 Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Thu, 7 Oct 2021 14:43:33 +0300 Subject: [PATCH 14/26] Add academic week number to the timetable. --- lib/pages/settings/view/settings_page.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pages/settings/view/settings_page.dart b/lib/pages/settings/view/settings_page.dart index 99419af51..b317fa7fc 100644 --- a/lib/pages/settings/view/settings_page.dart +++ b/lib/pages/settings/view/settings_page.dart @@ -162,7 +162,7 @@ class _SettingsPageState extends State { }, defaultVal: false, desc: - "show number of week in the semester instead of the calendar year", + 'show number of week in the semester instead of the calendar year', ), ], ), From a56d7a726ae4a5e4820df6629b41069987e8d9db Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Fri, 8 Oct 2021 20:17:59 +0300 Subject: [PATCH 15/26] Add academic week number to the timetable. --- lib/l10n/intl_en.arb | 2 ++ lib/l10n/intl_ro.arb | 2 ++ lib/pages/settings/view/settings_page.dart | 6 ++-- .../timetable/model/events/all_day_event.dart | 2 ++ lib/pages/timetable/view/lead_header.dart | 24 ++++++------- lib/pages/timetable/view/timetable_page.dart | 2 +- test/integration_test.dart | 35 +++++++++---------- 7 files changed, 35 insertions(+), 38 deletions(-) diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 03c90f41f..dbf95e5ca 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -215,7 +215,9 @@ "settingsTitlePersonalization": "Personalization", "settingsItemDarkMode": "Dark Mode", + "settingsAcademicWeekNumber":"Academic week number", "settingsTitleLocalization": "Localization", + "settingsAcademicWeekNumberSubtitle":"Show number of week in the semester instead of the calendar year" "settingsTitleDataControl": "Data control", "settingsItemEditingPermissions": "Your editing permissions", "settingsPermissionsNone": "No special permissions", diff --git a/lib/l10n/intl_ro.arb b/lib/l10n/intl_ro.arb index a75863ed3..eef0c84b0 100644 --- a/lib/l10n/intl_ro.arb +++ b/lib/l10n/intl_ro.arb @@ -215,9 +215,11 @@ "settingsTitlePersonalization": "Personalizare", "settingsItemDarkMode": "Mod Întunecat", + "settingsAcademicWeekNumber":"Săptămâni academice", "settingsTitleLocalization": "Localizare", "settingsTitleDataControl": "Control date", "settingsItemEditingPermissions": "Permisiunile tale de editare", + "settingsAcademicWeekNumberSubtitle":"Afișează săptămână din semestru în loc de cea din an" "settingsPermissionsNone": "Fără permisiuni speciale", "settingsPermissionsAdd": "Permisiune pentru adăugare de date publice", "settingsPermissionsEdit": "Permisiune pentru editare de date publice", diff --git a/lib/pages/settings/view/settings_page.dart b/lib/pages/settings/view/settings_page.dart index b317fa7fc..e936ebfbe 100644 --- a/lib/pages/settings/view/settings_page.dart +++ b/lib/pages/settings/view/settings_page.dart @@ -32,7 +32,6 @@ class _SettingsPageState extends State { // String describing the level of editing permissions that the user has. String userPermissionString = ''; - bool isSwitched = false; @override void initState() { @@ -152,7 +151,7 @@ class _SettingsPageState extends State { Column( children: [ SwitchPreference( - 'Academic week number ', + S.current.settingsAcademicWeekNumber, 'Academic week number', onEnable: () { LeadHeader.academicWeekNumber = true; @@ -161,8 +160,7 @@ class _SettingsPageState extends State { LeadHeader.academicWeekNumber = false; }, defaultVal: false, - desc: - 'show number of week in the semester instead of the calendar year', + desc: S.current.settingsAcademicWeekNumberSubtitle, ), ], ), diff --git a/lib/pages/timetable/model/events/all_day_event.dart b/lib/pages/timetable/model/events/all_day_event.dart index 0f2448f9b..533b80890 100644 --- a/lib/pages/timetable/model/events/all_day_event.dart +++ b/lib/pages/timetable/model/events/all_day_event.dart @@ -51,4 +51,6 @@ class AllDayUniEvent extends UniEvent { color: color, ); } + + } diff --git a/lib/pages/timetable/view/lead_header.dart b/lib/pages/timetable/view/lead_header.dart index 30c03e302..14933cc8b 100644 --- a/lib/pages/timetable/view/lead_header.dart +++ b/lib/pages/timetable/view/lead_header.dart @@ -5,6 +5,7 @@ import 'package:acs_upb_mobile/pages/classes/service/class_provider.dart'; import 'package:acs_upb_mobile/pages/people/model/person.dart'; import 'package:acs_upb_mobile/pages/people/service/person_provider.dart'; import 'package:acs_upb_mobile/pages/timetable/model/academic_calendar.dart'; +import 'package:acs_upb_mobile/pages/timetable/model/events/all_day_event.dart'; import 'package:acs_upb_mobile/pages/timetable/service/uni_event_provider.dart'; import 'package:black_hole_flutter/black_hole_flutter.dart'; import 'package:flutter/material.dart'; @@ -19,7 +20,7 @@ import 'package:provider/provider.dart'; class LeadHeader extends StatefulWidget { const LeadHeader(this.date, {Key key}) : super(key: key); final LocalDate date; - static var academicWeekNumber = false; + static var academicWeekNumber = true; @override _LeadHeaderState createState() => _LeadHeaderState(); @@ -68,13 +69,15 @@ class _LeadHeaderState extends State { String getWeekNumber() { if (calendar != null) { final List nonHolidayWeeks = calendar.nonHolidayWeeks.toList(); - final DateInterval winterSession = DateInterval( - calendar.exams.first.startDate, calendar.exams.first.endDate); - final DateInterval summerSession = DateInterval( - calendar.exams.last.startDate, calendar.exams.last.endDate); + // final DateInterval winterSession = DateInterval( + // calendar.exams.first.startDate, calendar.exams.first.endDate); + // final DateInterval summerSession = DateInterval( + // calendar.exams.last.startDate, calendar.exams.last.endDate); + for (var i = 1; i < 53; i++) { if (!nonHolidayWeeks.contains(i)) holidayWeeks.add(i); } + final week = ((widget.date.dayOfYear - widget.date.dayOfWeek.value + 10) / 7) .floor(); @@ -82,19 +85,12 @@ class _LeadHeaderState extends State { return week.toString(); } else { if (!nonHolidayWeeks.contains(week)) { - if (winterSession.contains(widget.date) || - summerSession.contains(widget.date)) { - return 'S'; - } else { - return 'H'; - } - } else { return (nonHolidayWeeks.indexOf(week) + 1).toString(); } } - } else { - return '0'; } + return '0'; + } @override diff --git a/lib/pages/timetable/view/timetable_page.dart b/lib/pages/timetable/view/timetable_page.dart index ca2230ece..676728907 100644 --- a/lib/pages/timetable/view/timetable_page.dart +++ b/lib/pages/timetable/view/timetable_page.dart @@ -99,7 +99,7 @@ class _TimetablePageState extends State { child: Stack( children: [ Timetable( - leadingHeaderBuilder: (_, date) => LeadHeader(date), + leadingHeaderBuilder: (_, date) => LeadHeader(date??LocalDate.today()), controller: _controller, dateHeaderBuilder: (_, date) => DateHeader(date), eventBuilder: (event) => UniEventWidget(event), diff --git a/test/integration_test.dart b/test/integration_test.dart index 91f6b33af..8defe3607 100644 --- a/test/integration_test.dart +++ b/test/integration_test.dart @@ -47,6 +47,7 @@ import 'package:acs_upb_mobile/pages/timetable/model/events/uni_event.dart'; import 'package:acs_upb_mobile/pages/timetable/service/uni_event_provider.dart'; import 'package:acs_upb_mobile/pages/timetable/view/events/add_event_view.dart'; import 'package:acs_upb_mobile/pages/timetable/view/events/event_view.dart'; +import 'package:acs_upb_mobile/pages/timetable/view/lead_header.dart'; import 'package:acs_upb_mobile/pages/timetable/view/timetable_page.dart'; import 'package:acs_upb_mobile/resources/locale_provider.dart'; import 'package:acs_upb_mobile/resources/remote_config.dart'; @@ -548,7 +549,7 @@ Future main() async { ), ]; final calendar = AcademicCalendar( - id: '2020', + id: '2021', semesters: [ AllDayUniEvent( start: weekStart, @@ -564,7 +565,7 @@ Future main() async { holidays: holidays, ); when(mockEventProvider.fetchCalendars()) - .thenAnswer((_) => Future.value({'2020': calendar})); + .thenAnswer((_) => Future.value({'2021': calendar})); when(mockEventProvider.getUpcomingEvents(LocalDate.today())) .thenAnswer((_) => Future.value([])); when(mockEventProvider.getUpcomingEvents(LocalDate.today(), @@ -915,15 +916,17 @@ Future main() async { // Scroll to previous week await tester.drag(find.text('Tue'), Offset(size.width - 30, 0)); - await tester.pumpAndSettle(); + // Expect previous week final previousWeek = WeekYearRules.iso .getWeekOfWeekYear(LocalDate.today().subtractWeeks(1)); + await tester.pumpAndSettle(); + expect( find.byWidgetPredicate((widget) => - widget is WeekIndicator && - widget.week.toString() == previousWeek.toString()), + widget is LeadHeader + ), findsOneWidget); expect(find.text('Holiday'), findsNothing); @@ -949,8 +952,8 @@ Future main() async { WeekYearRules.iso.getWeekOfWeekYear(LocalDate.today()); expect( find.byWidgetPredicate((widget) => - widget is WeekIndicator && - widget.week.toString() == currentWeek.toString()), + widget is LeadHeader + ), findsOneWidget); expect(find.text('Holiday'), findsNothing); @@ -976,8 +979,7 @@ Future main() async { .getWeekOfWeekYear(LocalDate.today().addWeeks(1)); expect( find.byWidgetPredicate((widget) => - widget is WeekIndicator && - widget.week.toString() == nextWeek.toString()), + widget is LeadHeader ), findsOneWidget); expect(find.text('Holiday'), findsOneWidget); @@ -1003,8 +1005,7 @@ Future main() async { .getWeekOfWeekYear(LocalDate.today().addWeeks(2)); expect( find.byWidgetPredicate((widget) => - widget is WeekIndicator && - widget.week.toString() == nextNextWeek.toString()), + widget is LeadHeader ), findsOneWidget); expect(find.text('Holiday'), findsNothing); @@ -1030,8 +1031,7 @@ Future main() async { .getWeekOfWeekYear(LocalDate.today().addWeeks(3)); expect( find.byWidgetPredicate((widget) => - widget is WeekIndicator && - widget.week.toString() == nextNextNextWeek.toString()), + widget is LeadHeader ), findsOneWidget); expect(find.text('Holiday'), findsNothing); @@ -1055,8 +1055,7 @@ Future main() async { // Expect current week expect( find.byWidgetPredicate((widget) => - widget is WeekIndicator && - widget.week.toString() == currentWeek.toString()), + widget is LeadHeader ), findsOneWidget); }); } @@ -1080,8 +1079,7 @@ Future main() async { WeekYearRules.iso.getWeekOfWeekYear(LocalDate.today()); expect( find.byWidgetPredicate((widget) => - widget is WeekIndicator && - widget.week.toString() == currentWeek.toString()), + widget is LeadHeader ), findsOneWidget); // Scroll to next week @@ -1093,8 +1091,7 @@ Future main() async { .getWeekOfWeekYear(LocalDate.today().addWeeks(1)); expect( find.byWidgetPredicate((widget) => - widget is WeekIndicator && - widget.week.toString() == nextWeek.toString()), + widget is LeadHeader ), findsOneWidget); // Open holiday event From c834c3dcd3a976821606ccef15638c1e3032209d Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Tue, 12 Oct 2021 08:47:13 +0300 Subject: [PATCH 16/26] Add academic week number to the timetable. --- lib/pages/timetable/view/lead_header.dart | 17 ++++++++++------- pubspec.yaml | 2 +- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/lib/pages/timetable/view/lead_header.dart b/lib/pages/timetable/view/lead_header.dart index 14933cc8b..be2a93818 100644 --- a/lib/pages/timetable/view/lead_header.dart +++ b/lib/pages/timetable/view/lead_header.dart @@ -69,27 +69,30 @@ class _LeadHeaderState extends State { String getWeekNumber() { if (calendar != null) { final List nonHolidayWeeks = calendar.nonHolidayWeeks.toList(); - // final DateInterval winterSession = DateInterval( - // calendar.exams.first.startDate, calendar.exams.first.endDate); - // final DateInterval summerSession = DateInterval( - // calendar.exams.last.startDate, calendar.exams.last.endDate); + for (var i = 1; i < 53; i++) { if (!nonHolidayWeeks.contains(i)) holidayWeeks.add(i); } final week = - ((widget.date.dayOfYear - widget.date.dayOfWeek.value + 10) / 7) - .floor(); + ((widget.date.dayOfYear - widget.date.dayOfWeek.value + 10) / 7) + .floor(); if (LeadHeader.academicWeekNumber == false) { return week.toString(); } else { if (!nonHolidayWeeks.contains(week)) { + + return 'H'; + + } else { return (nonHolidayWeeks.indexOf(week) + 1).toString(); } } + } else { + return ' '; } - return '0'; + } diff --git a/pubspec.yaml b/pubspec.yaml index e409a5a8c..a7b6a7856 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -13,7 +13,7 @@ description: A mobile application for students at ACS UPB. # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # # ACS UPB Mobile uses semantic versioning. You can read more in the CONTRIBUTING.md file. -version: 1.3.1+38 +version: 1.3.1+40 environment: sdk: ">=2.7.0 <3.0.0" From bc1bf1407244a3bd9be22f8f2b59088705ca67fc Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Wed, 13 Oct 2021 17:41:41 +0300 Subject: [PATCH 17/26] Add academic week number to the timetable. --- .../timetable/model/academic_calendar.dart | 23 ++++++++++++++++++ .../timetable/model/events/all_day_event.dart | 2 -- .../timetable/view/events/add_event_view.dart | 24 ++++++++----------- lib/pages/timetable/view/lead_header.dart | 11 +++------ lib/pages/timetable/view/timetable_page.dart | 3 ++- 5 files changed, 38 insertions(+), 25 deletions(-) diff --git a/lib/pages/timetable/model/academic_calendar.dart b/lib/pages/timetable/model/academic_calendar.dart index a39cc1f5d..d313f70bf 100644 --- a/lib/pages/timetable/model/academic_calendar.dart +++ b/lib/pages/timetable/model/academic_calendar.dart @@ -77,4 +77,27 @@ class AcademicCalendar { return weeksByYear.values.expand((e) => e).toSet(); } + int semesterForDate(LocalDate date){ + for (final semester in semesters) { + if (date._isBeforeOrDuring(semester)) { + // semester.id is represented as "semesterN", where "semester0" is the first semester + return 1 + int.tryParse(semester.id[semester.id.length - 1]); + } + } + return -1; + } + +} +extension LocalDateComparisons on LocalDate { + bool _isDuring(AllDayUniEvent semester) { + return DateInterval(semester.startDate, semester.endDate).contains(this); + } + + bool _isBeforeOrDuring(AllDayUniEvent semester) { + if (compareTo(semester.startDate) < 0) return true; + return _isDuring(semester); + } } + + + diff --git a/lib/pages/timetable/model/events/all_day_event.dart b/lib/pages/timetable/model/events/all_day_event.dart index 533b80890..0f2448f9b 100644 --- a/lib/pages/timetable/model/events/all_day_event.dart +++ b/lib/pages/timetable/model/events/all_day_event.dart @@ -51,6 +51,4 @@ class AllDayUniEvent extends UniEvent { color: color, ); } - - } diff --git a/lib/pages/timetable/view/events/add_event_view.dart b/lib/pages/timetable/view/events/add_event_view.dart index a7608f0ac..505ea7afa 100644 --- a/lib/pages/timetable/view/events/add_event_view.dart +++ b/lib/pages/timetable/view/events/add_event_view.dart @@ -110,21 +110,17 @@ class _AddEventViewState extends State { : 1; } else { bool foundSemester = false; - for (final calendar in calendars.entries) { - for (final semester in calendar.value.semesters) { - final LocalDate date = - widget.initialEvent.start.calendarDate ?? LocalDate.today(); - if (date.isBeforeOrDuring(semester)) { - // semester.id is represented as "semesterN", where "semester0" is the first semester - selectedSemester = - 1 + int.tryParse(semester.id[semester.id.length - 1]); - selectedCalendar = calendar.key; - foundSemester = true; - break; - } + final LocalDate date = + widget.initialEvent.start.calendarDate ?? LocalDate.today(); + calendars.forEach((key, value) { + final semester = value.semesterForDate(date); + if (semester != -1) { + selectedCalendar = key; + selectedSemester = semester; + return; } - if (foundSemester) break; - } + }); + if (!foundSemester) { selectedCalendar = calendars.entries.last.value.id; selectedSemester = 2; diff --git a/lib/pages/timetable/view/lead_header.dart b/lib/pages/timetable/view/lead_header.dart index be2a93818..29aa5dd2c 100644 --- a/lib/pages/timetable/view/lead_header.dart +++ b/lib/pages/timetable/view/lead_header.dart @@ -70,21 +70,18 @@ class _LeadHeaderState extends State { if (calendar != null) { final List nonHolidayWeeks = calendar.nonHolidayWeeks.toList(); - for (var i = 1; i < 53; i++) { if (!nonHolidayWeeks.contains(i)) holidayWeeks.add(i); } final week = - ((widget.date.dayOfYear - widget.date.dayOfWeek.value + 10) / 7) - .floor(); + ((widget.date.dayOfYear - widget.date.dayOfWeek.value + 10) / 7) + .floor(); if (LeadHeader.academicWeekNumber == false) { return week.toString(); } else { if (!nonHolidayWeeks.contains(week)) { - - return 'H'; - + return 'H'; } else { return (nonHolidayWeeks.indexOf(week) + 1).toString(); } @@ -92,8 +89,6 @@ class _LeadHeaderState extends State { } else { return ' '; } - - } @override diff --git a/lib/pages/timetable/view/timetable_page.dart b/lib/pages/timetable/view/timetable_page.dart index 676728907..bb5bb09a1 100644 --- a/lib/pages/timetable/view/timetable_page.dart +++ b/lib/pages/timetable/view/timetable_page.dart @@ -99,7 +99,8 @@ class _TimetablePageState extends State { child: Stack( children: [ Timetable( - leadingHeaderBuilder: (_, date) => LeadHeader(date??LocalDate.today()), + leadingHeaderBuilder: (_, date) => + LeadHeader(date ?? LocalDate.today()), controller: _controller, dateHeaderBuilder: (_, date) => DateHeader(date), eventBuilder: (event) => UniEventWidget(event), From c10f563cbfd48e66501c74196735794fc47d1966 Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Wed, 13 Oct 2021 17:48:02 +0300 Subject: [PATCH 18/26] Add academic week number to the timetable. --- .../timetable/model/academic_calendar.dart | 8 ++--- test/integration_test.dart | 35 +++++-------------- 2 files changed, 11 insertions(+), 32 deletions(-) diff --git a/lib/pages/timetable/model/academic_calendar.dart b/lib/pages/timetable/model/academic_calendar.dart index d313f70bf..46dcd4c5a 100644 --- a/lib/pages/timetable/model/academic_calendar.dart +++ b/lib/pages/timetable/model/academic_calendar.dart @@ -77,7 +77,8 @@ class AcademicCalendar { return weeksByYear.values.expand((e) => e).toSet(); } - int semesterForDate(LocalDate date){ + + int semesterForDate(LocalDate date) { for (final semester in semesters) { if (date._isBeforeOrDuring(semester)) { // semester.id is represented as "semesterN", where "semester0" is the first semester @@ -86,8 +87,8 @@ class AcademicCalendar { } return -1; } - } + extension LocalDateComparisons on LocalDate { bool _isDuring(AllDayUniEvent semester) { return DateInterval(semester.startDate, semester.endDate).contains(this); @@ -98,6 +99,3 @@ extension LocalDateComparisons on LocalDate { return _isDuring(semester); } } - - - diff --git a/test/integration_test.dart b/test/integration_test.dart index 8defe3607..bbcaa172e 100644 --- a/test/integration_test.dart +++ b/test/integration_test.dart @@ -917,16 +917,12 @@ Future main() async { // Scroll to previous week await tester.drag(find.text('Tue'), Offset(size.width - 30, 0)); - // Expect previous week final previousWeek = WeekYearRules.iso .getWeekOfWeekYear(LocalDate.today().subtractWeeks(1)); await tester.pumpAndSettle(); - expect( - find.byWidgetPredicate((widget) => - widget is LeadHeader - ), + expect(find.byWidgetPredicate((widget) => widget is LeadHeader), findsOneWidget); expect(find.text('Holiday'), findsNothing); @@ -950,10 +946,7 @@ Future main() async { // Expect current week final currentWeek = WeekYearRules.iso.getWeekOfWeekYear(LocalDate.today()); - expect( - find.byWidgetPredicate((widget) => - widget is LeadHeader - ), + expect(find.byWidgetPredicate((widget) => widget is LeadHeader), findsOneWidget); expect(find.text('Holiday'), findsNothing); @@ -977,9 +970,7 @@ Future main() async { // Expect next week final nextWeek = WeekYearRules.iso .getWeekOfWeekYear(LocalDate.today().addWeeks(1)); - expect( - find.byWidgetPredicate((widget) => - widget is LeadHeader ), + expect(find.byWidgetPredicate((widget) => widget is LeadHeader), findsOneWidget); expect(find.text('Holiday'), findsOneWidget); @@ -1003,9 +994,7 @@ Future main() async { // Expect next week final nextNextWeek = WeekYearRules.iso .getWeekOfWeekYear(LocalDate.today().addWeeks(2)); - expect( - find.byWidgetPredicate((widget) => - widget is LeadHeader ), + expect(find.byWidgetPredicate((widget) => widget is LeadHeader), findsOneWidget); expect(find.text('Holiday'), findsNothing); @@ -1029,9 +1018,7 @@ Future main() async { // Expect next week final nextNextNextWeek = WeekYearRules.iso .getWeekOfWeekYear(LocalDate.today().addWeeks(3)); - expect( - find.byWidgetPredicate((widget) => - widget is LeadHeader ), + expect(find.byWidgetPredicate((widget) => widget is LeadHeader), findsOneWidget); expect(find.text('Holiday'), findsNothing); @@ -1053,9 +1040,7 @@ Future main() async { await tester.pumpAndSettle(); // Expect current week - expect( - find.byWidgetPredicate((widget) => - widget is LeadHeader ), + expect(find.byWidgetPredicate((widget) => widget is LeadHeader), findsOneWidget); }); } @@ -1077,9 +1062,7 @@ Future main() async { // Expect current week final currentWeek = WeekYearRules.iso.getWeekOfWeekYear(LocalDate.today()); - expect( - find.byWidgetPredicate((widget) => - widget is LeadHeader ), + expect(find.byWidgetPredicate((widget) => widget is LeadHeader), findsOneWidget); // Scroll to next week @@ -1089,9 +1072,7 @@ Future main() async { // Expect next week final nextWeek = WeekYearRules.iso .getWeekOfWeekYear(LocalDate.today().addWeeks(1)); - expect( - find.byWidgetPredicate((widget) => - widget is LeadHeader ), + expect(find.byWidgetPredicate((widget) => widget is LeadHeader), findsOneWidget); // Open holiday event From 63d5f1e7073ea7b09f9dcb9b26be0a2b7cc1ff53 Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Mon, 1 Nov 2021 10:44:54 +0200 Subject: [PATCH 19/26] Add academic week number to the timetable. --- lib/generated/intl/messages_en.dart | 2 ++ lib/generated/intl/messages_ro.dart | 2 ++ lib/generated/l10n.dart | 19 +++++++++++++++++++ lib/pages/timetable/view/lead_header.dart | 1 - 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/lib/generated/intl/messages_en.dart b/lib/generated/intl/messages_en.dart index 180648c6f..25b01740e 100644 --- a/lib/generated/intl/messages_en.dart +++ b/lib/generated/intl/messages_en.dart @@ -288,6 +288,8 @@ class MessageLookup extends MessageLookupByLibrary { "settingsFeedbackForm" : MessageLookupByLibrary.simpleMessage("Contact us"), "settingsItemAdmin" : MessageLookupByLibrary.simpleMessage("Admin Panel"), "settingsItemDarkMode" : MessageLookupByLibrary.simpleMessage("Dark Mode"), + "settingsAcademicWeekNumber":MessageLookupByLibrary.simpleMessage("Academic week number"), + "settingsAcademicWeekNumberSubtitle":MessageLookupByLibrary.simpleMessage("Show number of week in the semester instead of the calendar year"), "settingsItemEditingPermissions" : MessageLookupByLibrary.simpleMessage("Your editing permissions"), "settingsItemLanguage" : MessageLookupByLibrary.simpleMessage("Language"), "settingsItemLanguageAuto" : MessageLookupByLibrary.simpleMessage("Auto"), diff --git a/lib/generated/intl/messages_ro.dart b/lib/generated/intl/messages_ro.dart index 605b8408c..ecba08358 100644 --- a/lib/generated/intl/messages_ro.dart +++ b/lib/generated/intl/messages_ro.dart @@ -288,6 +288,8 @@ class MessageLookup extends MessageLookupByLibrary { "settingsFeedbackForm" : MessageLookupByLibrary.simpleMessage("Contactează-ne"), "settingsItemAdmin" : MessageLookupByLibrary.simpleMessage("Panoul Administratorului"), "settingsItemDarkMode" : MessageLookupByLibrary.simpleMessage("Mod Întunecat"), + "settingsAcademicWeekNumber":MessageLookupByLibrary.simpleMessage("Săptămâni academice"), + "settingsAcademicWeekNumberSubtitle":MessageLookupByLibrary.simpleMessage("Afișează săptămână din semestru în loc de cea din an"), "settingsItemEditingPermissions" : MessageLookupByLibrary.simpleMessage("Permisiunile tale de editare"), "settingsItemLanguage" : MessageLookupByLibrary.simpleMessage("Limbă"), "settingsItemLanguageAuto" : MessageLookupByLibrary.simpleMessage("Auto"), diff --git a/lib/generated/l10n.dart b/lib/generated/l10n.dart index 8872950be..a3e16f7d5 100644 --- a/lib/generated/l10n.dart +++ b/lib/generated/l10n.dart @@ -2194,6 +2194,25 @@ class S { args: [], ); } + /// `Academic week number` + String get settingsAcademicWeekNumber { + return Intl.message( + 'Academic week number', + name: 'settingsAcademicWeekNumber', + desc: '', + args: [], + ); + } + ///'Show number of week in the semester instead of the calendar year' + String get settingsAcademicWeekNumberSubtitle { + return Intl.message( + 'Show number of week in the semester instead of the calendar year', + name: 'settingsAcademicWeekNumberSubtitle', + desc: '', + args: [], + ); + } + /// `Admin Panel` String get settingsItemAdmin { diff --git a/lib/pages/timetable/view/lead_header.dart b/lib/pages/timetable/view/lead_header.dart index 29aa5dd2c..1b032e9a5 100644 --- a/lib/pages/timetable/view/lead_header.dart +++ b/lib/pages/timetable/view/lead_header.dart @@ -110,7 +110,6 @@ class _LeadHeaderState extends State { .then((calendars) { setState(() { this.calendars = calendars; - calendar = calendars.values.last; }); }); } From 5d18e0a169468fe5ae1c23ea22dab001e36a874b Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Mon, 1 Nov 2021 11:38:40 +0200 Subject: [PATCH 20/26] Add academic week number to the timetable. --- .../timetable/model/academic_calendar.dart | 21 +++++++++++++- .../timetable/view/events/add_event_view.dart | 2 +- lib/pages/timetable/view/lead_header.dart | 29 ++----------------- pubspec.yaml | 2 +- test/integration_test.dart | 17 ----------- 5 files changed, 25 insertions(+), 46 deletions(-) diff --git a/lib/pages/timetable/model/academic_calendar.dart b/lib/pages/timetable/model/academic_calendar.dart index 46dcd4c5a..fbf55d7cd 100644 --- a/lib/pages/timetable/model/academic_calendar.dart +++ b/lib/pages/timetable/model/academic_calendar.dart @@ -87,7 +87,26 @@ class AcademicCalendar { } return -1; } -} + String getWeekNumber(LocalDate date) { + + final Set holidayWeeks = {}; + for (var i = 1; i < 53; i++) { + if (!nonHolidayWeeks.contains(i)) holidayWeeks.add(i); + } + + final week = + ((date.dayOfYear - date.dayOfWeek.value + 10) / 7) + .floor(); + + if (!nonHolidayWeeks.contains(week)) { + return 'H'; + } else { + return (nonHolidayWeeks.toList().indexOf(week) + 1).toString(); + } + } + } + + extension LocalDateComparisons on LocalDate { bool _isDuring(AllDayUniEvent semester) { diff --git a/lib/pages/timetable/view/events/add_event_view.dart b/lib/pages/timetable/view/events/add_event_view.dart index 505ea7afa..c01286955 100644 --- a/lib/pages/timetable/view/events/add_event_view.dart +++ b/lib/pages/timetable/view/events/add_event_view.dart @@ -109,7 +109,7 @@ class _AddEventViewState extends State { ? 2 : 1; } else { - bool foundSemester = false; + const bool foundSemester = false; final LocalDate date = widget.initialEvent.start.calendarDate ?? LocalDate.today(); calendars.forEach((key, value) { diff --git a/lib/pages/timetable/view/lead_header.dart b/lib/pages/timetable/view/lead_header.dart index 1b032e9a5..77944cb98 100644 --- a/lib/pages/timetable/view/lead_header.dart +++ b/lib/pages/timetable/view/lead_header.dart @@ -5,7 +5,6 @@ import 'package:acs_upb_mobile/pages/classes/service/class_provider.dart'; import 'package:acs_upb_mobile/pages/people/model/person.dart'; import 'package:acs_upb_mobile/pages/people/service/person_provider.dart'; import 'package:acs_upb_mobile/pages/timetable/model/academic_calendar.dart'; -import 'package:acs_upb_mobile/pages/timetable/model/events/all_day_event.dart'; import 'package:acs_upb_mobile/pages/timetable/service/uni_event_provider.dart'; import 'package:black_hole_flutter/black_hole_flutter.dart'; import 'package:flutter/material.dart'; @@ -33,7 +32,7 @@ class _LeadHeaderState extends State { AcademicCalendar calendar; Map calendars = {}; int academicWeek; - Set holidayWeeks = {}; + @override Widget build(BuildContext context) { @@ -57,7 +56,7 @@ class _LeadHeaderState extends State { color: defaultBackgroundColor, border: Border.all(color: defaultBackgroundColor, width: 1)), child: Text( - getWeekNumber(), + calendars.values.where((element) => element.semesterForDate(widget.date)!=-1).first.getWeekNumber(widget.date), style: textStyle, textAlign: TextAlign.center, ), @@ -66,30 +65,7 @@ class _LeadHeaderState extends State { ); } - String getWeekNumber() { - if (calendar != null) { - final List nonHolidayWeeks = calendar.nonHolidayWeeks.toList(); - for (var i = 1; i < 53; i++) { - if (!nonHolidayWeeks.contains(i)) holidayWeeks.add(i); - } - - final week = - ((widget.date.dayOfYear - widget.date.dayOfWeek.value + 10) / 7) - .floor(); - if (LeadHeader.academicWeekNumber == false) { - return week.toString(); - } else { - if (!nonHolidayWeeks.contains(week)) { - return 'H'; - } else { - return (nonHolidayWeeks.indexOf(week) + 1).toString(); - } - } - } else { - return ' '; - } - } @override void initState() { @@ -110,6 +86,7 @@ class _LeadHeaderState extends State { .then((calendars) { setState(() { this.calendars = calendars; + }); }); } diff --git a/pubspec.yaml b/pubspec.yaml index a7b6a7856..1698f9d7a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -13,7 +13,7 @@ description: A mobile application for students at ACS UPB. # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # # ACS UPB Mobile uses semantic versioning. You can read more in the CONTRIBUTING.md file. -version: 1.3.1+40 +version: 1.3.1+41 environment: sdk: ">=2.7.0 <3.0.0" diff --git a/test/integration_test.dart b/test/integration_test.dart index bbcaa172e..6a19ade16 100644 --- a/test/integration_test.dart +++ b/test/integration_test.dart @@ -65,7 +65,6 @@ import 'package:provider/provider.dart'; import 'package:rrule/rrule.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:time_machine/time_machine.dart' hide Offset; -import 'package:timetable/src/header/week_indicator.dart'; import 'firebase_mock.dart'; import 'test_utils.dart'; @@ -917,9 +916,6 @@ Future main() async { // Scroll to previous week await tester.drag(find.text('Tue'), Offset(size.width - 30, 0)); - // Expect previous week - final previousWeek = WeekYearRules.iso - .getWeekOfWeekYear(LocalDate.today().subtractWeeks(1)); await tester.pumpAndSettle(); expect(find.byWidgetPredicate((widget) => widget is LeadHeader), @@ -944,8 +940,6 @@ Future main() async { await tester.pumpAndSettle(); // Expect current week - final currentWeek = - WeekYearRules.iso.getWeekOfWeekYear(LocalDate.today()); expect(find.byWidgetPredicate((widget) => widget is LeadHeader), findsOneWidget); @@ -968,8 +962,6 @@ Future main() async { await tester.pumpAndSettle(); // Expect next week - final nextWeek = WeekYearRules.iso - .getWeekOfWeekYear(LocalDate.today().addWeeks(1)); expect(find.byWidgetPredicate((widget) => widget is LeadHeader), findsOneWidget); @@ -992,8 +984,6 @@ Future main() async { await tester.pumpAndSettle(); // Expect next week - final nextNextWeek = WeekYearRules.iso - .getWeekOfWeekYear(LocalDate.today().addWeeks(2)); expect(find.byWidgetPredicate((widget) => widget is LeadHeader), findsOneWidget); @@ -1016,8 +1006,6 @@ Future main() async { await tester.pumpAndSettle(); // Expect next week - final nextNextNextWeek = WeekYearRules.iso - .getWeekOfWeekYear(LocalDate.today().addWeeks(3)); expect(find.byWidgetPredicate((widget) => widget is LeadHeader), findsOneWidget); @@ -1060,8 +1048,6 @@ Future main() async { await tester.pumpAndSettle(); // Expect current week - final currentWeek = - WeekYearRules.iso.getWeekOfWeekYear(LocalDate.today()); expect(find.byWidgetPredicate((widget) => widget is LeadHeader), findsOneWidget); @@ -1069,9 +1055,6 @@ Future main() async { await tester.drag(find.text('Sun'), Offset(-size.width + 10, 0)); await tester.pumpAndSettle(); - // Expect next week - final nextWeek = WeekYearRules.iso - .getWeekOfWeekYear(LocalDate.today().addWeeks(1)); expect(find.byWidgetPredicate((widget) => widget is LeadHeader), findsOneWidget); From 41c9eca2feb6df812b82cafcf13d99ca1118f5e3 Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Sat, 6 Nov 2021 12:39:46 +0200 Subject: [PATCH 21/26] Add academic week number to the timetable. --- .../timetable/model/academic_calendar.dart | 30 +++++++++---------- lib/pages/timetable/view/lead_header.dart | 22 +++++++------- test/integration_test.dart | 7 +++++ 3 files changed, 33 insertions(+), 26 deletions(-) diff --git a/lib/pages/timetable/model/academic_calendar.dart b/lib/pages/timetable/model/academic_calendar.dart index fbf55d7cd..0eccdcddd 100644 --- a/lib/pages/timetable/model/academic_calendar.dart +++ b/lib/pages/timetable/model/academic_calendar.dart @@ -1,4 +1,5 @@ import 'package:acs_upb_mobile/pages/timetable/model/events/all_day_event.dart'; +import 'package:acs_upb_mobile/pages/timetable/view/lead_header.dart'; import 'package:acs_upb_mobile/resources/utils.dart'; import 'package:flutter/foundation.dart'; import 'package:time_machine/time_machine.dart'; @@ -87,27 +88,26 @@ class AcademicCalendar { } return -1; } - String getWeekNumber(LocalDate date) { + String getWeekNumber(LocalDate date) { final Set holidayWeeks = {}; - for (var i = 1; i < 53; i++) { - if (!nonHolidayWeeks.contains(i)) holidayWeeks.add(i); - } - - final week = - ((date.dayOfYear - date.dayOfWeek.value + 10) / 7) - .floor(); - - if (!nonHolidayWeeks.contains(week)) { - return 'H'; - } else { - return (nonHolidayWeeks.toList().indexOf(week) + 1).toString(); - } - } + final week = ((date.dayOfYear - date.dayOfWeek.value + 10) / 7).floor(); + if(LeadHeader.academicWeekNumber==false) + return week.toString(); + for (var i = 1; i < 53; i++) { + if (!nonHolidayWeeks.contains(i)) holidayWeeks.add(i); } + if (!nonHolidayWeeks.contains(week)) { + return 'H'; + } else { + return (nonHolidayWeeks.toList().indexOf(week) + 1).toString(); + } + } +} + extension LocalDateComparisons on LocalDate { bool _isDuring(AllDayUniEvent semester) { return DateInterval(semester.startDate, semester.endDate).contains(this); diff --git a/lib/pages/timetable/view/lead_header.dart b/lib/pages/timetable/view/lead_header.dart index 77944cb98..13f3caafd 100644 --- a/lib/pages/timetable/view/lead_header.dart +++ b/lib/pages/timetable/view/lead_header.dart @@ -19,7 +19,7 @@ import 'package:provider/provider.dart'; class LeadHeader extends StatefulWidget { const LeadHeader(this.date, {Key key}) : super(key: key); final LocalDate date; - static var academicWeekNumber = true; + static var academicWeekNumber = false; @override _LeadHeaderState createState() => _LeadHeaderState(); @@ -33,7 +33,6 @@ class _LeadHeaderState extends State { Map calendars = {}; int academicWeek; - @override Widget build(BuildContext context) { final theme = context.theme; @@ -45,7 +44,9 @@ class _LeadHeaderState extends State { .alphaBlendOn(theme.scaffoldBackgroundColor) .mediumEmphasisOnColor, fontSize: 14); - + final filteredCalendars = calendars?.values + ?.where((calendar) => calendar.semesterForDate(widget.date) != -1); + final calendar = filteredCalendars.isEmpty ? null : filteredCalendars.first; return Container( child: Center( child: Container( @@ -55,18 +56,18 @@ class _LeadHeaderState extends State { borderRadius: BorderRadius.circular(2), color: defaultBackgroundColor, border: Border.all(color: defaultBackgroundColor, width: 1)), - child: Text( - calendars.values.where((element) => element.semesterForDate(widget.date)!=-1).first.getWeekNumber(widget.date), - style: textStyle, - textAlign: TextAlign.center, - ), + child: calendar == null + ? Container() + : Text( + calendar.getWeekNumber(widget.date), + style: textStyle, + textAlign: TextAlign.center, + ), ), ), ); } - - @override void initState() { if (!mounted) { @@ -86,7 +87,6 @@ class _LeadHeaderState extends State { .then((calendars) { setState(() { this.calendars = calendars; - }); }); } diff --git a/test/integration_test.dart b/test/integration_test.dart index 6a19ade16..d7b89106f 100644 --- a/test/integration_test.dart +++ b/test/integration_test.dart @@ -916,6 +916,8 @@ Future main() async { // Scroll to previous week await tester.drag(find.text('Tue'), Offset(size.width - 30, 0)); + // Expect previous week + await tester.pumpAndSettle(); expect(find.byWidgetPredicate((widget) => widget is LeadHeader), @@ -962,6 +964,7 @@ Future main() async { await tester.pumpAndSettle(); // Expect next week + expect(find.byWidgetPredicate((widget) => widget is LeadHeader), findsOneWidget); @@ -984,6 +987,7 @@ Future main() async { await tester.pumpAndSettle(); // Expect next week + expect(find.byWidgetPredicate((widget) => widget is LeadHeader), findsOneWidget); @@ -1006,6 +1010,7 @@ Future main() async { await tester.pumpAndSettle(); // Expect next week + expect(find.byWidgetPredicate((widget) => widget is LeadHeader), findsOneWidget); @@ -1055,6 +1060,8 @@ Future main() async { await tester.drag(find.text('Sun'), Offset(-size.width + 10, 0)); await tester.pumpAndSettle(); + // Expect next week + expect(find.byWidgetPredicate((widget) => widget is LeadHeader), findsOneWidget); From 79e83160450bc98cb7e94e1f42fa2e9e80d0e7fc Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Sat, 6 Nov 2021 12:43:26 +0200 Subject: [PATCH 22/26] Add academic week number to the timetable. --- lib/pages/timetable/model/academic_calendar.dart | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/pages/timetable/model/academic_calendar.dart b/lib/pages/timetable/model/academic_calendar.dart index 0eccdcddd..92f6d2d8d 100644 --- a/lib/pages/timetable/model/academic_calendar.dart +++ b/lib/pages/timetable/model/academic_calendar.dart @@ -92,14 +92,11 @@ class AcademicCalendar { String getWeekNumber(LocalDate date) { final Set holidayWeeks = {}; final week = ((date.dayOfYear - date.dayOfWeek.value + 10) / 7).floor(); - if(LeadHeader.academicWeekNumber==false) - return week.toString(); + if (LeadHeader.academicWeekNumber == false) return week.toString(); for (var i = 1; i < 53; i++) { if (!nonHolidayWeeks.contains(i)) holidayWeeks.add(i); } - - if (!nonHolidayWeeks.contains(week)) { return 'H'; } else { From 40ae3ef67539aab7231b88b26f445a90504379aa Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Wed, 10 Nov 2021 12:19:02 +0200 Subject: [PATCH 23/26] Add academic week number to the timetable. --- android/fastlane/metadata/android/en-GB/changelogs/10041.txt | 2 ++ android/fastlane/metadata/android/en-US/changelogs/10041.txt | 2 ++ android/fastlane/metadata/android/ro/changelogs/10041.txt | 2 ++ 3 files changed, 6 insertions(+) create mode 100644 android/fastlane/metadata/android/en-GB/changelogs/10041.txt create mode 100644 android/fastlane/metadata/android/en-US/changelogs/10041.txt create mode 100644 android/fastlane/metadata/android/ro/changelogs/10041.txt diff --git a/android/fastlane/metadata/android/en-GB/changelogs/10041.txt b/android/fastlane/metadata/android/en-GB/changelogs/10041.txt new file mode 100644 index 000000000..776b933cb --- /dev/null +++ b/android/fastlane/metadata/android/en-GB/changelogs/10041.txt @@ -0,0 +1,2 @@ +Added: + -Users can now choose from setting if they want to see in the week indicator,from the timetable,the academic week number. \ No newline at end of file diff --git a/android/fastlane/metadata/android/en-US/changelogs/10041.txt b/android/fastlane/metadata/android/en-US/changelogs/10041.txt new file mode 100644 index 000000000..776b933cb --- /dev/null +++ b/android/fastlane/metadata/android/en-US/changelogs/10041.txt @@ -0,0 +1,2 @@ +Added: + -Users can now choose from setting if they want to see in the week indicator,from the timetable,the academic week number. \ No newline at end of file diff --git a/android/fastlane/metadata/android/ro/changelogs/10041.txt b/android/fastlane/metadata/android/ro/changelogs/10041.txt new file mode 100644 index 000000000..2b271da3f --- /dev/null +++ b/android/fastlane/metadata/android/ro/changelogs/10041.txt @@ -0,0 +1,2 @@ +Adăugat: + -Utilizatorii pot alege din setări dacă vor să vadă în timetable numărul săptămânii din calendarul academic. \ No newline at end of file From f5e376c36d01501346696454951ed01b7c7ffbdd Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Wed, 10 Nov 2021 12:28:44 +0200 Subject: [PATCH 24/26] Add academic week number to the timetable. --- lib/generated/l10n.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/generated/l10n.dart b/lib/generated/l10n.dart index a3e16f7d5..42cef5982 100644 --- a/lib/generated/l10n.dart +++ b/lib/generated/l10n.dart @@ -2203,7 +2203,7 @@ class S { args: [], ); } - ///'Show number of week in the semester instead of the calendar year' + /// 'Show number of week in the semester instead of the calendar year' String get settingsAcademicWeekNumberSubtitle { return Intl.message( 'Show number of week in the semester instead of the calendar year', From 2f3646df4504c87c837eedc9884174685c5b0233 Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Mon, 14 Mar 2022 18:54:57 +0200 Subject: [PATCH 25/26] Add academic week number to the timetable. --- lib/pages/settings/view/settings_page.dart | 4 +++- lib/pages/timetable/model/academic_calendar.dart | 16 +++++++++------- lib/pages/timetable/view/lead_header.dart | 2 +- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/lib/pages/settings/view/settings_page.dart b/lib/pages/settings/view/settings_page.dart index e936ebfbe..025ffd4f2 100644 --- a/lib/pages/settings/view/settings_page.dart +++ b/lib/pages/settings/view/settings_page.dart @@ -117,7 +117,9 @@ class _SettingsPageState extends State { ), ), Visibility( - visible: authProvider.currentUserFromCache.isAdmin == true, + visible: authProvider.isAuthenticated && + !authProvider.isAnonymous && + authProvider.currentUserFromCache.isAdmin == true, child: ListTile( key: const Key('AdminPanel'), onTap: () => diff --git a/lib/pages/timetable/model/academic_calendar.dart b/lib/pages/timetable/model/academic_calendar.dart index 92f6d2d8d..461482e3c 100644 --- a/lib/pages/timetable/model/academic_calendar.dart +++ b/lib/pages/timetable/model/academic_calendar.dart @@ -79,28 +79,30 @@ class AcademicCalendar { return weeksByYear.values.expand((e) => e).toSet(); } + int semesterForDate(LocalDate date) { for (final semester in semesters) { if (date._isBeforeOrDuring(semester)) { - // semester.id is represented as "semesterN", where "semester0" is the first semester return 1 + int.tryParse(semester.id[semester.id.length - 1]); } } return -1; } + String getWeekNumber(LocalDate date) { - final Set holidayWeeks = {}; + final week = ((date.dayOfYear - date.dayOfWeek.value + 10) / 7).floor(); if (LeadHeader.academicWeekNumber == false) return week.toString(); - for (var i = 1; i < 53; i++) { - if (!nonHolidayWeeks.contains(i)) holidayWeeks.add(i); - } - + final int finalWeekOfFirstSem = ((semesters[0].endDate.dayOfYear - semesters[0].endDate.dayOfWeek.value + 10) / 7).floor(); if (!nonHolidayWeeks.contains(week)) { return 'H'; } else { - return (nonHolidayWeeks.toList().indexOf(week) + 1).toString(); + if(semesterForDate(date)==1) { + return (nonHolidayWeeks.toList().indexOf(week) + 1).toString(); + } else { + return ((nonHolidayWeeks.toList().indexOf(week) + 1)-(nonHolidayWeeks.toList().indexOf(finalWeekOfFirstSem) + 1)).toString(); + } } } } diff --git a/lib/pages/timetable/view/lead_header.dart b/lib/pages/timetable/view/lead_header.dart index 13f3caafd..1f60e5b69 100644 --- a/lib/pages/timetable/view/lead_header.dart +++ b/lib/pages/timetable/view/lead_header.dart @@ -10,7 +10,7 @@ import 'package:black_hole_flutter/black_hole_flutter.dart'; import 'package:flutter/material.dart'; import 'package:time_machine/time_machine.dart'; -// ignore: implementation_imports + import 'package:timetable/src/theme.dart'; // ignore: implementation_imports From 96bbac13343891f2415ba9cf8c00da30d12744a0 Mon Sep 17 00:00:00 2001 From: AndreiMirica19 Date: Mon, 14 Mar 2022 19:04:24 +0200 Subject: [PATCH 26/26] Add academic week number to the timetable. --- lib/pages/timetable/model/academic_calendar.dart | 15 +++++++++------ lib/pages/timetable/view/lead_header.dart | 1 - pubspec.yaml | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/pages/timetable/model/academic_calendar.dart b/lib/pages/timetable/model/academic_calendar.dart index 461482e3c..565d33486 100644 --- a/lib/pages/timetable/model/academic_calendar.dart +++ b/lib/pages/timetable/model/academic_calendar.dart @@ -79,7 +79,6 @@ class AcademicCalendar { return weeksByYear.values.expand((e) => e).toSet(); } - int semesterForDate(LocalDate date) { for (final semester in semesters) { if (date._isBeforeOrDuring(semester)) { @@ -89,19 +88,23 @@ class AcademicCalendar { return -1; } - String getWeekNumber(LocalDate date) { - final week = ((date.dayOfYear - date.dayOfWeek.value + 10) / 7).floor(); if (LeadHeader.academicWeekNumber == false) return week.toString(); - final int finalWeekOfFirstSem = ((semesters[0].endDate.dayOfYear - semesters[0].endDate.dayOfWeek.value + 10) / 7).floor(); + final int finalWeekOfFirstSem = ((semesters[0].endDate.dayOfYear - + semesters[0].endDate.dayOfWeek.value + + 10) / + 7) + .floor(); if (!nonHolidayWeeks.contains(week)) { return 'H'; } else { - if(semesterForDate(date)==1) { + if (semesterForDate(date) == 1) { return (nonHolidayWeeks.toList().indexOf(week) + 1).toString(); } else { - return ((nonHolidayWeeks.toList().indexOf(week) + 1)-(nonHolidayWeeks.toList().indexOf(finalWeekOfFirstSem) + 1)).toString(); + return ((nonHolidayWeeks.toList().indexOf(week) + 1) - + (nonHolidayWeeks.toList().indexOf(finalWeekOfFirstSem) + 1)) + .toString(); } } } diff --git a/lib/pages/timetable/view/lead_header.dart b/lib/pages/timetable/view/lead_header.dart index 1f60e5b69..ab1a961e0 100644 --- a/lib/pages/timetable/view/lead_header.dart +++ b/lib/pages/timetable/view/lead_header.dart @@ -10,7 +10,6 @@ import 'package:black_hole_flutter/black_hole_flutter.dart'; import 'package:flutter/material.dart'; import 'package:time_machine/time_machine.dart'; - import 'package:timetable/src/theme.dart'; // ignore: implementation_imports diff --git a/pubspec.yaml b/pubspec.yaml index 1698f9d7a..ae89bb7db 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -13,7 +13,7 @@ description: A mobile application for students at ACS UPB. # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # # ACS UPB Mobile uses semantic versioning. You can read more in the CONTRIBUTING.md file. -version: 1.3.1+41 +version: 1.3.1+42 environment: sdk: ">=2.7.0 <3.0.0"