'use client'; import React, { useState, useEffect } from 'react'; import { useParams, useRouter } from 'next/navigation'; import { Card } from 'primereact/card'; import { Button } from 'primereact/button'; import { Calendar } from 'primereact/calendar'; import { Timeline } from 'primereact/timeline'; import { Tag } from 'primereact/tag'; import { DataTable } from 'primereact/datatable'; import { Column } from 'primereact/column'; interface TacheChantier { id: number; nom: string; description: string; dateDebut: string; dateFin: string; statut: string; responsable: { nom: string; prenom: string; }; equipe: { nom: string; }; progression: number; } export default function ChantierPlanningPage() { const params = useParams(); const router = useRouter(); const id = params.id as string; const [taches, setTaches] = useState([]); const [loading, setLoading] = useState(true); const [selectedDate, setSelectedDate] = useState(new Date()); useEffect(() => { if (id) { loadPlanning(); } }, [id]); const loadPlanning = async () => { try { setLoading(true); const API_URL = process.env.NEXT_PUBLIC_API_URL || 'https://api.lions.dev/btpxpress'; // Charger les tâches du chantier const response = await fetch(`${API_URL}/api/v1/chantiers/${id}/taches`); if (!response.ok) { throw new Error('Erreur lors du chargement du planning'); } const data = await response.json(); setTaches(data); } catch (error) { console.error('Erreur:', error); } finally { setLoading(false); } }; const formatDate = (dateString: string) => { if (!dateString) return 'N/A'; return new Date(dateString).toLocaleDateString('fr-FR'); }; const getStatutSeverity = (statut: string) => { switch (statut?.toUpperCase()) { case 'A_FAIRE': return 'info'; case 'EN_COURS': return 'warning'; case 'TERMINE': return 'success'; case 'EN_RETARD': return 'danger'; default: return 'info'; } }; const getStatutLabel = (statut: string) => { const labels: { [key: string]: string } = { 'A_FAIRE': 'À faire', 'EN_COURS': 'En cours', 'TERMINE': 'Terminé', 'EN_RETARD': 'En retard' }; return labels[statut] || statut; }; const statutBodyTemplate = (rowData: TacheChantier) => { return ( ); }; const dateBodyTemplate = (rowData: TacheChantier) => { return (
Début: {formatDate(rowData.dateDebut)}
Fin: {formatDate(rowData.dateFin)}
); }; const responsableBodyTemplate = (rowData: TacheChantier) => { return `${rowData.responsable?.prenom} ${rowData.responsable?.nom}`; }; const equipeBodyTemplate = (rowData: TacheChantier) => { return rowData.equipe?.nom || 'Non assignée'; }; const progressionBodyTemplate = (rowData: TacheChantier) => { return (
{rowData.progression}%
); }; const actionsBodyTemplate = (rowData: TacheChantier) => { return (
); }; const customizedMarker = (item: TacheChantier) => { return ( ); }; const customizedContent = (item: TacheChantier) => { return (
{item.nom}

{item.description}

Responsable: {item.responsable?.prenom} {item.responsable?.nom}
Équipe: {item.equipe?.nom || 'Non assignée'}
Dates: {formatDate(item.dateDebut)} - {formatDate(item.dateFin)}
); }; return (
{/* Calendrier */}
setSelectedDate(e.value as Date)} inline showWeek />

Légende

En cours
Terminé
En retard
À faire
{/* Timeline */}
{/* Tableau des tâches */}
); }