270 lines
8.6 KiB
Markdown
270 lines
8.6 KiB
Markdown
# 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=<votre_clé>
|
|
AWS_REGION=eu-west-3
|
|
AWS_ACCESS_KEY_ID=<votre_clé>
|
|
AWS_SECRET_ACCESS_KEY=<votre_clé>
|
|
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 = '<votre_org_id>'
|
|
AND DATE_TRUNC('month', payment_date) = '<votre_period_month>'::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 = '<id_du_virement_créé>'
|
|
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/<org_id>/`
|
|
- Vérifier que le fichier PDF existe
|
|
- Format du nom : `<transfer_id>-<timestamp>.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 <token>" \
|
|
-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 <token>" \
|
|
-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.
|