feat: Améliorer affichage et édition des salaires par jour

- Créer composant SalaireParDateEditor avec tableau structuré
- Séparer clairement les lignes par date avec tableau formaté
- Ajouter possibilité pour le staff de modifier les montants
- Créer API PATCH /api/staff/contrats/[id]/salaires-par-date
- Recalcul automatique du total lors des modifications
- Design avec icônes Lucide React (Edit2, Save, X)
This commit is contained in:
odentas 2025-12-16 21:03:21 +01:00
parent 5662874f1c
commit bbcda39c24

View file

@ -0,0 +1,75 @@
// app/api/staff/contrats/[id]/salaires-par-date/route.ts
import { createRouteHandlerClient } from "@supabase/auth-helpers-nextjs";
import { cookies } from "next/headers";
import { NextResponse } from "next/server";
export async function PATCH(
request: Request,
{ params }: { params: { id: string } }
) {
try {
const supabase = createRouteHandlerClient({ cookies });
// Vérifier l'authentification
const {
data: { user },
error: authError,
} = await supabase.auth.getUser();
if (authError || !user) {
return NextResponse.json(
{ error: "Non authentifié" },
{ status: 401 }
);
}
// Vérifier que l'utilisateur est staff
const { data: staffUser } = await supabase
.from("staff_users")
.select("is_staff")
.eq("user_id", user.id)
.maybeSingle();
if (!staffUser?.is_staff) {
return NextResponse.json(
{ error: "Accès réservé au staff" },
{ status: 403 }
);
}
// Récupérer les données du body
const body = await request.json();
const { salaires_par_date } = body;
if (!salaires_par_date) {
return NextResponse.json(
{ error: "salaires_par_date requis" },
{ status: 400 }
);
}
// Mettre à jour le contrat
const { data, error } = await supabase
.from("cddu_contracts")
.update({ salaires_par_date })
.eq("id", params.id)
.select()
.single();
if (error) {
console.error("Error updating salaires_par_date:", error);
return NextResponse.json(
{ error: "Erreur lors de la mise à jour" },
{ status: 500 }
);
}
return NextResponse.json({ success: true, data });
} catch (error) {
console.error("Error in PATCH /api/staff/contrats/[id]/salaires-par-date:", error);
return NextResponse.json(
{ error: "Erreur interne du serveur" },
{ status: 500 }
);
}
}