espace-paie-odentas/app/api/payslips/[id]/route.ts
odentas 897af4b23a feat: Ajout fonctionnalités virements, facturation, signatures et emails
- 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
2025-11-02 23:26:19 +01:00

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 }
);
}
}