espace-paie-odentas/FIX_NUM_APPEL_UPDATE.md

4.4 KiB

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 :

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 :

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 :

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 :

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 :

-- 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