133 lines
4.4 KiB
Dart
133 lines
4.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:p_tits_pas/widgets/admin/base_user_management.dart';
|
|
|
|
class AdministrateurManagementWidget extends StatelessWidget {
|
|
const AdministrateurManagementWidget({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return BaseUserManagementWidget(
|
|
config: UserDisplayConfig(
|
|
title: 'Administrateur',
|
|
role: 'administrateur',
|
|
defaultIcon: Icons.admin_panel_settings,
|
|
filterFields: [
|
|
FilterField(
|
|
label: 'Rechercher',
|
|
hint: 'Nom ou email',
|
|
type: FilterType.text,
|
|
filter: (user, query) {
|
|
final fullName =
|
|
'${user['firstName'] ?? ''} ${user['lastName'] ?? ''}'
|
|
.toLowerCase();
|
|
final email = (user['email'] ?? '').toLowerCase();
|
|
return fullName.contains(query.toLowerCase()) ||
|
|
email.contains(query.toLowerCase());
|
|
},
|
|
),
|
|
FilterField(
|
|
label: 'Statut',
|
|
hint: 'Tous',
|
|
type: FilterType.dropdown,
|
|
options: ['actif', 'en_attente', 'inactif', 'supprimé'],
|
|
filter: (user, status) {
|
|
if (status.isEmpty) return true;
|
|
return user['statut']?.toString().toLowerCase() ==
|
|
status.toLowerCase();
|
|
},
|
|
),
|
|
],
|
|
actions: [
|
|
const UserAction(
|
|
icon: Icons.edit,
|
|
color: Colors.orange,
|
|
tooltip: 'Modifier',
|
|
onPressed: _editAdministrateur,
|
|
),
|
|
const UserAction(
|
|
icon: Icons.security,
|
|
color: Colors.blue,
|
|
tooltip: 'Gérer droits',
|
|
onPressed: _manageRights,
|
|
),
|
|
const UserAction(
|
|
icon: Icons.lock_reset,
|
|
color: Colors.purple,
|
|
tooltip: 'Réinitialiser MDP',
|
|
onPressed: _resetPassword,
|
|
),
|
|
const UserAction(
|
|
icon: Icons.toggle_on,
|
|
color: Colors.green,
|
|
tooltip: 'Activer/Désactiver',
|
|
onPressed: _toggleStatus,
|
|
),
|
|
const UserAction(
|
|
icon: Icons.delete,
|
|
color: Colors.red,
|
|
tooltip: 'Supprimer',
|
|
onPressed: _deleteAdministrateur,
|
|
),
|
|
],
|
|
getDisplayName: (user) => '${user['prenom'] ?? ''} ${user['nom'] ?? ''}',
|
|
getSubtitle: (user) {
|
|
final email = user['email'] ?? '';
|
|
final profession = user['profession'] ?? 'Non spécifiée';
|
|
final ville = user['ville'] ?? '';
|
|
// final statut = AdministrateurService.getStatutDisplay(user['statut']);
|
|
final statut = user['statut'] ?? 'inactif';
|
|
final changementMdp =
|
|
user['changement_mdp_obligatoire'] == true ? 'MDP à changer' : '';
|
|
|
|
return '$email\n$profession${ville.isNotEmpty ? ' • $ville' : ''}\nStatut: $statut ${changementMdp.isNotEmpty ? '• $changementMdp' : ''}';
|
|
},
|
|
));
|
|
}
|
|
|
|
static Future<void> _editAdministrateur(
|
|
BuildContext context, Map<String, dynamic> user) async {
|
|
ScaffoldMessenger.of(context).showSnackBar(
|
|
SnackBar(
|
|
content: Text(
|
|
'Modifier administrateur: ${user['prenom']} ${user['nom']}')),
|
|
);
|
|
}
|
|
|
|
static Future<void> _manageRights(
|
|
BuildContext context, Map<String, dynamic> user) async {
|
|
ScaffoldMessenger.of(context).showSnackBar(
|
|
SnackBar(
|
|
content: Text('Gérer droits pour: ${user['prenom']} ${user['nom']}')),
|
|
);
|
|
}
|
|
|
|
static Future<void> _resetPassword(
|
|
BuildContext context, Map<String, dynamic> user) async {
|
|
ScaffoldMessenger.of(context).showSnackBar(
|
|
SnackBar(
|
|
content: Text(
|
|
'Réinitialiser mot de passe pour: ${user['prenom']} ${user['nom']}')),
|
|
);
|
|
}
|
|
|
|
static Future<void> _toggleStatus(
|
|
BuildContext context, Map<String, dynamic> user) async {
|
|
final currentStatus = user['statut'] ?? 'inactif';
|
|
final newStatus = currentStatus == 'actif' ? 'inactif' : 'actif';
|
|
ScaffoldMessenger.of(context).showSnackBar(
|
|
SnackBar(
|
|
content: Text(
|
|
'${newStatus == 'actif' ? 'Activer' : 'Désactiver'} administrateur: ${user['prenom']} ${user['nom']}')),
|
|
);
|
|
}
|
|
|
|
static Future<void> _deleteAdministrateur(
|
|
BuildContext context, Map<String, dynamic> user) async {
|
|
ScaffoldMessenger.of(context).showSnackBar(
|
|
SnackBar(
|
|
content: Text(
|
|
'Supprimer administrateur: ${user['prenom']} ${user['nom']}')),
|
|
);
|
|
}
|
|
}
|