# Guide de test - Virements Salaires Staff ## Prérequis 1. **Être connecté en tant qu'utilisateur Staff** - Votre compte doit avoir `is_staff = true` dans la table `users` 2. **Avoir des données de test** - Au moins une organisation dans `organizations` - Des contrats CDDU dans `cddu_contracts` avec : - `org_id` correspondant à l'organisation - `payment_date` définie - `employee_first_name`, `employee_last_name`, `employee_iban`, `net_amount` remplis 3. **Variables d'environnement configurées** ```env PDFMONKEY_URL=https://api.pdfmonkey.io/api/v1/documents PDFMONKEY_API_KEY= AWS_REGION=eu-west-3 AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_S3_BUCKET=nouvel-espace-paie ``` ## Étapes de test ### 1. Accéder à la page - URL : `/staff/virements-salaires` - Vérifier que la page s'affiche correctement - Vérifier que le bouton "Créer un virement" est visible en haut à droite ### 2. Créer un nouveau virement #### 2.1 Ouvrir le modal - Cliquer sur le bouton "+ Créer un virement" - Le modal doit s'ouvrir avec le formulaire #### 2.2 Remplir le formulaire - **Organisation** : Sélectionner une organisation existante - **Période (mois)** : Sélectionner un mois (ex: 2025-01) - Vérifier que le "Libellé de la période" se remplit automatiquement - **Date d'échéance** : Sélectionner une date (ex: 2025-01-15) - **Mode** : Sélectionner SEPA, VIREMENT ou odentas_reverse - **Total Net** (optionnel) : Laisser vide pour l'instant - **Notes** (optionnel) : Ajouter une note de test #### 2.3 Valider la création - Cliquer sur "Créer" - Vérifier l'alerte de succès - Vérifier que le modal se ferme - Vérifier que le nouveau virement apparaît dans le tableau ### 3. Générer le PDF #### 3.1 Vérifier les contrats de test Avant de générer, assurez-vous qu'il existe des contrats pour le mois sélectionné. **Exemple de requête SQL pour vérifier :** ```sql SELECT id, employee_first_name, employee_last_name, employee_iban, payment_date, net_amount FROM cddu_contracts WHERE org_id = '' AND DATE_TRUNC('month', payment_date) = ''::date; ``` #### 3.2 Générer le PDF - Dans la colonne "Actions", cliquer sur "Générer PDF" - Confirmer dans la boîte de dialogue - Le bouton doit afficher "Génération..." - Attendre la fin de la génération (peut prendre 10-30 secondes) - Vérifier l'alerte de succès avec le nombre de contrats #### 3.3 Vérifier le résultat - Le bouton doit maintenant afficher "Regénérer PDF" - Dans la colonne "Feuille d'appel", l'URL du PDF doit être visible - Cliquer sur l'URL pour ouvrir le PDF dans un nouvel onglet #### 3.4 Vérifier le contenu du PDF Le PDF doit contenir : - Le nom de l'organisation - La période (ex: "Janvier 2025") - La date d'échéance formatée - Le total net de tous les contrats - Un tableau avec tous les contrats : - Nom et prénom de l'employé - IBAN - Montant net - Date de paiement ### 4. Tests de cas limites #### 4.1 Période sans contrats - Créer un virement pour un mois sans contrats - Générer le PDF - Vérifier que le PDF est créé avec 0 contrats - Le total net doit être 0,00 #### 4.2 Regénération - Pour un virement déjà généré, cliquer sur "Regénérer PDF" - Vérifier qu'un nouveau PDF est créé - L'URL dans `callsheet_url` doit être mise à jour #### 4.3 Validation du formulaire - Ouvrir le modal de création - Essayer de soumettre sans remplir les champs obligatoires - Le bouton "Créer" doit être désactivé - Remplir uniquement certains champs → le bouton doit rester désactivé ### 5. Tests des filtres existants #### 5.1 Filtrer par organisation - Utiliser le filtre "Organisation" en haut de la page - Vérifier que seuls les virements de l'organisation sélectionnée sont affichés #### 5.2 Recherche textuelle - Utiliser le champ de recherche - Taper le nom d'une période ou une note - Vérifier que les résultats sont filtrés ### 6. Vérifications en base de données #### 6.1 Vérifier l'enregistrement créé ```sql SELECT * FROM salary_transfers WHERE id = '' ORDER BY created_at DESC; ``` Vérifier que : - Tous les champs sont correctement remplis - `callsheet_url` est NULL avant génération - `callsheet_url` contient une URL S3 après génération #### 6.2 Vérifier le fichier S3 - Se connecter à la console AWS S3 - Naviguer vers le bucket `nouvel-espace-paie` - Dossier : `virements-salaires//` - Vérifier que le fichier PDF existe - Format du nom : `-.pdf` ### 7. Tests d'erreurs #### 7.1 Organisation inexistante Essayer de créer un virement avec un `org_id` invalide via l'API (tests manuels ou Postman) : ```bash curl -X POST http://localhost:3000/api/staff/virements-salaires/create \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{ "org_id": "00000000-0000-0000-0000-000000000000", "period_month": "2025-01", "deadline": "2025-01-15", "mode": "SEPA" }' ``` Doit retourner une erreur 404 "Organization not found" #### 7.2 Virement inexistant Essayer de générer un PDF pour un `salary_transfer_id` invalide : ```bash curl -X POST http://localhost:3000/api/staff/virements-salaires/generate-pdf \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{ "salary_transfer_id": "00000000-0000-0000-0000-000000000000" }' ``` Doit retourner une erreur 404 "Salary transfer not found" #### 7.3 Authentification - Se déconnecter - Essayer d'accéder à `/staff/virements-salaires` - Doit afficher "Accès refusé" #### 7.4 Utilisateur non-staff - Se connecter avec un compte non-staff (`is_staff = false`) - Essayer d'accéder à `/staff/virements-salaires` - Doit afficher "Accès refusé - Cette page est réservée au Staff" ## Checklist finale - [ ] Création d'un virement réussie - [ ] Modal se ferme après création - [ ] Nouveau virement visible dans la liste - [ ] Génération PDF réussie (avec contrats) - [ ] URL du PDF correcte dans le tableau - [ ] PDF téléchargeable et contenu correct - [ ] Regénération PDF réussie - [ ] Filtres fonctionnent correctement - [ ] Cas sans contrats géré - [ ] Validation du formulaire fonctionne - [ ] Authentification et autorisation Staff vérifiées - [ ] Fichiers S3 créés correctement - [ ] Base de données mise à jour correctement ## Logs à surveiller ### Console navigateur - Vérifier qu'il n'y a pas d'erreurs JavaScript - Vérifier les logs de Supabase Realtime ### Logs serveur (Next.js) ``` [staff/virements-salaires] Organizations count: X [staff/virements-salaires] supabase fetch salary_transfers result count: X ``` ### Console réseau (DevTools) - Vérifier les appels API : - `POST /api/staff/virements-salaires/create` → 200 - `POST /api/staff/virements-salaires/generate-pdf` → 200 - Vérifier les temps de réponse (génération PDF peut prendre 10-30s) ## En cas de problème ### Le PDF ne se génère pas 1. Vérifier les logs serveur pour voir l'erreur PDFMonkey ou S3 2. Vérifier que `PDFMONKEY_API_KEY` est correcte 3. Vérifier que le template ID `F4BCB5FF-1AB1-4CEE-B57F-82A6B9893E9E` existe 4. Vérifier les credentials AWS ### Les contrats ne sont pas inclus 1. Vérifier que les contrats ont une `payment_date` non nulle 2. Vérifier que le mois de `payment_date` correspond à `period_month` 3. Exemple : si `period_month = "2025-01-01"`, les contrats avec `payment_date` entre "2025-01-01" et "2025-01-31" seront inclus ### Le modal ne s'ouvre pas 1. Vérifier la console JavaScript pour des erreurs 2. Vérifier que le composant `SalaryTransfersGrid` est bien chargé (client-side) ### Realtime ne fonctionne pas 1. Vérifier que la table `salary_transfers` est publiée pour Realtime dans Supabase 2. Vérifier les RLS policies 3. Recharger la page manuellement après création/génération ## Résolution de problèmes courants ### "Missing PDFMONKEY_API_KEY" Ajouter la variable dans `.env.local` : ```env PDFMONKEY_API_KEY=votre_clé_api ``` ### "Failed to update salary_transfers" Vérifier les RLS policies sur la table `salary_transfers` : ```sql -- Policy pour permettre aux staff de mettre à jour CREATE POLICY "Staff can update salary_transfers" ON salary_transfers FOR UPDATE USING ( EXISTS ( SELECT 1 FROM users WHERE users.id = auth.uid() AND users.is_staff = true ) ); ``` ### Timeout lors de la génération - Augmenter le nombre de tentatives de polling dans `generate-pdf/route.ts` (ligne `maxAttempts`) - Augmenter l'intervalle de polling (paramètre `intervalMs`) ### URL S3 incorrecte Vérifier que `AWS_REGION` correspond à la région du bucket S3.