'use client'; export const dynamic = 'force-dynamic'; import React, { useState, useEffect } from 'react'; import { Card } from 'primereact/card'; import { Button } from 'primereact/button'; import { Tag } from 'primereact/tag'; import { Toolbar } from 'primereact/toolbar'; import { TabView, TabPanel } from 'primereact/tabview'; import { DataTable } from 'primereact/datatable'; import { Column } from 'primereact/column'; import { Badge } from 'primereact/badge'; import { useRouter, useParams } from 'next/navigation'; import { apiClient } from '../../../../services/api-client'; interface EmployeDetail { id: number; nom: string; prenom: string; email: string; telephone: string; metier: string; statut: string; dateEmbauche: string; salaire: number; adresse: string; numeroSecu: string; niveauExperience: string; competences: string[]; certifications: string[]; equipeId?: number; equipeNom?: string; chantierActuel?: string; disponible: boolean; planning: Array<{ id: number; chantierNom: string; dateDebut: string; dateFin: string; statut: string; }>; historique: Array<{ id: number; chantierNom: string; dateDebut: string; dateFin: string; role: string; }>; } const EmployeDetailPage = () => { const [employe, setEmploye] = useState(null); const [loading, setLoading] = useState(true); const router = useRouter(); const params = useParams(); const employeId = params.id; useEffect(() => { if (employeId) { loadEmployeDetail(); } }, [employeId]); const loadEmployeDetail = async () => { try { setLoading(true); console.log('🔄 Chargement du détail employé...', employeId); const response = await apiClient.get(`/api/employes/${employeId}`); console.log('✅ Détail employé chargé:', response.data); setEmploye(response.data); } catch (error) { console.error('❌ Erreur lors du chargement du détail:', error); } finally { setLoading(false); } }; const toggleStatutEmploye = async () => { if (!employe) return; try { const newStatut = employe.statut === 'ACTIF' ? 'INACTIF' : 'ACTIF'; const endpoint = newStatut === 'ACTIF' ? 'activer' : 'desactiver'; await apiClient.post(`/api/employes/${employe.id}/${endpoint}`); setEmploye({ ...employe, statut: newStatut }); console.log(`✅ Statut employé ${newStatut.toLowerCase()}`); } catch (error) { console.error('❌ Erreur lors du changement de statut:', error); } }; const getStatutSeverity = (statut: string) => { switch (statut) { case 'ACTIF': return 'success'; case 'INACTIF': return 'danger'; case 'CONGE': return 'warning'; case 'FORMATION': return 'info'; default: return 'secondary'; } }; const getMetierColor = (metier: string) => { const colors: { [key: string]: string } = { 'MACON': 'info', 'ELECTRICIEN': 'warning', 'PLOMBIER': 'primary', 'CHARPENTIER': 'success', 'PEINTRE': 'secondary', 'CHEF_EQUIPE': 'danger', 'CONDUCTEUR': 'help' }; return colors[metier] || 'secondary'; }; const leftToolbarTemplate = () => { return (
); }; const rightToolbarTemplate = () => { return (
); }; if (loading) { return (
); } if (!employe) { return (

Employé non trouvé

); } return (
{/* En-tête employé */}

{employe.prenom} {employe.nom}

{employe.disponible ? ( ) : ( )}

📧 {employe.email}

📞 {employe.telephone}

{employe.equipeNom &&

👥 Équipe: {employe.equipeNom}

} {employe.chantierActuel &&

🏗️ Chantier actuel: {employe.chantierActuel}

}
{/* Onglets de détail */}

Informations Personnelles

{employe.prenom} {employe.nom}

{employe.email}

{employe.telephone}

{employe.adresse || 'Non renseignée'}

{employe.numeroSecu || 'Non renseigné'}

Informations Professionnelles

{new Date(employe.dateEmbauche).toLocaleDateString('fr-FR')}

{employe.salaire ? `${employe.salaire.toLocaleString('fr-FR')} €` : 'Non renseigné'}

Compétences

{employe.competences && employe.competences.length > 0 ? (
{employe.competences.map((comp, index) => ( ))}
) : (

Aucune compétence renseignée

)}

Certifications

{employe.certifications && employe.certifications.length > 0 ? (
{employe.certifications.map((cert, index) => ( ))}
) : (

Aucune certification renseignée

)}
new Date(rowData.dateDebut).toLocaleDateString('fr-FR')} /> new Date(rowData.dateFin).toLocaleDateString('fr-FR')} /> } /> new Date(rowData.dateDebut).toLocaleDateString('fr-FR')} /> new Date(rowData.dateFin).toLocaleDateString('fr-FR')} />
); }; export default EmployeDetailPage;