- NotImplementedFailure: ajout userFriendlyMessage et icon construction (blue) - ErrorDisplayWidget: support spécial pour NotImplementedFailure (bientôt disponible) - SnackbarHelper: classe centralisée pour messages cohérents (success, error, warning, info, notImplemented) - budgets_list_page: remplace generic snackbar par SnackbarHelper.showNotImplemented - conversations_page: remplace 2 TODOs par SnackbarHelper.showNotImplemented - export_members: met à jour TODO obsolète (endpoint PDF maintenant disponible) - cache_service: fix AppLogger.error calls (error: named param) - cached_datasource_decorator: fix AppLogger.error call Task #64 - Fix Snackbar Placeholders + NotImplementedFailure UX
50 lines
1.7 KiB
Dart
50 lines
1.7 KiB
Dart
/// Use case: Exporter la liste des membres
|
|
library export_members;
|
|
|
|
import 'package:injectable/injectable.dart';
|
|
import '../../../../shared/models/membre_search_criteria.dart';
|
|
import '../repositories/membre_repository.dart';
|
|
|
|
/// Use case pour exporter la liste des membres au format CSV ou PDF
|
|
/// Réservé aux utilisateurs avec le rôle ADMIN_ORGANISATION
|
|
@injectable
|
|
class ExportMembers {
|
|
final IMembreRepository _repository;
|
|
|
|
ExportMembers(this._repository);
|
|
|
|
/// Exécute le use case
|
|
///
|
|
/// [criteria] - Critères de filtre pour l'export (optionnel)
|
|
/// [format] - Format d'export ('csv' ou 'pdf')
|
|
///
|
|
/// Retourne les données exportées (liste complète des membres selon critères)
|
|
/// Note: Backend endpoint GET /api/membres/export?format=csv|excel|pdf disponible
|
|
/// Le use case actuel récupère toutes les données, l'export final se fait côté UI
|
|
Future<List<Map<String, dynamic>>> call({
|
|
MembreSearchCriteria? criteria,
|
|
String format = 'csv',
|
|
}) async {
|
|
// Récupérer tous les membres (pagination large)
|
|
final result = await _repository.searchMembres(
|
|
criteria: criteria ?? const MembreSearchCriteria(),
|
|
page: 0,
|
|
size: 10000, // Grande pagination pour export complet
|
|
);
|
|
|
|
// Convertir en liste de maps pour l'export
|
|
return result.membres.map((membre) => {
|
|
'id': membre.id,
|
|
'nom': membre.nom,
|
|
'prenom': membre.prenom,
|
|
'email': membre.email,
|
|
'telephone': membre.telephone,
|
|
'adresse': membre.adresse,
|
|
'dateNaissance': membre.dateNaissance?.toIso8601String(),
|
|
'dateAdhesion': membre.dateAdhesion?.toIso8601String(),
|
|
'statut': membre.statut,
|
|
'actif': membre.actif,
|
|
}).toList();
|
|
}
|
|
}
|