fix: Affichage des CDI et activation Super Staff

- 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
This commit is contained in:
odentas 2025-12-02 13:32:44 +01:00
parent 88ad651557
commit 64299cd9a5
5 changed files with 30 additions and 12 deletions

View file

@ -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}`;
}

View file

@ -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}`;
}

View file

@ -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({

View file

@ -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",

View file

@ -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 || '';