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.).
77 lines
2.4 KiB
Dart
77 lines
2.4 KiB
Dart
import 'dart:typed_data';
|
|
import 'package:em2rp/models/equipment_model.dart';
|
|
import 'package:em2rp/services/unified_pdf_generator_service.dart';
|
|
|
|
// Export QRLabelFormat pour rétrocompatibilité
|
|
export 'package:em2rp/services/unified_pdf_generator_service.dart' show QRLabelFormat;
|
|
|
|
/// Service pour la génération de PDFs avec QR codes pour équipements
|
|
/// WRAPPER LEGACY - Utilise maintenant UnifiedPDFGeneratorService
|
|
@Deprecated('Utiliser UnifiedPDFGeneratorService directement')
|
|
class PDFGeneratorService {
|
|
/// Génère un PDF avec des QR codes selon le format choisi
|
|
static Future<Uint8List> generateQRCodesPDF({
|
|
required List<EquipmentModel> equipmentList,
|
|
required QRLabelFormat format,
|
|
}) async {
|
|
// Pour les grandes étiquettes, ajouter les détails
|
|
if (format == QRLabelFormat.large) {
|
|
return UnifiedPDFGeneratorService.generateAdvancedQRCodesPDF(
|
|
items: equipmentList,
|
|
getId: (eq) => eq.id,
|
|
getTitle: (eq) => '${eq.brand ?? ''} ${eq.model ?? ''}'.trim(),
|
|
getSubtitle: (eq) {
|
|
final details = <String>[];
|
|
|
|
// Marque
|
|
if (eq.brand != null && eq.brand!.isNotEmpty) {
|
|
details.add('Marque: ${eq.brand}');
|
|
}
|
|
|
|
// Modèle
|
|
if (eq.model != null && eq.model!.isNotEmpty) {
|
|
details.add('Modèle: ${eq.model}');
|
|
}
|
|
|
|
// Catégorie
|
|
details.add('Catégorie: ${_getCategoryLabel(eq.category)}');
|
|
|
|
return details;
|
|
},
|
|
format: format,
|
|
);
|
|
}
|
|
|
|
// Pour petites et moyennes étiquettes, juste ID + marque/modèle
|
|
return UnifiedPDFGeneratorService.generateAdvancedQRCodesPDF(
|
|
items: equipmentList,
|
|
getId: (eq) => eq.id,
|
|
getTitle: (eq) => '${eq.brand ?? ''} ${eq.model ?? ''}'.trim(),
|
|
getSubtitle: null,
|
|
format: format,
|
|
);
|
|
}
|
|
|
|
static String _getCategoryLabel(EquipmentCategory category) {
|
|
switch (category) {
|
|
case EquipmentCategory.lighting:
|
|
return 'Lumière';
|
|
case EquipmentCategory.sound:
|
|
return 'Son';
|
|
case EquipmentCategory.video:
|
|
return 'Vidéo';
|
|
case EquipmentCategory.effect:
|
|
return 'Effets';
|
|
case EquipmentCategory.structure:
|
|
return 'Structure';
|
|
case EquipmentCategory.cable:
|
|
return 'Câble';
|
|
case EquipmentCategory.consumable:
|
|
return 'Consommable';
|
|
case EquipmentCategory.other:
|
|
return 'Autre';
|
|
}
|
|
}
|
|
}
|
|
|