diff --git a/em2rp/lib/controllers/event_form_controller.dart b/em2rp/lib/controllers/event_form_controller.dart index 1319a38..74c78ac 100644 --- a/em2rp/lib/controllers/event_form_controller.dart +++ b/em2rp/lib/controllers/event_form_controller.dart @@ -9,7 +9,6 @@ import 'package:em2rp/services/data_service.dart'; import 'package:em2rp/services/api_service.dart'; import 'package:provider/provider.dart'; import 'package:em2rp/providers/event_provider.dart'; -import 'package:em2rp/providers/local_user_provider.dart'; class EventFormController extends ChangeNotifier { // Controllers @@ -365,15 +364,9 @@ class EventFormController extends ChangeNotifier { await EventFormService.updateEvent(updatedEvent); - // Recharger les événements après modification - final localUserProvider = Provider.of(context, listen: false); + // Mettre à jour l'événement dans le cache (au lieu de tout recharger) final eventProvider = Provider.of(context, listen: false); - final userId = localUserProvider.uid; - final canViewAllEvents = localUserProvider.hasPermission('view_all_events'); - - if (userId != null) { - await eventProvider.loadUserEvents(userId, canViewAllEvents: canViewAllEvents); - } + await eventProvider.updateEvent(updatedEvent); _success = "Événement modifié avec succès !"; } else { @@ -407,23 +400,22 @@ class EventFormController extends ChangeNotifier { final eventId = await EventFormService.createEvent(newEvent); + // Créer l'événement avec l'ID retourné + EventModel createdEvent = newEvent.copyWith(id: eventId); + // Déplacer et mettre à jour les fichiers uniquement s'il y en a if (_uploadedFiles.isNotEmpty) { final newFiles = await EventFormService.moveFilesToEvent(_uploadedFiles, eventId); if (newFiles.isNotEmpty) { await EventFormService.updateEventDocuments(eventId, newFiles); + // Mettre à jour l'événement avec les nouvelles URLs + createdEvent = createdEvent.copyWith(documents: newFiles); } } - // Reload events - final localUserProvider = Provider.of(context, listen: false); + // Ajouter l'événement au cache final eventProvider = Provider.of(context, listen: false); - final userId = localUserProvider.uid; - final canViewAllEvents = localUserProvider.hasPermission('view_all_events'); - - if (userId != null) { - await eventProvider.loadUserEvents(userId, canViewAllEvents: canViewAllEvents); - } + await eventProvider.addEvent(createdEvent); _success = "Événement créé avec succès !"; } @@ -448,19 +440,9 @@ class EventFormController extends ChangeNotifier { notifyListeners(); try { - // Supprimer l'événement via l'API - final dataService = DataService(FirebaseFunctionsApiService()); - await dataService.deleteEvent(eventId); - - // Recharger la liste des événements - final localUserProvider = Provider.of(context, listen: false); + // Supprimer l'événement via le provider (qui appelle l'API et met à jour le cache) final eventProvider = Provider.of(context, listen: false); - final userId = localUserProvider.uid; - final canViewAllEvents = localUserProvider.hasPermission('view_all_events'); - - if (userId != null) { - await eventProvider.loadUserEvents(userId, canViewAllEvents: canViewAllEvents); - } + await eventProvider.deleteEvent(eventId); _success = "Événement supprimé avec succès !"; notifyListeners(); diff --git a/em2rp/lib/providers/event_provider.dart b/em2rp/lib/providers/event_provider.dart index 26ae209..d3a31e9 100644 --- a/em2rp/lib/providers/event_provider.dart +++ b/em2rp/lib/providers/event_provider.dart @@ -237,8 +237,16 @@ class EventProvider with ChangeNotifier { /// Ajouter un nouvel événement Future addEvent(EventModel event) async { try { - // L'événement est créé via l'API dans le service - await refreshEvents(_lastUserId ?? '', canViewAllEvents: _lastCanViewAll); + // Ajouter l'événement localement dans _events + _events.add(event); + + // Ajouter dans le cache par mois + final monthKey = '${event.startDateTime.year}-${event.startDateTime.month.toString().padLeft(2, '0')}'; + if (_eventsByMonth.containsKey(monthKey)) { + _eventsByMonth[monthKey]!.add(event); + } + + notifyListeners(); } catch (e) { print('Error adding event: $e'); rethrow; @@ -248,10 +256,34 @@ class EventProvider with ChangeNotifier { /// Mettre à jour un événement Future updateEvent(EventModel event) async { try { - // Mise à jour locale immédiate + // Mise à jour dans _events final index = _events.indexWhere((e) => e.id == event.id); if (index != -1) { + final oldEvent = _events[index]; _events[index] = event; + + // Mettre à jour dans le cache par mois + final oldMonthKey = '${oldEvent.startDateTime.year}-${oldEvent.startDateTime.month.toString().padLeft(2, '0')}'; + final newMonthKey = '${event.startDateTime.year}-${event.startDateTime.month.toString().padLeft(2, '0')}'; + + // Si le mois a changé, supprimer de l'ancien et ajouter au nouveau + if (oldMonthKey != newMonthKey) { + if (_eventsByMonth.containsKey(oldMonthKey)) { + _eventsByMonth[oldMonthKey]!.removeWhere((e) => e.id == event.id); + } + if (_eventsByMonth.containsKey(newMonthKey)) { + _eventsByMonth[newMonthKey]!.add(event); + } + } else { + // Même mois, juste mettre à jour + if (_eventsByMonth.containsKey(newMonthKey)) { + final monthIndex = _eventsByMonth[newMonthKey]!.indexWhere((e) => e.id == event.id); + if (monthIndex != -1) { + _eventsByMonth[newMonthKey]![monthIndex] = event; + } + } + } + notifyListeners(); } } catch (e) { @@ -264,7 +296,19 @@ class EventProvider with ChangeNotifier { Future deleteEvent(String eventId) async { try { await _dataService.deleteEvent(eventId); + + // Trouver l'événement pour obtenir sa date avant de le supprimer + final eventToDelete = _events.firstWhere((e) => e.id == eventId); + final monthKey = '${eventToDelete.startDateTime.year}-${eventToDelete.startDateTime.month.toString().padLeft(2, '0')}'; + + // Supprimer de _events _events.removeWhere((event) => event.id == eventId); + + // Supprimer du cache par mois + if (_eventsByMonth.containsKey(monthKey)) { + _eventsByMonth[monthKey]!.removeWhere((event) => event.id == eventId); + } + notifyListeners(); } catch (e) { print('Error deleting event: $e'); diff --git a/em2rp/lib/views/event_preparation_page.dart b/em2rp/lib/views/event_preparation_page.dart index 34c75b6..2e43f2d 100644 --- a/em2rp/lib/views/event_preparation_page.dart +++ b/em2rp/lib/views/event_preparation_page.dart @@ -1,14 +1,12 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:cloud_functions/cloud_functions.dart'; -import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:em2rp/models/event_model.dart'; import 'package:em2rp/models/equipment_model.dart'; import 'package:em2rp/models/container_model.dart'; import 'package:em2rp/providers/equipment_provider.dart'; import 'package:em2rp/providers/container_provider.dart'; import 'package:em2rp/providers/event_provider.dart'; -import 'package:em2rp/providers/local_user_provider.dart'; import 'package:em2rp/services/data_service.dart'; import 'package:em2rp/services/api_service.dart'; import 'package:em2rp/services/qr_code_processing_service.dart'; @@ -449,10 +447,17 @@ class _EventPreparationPageState extends State with Single // Recharger l'événement depuis le provider final eventProvider = context.read(); - // Recharger la liste des événements pour rafraîchir les données - final userId = context.read().uid; - if (userId != null) { - await eventProvider.loadUserEvents(userId, canViewAllEvents: true); + + // Recharger uniquement cet événement depuis l'API pour obtenir les dernières données + try { + final result = await _dataService.getEventWithDetails(_currentEvent.id); + final eventData = result['event'] as Map; + final updatedEvent = EventModel.fromMap(eventData, eventData['id'] as String); + + // Mettre à jour dans le cache + await eventProvider.updateEvent(updatedEvent); + } catch (e) { + DebugLog.error('[EventPreparationPage] Erreur lors du rechargement de l\'événement', e); } setState(() => _showSuccessAnimation = true); diff --git a/em2rp/web/version.json b/em2rp/web/version.json index c1ed6ac..520cb8c 100644 --- a/em2rp/web/version.json +++ b/em2rp/web/version.json @@ -1,7 +1,7 @@ { - "version": "1.1.4", + "version": "1.1.5", "updateUrl": "https://app.em2events.fr", "forceUpdate": true, "releaseNotes": "Cette version apporte des outils majeurs pour faciliter la gestion de votre parc et de vos événements :\r\n\r\n* **Scanner QR Code :** Retrouvez instantanément la fiche d'un équipement ou d'un conteneur en scannant son code directement depuis l'application. La génération des codes a également été rendue plus fluide.\r\n* **Centre de Notifications & Alertes :** Ne ratez plus rien ! Un nouveau système d'alertes (dans l'app et par email) vous prévient des maintenances, équipements manquants ou conflits. Vous pouvez configurer vos préférences d'envoi.", - "timestamp": "2026-02-13T17:07:39.024Z" + "timestamp": "2026-02-18T12:43:19.791Z" } \ No newline at end of file