'use client'; import React, { useState, useEffect } from 'react'; import { DataTable } from 'primereact/datatable'; import { Column } from 'primereact/column'; import { Button } from 'primereact/button'; import { InputText } from 'primereact/inputtext'; import { Tag } from 'primereact/tag'; import { Card } from 'primereact/card'; import { Toolbar } from 'primereact/toolbar'; import { Badge } from 'primereact/badge'; import { useRouter } from 'next/navigation'; import { apiClient } from '../../../../services/api-client'; interface EmployeActif { id: number; nom: string; prenom: string; email: string; telephone: string; metier: string; statut: string; dateEmbauche: string; equipeId?: number; equipeNom?: string; competences: string[]; certifications: string[]; niveauExperience: string; disponible: boolean; chantierActuel?: string; } const EmployesActifsPage = () => { const [employes, setEmployes] = useState([]); const [loading, setLoading] = useState(true); const [globalFilter, setGlobalFilter] = useState(''); const router = useRouter(); useEffect(() => { loadEmployesActifs(); }, []); const loadEmployesActifs = async () => { try { setLoading(true); console.log('🔄 Chargement des employés actifs...'); const response = await apiClient.get('/api/employes/actifs'); console.log('✅ Employés actifs chargés:', response.data); setEmployes(response.data || []); } catch (error) { console.error('❌ Erreur lors du chargement des employés actifs:', error); setEmployes([]); } finally { setLoading(false); } }; const metierBodyTemplate = (rowData: EmployeActif) => { 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'; }; return ; }; const disponibiliteBodyTemplate = (rowData: EmployeActif) => { return (
{rowData.disponible ? 'Disponible' : 'Occupé'} {rowData.chantierActuel && ( )}
); }; const equipeBodyTemplate = (rowData: EmployeActif) => { if (rowData.equipeNom) { return ; } return Non assigné; }; const experienceBodyTemplate = (rowData: EmployeActif) => { const getExperienceColor = (niveau: string) => { switch (niveau) { case 'DEBUTANT': return 'info'; case 'INTERMEDIAIRE': return 'warning'; case 'EXPERIMENTE': return 'success'; case 'EXPERT': return 'danger'; default: return 'secondary'; } }; return ; }; const competencesBodyTemplate = (rowData: EmployeActif) => { return (
{rowData.competences?.slice(0, 2).map((comp, index) => ( ))} {rowData.competences?.length > 2 && ( )}
); }; const certificationsBodyTemplate = (rowData: EmployeActif) => { if (!rowData.certifications || rowData.certifications.length === 0) { return Aucune; } return (
{rowData.certifications.slice(0, 2).map((cert, index) => ( ))} {rowData.certifications.length > 2 && ( )}
); }; const actionBodyTemplate = (rowData: EmployeActif) => { return (
); }; const leftToolbarTemplate = () => { return (
); }; const rightToolbarTemplate = () => { return (
setGlobalFilter(e.target.value)} />
); }; const header = (

Employés Actifs ({employes.length})

e.disponible).length} severity="success" /> Disponibles !e.disponible).length} severity="warning" /> Occupés
); return (
); }; export default EmployesActifsPage;