Files
EM2_ERP/em2rp/lib/models/alert_model.dart

90 lines
2.3 KiB
Dart

import 'package:cloud_firestore/cloud_firestore.dart';
enum AlertType {
lowStock, // Stock faible
maintenanceDue, // Maintenance à venir
conflict // Conflit disponibilité
}
String alertTypeToString(AlertType type) {
switch (type) {
case AlertType.lowStock:
return 'LOW_STOCK';
case AlertType.maintenanceDue:
return 'MAINTENANCE_DUE';
case AlertType.conflict:
return 'CONFLICT';
}
}
AlertType alertTypeFromString(String? type) {
switch (type) {
case 'LOW_STOCK':
return AlertType.lowStock;
case 'MAINTENANCE_DUE':
return AlertType.maintenanceDue;
case 'CONFLICT':
return AlertType.conflict;
default:
return AlertType.conflict;
}
}
class AlertModel {
final String id; // ID généré automatiquement
final AlertType type; // Type d'alerte
final String message; // Message de l'alerte
final String? equipmentId; // ID de l'équipement concerné (optionnel)
final DateTime createdAt; // Date de création
final bool isRead; // Statut lu/non lu
AlertModel({
required this.id,
required this.type,
required this.message,
this.equipmentId,
required this.createdAt,
this.isRead = false,
});
factory AlertModel.fromMap(Map<String, dynamic> map, String id) {
return AlertModel(
id: id,
type: alertTypeFromString(map['type']),
message: map['message'] ?? '',
equipmentId: map['equipmentId'],
createdAt: (map['createdAt'] as Timestamp?)?.toDate() ?? DateTime.now(),
isRead: map['isRead'] ?? false,
);
}
Map<String, dynamic> toMap() {
return {
'type': alertTypeToString(type),
'message': message,
'equipmentId': equipmentId,
'createdAt': Timestamp.fromDate(createdAt),
'isRead': isRead,
};
}
AlertModel copyWith({
String? id,
AlertType? type,
String? message,
String? equipmentId,
DateTime? createdAt,
bool? isRead,
}) {
return AlertModel(
id: id ?? this.id,
type: type ?? this.type,
message: message ?? this.message,
equipmentId: equipmentId ?? this.equipmentId,
createdAt: createdAt ?? this.createdAt,
isRead: isRead ?? this.isRead,
);
}
}