feat: Refactor event equipment management with advanced selection and conflict detection
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`).
This commit is contained in:
59
em2rp/scripts/increment_version.js
Normal file
59
em2rp/scripts/increment_version.js
Normal file
@@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Script pour incrémenter automatiquement le numéro de version patch
|
||||
* lors du déploiement Firebase Hosting
|
||||
*/
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const VERSION_FILE = path.join(__dirname, '../lib/config/app_version.dart');
|
||||
|
||||
function incrementVersion() {
|
||||
try {
|
||||
// Lire le fichier
|
||||
let content = fs.readFileSync(VERSION_FILE, 'utf8');
|
||||
|
||||
// Extraire la version actuelle
|
||||
const versionRegex = /static const String version = '(\d+)\.(\d+)\.(\d+)';/;
|
||||
const match = content.match(versionRegex);
|
||||
|
||||
if (!match) {
|
||||
console.error('❌ Impossible de trouver la version dans le fichier');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const major = parseInt(match[1]);
|
||||
const minor = parseInt(match[2]);
|
||||
const patch = parseInt(match[3]);
|
||||
|
||||
// Incrémenter le patch
|
||||
const newPatch = patch + 1;
|
||||
const newVersion = `${major}.${minor}.${newPatch}`;
|
||||
|
||||
// Remplacer dans le fichier
|
||||
const newContent = content.replace(
|
||||
versionRegex,
|
||||
`static const String version = '${newVersion}';`
|
||||
);
|
||||
|
||||
// Écrire le fichier
|
||||
fs.writeFileSync(VERSION_FILE, newContent, 'utf8');
|
||||
|
||||
console.log(`✅ Version incrémentée: ${match[0].match(/\d+\.\d+\.\d+/)[0]} → ${newVersion}`);
|
||||
|
||||
return newVersion;
|
||||
} catch (error) {
|
||||
console.error('❌ Erreur lors de l\'incrémentation:', error.message);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
// Exécuter si appelé directement
|
||||
if (require.main === module) {
|
||||
incrementVersion();
|
||||
}
|
||||
|
||||
module.exports = { incrementVersion };
|
||||
|
||||
Reference in New Issue
Block a user