Add equipment management features (and qr generation support)
This commit is contained in:
138
em2rp/lib/models/maintenance_model.dart
Normal file
138
em2rp/lib/models/maintenance_model.dart
Normal file
@@ -0,0 +1,138 @@
|
||||
import 'package:cloud_firestore/cloud_firestore.dart';
|
||||
|
||||
enum MaintenanceType {
|
||||
preventive, // Préventive
|
||||
corrective, // Corrective
|
||||
inspection // Inspection
|
||||
}
|
||||
|
||||
String maintenanceTypeToString(MaintenanceType type) {
|
||||
switch (type) {
|
||||
case MaintenanceType.preventive:
|
||||
return 'PREVENTIVE';
|
||||
case MaintenanceType.corrective:
|
||||
return 'CORRECTIVE';
|
||||
case MaintenanceType.inspection:
|
||||
return 'INSPECTION';
|
||||
}
|
||||
}
|
||||
|
||||
MaintenanceType maintenanceTypeFromString(String? type) {
|
||||
switch (type) {
|
||||
case 'PREVENTIVE':
|
||||
return MaintenanceType.preventive;
|
||||
case 'CORRECTIVE':
|
||||
return MaintenanceType.corrective;
|
||||
case 'INSPECTION':
|
||||
return MaintenanceType.inspection;
|
||||
default:
|
||||
return MaintenanceType.preventive;
|
||||
}
|
||||
}
|
||||
|
||||
class MaintenanceModel {
|
||||
final String id; // ID aléatoire
|
||||
final List<String> equipmentIds; // IDs des équipements concernés (peut être multiple)
|
||||
final MaintenanceType type; // Type de maintenance
|
||||
final DateTime scheduledDate; // Date planifiée
|
||||
final DateTime? completedDate; // Date de réalisation (null si pas encore effectuée)
|
||||
final String name; // Nom de l'opération
|
||||
final String description; // Description détaillée
|
||||
final String? performedBy; // ID de l'utilisateur qui a effectué la maintenance
|
||||
final double? cost; // Coût de la maintenance
|
||||
final String? notes; // Notes additionnelles
|
||||
final DateTime createdAt; // Date de création
|
||||
final DateTime updatedAt; // Date de mise à jour
|
||||
|
||||
MaintenanceModel({
|
||||
required this.id,
|
||||
required this.equipmentIds,
|
||||
required this.type,
|
||||
required this.scheduledDate,
|
||||
this.completedDate,
|
||||
required this.name,
|
||||
required this.description,
|
||||
this.performedBy,
|
||||
this.cost,
|
||||
this.notes,
|
||||
required this.createdAt,
|
||||
required this.updatedAt,
|
||||
});
|
||||
|
||||
factory MaintenanceModel.fromMap(Map<String, dynamic> map, String id) {
|
||||
// Gestion de la liste des équipements
|
||||
final List<dynamic> equipmentIdsRaw = map['equipmentIds'] ?? [];
|
||||
final List<String> equipmentIds = equipmentIdsRaw.map((e) => e.toString()).toList();
|
||||
|
||||
return MaintenanceModel(
|
||||
id: id,
|
||||
equipmentIds: equipmentIds,
|
||||
type: maintenanceTypeFromString(map['type']),
|
||||
scheduledDate: (map['scheduledDate'] as Timestamp?)?.toDate() ?? DateTime.now(),
|
||||
completedDate: (map['completedDate'] as Timestamp?)?.toDate(),
|
||||
name: map['name'] ?? '',
|
||||
description: map['description'] ?? '',
|
||||
performedBy: map['performedBy'],
|
||||
cost: map['cost']?.toDouble(),
|
||||
notes: map['notes'],
|
||||
createdAt: (map['createdAt'] as Timestamp?)?.toDate() ?? DateTime.now(),
|
||||
updatedAt: (map['updatedAt'] as Timestamp?)?.toDate() ?? DateTime.now(),
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toMap() {
|
||||
return {
|
||||
'equipmentIds': equipmentIds,
|
||||
'type': maintenanceTypeToString(type),
|
||||
'scheduledDate': Timestamp.fromDate(scheduledDate),
|
||||
'completedDate': completedDate != null ? Timestamp.fromDate(completedDate!) : null,
|
||||
'name': name,
|
||||
'description': description,
|
||||
'performedBy': performedBy,
|
||||
'cost': cost,
|
||||
'notes': notes,
|
||||
'createdAt': Timestamp.fromDate(createdAt),
|
||||
'updatedAt': Timestamp.fromDate(updatedAt),
|
||||
};
|
||||
}
|
||||
|
||||
MaintenanceModel copyWith({
|
||||
String? id,
|
||||
List<String>? equipmentIds,
|
||||
MaintenanceType? type,
|
||||
DateTime? scheduledDate,
|
||||
DateTime? completedDate,
|
||||
String? name,
|
||||
String? description,
|
||||
String? performedBy,
|
||||
double? cost,
|
||||
String? notes,
|
||||
DateTime? createdAt,
|
||||
DateTime? updatedAt,
|
||||
}) {
|
||||
return MaintenanceModel(
|
||||
id: id ?? this.id,
|
||||
equipmentIds: equipmentIds ?? this.equipmentIds,
|
||||
type: type ?? this.type,
|
||||
scheduledDate: scheduledDate ?? this.scheduledDate,
|
||||
completedDate: completedDate ?? this.completedDate,
|
||||
name: name ?? this.name,
|
||||
description: description ?? this.description,
|
||||
performedBy: performedBy ?? this.performedBy,
|
||||
cost: cost ?? this.cost,
|
||||
notes: notes ?? this.notes,
|
||||
createdAt: createdAt ?? this.createdAt,
|
||||
updatedAt: updatedAt ?? this.updatedAt,
|
||||
);
|
||||
}
|
||||
|
||||
// Helper pour vérifier si la maintenance est complétée
|
||||
bool get isCompleted => completedDate != null;
|
||||
|
||||
// Helper pour vérifier si la maintenance est en retard
|
||||
bool get isOverdue {
|
||||
if (isCompleted) return false;
|
||||
return scheduledDate.isBefore(DateTime.now());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user