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:
parent
5662874f1c
commit
bbcda39c24
1 changed files with 75 additions and 0 deletions
75
app/api/staff/contrats/[id]/salaires-par-date/route.ts
Normal file
75
app/api/staff/contrats/[id]/salaires-par-date/route.ts
Normal 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 }
|
||||
);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue