107 lines
No EOL
4.8 KiB
Markdown
107 lines
No EOL
4.8 KiB
Markdown
# Génération de PDF de contrats CDDU via PDFMonkey
|
|
|
|
Cette implémentation ajoute la fonctionnalité de génération de PDF pour les contrats CDDU directement depuis l'interface staff, en remplaçant la logique Lambda AWS par un endpoint Next.js API.
|
|
|
|
## Fichiers créés/modifiés
|
|
|
|
### 1. Endpoint API - `/app/api/contrats/[id]/generate-pdf/route.ts`
|
|
- **Réplique la logique de la Lambda AWS** avec les adaptations pour Next.js
|
|
- **Récupère les données** depuis Supabase (tables : `cddu_contracts`, `organization_details`, `salaries`, `productions`)
|
|
- **Mappe les données** selon le CSV fourni pour les transformer au format PDFMonkey
|
|
- **Gère le polling** pour attendre la génération du PDF
|
|
- **Retourne l'URL de téléchargement** du PDF généré
|
|
|
|
### 2. Composant UI - `/components/staff/contracts/ContractEditor.tsx`
|
|
- **Bouton "Créer le PDF"** ajouté dans l'en-tête
|
|
- **État de loading** pendant la génération
|
|
- **Gestion des erreurs** avec toast notifications
|
|
- **Ouverture automatique** du PDF dans un nouvel onglet
|
|
|
|
### 3. Variables d'environnement - `.env.example`
|
|
- **PDFMONKEY_URL** : URL de l'API PDFMonkey
|
|
- **PDFMONKEY_API_KEY** : Clé API PDFMonkey
|
|
|
|
## Mapping des données (selon le CSV fourni)
|
|
|
|
| Donnée Lambda (PDFMonkey) | Table Supabase | Colonne Supabase | Transformation |
|
|
|---------------------------|----------------|------------------|----------------|
|
|
| `structure_name` | `organization_details` | `structure` | ✓ |
|
|
| `structure_adresse` | `organization_details` | `adresse` | ✓ |
|
|
| `structure_cpville` | `organization_details` | `cp` | ✓ |
|
|
| `structure_ville` | `organization_details` | `ville` | ✓ |
|
|
| `structure_siret` | `organization_details` | `siret` | ✓ |
|
|
| `structure_licence` | `organization_details` | `licence_spectacles` | ✓ |
|
|
| `structure_spectacle` | `organization_details` | `structure_a_spectacles` | Boolean → string |
|
|
| `forme_juridique` | `organization_details` | `forme_juridique` | ✓ |
|
|
| `structure_signataire` | `organization_details` | `prenom_signataire + nom_signataire` | Concaténation |
|
|
| `structure_signatairequalite` | `organization_details` | `qualite_signataire` | ✓ |
|
|
| `delegation` | `organization_details` | `delegation_signature` | Boolean → string |
|
|
| `employee_firstname` | `salaries` | `prenom` | ✓ |
|
|
| `employee_lastname` | `salaries` | `nom` | ✓ |
|
|
| `employee_dob` | `salaries` | `date_naissance` | Format DD/MM/YYYY |
|
|
| `date_debut` | `cddu_contracts` | `start_date` | Format DD/MM/YYYY |
|
|
| `date_fin` | `cddu_contracts` | `end_date` | Format DD/MM/YYYY |
|
|
| `salaire_brut` | `cddu_contracts` | `brut` | Format monétaire français |
|
|
| ... | ... | ... | ... |
|
|
|
|
## Configuration requise
|
|
|
|
### Variables d'environnement
|
|
```env
|
|
# PDFMonkey Configuration
|
|
PDFMONKEY_URL=https://api.pdfmonkey.io/api/v1/documents
|
|
PDFMONKEY_API_KEY=your-pdfmonkey-api-key
|
|
```
|
|
|
|
### Template PDFMonkey
|
|
- **Template ID** : `736E1A5F-BBA1-4D3E-91ED-A6184479B58D` (identique à la Lambda)
|
|
|
|
## Utilisation
|
|
|
|
1. **Accéder** à la page `/staff/contrats/[id]`
|
|
2. **Cliquer** sur le bouton "Créer le PDF"
|
|
3. **Attendre** la génération (status "Génération...")
|
|
4. **Le PDF** s'ouvre automatiquement dans un nouvel onglet
|
|
|
|
## Différences avec la Lambda
|
|
|
|
### ✅ Fonctionnalités conservées
|
|
- Même logique de récupération des données
|
|
- Même mapping vers PDFMonkey
|
|
- Même template ID PDFMonkey
|
|
- Même logique de polling pour attendre la génération
|
|
|
|
### ⚠️ Fonctionnalités non implémentées
|
|
- **Upload vers S3** : non implémenté (le PDF est accessible via l'URL PDFMonkey)
|
|
- **Webhook WebDAV** : non implémenté
|
|
- **Sauvegarde du fichier** : non implémentée
|
|
|
|
### 🔄 Adaptations
|
|
- **Authentification** : Utilise l'auth Supabase au lieu d'AWS Cognito
|
|
- **Base de données** : Utilise Supabase au lieu d'Airtable
|
|
- **Interface** : Intégré dans l'interface existante au lieu d'être déclenché par une URL externe
|
|
|
|
## Sécurité
|
|
|
|
- ✅ **Vérification d'authentification** (utilisateur connecté)
|
|
- ✅ **Vérification des permissions** (accès staff requis)
|
|
- ✅ **Validation des données** (contrat, organisation, salarié doivent exister)
|
|
- ✅ **Variables d'environnement** sécurisées côté serveur
|
|
|
|
## Gestion d'erreurs
|
|
|
|
- **Contrat non trouvé** : Retourne 404
|
|
- **Données manquantes** : Retourne 404 avec message explicite
|
|
- **Erreur PDFMonkey** : Retourne 500 avec détails
|
|
- **Erreur de polling** : Timeout après 10 tentatives
|
|
- **Interface utilisateur** : Toast notifications pour informer l'utilisateur
|
|
|
|
## Tests recommandés
|
|
|
|
1. **Test avec un contrat valide** avec toutes les données
|
|
2. **Test avec données manquantes** (salarié, organisation)
|
|
3. **Test d'authentification** (utilisateur non connecté, non-staff)
|
|
4. **Test de timeout** PDFMonkey
|
|
5. **Test d'erreur API** PDFMonkey
|
|
|
|
Cette implémentation maintient la compatibilité avec votre système PDFMonkey existant tout en s'intégrant parfaitement dans votre application Next.js. |