espace-paie-odentas/FIX_NUM_APPEL_UPDATE.md

159 lines
4.4 KiB
Markdown

# Correctif : Mise à jour du Numéro d'Appel
## 🐛 Problème Identifié
Le champ `num_appel` n'était pas pris en compte lors de la modification d'un virement de salaire. Le numéro saisi dans le formulaire de modification n'était pas enregistré en base de données.
## ✅ Solution Appliquée
### 1. Frontend (`components/staff/SalaryTransfersGrid.tsx`)
**Avant** :
```typescript
const payload = {
period_month: periodDate,
period_label: editForm.period_label,
deadline: editForm.deadline,
mode: editForm.mode,
total_net: editForm.total_net,
notes: editForm.notes,
// ❌ num_appel manquant
};
```
**Après** :
```typescript
const payload = {
period_month: periodDate,
period_label: editForm.period_label,
deadline: editForm.deadline,
mode: editForm.mode,
num_appel: editForm.num_appel, // ✅ Ajouté
total_net: editForm.total_net,
notes: editForm.notes,
};
console.log("[handleUpdateTransfer] Payload:", payload); // ✅ Log ajouté
```
### 2. Backend (`app/api/staff/virements-salaires/[id]/route.ts`)
**Avant** :
```typescript
const {
period_month,
period_label,
deadline,
mode,
total_net,
notes,
// ❌ num_appel manquant
} = body;
// ...
if (period_month !== undefined) updateData.period_month = period_month;
if (period_label !== undefined) updateData.period_label = period_label;
if (deadline !== undefined) updateData.deadline = deadline;
if (mode !== undefined) updateData.mode = mode;
if (total_net !== undefined) updateData.total_net = total_net;
if (notes !== undefined) updateData.notes = notes;
// ❌ num_appel manquant
```
**Après** :
```typescript
const {
period_month,
period_label,
deadline,
mode,
num_appel, // ✅ Ajouté
total_net,
notes,
} = body;
// ...
if (period_month !== undefined) updateData.period_month = period_month;
if (period_label !== undefined) updateData.period_label = period_label;
if (deadline !== undefined) updateData.deadline = deadline;
if (mode !== undefined) updateData.mode = mode;
if (num_appel !== undefined) updateData.num_appel = num_appel; // ✅ Ajouté
if (total_net !== undefined) updateData.total_net = total_net;
if (notes !== undefined) updateData.notes = notes;
```
## 🧪 Test du Correctif
### Procédure de test :
1. **Ouvrir un virement existant** :
- Aller sur Staff → Virements de Salaires
- Cliquer sur un virement dans la liste
2. **Modifier le numéro d'appel** :
- Cliquer sur "Modifier"
- Changer le champ "Numéro d'appel" (ex: "00042")
- Cliquer sur "Enregistrer"
3. **Vérifier la mise à jour** :
- Le modal doit se fermer
- Le numéro doit apparaître dans la colonne "N° Appel" du tableau
- Rouvrir le virement pour confirmer que le numéro est bien enregistré
4. **Vérifier les logs** (optionnel) :
- Dans la console du navigateur, chercher :
```
[handleUpdateTransfer] Payload: { ..., num_appel: "00042", ... }
```
- Dans les logs serveur Next.js, chercher :
```
[update salary transfer] Update data: { ..., num_appel: "00042", ... }
```
### Vérification en base de données :
```sql
-- Vérifier que la colonne num_appel est bien mise à jour
SELECT id, num_appel, period_label, updated_at
FROM salary_transfers
WHERE id = 'ID_DU_VIREMENT'
ORDER BY updated_at DESC;
```
## 📊 Impact
- ✅ Le numéro d'appel peut maintenant être modifié
- ✅ La valeur est correctement enregistrée en base
- ✅ La référence de virement utilisera le bon numéro lors de la génération PDF
- ✅ Logs ajoutés pour faciliter le débogage
## 📁 Fichiers Modifiés
1. **components/staff/SalaryTransfersGrid.tsx**
- Ajout de `num_appel` dans le payload de mise à jour
- Ajout d'un log pour tracer le payload envoyé
2. **app/api/staff/virements-salaires/[id]/route.ts**
- Extraction de `num_appel` depuis le body de la requête
- Ajout de la mise à jour conditionnelle de `num_appel`
## 🔧 Notes Techniques
### Pourquoi ce bug ?
Le champ `num_appel` a été ajouté récemment à la colonne Supabase, mais :
- ❌ Le formulaire le permettait de le modifier (champ visible)
- ❌ Mais le payload d'update ne l'incluait pas
- ❌ L'API ne le traitait pas non plus
### Mise à jour conditionnelle
L'API utilise une mise à jour conditionnelle (`if (num_appel !== undefined)`) qui permet :
- ✅ De ne mettre à jour que les champs fournis
- ✅ De ne pas écraser les champs non modifiés
- ✅ D'accepter `null` comme valeur valide pour supprimer un numéro
## 📅 Date du Correctif
13 octobre 2025