diff --git a/backend/src/routes/relais/relais.controller.ts b/backend/src/routes/relais/relais.controller.ts index 5d30871..8125c16 100644 --- a/backend/src/routes/relais/relais.controller.ts +++ b/backend/src/routes/relais/relais.controller.ts @@ -24,15 +24,19 @@ export class RelaisController { } @Get() - @Roles(RoleType.SUPER_ADMIN, RoleType.ADMINISTRATEUR) - @ApiOperation({ summary: 'Lister tous les relais' }) + @Roles(RoleType.SUPER_ADMIN, RoleType.ADMINISTRATEUR, RoleType.GESTIONNAIRE) + @ApiOperation({ + summary: 'Lister tous les relais', + description: + 'Lecture ouverte aux gestionnaires (combobox fiches). CRUD write reste admin-only. Ticket #151.', + }) @ApiResponse({ status: 200, description: 'Liste des relais.' }) findAll() { return this.relaisService.findAll(); } @Get(':id') - @Roles(RoleType.SUPER_ADMIN, RoleType.ADMINISTRATEUR) + @Roles(RoleType.SUPER_ADMIN, RoleType.ADMINISTRATEUR, RoleType.GESTIONNAIRE) @ApiOperation({ summary: 'Récupérer un relais par ID' }) @ApiResponse({ status: 200, description: 'Le relais trouvé.' }) findOne(@Param('id') id: string) { diff --git a/frontend/lib/screens/administrateurs/creation/gestionnaires_create.dart b/frontend/lib/screens/administrateurs/creation/gestionnaires_create.dart index 4f89ab7..9a24de6 100644 --- a/frontend/lib/screens/administrateurs/creation/gestionnaires_create.dart +++ b/frontend/lib/screens/administrateurs/creation/gestionnaires_create.dart @@ -146,6 +146,21 @@ class _AdminUserFormDialogState extends State { super.dispose(); } + /// Fallback si GET /relais échoue : conserve le relais déjà connu sur l'utilisateur. + List _fallbackRelaisFromUser() { + final id = _selectedRelaisId?.trim(); + if (id == null || id.isEmpty) return const []; + final nom = (widget.initialUser?.relaisNom ?? '').trim(); + return [ + RelaisModel( + id: id, + nom: nom.isNotEmpty ? nom : 'Relais actuel', + adresse: '', + actif: true, + ), + ]; + } + Future _loadRelais() async { try { final list = await RelaisService.getRelais(); @@ -162,7 +177,8 @@ class _AdminUserFormDialogState extends State { if (selected != null) { filtered.add(selected); } else { - _selectedRelaisId = null; + // Garder l'id sélectionné et afficher un item de secours (nom carte). + filtered.addAll(_fallbackRelaisFromUser()); } } @@ -172,9 +188,9 @@ class _AdminUserFormDialogState extends State { }); } catch (_) { if (!mounted) return; + // Ne pas nullifier _selectedRelaisId (#151) — la carte a déjà le bon libellé. setState(() { - _selectedRelaisId = null; - _relais = []; + _relais = _fallbackRelaisFromUser(); _isLoadingRelais = false; }); }