Add equipment management features (and qr generation support)
This commit is contained in:
128
em2rp/lib/providers/alert_provider.dart
Normal file
128
em2rp/lib/providers/alert_provider.dart
Normal file
@@ -0,0 +1,128 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:cloud_firestore/cloud_firestore.dart';
|
||||
import 'package:em2rp/models/alert_model.dart';
|
||||
|
||||
class AlertProvider extends ChangeNotifier {
|
||||
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
|
||||
|
||||
List<AlertModel> _alerts = [];
|
||||
|
||||
// Getters
|
||||
List<AlertModel> get alerts => _alerts;
|
||||
|
||||
/// Nombre d'alertes non lues
|
||||
int get unreadCount => _alerts.where((alert) => !alert.isRead).length;
|
||||
|
||||
/// Alertes non lues uniquement
|
||||
List<AlertModel> get unreadAlerts => _alerts.where((alert) => !alert.isRead).toList();
|
||||
|
||||
/// Alertes de stock critique
|
||||
List<AlertModel> get lowStockAlerts => _alerts.where((alert) => alert.type == AlertType.lowStock).toList();
|
||||
|
||||
/// Alertes de maintenance
|
||||
List<AlertModel> get maintenanceAlerts => _alerts.where((alert) => alert.type == AlertType.maintenanceDue).toList();
|
||||
|
||||
/// Alertes de conflit
|
||||
List<AlertModel> get conflictAlerts => _alerts.where((alert) => alert.type == AlertType.conflict).toList();
|
||||
|
||||
/// Stream des alertes
|
||||
Stream<List<AlertModel>> get alertsStream {
|
||||
return _firestore
|
||||
.collection('alerts')
|
||||
.orderBy('createdAt', descending: true)
|
||||
.snapshots()
|
||||
.map((snapshot) {
|
||||
_alerts = snapshot.docs
|
||||
.map((doc) => AlertModel.fromMap(doc.data(), doc.id))
|
||||
.toList();
|
||||
return _alerts;
|
||||
});
|
||||
}
|
||||
|
||||
/// Marquer une alerte comme lue
|
||||
Future<void> markAsRead(String alertId) async {
|
||||
try {
|
||||
await _firestore.collection('alerts').doc(alertId).update({
|
||||
'isRead': true,
|
||||
});
|
||||
notifyListeners();
|
||||
} catch (e) {
|
||||
print('Error marking alert as read: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
/// Marquer toutes les alertes comme lues
|
||||
Future<void> markAllAsRead() async {
|
||||
try {
|
||||
final batch = _firestore.batch();
|
||||
|
||||
for (var alert in _alerts.where((a) => !a.isRead)) {
|
||||
batch.update(
|
||||
_firestore.collection('alerts').doc(alert.id),
|
||||
{'isRead': true},
|
||||
);
|
||||
}
|
||||
|
||||
await batch.commit();
|
||||
notifyListeners();
|
||||
} catch (e) {
|
||||
print('Error marking all alerts as read: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
/// Supprimer une alerte
|
||||
Future<void> deleteAlert(String alertId) async {
|
||||
try {
|
||||
await _firestore.collection('alerts').doc(alertId).delete();
|
||||
notifyListeners();
|
||||
} catch (e) {
|
||||
print('Error deleting alert: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
/// Supprimer toutes les alertes lues
|
||||
Future<void> deleteReadAlerts() async {
|
||||
try {
|
||||
final batch = _firestore.batch();
|
||||
|
||||
for (var alert in _alerts.where((a) => a.isRead)) {
|
||||
batch.delete(_firestore.collection('alerts').doc(alert.id));
|
||||
}
|
||||
|
||||
await batch.commit();
|
||||
notifyListeners();
|
||||
} catch (e) {
|
||||
print('Error deleting read alerts: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
/// Créer une alerte (utilisé principalement par les services)
|
||||
Future<void> createAlert(AlertModel alert) async {
|
||||
try {
|
||||
await _firestore.collection('alerts').doc(alert.id).set(alert.toMap());
|
||||
notifyListeners();
|
||||
} catch (e) {
|
||||
print('Error creating alert: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
/// Récupérer les alertes pour un équipement spécifique
|
||||
Stream<List<AlertModel>> getAlertsForEquipment(String equipmentId) {
|
||||
return _firestore
|
||||
.collection('alerts')
|
||||
.where('equipmentId', isEqualTo: equipmentId)
|
||||
.orderBy('createdAt', descending: true)
|
||||
.snapshots()
|
||||
.map((snapshot) {
|
||||
return snapshot.docs
|
||||
.map((doc) => AlertModel.fromMap(doc.data(), doc.id))
|
||||
.toList();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user