119 lines
4.1 KiB
TypeScript
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 }
|
|
);
|
|
}
|
|
}
|