4.8 KiB
4.8 KiB
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
# 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
- Accéder à la page
/staff/contrats/[id] - Cliquer sur le bouton "Créer le PDF"
- Attendre la génération (status "Génération...")
- 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
- Test avec un contrat valide avec toutes les données
- Test avec données manquantes (salarié, organisation)
- Test d'authentification (utilisateur non connecté, non-staff)
- Test de timeout PDFMonkey
- 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.