espace-paie-odentas/app/api/staff/contracts/[id]/cancel/route.ts

93 lines
2.7 KiB
TypeScript

import { NextRequest, NextResponse } from "next/server";
import { createSbServiceRole } from "@/lib/supabaseServer";
export const dynamic = "force-dynamic";
/**
* POST /api/staff/contracts/[id]/cancel
*
* Annule un contrat de travail (marque comme annulé sans supprimer l'enregistrement)
* - Met etat_de_la_demande à "Annulée"
* - Met etat_de_la_paie à "Non concernée"
* - Met dpae à "Non concernée"
* - Conserve toutes les données historiques
*/
export async function POST(
request: NextRequest,
{ params }: { params: Promise<{ id: string }> }
) {
try {
const { id } = await params;
console.log(`🚫 [CANCEL CONTRACT] Début annulation contrat ID: ${id}`);
const supabase = createSbServiceRole();
// 1. Vérifier que le contrat existe
const { data: contract, error: contractError } = await supabase
.from("cddu_contracts")
.select("id, contract_number, employee_name, etat_de_la_demande, org_id")
.eq("id", id)
.maybeSingle();
if (contractError || !contract) {
console.error("❌ [CANCEL CONTRACT] Contrat non trouvé:", contractError);
return NextResponse.json(
{ error: "Contrat non trouvé" },
{ status: 404 }
);
}
console.log(`📋 [CANCEL CONTRACT] Contrat trouvé:`, {
id: contract.id,
contract_number: contract.contract_number,
employee_name: contract.employee_name,
etat_actuel: contract.etat_de_la_demande,
});
// 2. Vérifier que le contrat n'est pas déjà annulé
if (contract.etat_de_la_demande === "Annulée") {
return NextResponse.json(
{ error: "Ce contrat est déjà annulé" },
{ status: 400 }
);
}
// 3. Mettre à jour le contrat avec les nouveaux statuts
const { error: updateError } = await supabase
.from("cddu_contracts")
.update({
etat_de_la_demande: "Annulée",
etat_de_la_paie: "Non concernée",
dpae: "Non concernée",
})
.eq("id", id);
if (updateError) {
console.error("❌ [CANCEL CONTRACT] Erreur mise à jour:", updateError);
return NextResponse.json(
{ error: "Erreur lors de l'annulation du contrat" },
{ status: 500 }
);
}
console.log("✅ [CANCEL CONTRACT] Contrat annulé avec succès");
return NextResponse.json({
success: true,
message: "Contrat annulé avec succès",
contractId: id,
updates: {
etat_de_la_demande: "Annulée",
etat_de_la_paie: "Non concernée",
dpae: "Non concernée",
},
});
} catch (error: any) {
console.error("❌ [CANCEL CONTRACT] Erreur:", error);
return NextResponse.json(
{ error: "Erreur serveur", details: error.message },
{ status: 500 }
);
}
}