281 lines
8.1 KiB
Markdown
281 lines
8.1 KiB
Markdown
# Guide de Débogage - Récupération des Paies (Payslips)
|
|
|
|
## 🐛 Problème Observé
|
|
|
|
Lors de la génération de PDF, le payload envoyé à PDFMonkey contient un tableau `lineItems` vide :
|
|
```json
|
|
{
|
|
"nbre_paies": 0,
|
|
"lineItems": []
|
|
}
|
|
```
|
|
|
|
**Aucun log de récupération des paies n'apparaît dans la console.**
|
|
|
|
## 🔍 Logs Ajoutés
|
|
|
|
Des logs très visibles ont été ajoutés à plusieurs étapes critiques :
|
|
|
|
### 1. Récupération des Paies
|
|
```
|
|
[generate-pdf] Fetching payslips for period...
|
|
[generate-pdf] Period month: 2025-09-01
|
|
[generate-pdf] Organization ID: xxx-xxx-xxx
|
|
[generate-pdf] Payslips query result: { error: null, count: X, sample: {...} }
|
|
```
|
|
|
|
### 2. Construction des Line Items
|
|
```
|
|
═══════════════════════════════════════════════════════════
|
|
[generate-pdf] 🔍 BUILDING PDFMONKEY PAYLOAD
|
|
[generate-pdf] 📊 Payslips count: X
|
|
═══════════════════════════════════════════════════════════
|
|
[generate-pdf] 👤 Processing payslip: { payslip_id, has_contract, has_salarie, ... }
|
|
[generate-pdf] ✅ Line items built: X items
|
|
[generate-pdf] 📝 First line item: { employee_name, matricule, ... }
|
|
```
|
|
|
|
### 3. Résumé du Payload
|
|
```
|
|
═══════════════════════════════════════════════════════════
|
|
[generate-pdf] 📋 PAYLOAD SUMMARY:
|
|
[generate-pdf] Transfer reference: LOR-00001
|
|
[generate-pdf] Total net: 1234.56
|
|
[generate-pdf] Number of payslips: X
|
|
[generate-pdf] Number of line items: X
|
|
═══════════════════════════════════════════════════════════
|
|
```
|
|
|
|
### 4. Payload Final
|
|
```
|
|
═══════════════════════════════════════════════════════════
|
|
[generate-pdf] 🚀 FINAL PAYLOAD TO PDFMONKEY:
|
|
[generate-pdf] Payload prepared with X payslips
|
|
[generate-pdf] lineItems in payload: X
|
|
═══════════════════════════════════════════════════════════
|
|
[generate-pdf] ✅ Sample line item in payload: { employee_name, matricule, ... }
|
|
```
|
|
|
|
## 🧪 Procédure de Test
|
|
|
|
### 1. Relancer le serveur Next.js
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
### 2. Déclencher une génération de PDF
|
|
- Aller sur Staff → Virements de Salaires
|
|
- Cliquer sur un virement
|
|
- Cliquer sur "Générer PDF"
|
|
|
|
### 3. Observer les logs dans le terminal
|
|
|
|
Vous devriez maintenant voir **beaucoup plus de logs** avec des séparateurs visibles (`═══...`).
|
|
|
|
## 📊 Diagnostic selon les Logs
|
|
|
|
### Cas 1 : Aucun log avant PDFMonkey
|
|
**Symptôme** : Vous voyez directement `[generate-pdf] PDFMonkey response:` sans les logs précédents.
|
|
|
|
**Cause possible** :
|
|
- Le code en cache n'est pas à jour
|
|
- Hot reload n'a pas fonctionné
|
|
- Mauvais fichier exécuté
|
|
|
|
**Solution** :
|
|
1. **Arrêter complètement** Next.js (Ctrl+C)
|
|
2. Supprimer le cache :
|
|
```bash
|
|
rm -rf .next
|
|
```
|
|
3. Relancer :
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
### Cas 2 : Logs visibles mais `Payslips count: 0`
|
|
**Symptôme** :
|
|
```
|
|
[generate-pdf] 📊 Payslips count: 0
|
|
[generate-pdf] ⚠️ WARNING: Payload has no payslips!
|
|
```
|
|
|
|
**Diagnostic** :
|
|
```
|
|
[generate-pdf] Payslips query result: { error: null, count: 0, sample: null }
|
|
[generate-pdf] No payslips found for this period!
|
|
[generate-pdf] Query params: { organization_id: "xxx", period_month: "2025-09-01" }
|
|
```
|
|
|
|
**Causes possibles** :
|
|
1. **Aucune paie dans la base pour cette période/organisation**
|
|
2. **Format de date incorrect** dans `period_month`
|
|
3. **organization_id ne correspond pas**
|
|
|
|
**Vérifications** :
|
|
```sql
|
|
-- 1. Vérifier les paies existantes pour cette organisation
|
|
SELECT id, period_month, organization_id, net_amount, contract_id
|
|
FROM payslips
|
|
WHERE organization_id = 'XXX-XXX-XXX'
|
|
ORDER BY period_month DESC
|
|
LIMIT 10;
|
|
|
|
-- 2. Vérifier le format de period_month
|
|
SELECT DISTINCT period_month
|
|
FROM payslips
|
|
WHERE organization_id = 'XXX-XXX-XXX';
|
|
-- Doit être au format: 2025-09-01 (YYYY-MM-01)
|
|
|
|
-- 3. Vérifier l'organization_id du virement
|
|
SELECT org_id, period_month, num_appel
|
|
FROM salary_transfers
|
|
WHERE id = 'ID_DU_VIREMENT';
|
|
```
|
|
|
|
### Cas 3 : Payslips trouvées mais lineItems vide
|
|
**Symptôme** :
|
|
```
|
|
[generate-pdf] 📊 Payslips count: 5
|
|
[generate-pdf] ✅ Line items built: 0 items
|
|
```
|
|
|
|
**Diagnostic** :
|
|
```
|
|
[generate-pdf] 👤 Processing payslip: {
|
|
payslip_id: "xxx",
|
|
has_contract: false, ← Problème ici
|
|
has_salarie: false,
|
|
employee_name: "",
|
|
net_amount: 1234.56
|
|
}
|
|
```
|
|
|
|
**Cause** : Les paies n'ont pas de contrats liés (relation `cddu_contracts`)
|
|
|
|
**Vérifications** :
|
|
```sql
|
|
-- Vérifier les relations des paies
|
|
SELECT
|
|
p.id as payslip_id,
|
|
p.contract_id,
|
|
p.net_amount,
|
|
c.id as contract_exists,
|
|
c.employee_id,
|
|
s.nom,
|
|
s.prenom
|
|
FROM payslips p
|
|
LEFT JOIN cddu_contracts c ON p.contract_id = c.id
|
|
LEFT JOIN salaries s ON c.employee_id = s.id
|
|
WHERE p.organization_id = 'XXX-XXX-XXX'
|
|
AND p.period_month = '2025-09-01'
|
|
LIMIT 10;
|
|
```
|
|
|
|
**Solution** : Corriger les relations dans la base de données.
|
|
|
|
### Cas 4 : Line items construites mais vides dans le payload
|
|
**Symptôme** :
|
|
```
|
|
[generate-pdf] ✅ Line items built: 5 items
|
|
[generate-pdf] 📝 First line item: { employee_name: "", matricule: "", montant: 0, ... }
|
|
[generate-pdf] lineItems in payload: 5
|
|
```
|
|
|
|
**Cause** : Données manquantes dans les contrats/salariés
|
|
|
|
**Vérifications** :
|
|
```sql
|
|
-- Vérifier les données des contrats
|
|
SELECT
|
|
c.id,
|
|
c.employee_matricule,
|
|
c.contract_number,
|
|
c.analytique,
|
|
c.profession,
|
|
s.nom,
|
|
s.prenom
|
|
FROM cddu_contracts c
|
|
LEFT JOIN salaries s ON c.employee_id = s.id
|
|
WHERE c.id IN (
|
|
SELECT contract_id
|
|
FROM payslips
|
|
WHERE organization_id = 'XXX-XXX-XXX'
|
|
AND period_month = '2025-09-01'
|
|
)
|
|
LIMIT 10;
|
|
```
|
|
|
|
## 🔧 Corrections Rapides
|
|
|
|
### Créer des paies de test
|
|
```sql
|
|
-- 1. Trouver un contrat existant
|
|
SELECT id, employee_id, employee_matricule
|
|
FROM cddu_contracts
|
|
WHERE org_id = 'XXX-XXX-XXX'
|
|
LIMIT 1;
|
|
|
|
-- 2. Créer une paie de test
|
|
INSERT INTO payslips (
|
|
organization_id,
|
|
contract_id,
|
|
period_month,
|
|
net_amount,
|
|
gross_amount,
|
|
pay_date,
|
|
status
|
|
) VALUES (
|
|
'XXX-XXX-XXX', -- organization_id du virement
|
|
'ID_DU_CONTRAT', -- contract_id trouvé ci-dessus
|
|
'2025-09-01', -- period_month (même que le virement)
|
|
1500.00, -- net_amount
|
|
2000.00, -- gross_amount
|
|
'2025-09-30', -- pay_date
|
|
'paid' -- status
|
|
);
|
|
```
|
|
|
|
### Vérifier le format de period_month
|
|
```sql
|
|
-- Corriger le format si nécessaire
|
|
UPDATE salary_transfers
|
|
SET period_month = DATE_TRUNC('month', period_month::date)
|
|
WHERE id = 'ID_DU_VIREMENT';
|
|
```
|
|
|
|
## 📝 Checklist de Diagnostic
|
|
|
|
- [ ] Les nouveaux logs apparaissent dans la console
|
|
- [ ] La requête de payslips est exécutée
|
|
- [ ] Des payslips sont trouvées (`count > 0`)
|
|
- [ ] Les payslips ont des contrats liés (`has_contract: true`)
|
|
- [ ] Les contrats ont des salariés liés (`has_salarie: true`)
|
|
- [ ] Les line items sont construites (`Line items built: X items`)
|
|
- [ ] Les line items contiennent des données (`employee_name` non vide)
|
|
- [ ] Le payload PDFMonkey contient les line items
|
|
- [ ] Le PDF généré contient les lignes de paie
|
|
|
|
## 🆘 Si les logs n'apparaissent toujours pas
|
|
|
|
1. **Vérifier que vous modifiez le bon fichier** :
|
|
```bash
|
|
ls -la app/api/staff/virements-salaires/generate-pdf/route.ts
|
|
```
|
|
|
|
2. **Vérifier qu'il n'y a pas de fichier en double** :
|
|
```bash
|
|
find . -name "route.ts" -path "*/generate-pdf/*"
|
|
```
|
|
|
|
3. **Forcer le rechargement** :
|
|
- Arrêter Next.js
|
|
- Supprimer `.next/`
|
|
- Relancer `npm run dev`
|
|
- Hard refresh du navigateur (Cmd+Shift+R)
|
|
|
|
4. **Vérifier la version en production** :
|
|
Si déployé sur Vercel, les logs apparaissent dans le dashboard Vercel sous "Functions Logs"
|
|
|
|
## 📅 Date de Mise à Jour
|
|
13 octobre 2025
|