This commit introduces a complete overhaul of how equipment is assigned to events, focusing on an enhanced user experience, advanced selection capabilities, and robust conflict detection.
**Key Features & Enhancements:**
- **Advanced Equipment Selection UI (`EquipmentSelectionDialog`):**
- New full-screen dialog to select equipment and containers ("boîtes") for an event.
- Hierarchical view showing containers and a flat list of all individual equipment.
- Real-time search and filtering by equipment category.
- Side panel summarizing the current selection and providing recommendations for containers based on selected equipment.
- Supports quantity selection for consumables and cables.
- **Conflict Detection & Management (`EventAvailabilityService`):**
- A new service (`EventAvailabilityService`) checks for equipment availability against other events based on the selected date range.
- The selection dialog visually highlights equipment and containers with scheduling conflicts (e.g., already used, partially unavailable).
- A dedicated conflict resolution dialog (`EquipmentConflictDialog`) appears if conflicting items are selected, allowing the user to either remove them or force the assignment.
- **Integrated Event Form (`EventAssignedEquipmentSection`):**
- The event creation/editing form now includes a new section for managing assigned equipment.
- It clearly displays assigned containers and standalone equipment, showing the composition of each container.
- Integrates the new selection dialog, ensuring all assignments are checked for conflicts before being saved.
- **Event Preparation & Return Workflow (`EventPreparationPage`):**
- New page (`EventPreparationPage`) for managing the check-out (preparation) and check-in (return) of equipment for an event.
- Provides a checklist of all assigned equipment.
- Users can validate each item, with options to "validate all" or finalize with missing items.
- Includes a dialog (`MissingEquipmentDialog`) to handle discrepancies.
- Supports tracking returned quantities for consumables.
**Data Model and Other Changes:**
- The `EventModel` now includes `assignedContainers` to explicitly link containers to an event.
- `EquipmentAssociatedEventsSection` on the equipment detail page is now functional, displaying current, upcoming, and past events for that item.
- Added deployment and versioning scripts (`scripts/deploy.js`, `scripts/increment_version.js`, `scripts/toggle_env.js`) to automate the release process.
- Introduced an application version display in the main drawer (`AppVersion`).
72 lines
2.2 KiB
JavaScript
72 lines
2.2 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
/**
|
|
* Script de déploiement automatique pour Firebase Hosting
|
|
* - Bascule en mode PRODUCTION
|
|
* - Incrémente la version
|
|
* - Build l'application Flutter pour le web
|
|
* - Déploie sur Firebase Hosting
|
|
* - Rebascule en mode DÉVELOPPEMENT
|
|
*/
|
|
|
|
const { execSync } = require('child_process');
|
|
const { incrementVersion } = require('./increment_version');
|
|
const { setProductionMode, setDevelopmentMode } = require('./toggle_env');
|
|
|
|
console.log('🚀 Démarrage du déploiement Firebase Hosting...\n');
|
|
|
|
// Étape 0: Basculer en mode production
|
|
console.log('🔒 Étape 0/4: Basculement en mode PRODUCTION');
|
|
if (!setProductionMode()) {
|
|
console.error('❌ Impossible de basculer en mode production');
|
|
process.exit(1);
|
|
}
|
|
console.log('');
|
|
|
|
// Étape 1: Incrémenter la version
|
|
console.log('📝 Étape 1/4: Incrémentation de la version');
|
|
const newVersion = incrementVersion();
|
|
console.log('');
|
|
|
|
// Étape 2: Build Flutter pour le web
|
|
console.log('🔨 Étape 2/4: Build Flutter Web');
|
|
try {
|
|
execSync('flutter build web --release', {
|
|
stdio: 'inherit',
|
|
cwd: process.cwd()
|
|
});
|
|
console.log('✅ Build terminé avec succès\n');
|
|
} catch (error) {
|
|
console.error('❌ Erreur lors du build Flutter');
|
|
// Rebascule en mode dev avant de quitter
|
|
setDevelopmentMode();
|
|
process.exit(1);
|
|
}
|
|
|
|
// Étape 3: Déploiement Firebase
|
|
console.log('🌐 Étape 3/4: Déploiement sur Firebase Hosting');
|
|
try {
|
|
execSync('firebase deploy --only hosting', {
|
|
stdio: 'inherit',
|
|
cwd: process.cwd()
|
|
});
|
|
console.log('\n✅ Déploiement terminé avec succès!');
|
|
console.log(`🎉 Version ${newVersion} déployée sur Firebase Hosting`);
|
|
} catch (error) {
|
|
console.error('❌ Erreur lors du déploiement Firebase');
|
|
// Rebascule en mode dev avant de quitter
|
|
setDevelopmentMode();
|
|
process.exit(1);
|
|
}
|
|
|
|
// Étape 4: Rebascule en mode développement
|
|
console.log('\n🔓 Étape 4/4: Retour en mode DÉVELOPPEMENT');
|
|
if (!setDevelopmentMode()) {
|
|
console.warn('⚠️ Impossible de rebascule en mode développement');
|
|
console.warn('⚠️ Exécutez manuellement: npm run env:dev');
|
|
} else {
|
|
console.log('✅ Mode développement restauré');
|
|
}
|
|
|
|
console.log('\n✨ Processus de déploiement terminé!');
|