diff --git a/lib/global/global_state/global_state.dart b/lib/global/global_state/global_state.dart index fe21d54..73a0ff1 100644 --- a/lib/global/global_state/global_state.dart +++ b/lib/global/global_state/global_state.dart @@ -190,9 +190,12 @@ class GlobalState extends ChangeNotifier { Status allFiltersStatus = Status.empty; Future getAllFiltersItems({bool refresh = false}) async { + final int role = setting.userLocalDb.getUser().role ?? -1; + allFiltersStatus = Status.loading; notifyListeners(); - if (_isDataAlreadyLoaded() && !refresh) { + + if (_isDataAlreadyLoaded(role) && !refresh) { allFiltersStatus = Status.ready; } else { allFiltersStatus = Status.loading; @@ -200,39 +203,48 @@ class GlobalState extends ChangeNotifier { notifyListeners(); - await _fetchAllData(refresh: refresh); + await _fetchAllData(role: role, refresh: refresh); - _updateAllFiltersStatus(); + _updateAllFiltersStatus(role); notifyListeners(); return allFiltersStatus; } - bool _isDataAlreadyLoaded() { + bool _isDataAlreadyLoaded(int role) { return locationsModel != null && locationsModel!.isNotEmpty && - usersModel != null && - usersModel!.isNotEmpty && - meetingsManagerModel != null && - meetingsManagerModel!.isNotEmpty && subjectsModel != null && - subjectsModel!.isNotEmpty; + subjectsModel!.isNotEmpty && + (role == 1 || (usersModel != null && usersModel!.isNotEmpty)) && + (role == 1 || + (meetingsManagerModel != null && meetingsManagerModel!.isNotEmpty)); } - Future _fetchAllData({required bool refresh}) async { - await Future.wait([ + Future _fetchAllData({required int role, required bool refresh}) async { + final List> tasks = [ getLocations(refresh: refresh), - getMeetingsManager(refresh: refresh), getSubjects(refresh: refresh), - getUsers(refresh: refresh), - ]); + ]; + + // Only add getUsers if role is not 1 + if (role != 1) { + tasks.add(getUsers(refresh: refresh)); + } + + // Only add getMeetingsManager if role is not 1 + if (role != 1) { + tasks.add(getMeetingsManager(refresh: refresh)); + } + + await Future.wait(tasks); } - void _updateAllFiltersStatus() { + void _updateAllFiltersStatus(int role) { if (locationsStatus == Status.ready && subjectsStatus == Status.ready && - usersStatus == Status.ready && - meetingsManagerStatus == Status.ready) { + (role == 1 || usersStatus == Status.ready) && + (role == 1 || meetingsManagerStatus == Status.ready)) { allFiltersStatus = Status.ready; } else { allFiltersStatus = Status.error; diff --git a/lib/screens/meeting/diolog_meetings_filters.dart b/lib/screens/meeting/diolog_meetings_filters.dart index f0f881f..2d321f0 100644 --- a/lib/screens/meeting/diolog_meetings_filters.dart +++ b/lib/screens/meeting/diolog_meetings_filters.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:qadirneyriz/global/global_state/global_state.dart'; +import 'package:qadirneyriz/setting/setting.dart'; import 'package:qadirneyriz/widgets/ExpansionTileCustom.dart'; import 'package:qadirneyriz/widgets/error_widget.dart'; import 'package:qadirneyriz/config/config.dart'; @@ -237,43 +238,46 @@ class _DiologMeetingsFiltersState extends State { ), ], ), - ExpansionTileCustom( - title: AppLocalizations.of(context)! - .meetingmanager, - widgets: [ - ListView.builder( - primary: false, - physics: NeverScrollableScrollPhysics(), - shrinkWrap: true, - itemCount: globalState - .meetingsManagerModel!.length, - itemBuilder: - (BuildContext context, int index) { - final items = globalState - .meetingsManagerModel![index]; - return RadioListTile( - toggleable: true, - groupValue: meetingsState - .selectedManagersId, - value: items.id ?? -1, - title: Text( - items.name ?? '', - style: TextStyle( - fontWeight: FontWeight.w100, - fontSize: 14), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - activeColor: config.ui.secendGreen, - onChanged: (int? newValue) { - meetingsState.selectManager( - newValue ?? null); - }, - ); - }, - ), - ], - ), + if (setting.userLocalDb.getUser().role != 1) + ExpansionTileCustom( + title: AppLocalizations.of(context)! + .meetingmanager, + widgets: [ + ListView.builder( + primary: false, + physics: + NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemCount: globalState + .meetingsManagerModel!.length, + itemBuilder: (BuildContext context, + int index) { + final items = globalState + .meetingsManagerModel![index]; + return RadioListTile( + toggleable: true, + groupValue: meetingsState + .selectedManagersId, + value: items.id ?? -1, + title: Text( + items.name ?? '', + style: TextStyle( + fontWeight: FontWeight.w100, + fontSize: 14), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + activeColor: + config.ui.secendGreen, + onChanged: (int? newValue) { + meetingsState.selectManager( + newValue ?? null); + }, + ); + }, + ), + ], + ), ExpansionTileCustom( title: AppLocalizations.of(context)!.subject, diff --git a/lib/screens/private_meeting/dilog_privateMeetings_filters.dart b/lib/screens/private_meeting/dilog_privateMeetings_filters.dart index 49c7826..58d87eb 100644 --- a/lib/screens/private_meeting/dilog_privateMeetings_filters.dart +++ b/lib/screens/private_meeting/dilog_privateMeetings_filters.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:qadirneyriz/global/global_state/global_state.dart'; import 'package:qadirneyriz/screens/private_meeting/state.dart'; +import 'package:qadirneyriz/setting/setting.dart'; import 'package:qadirneyriz/widgets/ExpansionTileCustom.dart'; import 'package:qadirneyriz/widgets/error_widget.dart'; import 'package:qadirneyriz/config/config.dart'; @@ -243,44 +244,47 @@ class _DiologPrivateMeetingsFiltersState ), ], ), - ExpansionTileCustom( - title: AppLocalizations.of(context)! - .meetingmanager, - widgets: [ - ListView.builder( - primary: false, - physics: NeverScrollableScrollPhysics(), - shrinkWrap: true, - itemCount: globalState - .meetingsManagerModel!.length, - itemBuilder: - (BuildContext context, int index) { - final items = globalState - .meetingsManagerModel![index]; - return RadioListTile( - toggleable: true, - groupValue: privateMeetingsState - .selectedManagersId, - value: items.id ?? -1, - title: Text( - items.name ?? '', - style: TextStyle( - fontWeight: FontWeight.w100, - fontSize: 14), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - activeColor: config.ui.secendGreen, - onChanged: (int? newValue) { - privateMeetingsState - .selectManager( - newValue ?? null); - }, - ); - }, - ), - ], - ), + if (setting.userLocalDb.getUser().role != 1) + ExpansionTileCustom( + title: AppLocalizations.of(context)! + .meetingmanager, + widgets: [ + ListView.builder( + primary: false, + physics: + NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemCount: globalState + .meetingsManagerModel!.length, + itemBuilder: (BuildContext context, + int index) { + final items = globalState + .meetingsManagerModel![index]; + return RadioListTile( + toggleable: true, + groupValue: privateMeetingsState + .selectedManagersId, + value: items.id ?? -1, + title: Text( + items.name ?? '', + style: TextStyle( + fontWeight: FontWeight.w100, + fontSize: 14), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + activeColor: + config.ui.secendGreen, + onChanged: (int? newValue) { + privateMeetingsState + .selectManager( + newValue ?? null); + }, + ); + }, + ), + ], + ), ExpansionTileCustom( title: AppLocalizations.of(context)!.subject, diff --git a/lib/screens/report/screen.dart b/lib/screens/report/screen.dart index 86de91a..0be0cba 100644 --- a/lib/screens/report/screen.dart +++ b/lib/screens/report/screen.dart @@ -196,108 +196,111 @@ class _FiltersItemInReportState extends State { ), ], ), + if (setting.userLocalDb.getUser().role != 1) + ExpansionTileCustom( + title: AppLocalizations.of(context)! + .meetingmanager, + widgets: [ + ListView.builder( + primary: false, + physics: NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemCount: globalState + .meetingsManagerModel!.length, + itemBuilder: + (BuildContext context, int index) { + final items = globalState + .meetingsManagerModel![index]; + return RadioListTile( + toggleable: true, + groupValue: + reportState.selectedManagersId, + value: items.id ?? -1, + title: Text( + items.name ?? '', + style: TextStyle( + fontWeight: FontWeight.w100, + fontSize: 14), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + activeColor: config.ui.secendGreen, + onChanged: (int? newValue) { + reportState + .selectManager(newValue ?? null); + }, + ); + }, + ), + ], + ), ExpansionTileCustom( - title: - AppLocalizations.of(context)!.meetingmanager, + title: AppLocalizations.of(context)!.subject, widgets: [ ListView.builder( primary: false, physics: NeverScrollableScrollPhysics(), shrinkWrap: true, - itemCount: - globalState.meetingsManagerModel!.length, + itemCount: globalState.subjectsModel!.length, itemBuilder: (BuildContext context, int index) { - final items = globalState - .meetingsManagerModel![index]; + final items = + globalState.subjectsModel![index]; return RadioListTile( toggleable: true, - groupValue: - reportState.selectedManagersId, + groupValue: reportState.selectedSubjectId, value: items.id ?? -1, title: Text( - items.name ?? '', + items.subject ?? '', + maxLines: 1, + overflow: TextOverflow.ellipsis, style: TextStyle( fontWeight: FontWeight.w100, fontSize: 14), - maxLines: 1, - overflow: TextOverflow.ellipsis, ), activeColor: config.ui.secendGreen, onChanged: (int? newValue) { reportState - .selectManager(newValue ?? null); + .selectSubject(newValue ?? null); }, ); }, ), ], ), - ExpansionTileCustom( - title: AppLocalizations.of(context)!.subject, - widgets: [ - ListView.builder( - primary: false, + Divider(), + if (setting.userLocalDb.getUser().role != 1) + SizedBox( + height: 250, + child: ListView.builder( physics: NeverScrollableScrollPhysics(), shrinkWrap: true, - itemCount: globalState.subjectsModel!.length, + primary: false, + itemCount: meetingStatuses.length, itemBuilder: (BuildContext context, int index) { - final items = - globalState.subjectsModel![index]; + final items = meetingStatuses[index]; return RadioListTile( toggleable: true, - groupValue: reportState.selectedSubjectId, - value: items.id ?? -1, + groupValue: reportState.selectedStatusId, + value: items.id, title: Text( - items.subject ?? '', + items.title, maxLines: 1, - overflow: TextOverflow.ellipsis, style: TextStyle( fontWeight: FontWeight.w100, fontSize: 14), + overflow: TextOverflow.ellipsis, ), activeColor: config.ui.secendGreen, onChanged: (int? newValue) { - reportState - .selectSubject(newValue ?? null); + reportState.selectStatusMeeting( + newValue ?? null); }, ); }, ), - ], - ), - Divider(), - SizedBox( - height: 250, - child: ListView.builder( - physics: NeverScrollableScrollPhysics(), - shrinkWrap: true, - primary: false, - itemCount: meetingStatuses.length, - itemBuilder: (BuildContext context, int index) { - final items = meetingStatuses[index]; - return RadioListTile( - toggleable: true, - groupValue: reportState.selectedStatusId, - value: items.id, - title: Text( - items.title, - maxLines: 1, - style: TextStyle( - fontWeight: FontWeight.w100, - fontSize: 14), - overflow: TextOverflow.ellipsis, - ), - activeColor: config.ui.secendGreen, - onChanged: (int? newValue) { - reportState.selectStatusMeeting( - newValue ?? null); - }, - ); - }, ), - ), Padding( padding: const EdgeInsets.symmetric( horizontal: 20, vertical: 50),