Ajout de la gestion des containers (création, édition, suppression, affichage des détails).
Introduction d'un système de génération de QR codes unifié et d'un mode de sélection multiple.
**Features:**
- **Gestion des Containers :**
- Nouvelle page de gestion des containers (`container_management_page.dart`) avec recherche et filtres.
- Formulaire de création/édition de containers (`container_form_page.dart`) avec génération d'ID automatique.
- Page de détails d'un container (`container_detail_page.dart`) affichant son contenu et ses caractéristiques.
- Ajout des routes et du provider (`ContainerProvider`) nécessaires.
- **Modèle de Données :**
- Ajout du `ContainerModel` pour représenter les boîtes, flight cases, etc.
- Le modèle `EquipmentModel` a été enrichi avec des caractéristiques physiques (poids, dimensions).
- **QR Codes :**
- Nouveau service unifié (`UnifiedPDFGeneratorService`) pour générer des PDFs de QR codes pour n'importe quelle entité.
- Services `PDFGeneratorService` et `ContainerPDFGeneratorService` transformés en wrappers pour maintenir la compatibilité.
- Amélioration de la performance de la génération de QR codes en masse.
- **Interface Utilisateur (UI/UX) :**
- Nouvelle page de détails pour le matériel (`equipment_detail_page.dart`).
- Ajout d'un `SelectionModeMixin` pour gérer la sélection multiple dans les pages de gestion.
- Dialogues réutilisables pour l'affichage de QR codes (`QRCodeDialog`) et la sélection de format d'impression (`QRCodeFormatSelectorDialog`).
- Ajout d'un bouton "Gérer les boîtes" sur la page de gestion du matériel.
**Refactorisation :**
- L' `IdGenerator` a été déplacé dans le répertoire `utils` et étendu pour gérer les containers.
- Mise à jour de nombreuses dépendances `pubspec.yaml` vers des versions plus récentes.
- Séparation de la logique d'affichage des containers et du matériel dans des widgets dédiés (`ContainerHeaderCard`, `EquipmentParentContainers`, etc.).
53 lines
1.9 KiB
Dart
53 lines
1.9 KiB
Dart
import 'dart:typed_data';
|
|
import 'package:em2rp/models/container_model.dart';
|
|
import 'package:em2rp/models/equipment_model.dart';
|
|
import 'package:em2rp/services/unified_pdf_generator_service.dart';
|
|
|
|
export 'package:em2rp/services/unified_pdf_generator_service.dart' show QRLabelFormat;
|
|
|
|
/// Formats d'étiquettes disponibles pour containers (legacy - utilise QRLabelFormat maintenant)
|
|
@Deprecated('Utiliser QRLabelFormat directement')
|
|
typedef ContainerQRLabelFormat = QRLabelFormat;
|
|
|
|
/// Service pour la génération de PDFs avec QR codes pour containers
|
|
/// WRAPPER LEGACY - Utilise maintenant UnifiedPDFGeneratorService
|
|
@Deprecated('Utiliser UnifiedPDFGeneratorService directement')
|
|
class ContainerPDFGeneratorService {
|
|
/// Génère un PDF avec des QR codes selon le format choisi
|
|
static Future<Uint8List> generateQRCodesPDF({
|
|
required List<ContainerModel> containerList,
|
|
required Map<String, List<EquipmentModel>> containerEquipmentMap,
|
|
required QRLabelFormat format,
|
|
}) async {
|
|
// Pour les grandes étiquettes, inclure les équipements
|
|
if (format == QRLabelFormat.large) {
|
|
return UnifiedPDFGeneratorService.generateAdvancedQRCodesPDF(
|
|
items: containerList,
|
|
getId: (c) => c.id,
|
|
getTitle: (c) => c.name,
|
|
getSubtitle: (c) {
|
|
final equipment = containerEquipmentMap[c.id] ?? [];
|
|
final lines = <String>[
|
|
'Contenu (${equipment.length}):',
|
|
...equipment.take(5).map((eq) => '- ${eq.id}'),
|
|
if (equipment.length > 5) '... +${equipment.length - 5}',
|
|
];
|
|
return lines;
|
|
},
|
|
format: format,
|
|
);
|
|
}
|
|
|
|
// Pour les petites et moyennes étiquettes, juste ID + nom
|
|
return UnifiedPDFGeneratorService.generateAdvancedQRCodesPDF(
|
|
items: containerList,
|
|
getId: (c) => c.id,
|
|
getTitle: (c) => c.name,
|
|
getSubtitle: null,
|
|
format: format,
|
|
);
|
|
}
|
|
}
|
|
|
|
|