Add equipment management features (and qr generation support)
This commit is contained in:
		| @@ -30,6 +30,128 @@ EventStatus eventStatusFromString(String? status) { | ||||
|   } | ||||
| } | ||||
|  | ||||
| enum PreparationStatus { | ||||
|   notStarted, | ||||
|   inProgress, | ||||
|   completed, | ||||
|   completedWithMissing | ||||
| } | ||||
|  | ||||
| String preparationStatusToString(PreparationStatus status) { | ||||
|   switch (status) { | ||||
|     case PreparationStatus.notStarted: | ||||
|       return 'NOT_STARTED'; | ||||
|     case PreparationStatus.inProgress: | ||||
|       return 'IN_PROGRESS'; | ||||
|     case PreparationStatus.completed: | ||||
|       return 'COMPLETED'; | ||||
|     case PreparationStatus.completedWithMissing: | ||||
|       return 'COMPLETED_WITH_MISSING'; | ||||
|   } | ||||
| } | ||||
|  | ||||
| PreparationStatus preparationStatusFromString(String? status) { | ||||
|   switch (status) { | ||||
|     case 'NOT_STARTED': | ||||
|       return PreparationStatus.notStarted; | ||||
|     case 'IN_PROGRESS': | ||||
|       return PreparationStatus.inProgress; | ||||
|     case 'COMPLETED': | ||||
|       return PreparationStatus.completed; | ||||
|     case 'COMPLETED_WITH_MISSING': | ||||
|       return PreparationStatus.completedWithMissing; | ||||
|     default: | ||||
|       return PreparationStatus.notStarted; | ||||
|   } | ||||
| } | ||||
|  | ||||
| enum ReturnStatus { | ||||
|   notStarted, | ||||
|   inProgress, | ||||
|   completed, | ||||
|   completedWithMissing | ||||
| } | ||||
|  | ||||
| String returnStatusToString(ReturnStatus status) { | ||||
|   switch (status) { | ||||
|     case ReturnStatus.notStarted: | ||||
|       return 'NOT_STARTED'; | ||||
|     case ReturnStatus.inProgress: | ||||
|       return 'IN_PROGRESS'; | ||||
|     case ReturnStatus.completed: | ||||
|       return 'COMPLETED'; | ||||
|     case ReturnStatus.completedWithMissing: | ||||
|       return 'COMPLETED_WITH_MISSING'; | ||||
|   } | ||||
| } | ||||
|  | ||||
| ReturnStatus returnStatusFromString(String? status) { | ||||
|   switch (status) { | ||||
|     case 'NOT_STARTED': | ||||
|       return ReturnStatus.notStarted; | ||||
|     case 'IN_PROGRESS': | ||||
|       return ReturnStatus.inProgress; | ||||
|     case 'COMPLETED': | ||||
|       return ReturnStatus.completed; | ||||
|     case 'COMPLETED_WITH_MISSING': | ||||
|       return ReturnStatus.completedWithMissing; | ||||
|     default: | ||||
|       return ReturnStatus.notStarted; | ||||
|   } | ||||
| } | ||||
|  | ||||
| class EventEquipment { | ||||
|   final String equipmentId;         // ID de l'équipement | ||||
|   final int quantity;               // Quantité (pour consommables) | ||||
|   final bool isPrepared;            // Validé en préparation | ||||
|   final bool isReturned;            // Validé au retour | ||||
|   final int? returnedQuantity;      // Quantité retournée (pour consommables) | ||||
|  | ||||
|   EventEquipment({ | ||||
|     required this.equipmentId, | ||||
|     this.quantity = 1, | ||||
|     this.isPrepared = false, | ||||
|     this.isReturned = false, | ||||
|     this.returnedQuantity, | ||||
|   }); | ||||
|  | ||||
|   factory EventEquipment.fromMap(Map<String, dynamic> map) { | ||||
|     return EventEquipment( | ||||
|       equipmentId: map['equipmentId'] ?? '', | ||||
|       quantity: map['quantity'] ?? 1, | ||||
|       isPrepared: map['isPrepared'] ?? false, | ||||
|       isReturned: map['isReturned'] ?? false, | ||||
|       returnedQuantity: map['returnedQuantity'], | ||||
|     ); | ||||
|   } | ||||
|  | ||||
|   Map<String, dynamic> toMap() { | ||||
|     return { | ||||
|       'equipmentId': equipmentId, | ||||
|       'quantity': quantity, | ||||
|       'isPrepared': isPrepared, | ||||
|       'isReturned': isReturned, | ||||
|       'returnedQuantity': returnedQuantity, | ||||
|     }; | ||||
|   } | ||||
|  | ||||
|   EventEquipment copyWith({ | ||||
|     String? equipmentId, | ||||
|     int? quantity, | ||||
|     bool? isPrepared, | ||||
|     bool? isReturned, | ||||
|     int? returnedQuantity, | ||||
|   }) { | ||||
|     return EventEquipment( | ||||
|       equipmentId: equipmentId ?? this.equipmentId, | ||||
|       quantity: quantity ?? this.quantity, | ||||
|       isPrepared: isPrepared ?? this.isPrepared, | ||||
|       isReturned: isReturned ?? this.isReturned, | ||||
|       returnedQuantity: returnedQuantity ?? this.returnedQuantity, | ||||
|     ); | ||||
|   } | ||||
| } | ||||
|  | ||||
| class EventModel { | ||||
|   final String id; | ||||
|   final String name; | ||||
| @@ -50,6 +172,11 @@ class EventModel { | ||||
|   final List<Map<String, dynamic>> options; | ||||
|   final EventStatus status; | ||||
|  | ||||
|   // Nouveaux champs pour la gestion du matériel | ||||
|   final List<EventEquipment> assignedEquipment; | ||||
|   final PreparationStatus? preparationStatus; | ||||
|   final ReturnStatus? returnStatus; | ||||
|  | ||||
|   EventModel({ | ||||
|     required this.id, | ||||
|     required this.name, | ||||
| @@ -69,6 +196,9 @@ class EventModel { | ||||
|     required this.documents, | ||||
|     this.options = const [], | ||||
|     this.status = EventStatus.waitingForApproval, | ||||
|     this.assignedEquipment = const [], | ||||
|     this.preparationStatus, | ||||
|     this.returnStatus, | ||||
|   }); | ||||
|  | ||||
|   factory EventModel.fromMap(Map<String, dynamic> map, String id) { | ||||
| @@ -149,6 +279,22 @@ class EventModel { | ||||
|         customerId = map['customer'] as String; | ||||
|       } | ||||
|  | ||||
|       // Gestion des équipements assignés | ||||
|       final assignedEquipmentRaw = map['assignedEquipment'] ?? []; | ||||
|       final List<EventEquipment> assignedEquipment = []; | ||||
|  | ||||
|       if (assignedEquipmentRaw is List) { | ||||
|         for (var e in assignedEquipmentRaw) { | ||||
|           try { | ||||
|             if (e is Map) { | ||||
|               assignedEquipment.add(EventEquipment.fromMap(Map<String, dynamic>.from(e))); | ||||
|             } | ||||
|           } catch (equipmentError) { | ||||
|             print('Warning: Failed to parse equipment in event $id: $equipmentError'); | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|  | ||||
|       return EventModel( | ||||
|         id: id, | ||||
|         name: (map['Name'] ?? '').toString().trim(), | ||||
| @@ -168,6 +314,9 @@ class EventModel { | ||||
|         documents: docs, | ||||
|         options: options, | ||||
|         status: eventStatusFromString(map['status'] as String?), | ||||
|         assignedEquipment: assignedEquipment, | ||||
|         preparationStatus: preparationStatusFromString(map['preparationStatus'] as String?), | ||||
|         returnStatus: returnStatusFromString(map['returnStatus'] as String?), | ||||
|       ); | ||||
|     } catch (e) { | ||||
|       print('Error parsing event $id: $e'); | ||||
| @@ -220,6 +369,9 @@ class EventModel { | ||||
|       'documents': documents, | ||||
|       'options': options, | ||||
|       'status': eventStatusToString(status), | ||||
|       'assignedEquipment': assignedEquipment.map((e) => e.toMap()).toList(), | ||||
|       'preparationStatus': preparationStatus != null ? preparationStatusToString(preparationStatus!) : null, | ||||
|       'returnStatus': returnStatus != null ? returnStatusToString(returnStatus!) : null, | ||||
|     }; | ||||
|   } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 ElPoyo
					ElPoyo