diff --git a/app/lib/presentation/pages/history_page.dart b/app/lib/presentation/pages/history_page.dart index 0a7986c2..a357dd18 100755 --- a/app/lib/presentation/pages/history_page.dart +++ b/app/lib/presentation/pages/history_page.dart @@ -5,6 +5,7 @@ import 'package:geosector_app/core/constants/app_keys.dart'; import 'package:geosector_app/core/services/current_user_service.dart'; import 'package:geosector_app/core/theme/app_theme.dart'; import 'package:geosector_app/core/data/models/passage_model.dart'; +import 'package:geosector_app/core/data/models/user_sector_model.dart'; import 'package:geosector_app/presentation/widgets/passages/passages_list_widget.dart'; import 'package:geosector_app/presentation/widgets/passage_form_dialog.dart'; import 'package:geosector_app/presentation/widgets/app_scaffold.dart'; @@ -621,11 +622,22 @@ class _HistoryContentState extends State { Widget _buildMemberDropdown() { // Récupérer tous les membres depuis la box Hive final membresBox = membreRepository.getMembresBox(); - final membres = membresBox.values.where((membre) { + var membres = membresBox.values.where((membre) { // Ne garder que les membres ayant un opeUserId (membres actifs dans une opération) return membre.opeUserId != null; }).toList(); + // Filtrage dynamique : si un secteur est sélectionné, ne montrer que les membres de ce secteur + if (_selectedSectorId != null) { + final userSectorsBox = Hive.box(AppKeys.userSectorBoxName); + final memberIdsInSector = userSectorsBox.values + .where((us) => us.fkSector == _selectedSectorId) + .map((us) => us.opeUserId) + .toSet(); + + membres = membres.where((membre) => memberIdsInSector.contains(membre.opeUserId)).toList(); + } + // Trier par nom membres.sort((a, b) { final nameA = a.name ?? a.firstName ?? ''; @@ -688,27 +700,22 @@ class _HistoryContentState extends State { /// Construit le dropdown de sélection de secteur (admin uniquement) Widget _buildSectorDropdown() { - // Récupérer les secteurs uniques depuis les passages de l'opération courante - final sectorIds = {}; + // Récupérer tous les secteurs depuis le repository + var allSectors = sectorRepository.getAllSectors(); - for (final passage in _originalPassages) { - if (passage.fkSector != null && !sectorIds.contains(passage.fkSector)) { - sectorIds.add(passage.fkSector!); - } - } + // Filtrage dynamique : si un membre est sélectionné, ne montrer que ses secteurs + if (_selectedMemberId != null) { + final userSectorsBox = Hive.box(AppKeys.userSectorBoxName); + final sectorIdsForMember = userSectorsBox.values + .where((us) => us.opeUserId == _selectedMemberId) + .map((us) => us.fkSector) + .toSet(); - // Récupérer les noms des secteurs depuis le repository - final allSectors = sectorRepository.getAllSectors(); - final sectorNames = {}; - for (final sector in allSectors) { - if (sectorIds.contains(sector.id)) { - sectorNames[sector.id] = sector.libelle; - } + allSectors = allSectors.where((sector) => sectorIdsForMember.contains(sector.id)).toList(); } // Trier par nom - final sortedSectors = sectorIds.toList() - ..sort((a, b) => (sectorNames[a] ?? '').compareTo(sectorNames[b] ?? '')); + allSectors.sort((a, b) => a.libelle.compareTo(b.libelle)); return DropdownButtonFormField( value: _selectedSectorId, @@ -724,11 +731,11 @@ class _HistoryContentState extends State { value: null, child: Text('Tous'), ), - ...sortedSectors.map((sectorId) { + ...allSectors.map((sector) { return DropdownMenuItem( - value: sectorId, + value: sector.id, child: Text( - sectorNames[sectorId] ?? 'Secteur #$sectorId', + sector.libelle, overflow: TextOverflow.ellipsis, ), );