93 lines
2.7 KiB
TypeScript
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 }
|
|
);
|
|
}
|
|
}
|