# Téléchargement de factures en PDF

## Problèmes résolus

### 1. "undefined" après le montant
**Cause :** L'API retournait `date` et `etat`, mais le frontend cherchait `date_facture` et `statut`.

**Solution :** Modification de l'API pour renvoyer les bons noms de champs :
- `date` → `date_facture`
- `echeance` → `date_echeance`
- `etat` → `statut`

### 2. Pas de possibilité de télécharger les factures en PDF

**Solution :** Implémentation complète du système de téléchargement de factures.

## Modifications apportées

### 1. API de téléchargement (`UniGest/api/telecharger-facture.php`)

Nouvelle API sécurisée pour générer et télécharger les factures en PDF **directement embarqué en base64**.

**Endpoint :** `GET /api/telecharger-facture.php?id={facture_id}`

**Paramètres :**
- `id` : ID de la facture à télécharger

**Headers requis :**
- `Authorization: Bearer {token}`

**Sécurité :**
- Vérification du token d'authentification
- Vérification que l'utilisateur est maire de la commune liée à la facture
- Accès refusé si l'utilisateur n'a pas les droits

**Réponse (succès) :**
```json
{
  "success": true,
  "message": "PDF généré avec succès",
  "data": {
    "facture_id": 123,
    "numero": "2024-001",
    "libelle": "Cotisation annuelle",
    "commune": "Exemple-Ville",
    "montant_ttc": 120.00,
    "pdf_filename": "Facture_2024-001.pdf",
    "pdf_base64": "JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBlL1BhZ2UvUGFyZW50IDIgMC...",
    "pdf_size": 45678
  }
}
```

**Avantages de l'approche base64 :**
- ✅ Pas besoin d'exposer une URL publique
- ✅ Le PDF est directement disponible dans la réponse JSON
- ✅ Meilleure sécurité (pas d'accès direct via URL)
- ✅ Fonctionne même hors connexion si le JSON est mis en cache
- ✅ Compatibilité totale avec Cordova InAppBrowser

### 2. Correction de l'API mes-communes (`UniGest/api/mes-communes.php`)

Modification des noms de champs retournés pour les factures :

```php
'date_facture' => $facture['DATE'] ?? '',
'date_echeance' => $facture['ECHEANCE'] ?? '',
'statut' => $facture['ETAT'] ?? 'En cours',
```

### 3. Interface utilisateur (`www/mes-communes.html`)

#### a) Ajout du bouton de téléchargement

Chaque facture affiche maintenant un bouton "Télécharger PDF" :

```html
<button class="btn-download-facture" data-facture-id="${f.id}">
    <svg>...</svg>
    Télécharger PDF
</button>
```

#### b) Styles CSS

Styles ajoutés pour le bouton :
- Design moderne avec dégradé violet
- Animation au survol
- État "downloading" avec spinner
- Positionnement en bas à droite de chaque facture

#### c) Fonctionnalité JavaScript

Fonction `telechargerFacture()` qui :
1. Vérifie la connexion réseau
2. Appelle l'API de téléchargement
3. Récupère l'URL du PDF
4. Ouvre le PDF dans un nouvel onglet (navigateur) ou avec InAppBrowser (Cordova)
5. Affiche un message de succès/erreur

## Utilisation du système existant

Le système utilise le fichier `facture_template.php` déjà existant dans UniGest pour générer le contenu HTML, puis :
- **Dompdf** convertit le HTML en PDF
- Le PDF est encodé en **base64** et inclus dans la réponse JSON
- Le JavaScript côté client décode le base64 et crée un **Blob** pour l'affichage/téléchargement

### Avantages de cette approche :
✅ **Sécurité renforcée** - Pas d'URL publique exposée  
✅ **Performance** - Un seul appel API (pas de redirection)  
✅ **Compatibilité** - Fonctionne sur mobile (Cordova) et navigateur  
✅ **Cache-friendly** - Le PDF peut être stocké localement  
✅ **Contrôle total** - Gestion complète du nom de fichier et du téléchargement

## Flux de téléchargement

```
┌─────────────────────────────────────────────────────────────┐
│ 1. Utilisateur clique sur "Télécharger PDF"                │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│ 2. JavaScript appelle /api/telecharger-facture.php         │
│    avec le token d'authentification                         │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│ 3. API vérifie :                                            │
│    - Token valide                                           │
│    - Utilisateur est maire de la commune                    │
│    - Facture existe et appartient à la commune              │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│ 4. API génère le PDF avec Dompdf :                         │
│    - Charge le template facture_template.php               │
│    - Génère le PDF en mémoire                               │
│    - Encode le PDF en base64                                │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│ 5. JavaScript reçoit le PDF en base64 :                    │
│    - Décode le base64 en Blob                               │
│    - Crée une URL blob temporaire                           │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│ 6. Ouverture du PDF :                                      │
│    - Cordova : InAppBrowser avec URL blob                  │
│    - Navigateur : Téléchargement automatique               │
└─────────────────────────────────────────────────────────────┘
```

## Fichiers modifiés

1. **UniGest/api/telecharger-facture.php** (nouveau)
   - API sécurisée pour générer l'URL de téléchargement

2. **UniGest/api/mes-communes.php**
   - Correction des noms de champs (`date_facture`, `date_echeance`, `statut`)

3. **www/mes-communes.html**
   - Ajout du bouton de téléchargement
   - Styles CSS pour le bouton
   - Fonction JavaScript `telechargerFacture()`
   - Gestion des événements de clic

## Tests

### Test 1 : Affichage des factures
✅ Les factures s'affichent sans "undefined"
✅ Le montant est correctement formaté : "120.00€ TTC"
✅ Le statut est affiché avec la bonne couleur

### Test 2 : Téléchargement d'une facture
1. Cliquer sur "Télécharger PDF"
2. Vérifier que le bouton affiche "Téléchargement..."
3. Vérifier qu'un nouvel onglet s'ouvre avec le PDF
4. Vérifier que le bouton revient à son état normal

### Test 3 : Sécurité
1. Essayer de télécharger une facture d'une autre commune
   - Résultat attendu : Erreur 403 "Accès refusé"
2. Essayer sans token
   - Résultat attendu : Erreur 401 "Non authentifié"

## Gestion des erreurs

Le système gère les erreurs suivantes :
- ❌ **Pas de connexion internet** : "Pas de connexion internet"
- ❌ **Non authentifié** : "Non authentifié"
- ❌ **Facture non trouvée** : "Facture non trouvée ou accès refusé"
- ❌ **Erreur serveur** : "Impossible de télécharger la facture"

## Notes importantes

- Les factures sont générées à la volée par `printFact.php`
- Le PDF est servi directement par le serveur (pas de stockage côté client)
- Le système vérifie que l'utilisateur a les droits avant de générer le PDF
- Compatible navigateur web et application Cordova
