espace-paie-odentas/app/api/staff/amendments/[id]/update-signature-status/route.ts

119 lines
4.1 KiB
TypeScript

import { NextRequest, NextResponse } from "next/server";
import { createSbServiceRole } from "@/lib/supabaseServer";
export const dynamic = "force-dynamic";
/**
* POST /api/staff/amendments/[id]/update-signature-status
*
* Met à jour manuellement le statut de signature d'un avenant
* Action staff uniquement pour corriger ou forcer un statut de signature
*/
export async function POST(
request: NextRequest,
{ params }: { params: Promise<{ id: string }> }
) {
try {
const { id } = await params;
const body = await request.json();
const { signature_status } = body;
console.log(`🔄 [UPDATE SIGNATURE STATUS] Avenant ID: ${id}, Nouveau statut: ${signature_status}`);
// Validation du statut
const validStatuses = ["not_sent", "pending_employer", "pending_employee", "signed"];
if (!signature_status || !validStatuses.includes(signature_status)) {
return NextResponse.json(
{ error: "Statut de signature invalide. Valeurs acceptées: " + validStatuses.join(", ") },
{ status: 400 }
);
}
const supabase = createSbServiceRole();
// Vérifier que l'avenant existe
const { data: avenant, error: avenantError } = await supabase
.from("avenants")
.select("id, numero_avenant, signature_status, contract_id")
.eq("id", id)
.maybeSingle();
if (avenantError || !avenant) {
console.error("❌ [UPDATE SIGNATURE STATUS] Avenant non trouvé:", avenantError);
return NextResponse.json(
{ error: "Avenant non trouvé" },
{ status: 404 }
);
}
console.log(`📋 [UPDATE SIGNATURE STATUS] Statut actuel: ${avenant.signature_status} → Nouveau: ${signature_status}`);
// Mettre à jour l'avenant avec le nouveau statut de signature
const { error: updateError } = await supabase
.from("avenants")
.update({ signature_status })
.eq("id", id);
if (updateError) {
console.error("❌ [UPDATE SIGNATURE STATUS] Erreur mise à jour:", updateError);
return NextResponse.json(
{ error: "Erreur lors de la mise à jour du statut" },
{ status: 500 }
);
}
console.log("✅ [UPDATE SIGNATURE STATUS] Statut mis à jour avec succès");
// Si on passe à "signed", mettre à jour aussi le contrat associé
if (signature_status === "signed" && avenant.contract_id) {
console.log("🔄 [UPDATE SIGNATURE STATUS] Mise à jour du contrat associé");
const { error: contractError } = await supabase
.from("cddu_contracts")
.update({
avenant_signe: true,
avenant_signe_date: new Date().toISOString(),
})
.eq("id", avenant.contract_id);
if (contractError) {
console.error("⚠️ [UPDATE SIGNATURE STATUS] Erreur mise à jour contrat:", contractError);
// Ne pas bloquer le flux, l'avenant a été mis à jour
} else {
console.log("✅ [UPDATE SIGNATURE STATUS] Contrat marqué comme avenant signé");
}
}
// Si on repasse à un statut non-signé, mettre à jour le contrat
if (signature_status !== "signed" && avenant.signature_status === "signed" && avenant.contract_id) {
console.log("🔄 [UPDATE SIGNATURE STATUS] Retrait du marqueur avenant signé sur le contrat");
const { error: contractError } = await supabase
.from("cddu_contracts")
.update({
avenant_signe: false,
avenant_signe_date: null,
})
.eq("id", avenant.contract_id);
if (contractError) {
console.error("⚠️ [UPDATE SIGNATURE STATUS] Erreur mise à jour contrat:", contractError);
} else {
console.log("✅ [UPDATE SIGNATURE STATUS] Marqueur avenant retiré du contrat");
}
}
return NextResponse.json({
success: true,
message: "Statut de signature mis à jour",
avenantId: id,
newSignatureStatus: signature_status,
});
} catch (error: any) {
console.error("❌ [UPDATE SIGNATURE STATUS] Erreur:", error);
return NextResponse.json(
{ error: "Erreur serveur", details: error.message },
{ status: 500 }
);
}
}