feat: ajout de la gestion de la préparation d'un événement avec page permettant de le gérer
This commit is contained in:
@@ -9,7 +9,7 @@ class EventPreparationService {
|
||||
|
||||
// Collection references
|
||||
CollectionReference get _eventsCollection => _firestore.collection('events');
|
||||
CollectionReference get _equipmentCollection => _firestore.collection('equipment');
|
||||
CollectionReference get _equipmentCollection => _firestore.collection('equipments');
|
||||
|
||||
// === PRÉPARATION ===
|
||||
|
||||
@@ -29,9 +29,21 @@ class EventPreparationService {
|
||||
return eq;
|
||||
}).toList();
|
||||
|
||||
await _eventsCollection.doc(eventId).update({
|
||||
// Vérifier si tous les équipements sont préparés
|
||||
final allPrepared = updatedEquipment.every((eq) => eq.isPrepared);
|
||||
|
||||
final updateData = <String, dynamic>{
|
||||
'assignedEquipment': updatedEquipment.map((e) => e.toMap()).toList(),
|
||||
});
|
||||
};
|
||||
|
||||
// Mettre à jour le statut selon la complétion
|
||||
if (allPrepared) {
|
||||
updateData['preparationStatus'] = preparationStatusToString(PreparationStatus.completed);
|
||||
} else {
|
||||
updateData['preparationStatus'] = preparationStatusToString(PreparationStatus.inProgress);
|
||||
}
|
||||
|
||||
await _eventsCollection.doc(eventId).update(updateData);
|
||||
} catch (e) {
|
||||
print('Error validating equipment preparation: $e');
|
||||
rethrow;
|
||||
@@ -56,9 +68,13 @@ class EventPreparationService {
|
||||
'preparationStatus': preparationStatusToString(PreparationStatus.completed),
|
||||
});
|
||||
|
||||
// Mettre à jour le statut des équipements à "inUse"
|
||||
// Mettre à jour le statut des équipements à "inUse" (seulement pour les équipements qui existent)
|
||||
for (var equipment in event.assignedEquipment) {
|
||||
await updateEquipmentStatus(equipment.equipmentId, EquipmentStatus.inUse);
|
||||
// Vérifier si l'équipement existe avant de mettre à jour son statut
|
||||
final doc = await _equipmentCollection.doc(equipment.equipmentId).get();
|
||||
if (doc.exists) {
|
||||
await updateEquipmentStatus(equipment.equipmentId, EquipmentStatus.inUse);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
print('Error validating all preparation: $e');
|
||||
@@ -85,7 +101,11 @@ class EventPreparationService {
|
||||
// Mettre à jour le statut des équipements préparés à "inUse"
|
||||
for (var equipment in event.assignedEquipment) {
|
||||
if (equipment.isPrepared && !missingEquipmentIds.contains(equipment.equipmentId)) {
|
||||
await updateEquipmentStatus(equipment.equipmentId, EquipmentStatus.inUse);
|
||||
// Vérifier si l'équipement existe avant de mettre à jour son statut
|
||||
final doc = await _equipmentCollection.doc(equipment.equipmentId).get();
|
||||
if (doc.exists) {
|
||||
await updateEquipmentStatus(equipment.equipmentId, EquipmentStatus.inUse);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
@@ -120,9 +140,21 @@ class EventPreparationService {
|
||||
return eq;
|
||||
}).toList();
|
||||
|
||||
await _eventsCollection.doc(eventId).update({
|
||||
// Vérifier si tous les équipements sont retournés
|
||||
final allReturned = updatedEquipment.every((eq) => eq.isReturned);
|
||||
|
||||
final updateData = <String, dynamic>{
|
||||
'assignedEquipment': updatedEquipment.map((e) => e.toMap()).toList(),
|
||||
});
|
||||
};
|
||||
|
||||
// Mettre à jour le statut selon la complétion
|
||||
if (allReturned) {
|
||||
updateData['returnStatus'] = returnStatusToString(ReturnStatus.completed);
|
||||
} else {
|
||||
updateData['returnStatus'] = returnStatusToString(ReturnStatus.inProgress);
|
||||
}
|
||||
|
||||
await _eventsCollection.doc(eventId).update(updateData);
|
||||
|
||||
// Mettre à jour le stock si c'est un consommable
|
||||
if (returnedQuantity != null) {
|
||||
@@ -176,9 +208,7 @@ class EventPreparationService {
|
||||
|
||||
// Mettre à jour le statut des équipements à "available" et gérer les stocks
|
||||
for (var equipment in updatedEquipment) {
|
||||
await updateEquipmentStatus(equipment.equipmentId, EquipmentStatus.available);
|
||||
|
||||
// Restaurer le stock pour les consommables
|
||||
// Vérifier si le document existe
|
||||
final equipmentDoc = await _equipmentCollection.doc(equipment.equipmentId).get();
|
||||
if (equipmentDoc.exists) {
|
||||
final equipmentData = EquipmentModel.fromMap(
|
||||
@@ -186,10 +216,17 @@ class EventPreparationService {
|
||||
equipmentDoc.id,
|
||||
);
|
||||
|
||||
// Mettre à jour le statut uniquement pour les équipements non quantifiables
|
||||
if (!equipmentData.hasQuantity) {
|
||||
await updateEquipmentStatus(equipment.equipmentId, EquipmentStatus.available);
|
||||
}
|
||||
|
||||
// Restaurer le stock pour les consommables
|
||||
if (equipmentData.hasQuantity && equipment.returnedQuantity != null) {
|
||||
final currentAvailable = equipmentData.availableQuantity ?? 0;
|
||||
await _equipmentCollection.doc(equipment.equipmentId).update({
|
||||
'availableQuantity': currentAvailable + equipment.returnedQuantity!,
|
||||
'updatedAt': Timestamp.fromDate(DateTime.now()),
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -218,27 +255,36 @@ class EventPreparationService {
|
||||
|
||||
// Mettre à jour le statut des équipements retournés à "available"
|
||||
for (var equipment in event.assignedEquipment) {
|
||||
// Vérifier si le document existe
|
||||
final equipmentDoc = await _equipmentCollection.doc(equipment.equipmentId).get();
|
||||
if (!equipmentDoc.exists) {
|
||||
continue; // Passer cet équipement s'il n'existe pas
|
||||
}
|
||||
|
||||
final equipmentData = EquipmentModel.fromMap(
|
||||
equipmentDoc.data() as Map<String, dynamic>,
|
||||
equipmentDoc.id,
|
||||
);
|
||||
|
||||
if (equipment.isReturned && !missingEquipmentIds.contains(equipment.equipmentId)) {
|
||||
await updateEquipmentStatus(equipment.equipmentId, EquipmentStatus.available);
|
||||
// Mettre à jour le statut uniquement pour les équipements non quantifiables
|
||||
if (!equipmentData.hasQuantity) {
|
||||
await updateEquipmentStatus(equipment.equipmentId, EquipmentStatus.available);
|
||||
}
|
||||
|
||||
// Restaurer le stock pour les consommables
|
||||
final equipmentDoc = await _equipmentCollection.doc(equipment.equipmentId).get();
|
||||
if (equipmentDoc.exists) {
|
||||
final equipmentData = EquipmentModel.fromMap(
|
||||
equipmentDoc.data() as Map<String, dynamic>,
|
||||
equipmentDoc.id,
|
||||
);
|
||||
|
||||
if (equipmentData.hasQuantity && equipment.returnedQuantity != null) {
|
||||
final currentAvailable = equipmentData.availableQuantity ?? 0;
|
||||
await _equipmentCollection.doc(equipment.equipmentId).update({
|
||||
'availableQuantity': currentAvailable + equipment.returnedQuantity!,
|
||||
});
|
||||
}
|
||||
if (equipmentData.hasQuantity && equipment.returnedQuantity != null) {
|
||||
final currentAvailable = equipmentData.availableQuantity ?? 0;
|
||||
await _equipmentCollection.doc(equipment.equipmentId).update({
|
||||
'availableQuantity': currentAvailable + equipment.returnedQuantity!,
|
||||
'updatedAt': Timestamp.fromDate(DateTime.now()),
|
||||
});
|
||||
}
|
||||
} else if (missingEquipmentIds.contains(equipment.equipmentId)) {
|
||||
// Marquer comme perdu
|
||||
await updateEquipmentStatus(equipment.equipmentId, EquipmentStatus.lost);
|
||||
// Marquer comme perdu uniquement pour les équipements non quantifiables
|
||||
if (!equipmentData.hasQuantity) {
|
||||
await updateEquipmentStatus(equipment.equipmentId, EquipmentStatus.lost);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
@@ -252,13 +298,20 @@ class EventPreparationService {
|
||||
/// Mettre à jour le statut d'un équipement
|
||||
Future<void> updateEquipmentStatus(String equipmentId, EquipmentStatus status) async {
|
||||
try {
|
||||
// Vérifier que le document existe avant de le mettre à jour
|
||||
final doc = await _equipmentCollection.doc(equipmentId).get();
|
||||
if (!doc.exists) {
|
||||
print('Warning: Equipment document $equipmentId does not exist, skipping status update');
|
||||
return;
|
||||
}
|
||||
|
||||
await _equipmentCollection.doc(equipmentId).update({
|
||||
'status': equipmentStatusToString(status),
|
||||
'updatedAt': Timestamp.fromDate(DateTime.now()),
|
||||
});
|
||||
} catch (e) {
|
||||
print('Error updating equipment status: $e');
|
||||
rethrow;
|
||||
print('Error updating equipment status for $equipmentId: $e');
|
||||
// Ne pas rethrow pour ne pas bloquer le processus si un équipement n'existe pas
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user