# Système de Mise à Jour Automatique des Statuts d'Événements

## Vue d'ensemble

Le système met automatiquement à jour le statut des événements en fonction de leurs dates, sans intervention manuelle.

## Cycle de vie des événements

```
upcoming → ongoing → completed
   ↓          ↓
cancelled  cancelled
```

### Statuts disponibles

1. **upcoming** : Événement à venir (date future)
2. **ongoing** : Événement en cours (date = aujourd'hui ou passée, mais pas terminé)
3. **completed** : Événement terminé (date de fin passée)
4. **cancelled** : Événement annulé (manuel uniquement)

## Règles de mise à jour automatique

### 1. De "upcoming" vers "ongoing"
Un événement passe automatiquement de `upcoming` à `ongoing` quand :
- La date de l'événement (`event_date`) est égale ou antérieure à aujourd'hui
- ET l'événement n'a pas de date de fin dépassée

### 2. De "upcoming" vers "completed"
Un événement passe directement de `upcoming` à `completed` quand :
- La date de l'événement est passée
- ET la date de fin (`end_date`) est également passée

### 3. De "ongoing" vers "completed"
Un événement passe de `ongoing` à `completed` quand :

**Option A - avec end_date :**
- La date de fin (`end_date`) est antérieure à aujourd'hui

**Option B - avec end_time (sans end_date) :**
- La combinaison `event_date` + `end_time` est passée
- Exemple : événement du 15/01/2026 à 14h00-16h00 → devient "completed" après 16h00

## Exécution automatique

### Commande artisan

```bash
php artisan events:update-statuses
```

### Planification automatique

La commande s'exécute **automatiquement chaque jour à 00h01** via le scheduler Laravel.

#### Configuration du cron (serveur de production)

Sur votre hébergement OVH, configurez ce cron job :

```
1 0 * * * cd /chemin/vers/votre/site && php artisan events:update-statuses >> /dev/null 2>&1
```

Ou pour que le scheduler Laravel gère toutes les tâches planifiées :

```
* * * * * cd /chemin/vers/votre/site && php artisan schedule:run >> /dev/null 2>&1
```

#### En développement local

Pour tester le scheduler en continu :
```bash
php artisan schedule:work
```

Ou exécuter manuellement :
```bash
php artisan events:update-statuses
```

## Comportement détaillé

### Exemples de mise à jour

**Cas 1 : Événement d'une journée**
```
Titre: Culte du Dimanche
Date: 05/01/2025
Heure: 09:00 - 11:00
Statut initial: upcoming

→ Le 05/01/2025 à 00:01 → ongoing
→ Le 05/01/2025 à 11:01 → completed (si end_time est renseigné)
→ Le 06/01/2025 à 00:01 → completed (si pas d'end_time)
```

**Cas 2 : Événement sur plusieurs jours**
```
Titre: Retraite Spirituelle
Date début: 10/01/2025
Date fin: 12/01/2025
Statut initial: upcoming

→ Le 10/01/2025 à 00:01 → ongoing
→ Le 13/01/2025 à 00:01 → completed
```

**Cas 3 : Événement annulé**
```
Statut: cancelled
→ Aucune mise à jour automatique
→ Reste "cancelled" indéfiniment
```

## Statistiques

Lors de l'exécution, la commande affiche :
```
✅ Update complete!
  - Events updated to 'ongoing': 5
  - Events updated to 'completed': 3
  - Total updated: 8
```

## Bonnes pratiques

1. **Renseignez les heures** : Utilisez `event_time` et `end_time` pour une gestion précise
2. **Dates de fin** : Pour les événements sur plusieurs jours, renseignez `end_date`
3. **Vérification** : Consultez régulièrement les logs pour voir les mises à jour
4. **Événements annulés** : Marquez manuellement comme "cancelled" si nécessaire

## Résolution de problèmes

### Les statuts ne se mettent pas à jour automatiquement

1. **Vérifier le cron job** :
   ```bash
   # Sur le serveur
   crontab -l
   ```

2. **Vérifier le scheduler** :
   ```bash
   php artisan schedule:list
   ```

3. **Exécuter manuellement** :
   ```bash
   php artisan events:update-statuses
   ```

4. **Vérifier les logs** :
   ```bash
   tail -f storage/logs/laravel.log
   ```

### Événement reste en "ongoing" alors qu'il est terminé

- Vérifiez que `end_date` ou `end_time` est bien renseigné
- Exécutez manuellement la commande pour forcer la mise à jour

### Événement passe à "completed" trop tôt

- Vérifiez la valeur de `end_date` ou `end_time`
- Assurez-vous que le fuseau horaire est correct dans `config/app.php`

## Impact sur les événements récurrents

Les événements récurrents suivent les mêmes règles :
- L'événement **parent** reste avec son statut d'origine
- Les **instances générées** suivent le cycle de vie normal
- Quand une instance devient "completed", la prochaine peut être en "upcoming" ou "ongoing"

## Support

Pour toute question, contactez l'équipe de développement.
