Modif de l'affichage des données d'un événement et de l'afichage de la création/édition
Options sont maintenant géres dans firebase
This commit is contained in:
@@ -19,33 +19,61 @@ class EventProvider with ChangeNotifier {
|
||||
try {
|
||||
print(
|
||||
'Loading events for user: $userId (canViewAllEvents: $canViewAllEvents)');
|
||||
QuerySnapshot eventsSnapshot;
|
||||
// On charge tous les events pour les users non-admins aussi
|
||||
eventsSnapshot = await _firestore.collection('events').get();
|
||||
|
||||
print('Found ${eventsSnapshot.docs.length} events for user');
|
||||
QuerySnapshot eventsSnapshot = await _firestore.collection('events').get();
|
||||
print('Found ${eventsSnapshot.docs.length} events total');
|
||||
|
||||
// On filtre côté client si l'utilisateur n'est pas admin
|
||||
final allEvents = eventsSnapshot.docs.map((doc) {
|
||||
print('Event data: ${doc.data()}');
|
||||
return EventModel.fromMap(doc.data() as Map<String, dynamic>, doc.id);
|
||||
}).toList();
|
||||
if (canViewAllEvents) {
|
||||
_events = allEvents;
|
||||
} else {
|
||||
final userRef = _firestore.collection('users').doc(userId);
|
||||
_events = allEvents
|
||||
.where((e) => e.workforce.any((ref) => ref.id == userRef.id))
|
||||
.toList();
|
||||
List<EventModel> allEvents = [];
|
||||
int failedCount = 0;
|
||||
|
||||
// Parser chaque événement individuellement pour éviter qu'une erreur interrompe tout
|
||||
for (var doc in eventsSnapshot.docs) {
|
||||
try {
|
||||
final data = doc.data() as Map<String, dynamic>;
|
||||
print('Processing event ${doc.id}: ${data['Name'] ?? 'Unknown'}');
|
||||
|
||||
final event = EventModel.fromMap(data, doc.id);
|
||||
allEvents.add(event);
|
||||
} catch (e) {
|
||||
print('Failed to parse event ${doc.id}: $e');
|
||||
failedCount++;
|
||||
// Continue avec les autres événements au lieu d'arrêter
|
||||
}
|
||||
}
|
||||
|
||||
print('Parsed ${_events.length} events');
|
||||
print('Successfully parsed ${allEvents.length} events, failed: $failedCount');
|
||||
|
||||
// Filtrage amélioré pour les utilisateurs non-admin
|
||||
if (canViewAllEvents) {
|
||||
_events = allEvents;
|
||||
print('Admin user: showing all ${_events.length} events');
|
||||
} else {
|
||||
// Créer la référence utilisateur correctement
|
||||
final userDocRef = _firestore.collection('users').doc(userId);
|
||||
|
||||
_events = allEvents.where((event) {
|
||||
// Vérifier si l'utilisateur est dans l'équipe de l'événement
|
||||
bool isInWorkforce = event.workforce.any((workforceRef) {
|
||||
return workforceRef.path == userDocRef.path;
|
||||
});
|
||||
|
||||
if (isInWorkforce) {
|
||||
print('Event ${event.name} includes user ${userId}');
|
||||
}
|
||||
|
||||
return isInWorkforce;
|
||||
}).toList();
|
||||
|
||||
print('Non-admin user: showing ${_events.length} events out of ${allEvents.length}');
|
||||
}
|
||||
|
||||
_isLoading = false;
|
||||
notifyListeners();
|
||||
|
||||
} catch (e) {
|
||||
print('Error loading events: $e');
|
||||
_isLoading = false;
|
||||
_events = []; // S'assurer que la liste est vide en cas d'erreur
|
||||
notifyListeners();
|
||||
rethrow;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user