'use client'; import React, { useState, useEffect, useRef } from 'react'; import { DataTable } from 'primereact/datatable'; import { Column } from 'primereact/column'; import { Button } from 'primereact/button'; import { InputText } from 'primereact/inputtext'; import { Toast } from 'primereact/toast'; import { Toolbar } from 'primereact/toolbar'; import { Tag } from 'primereact/tag'; import { Card } from 'primereact/card'; import { ProgressBar } from 'primereact/progressbar'; import { FilterMatchMode } from 'primereact/api'; import { maintenanceService } from '../../../../services/api'; import { MaintenanceMateriel, StatutMaintenance } from '../../../../types/btp'; import { formatDate } from '../../../../utils/formatters'; const MaintenancesEnCoursPage = () => { const [maintenances, setMaintenances] = useState([]); const [selectedMaintenances, setSelectedMaintenances] = useState([]); const [loading, setLoading] = useState(true); const [globalFilter, setGlobalFilter] = useState(''); const toast = useRef(null); const dt = useRef>(null); useEffect(() => { loadMaintenancesEnCours(); }, []); const loadMaintenancesEnCours = async () => { try { setLoading(true); const data = await maintenanceService.getAll(); // Filtrer les maintenances en cours const enCours = data.filter(m => m.statut === StatutMaintenance.EN_COURS); setMaintenances(enCours); } catch (error) { toast.current?.show({ severity: 'error', summary: 'Erreur', detail: 'Impossible de charger les maintenances en cours', life: 3000 }); } finally { setLoading(false); } }; const terminerMaintenance = async (maintenance: MaintenanceMateriel) => { try { const updatedMaintenance = { ...maintenance, statut: StatutMaintenance.TERMINEE, dateRealisee: new Date().toISOString() }; await maintenanceService.update(maintenance.id, updatedMaintenance); toast.current?.show({ severity: 'success', summary: 'Succès', detail: 'Maintenance terminée', life: 3000 }); loadMaintenancesEnCours(); } catch (error: any) { toast.current?.show({ severity: 'error', summary: 'Erreur', detail: error?.userMessage || 'Erreur lors de la finalisation', life: 3000 }); } }; const exportCSV = () => { dt.current?.exportCSV(); }; // Templates pour les colonnes const materielBodyTemplate = (rowData: MaintenanceMateriel) => { return (
{rowData.materiel?.nom}
{rowData.materiel?.marque} {rowData.materiel?.modele}
); }; const dureeBodyTemplate = (rowData: MaintenanceMateriel) => { if (!rowData.dateRealisee) return 'N/A'; const debut = new Date(rowData.dateRealisee); const maintenant = new Date(); const diffHeures = Math.floor((maintenant.getTime() - debut.getTime()) / (1000 * 60 * 60)); return (
{diffHeures}h
); }; const prioriteBodyTemplate = (rowData: MaintenanceMateriel) => { const dateDebut = new Date(rowData.dateRealisee || rowData.datePrevue); const heures = Math.floor((Date.now() - dateDebut.getTime()) / (1000 * 60 * 60)); if (heures > 48) { return ; } else if (heures > 24) { return ; } else { return ; } }; const actionBodyTemplate = (rowData: MaintenanceMateriel) => { return (
); }; const leftToolbarTemplate = () => { return (

Maintenances En Cours

({maintenances.length} maintenances actives)
); }; const rightToolbarTemplate = () => { return (