# Mise à jour de la gestion des événements - StayManager

## Résumé des modifications

Cette mise à jour ajoute un nouveau champ `event_end` à la table `event_bookings` pour permettre la gestion des réservations d'événements sur plusieurs jours avec calcul automatique du montant total.

## Nouvelles fonctionnalités

### 1. Champ event_end
- **Champ ajouté** : `event_end` (DATE) dans la table `event_bookings`
- **Position** : Après le champ `event_date`
- **Fonction** : Marque la date de fin de la réservation d'événement

### 2. Calcul automatique du montant total
- **Formule** : `Montant total = Prix de la salle × Nombre de jours`
- **Exemple** : Si une salle coûte 350 000 FCFA et la réservation couvre 2 jours, le montant total sera 700 000 FCFA
- **Calcul dynamique** : Le montant se met à jour automatiquement lors de la sélection de la salle et des dates

### 3. Vérification de disponibilité améliorée
- **Période** : Vérification sur toute la période de réservation (du début à la fin)
- **Conflits** : Détection des réservations qui se chevauchent
- **Précision** : Prise en compte des dates ET des heures

## Fichiers modifiés

### Base de données
- `add_event_end_column.sql` - Script SQL pour ajouter le champ
- `update_event_bookings.php` - Script PHP pour exécuter la mise à jour

### Modèles
- `models/EventBooking.php` - Ajout des méthodes de calcul et mise à jour de la logique

### Contrôleurs
- `controllers/EventBookingController.php` - Ajout de la gestion du nouveau champ et du calcul automatique

### JavaScript
- `assets/js/event_booking_calculator.js` - Calculateur automatique côté client

### Fichiers principaux
- `event_bookings.php` - Ajout de la nouvelle action `calculate_total`

## Installation

### Étape 1 : Mettre à jour la base de données
```bash
# Accéder à votre application via le navigateur
http://localhost/StayManager/update_event_bookings.php
```

Ou exécuter directement le script SQL :
```sql
USE staymanager;
ALTER TABLE event_bookings ADD COLUMN event_end DATE AFTER event_date;
CREATE INDEX idx_event_bookings_dates ON event_bookings(event_date, event_end);
```

### Étape 2 : Vérifier les modifications
```bash
# Vérifier la structure des tables
http://localhost/StayManager/check_event_tables.php
```

### Étape 3 : Tester les nouvelles fonctionnalités
1. Créer une nouvelle réservation d'événement
2. Sélectionner une salle et des dates
3. Vérifier que le montant total se calcule automatiquement
4. Tester la vérification de disponibilité sur plusieurs jours

## Utilisation

### Création d'une réservation
1. Accéder à la page de création de réservation d'événement
2. Sélectionner la salle
3. Choisir la date de début (`event_date`)
4. Choisir la date de fin (`event_end`) - optionnel, par défaut = date de début
5. Le montant total se calcule automatiquement
6. Remplir les autres informations
7. Sauvegarder

### Modification d'une réservation
1. Accéder à la page de modification
2. Modifier les dates si nécessaire
3. Le montant total se recalcule automatiquement
4. Sauvegarder

### Vérification de disponibilité
- Le système vérifie automatiquement les conflits sur toute la période
- Les réservations existantes sont prises en compte
- Les messages d'erreur indiquent les conflits détectés

## Calcul du nombre de jours

La formule utilisée pour calculer le nombre de jours :
```php
$start = new DateTime($startDate);
$end = new DateTime($endDate);
$interval = $start->diff($end);
$days = $interval->days + 1; // +1 pour inclure le jour de début
```

**Exemples :**
- Date début : 2024-01-15, Date fin : 2024-01-15 → 1 jour
- Date début : 2024-01-15, Date fin : 2024-01-16 → 2 jours
- Date début : 2024-01-15, Date fin : 2024-01-17 → 3 jours

## Compatibilité

### Données existantes
- Les réservations existantes conservent leur fonctionnement actuel
- Le champ `event_end` sera NULL pour les anciennes réservations
- Option pour mettre à jour les anciennes réservations (event_end = event_date)

### Interface utilisateur
- Les formulaires existants continuent de fonctionner
- Le nouveau champ est optionnel
- Calcul automatique en arrière-plan

## Sécurité

### Validation des données
- Vérification que la date de fin n'est pas antérieure à la date de début
- Validation des formats de date
- Protection contre les injections SQL

### Permissions
- Seuls les utilisateurs avec la permission 'events' peuvent accéder aux nouvelles fonctionnalités
- Vérification des permissions à chaque action

## Dépannage

### Problèmes courants

1. **Erreur "Champ event_end déjà existe"**
   - Solution : Le champ existe déjà, continuer avec l'étape suivante

2. **Calcul incorrect du montant total**
   - Vérifier que le prix de la salle est correct dans la table `event_rooms`
   - Vérifier les formats de date (YYYY-MM-DD)

3. **Vérification de disponibilité incorrecte**
   - Vérifier que les dates sont au bon format
   - Vérifier les contraintes de clés étrangères

### Logs
- Les erreurs sont loggées dans les fichiers de log de l'application
- Vérifier les logs pour diagnostiquer les problèmes

## Support

Pour toute question ou problème :
1. Vérifier ce document
2. Consulter les logs d'erreur
3. Tester avec des données simples
4. Contacter l'équipe de développement si nécessaire

## Version
- **Version** : 1.0
- **Date** : 2024
- **Compatibilité** : PHP 7.4+, MySQL 5.7+








