- Ajout sous-header total net à payer sur page virements-salaires - Migration transfer_done_at pour tracking précis des virements - Nouvelle page saisie tableau pour création factures en masse - APIs bulk pour mise à jour dates signature et jours technicien - API demande mandat SEPA avec email template - Webhook DocuSeal pour signature contrats (mode TEST) - Composants modaux détails et vérification PDF fiches de paie - Upload/suppression/remplacement PDFs dans PayslipsGrid - Amélioration affichage colonnes et filtres grilles contrats/paies - Template email mandat SEPA avec sous-texte CTA - APIs bulk facturation (création, update statut/date paiement) - API clients sans facture pour période donnée - Corrections calculs dates et montants avec auto-remplissage
75 lines
No EOL
2 KiB
TypeScript
75 lines
No EOL
2 KiB
TypeScript
import { NextRequest, NextResponse } from "next/server";
|
|
import { createSbServer } from "@/lib/supabaseServer";
|
|
|
|
export async function PATCH(
|
|
req: NextRequest,
|
|
{ params }: { params: { id: string } }
|
|
) {
|
|
try {
|
|
const { id } = params;
|
|
const body = await req.json();
|
|
|
|
// Validation des données
|
|
if (typeof body.transfer_done !== "boolean") {
|
|
return NextResponse.json(
|
|
{ error: "transfer_done must be a boolean" },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
const sb = createSbServer();
|
|
|
|
// Vérifier que la payslip existe et que l'utilisateur y a accès
|
|
const { data: existing, error: fetchError } = await sb
|
|
.from("payslips")
|
|
.select("id, contract_id")
|
|
.eq("id", id)
|
|
.single();
|
|
|
|
if (fetchError || !existing) {
|
|
return NextResponse.json(
|
|
{ error: "payslip_not_found" },
|
|
{ status: 404 }
|
|
);
|
|
}
|
|
|
|
// Mettre à jour le statut transfer_done
|
|
// Si transfer_done passe à true, on enregistre la date actuelle dans transfer_done_at
|
|
// Si transfer_done passe à false, on efface transfer_done_at
|
|
const updateData: any = {
|
|
transfer_done: body.transfer_done,
|
|
updated_at: new Date().toISOString()
|
|
};
|
|
|
|
if (body.transfer_done === true) {
|
|
// Virement marqué comme effectué : enregistrer la date
|
|
updateData.transfer_done_at = new Date().toISOString();
|
|
} else if (body.transfer_done === false) {
|
|
// Virement annulé : effacer la date
|
|
updateData.transfer_done_at = null;
|
|
}
|
|
|
|
const { data, error } = await sb
|
|
.from("payslips")
|
|
.update(updateData)
|
|
.eq("id", id)
|
|
.select()
|
|
.single();
|
|
|
|
if (error) {
|
|
console.error("Error updating payslip:", error);
|
|
return NextResponse.json(
|
|
{ error: error.message },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
|
|
return NextResponse.json(data);
|
|
} catch (err: any) {
|
|
console.error("Server error:", err);
|
|
return NextResponse.json(
|
|
{ error: err?.message || "server_error" },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
} |