From 64299cd9a5ef8596e8241458254b866a22603698 Mon Sep 17 00:00:00 2001 From: odentas Date: Tue, 2 Dec 2025 13:32:44 +0100 Subject: [PATCH] fix: Affichage des CDI et activation Super Staff MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Support complet des contrats CDI dans l'onglet Régime général - Correction du filtrage pour inclure type_de_contrat = 'CDI' - Gestion des CDI sans date de fin (end_date null) - Les CDI apparaissent maintenant dans 'En cours' - Redirection vers /contrats-rg/[id] pour les CDI - Ajout du type 'CDI' dans les types TypeScript - Correction du lien d'activation pour les Super Staff - Ajout de /activate aux pages publiques dans middleware.ts - Les nouveaux Super Staff peuvent maintenant activer leur compte sans erreur 404 - Nettoyage du code - Retrait des logs de debug temporaires --- app/(app)/contrats/ContratsClient.tsx | 7 ++++++- app/(app)/contrats/page.tsx | 8 ++++---- app/api/contrats/route.ts | 22 +++++++++++++++++----- app/api/rg-contracts/route.ts | 2 +- middleware.ts | 3 ++- 5 files changed, 30 insertions(+), 12 deletions(-) diff --git a/app/(app)/contrats/ContratsClient.tsx b/app/(app)/contrats/ContratsClient.tsx index 2d9af4a..d0931f8 100644 --- a/app/(app)/contrats/ContratsClient.tsx +++ b/app/(app)/contrats/ContratsClient.tsx @@ -21,7 +21,7 @@ export type Contrat = { date_fin: string; // ISO etat: "pre-demande" | "Reçue" | "envoye" | "signe" | "modification" | "traitee" | "en_cours"; is_multi_mois?: boolean; // drapeau listé par l'API - regime?: "CDDU_MONO" | "CDDU_MULTI" | "RG" | string; // si l'API renvoie directement le régime + regime?: "CDDU_MONO" | "CDDU_MULTI" | "RG" | "CDI" | string; // si l'API renvoie directement le régime }; // --- Hook d'accès API - MODIFIÉ pour utiliser clientInfo @@ -113,6 +113,11 @@ function safeEtat(etat?: string){ function detailHref(c: Contrat){ const isMulti = c.is_multi_mois === true || (c.regime && c.regime.toUpperCase() === "CDDU_MULTI"); + const isRG = c.regime && (c.regime.toUpperCase() === "RG" || c.regime.toUpperCase() === "CDI"); + + if (isRG) { + return `/contrats-rg/${c.id}`; + } return isMulti ? `/contrats-multi/${c.id}` : `/contrats/${c.id}`; } diff --git a/app/(app)/contrats/page.tsx b/app/(app)/contrats/page.tsx index 671ba18..4f50770 100644 --- a/app/(app)/contrats/page.tsx +++ b/app/(app)/contrats/page.tsx @@ -18,7 +18,7 @@ export type Contrat = { date_fin: string; // ISO etat: "pre-demande" | "Reçue" | "envoye" | "signe" | "modification" | "traitee" | "en_cours"; is_multi_mois?: boolean; // drapeau listé par l'API - regime?: "CDDU_MONO" | "CDDU_MULTI" | "RG" | string; // si l'API renvoie directement le régime + regime?: "CDDU_MONO" | "CDDU_MULTI" | "RG" | "CDI" | string; // si l'API renvoie directement le régime }; type ClientInfo = { @@ -239,12 +239,12 @@ export default function PageContrats(){ return `/contrats/demo`; } - // Si l'utilisateur est sur l'onglet Régime général, on envoie vers la page RG - if (regime === "RG") { + // Si c'est un contrat RG ou CDI, on envoie vers la page RG + const regimeUpper = (c.regime || "").toUpperCase(); + if (regime === "RG" || regimeUpper === "RG" || regimeUpper === "CDI") { return `/contrats-rg/${c.id}`; } // Sinon, on applique la logique CDDU / multi-mois - const regimeUpper = (c.regime || "").toUpperCase(); if (c.is_multi_mois === true || regimeUpper === "CDDU_MULTI") { return `/contrats-multi/${c.id}`; } diff --git a/app/api/contrats/route.ts b/app/api/contrats/route.ts index 3315a60..5d14394 100644 --- a/app/api/contrats/route.ts +++ b/app/api/contrats/route.ts @@ -240,7 +240,14 @@ export async function GET(req: Request) { } let filtered = (data || []).filter((row: any) => { const end = row.end_date || row.date_fin; - if (!end) return false; + + // Pour les CDI (pas de date de fin), toujours les considérer comme "en_cours" + if (!end) { + if (status === "en_cours") return true; + if (status === "termines") return false; + return true; + } + const endDate = new Date(end); if (isNaN(endDate.getTime())) return false; endDate.setHours(0,0,0,0); @@ -261,12 +268,16 @@ export async function GET(req: Request) { if (regime === 'RG') { filtered = filtered.filter((row: any) => { const td = normalize(row.type_d_embauche); - return td.includes('régime général') || td.includes('regime general') || td === 'rg'; + const tc = normalize(row.type_de_contrat); + // Inclure les contrats avec type_d_embauche = "Régime général" OU type_de_contrat = "CDI" + return td.includes('régime général') || td.includes('regime general') || td === 'rg' || tc === 'cdi'; }); } else if (regime === 'CDDU') { filtered = filtered.filter((row: any) => { const td = normalize(row.type_d_embauche); - return !(td.includes('régime général') || td.includes('regime general') || td === 'rg'); + const tc = normalize(row.type_de_contrat); + // Exclure les contrats RG et CDI de l'onglet CDDU + return !(td.includes('régime général') || td.includes('regime general') || td === 'rg' || tc === 'cdi'); }); } // Si regime === null/undefined, on garde tous les contrats (pas de filtrage) @@ -295,7 +306,8 @@ export async function GET(req: Request) { const items = paged.map((row: any) => { const isMulti = row.multi_mois === "Oui" || row.multi_mois === true; const td = String(row.type_d_embauche || "").toLowerCase(); - const isRG = td.includes("régime général") || td.includes("regime general") || td === "rg"; + const tc = String(row.type_de_contrat || "").toLowerCase(); + const isRG = td.includes("régime général") || td.includes("regime general") || td === "rg" || tc === "cdi"; // Déterminer l'état à afficher let displayEtat = (row.etat_de_la_demande || row.etat || "en_cours"); @@ -336,7 +348,7 @@ export async function GET(req: Request) { date_fin: row.end_date, etat: displayEtat, is_multi_mois: isMulti, - regime: isRG ? "RG" : (isMulti ? "CDDU_MULTI" : "CDDU_MONO"), + regime: isRG ? (tc === "cdi" ? "CDI" : "RG") : (isMulti ? "CDDU_MULTI" : "CDDU_MONO"), }; }); return NextResponse.json({ diff --git a/app/api/rg-contracts/route.ts b/app/api/rg-contracts/route.ts index 59d83dc..446b611 100644 --- a/app/api/rg-contracts/route.ts +++ b/app/api/rg-contracts/route.ts @@ -66,7 +66,7 @@ export async function POST(request: NextRequest) { // Marquer explicitement que c'est un contrat RG regime: "RG", // Définir les champs de type de contrat pour RG (CDI ou CDD de droit commun) - type_de_contrat: body.type_contrat || "CDD de droit commun", + type_de_contrat: body.type_contrat || body.type_contrat_rg || "CDD de droit commun", type_d_embauche: "Régime général", // Les champs production ne sont pas utilisés en RG spectacle: "N/A - Régime Général", diff --git a/middleware.ts b/middleware.ts index 8e6463a..48853a3 100644 --- a/middleware.ts +++ b/middleware.ts @@ -81,7 +81,8 @@ export async function middleware(req: NextRequest) { path.startsWith('/dl-contrat-signe') || path.startsWith('/signature-salarie') || path === '/politique-confidentialite' || - path === '/mentions-legales'; + path === '/mentions-legales' || + path === '/activate'; // Ne pas impacter l'environnement local/dev par le mode maintenance const hostname = req.nextUrl.hostname || '';