173 lines
5.3 KiB
TypeScript
173 lines
5.3 KiB
TypeScript
import { useState, useEffect } from 'react';
|
|
import { apiClient } from '../services/api-client';
|
|
import { PhaseChantier, StatutPhaseChantier } from '../types/phases';
|
|
|
|
export const usePhases = () => {
|
|
const [phases, setPhases] = useState<PhaseChantier[]>([]);
|
|
const [loading, setLoading] = useState(true);
|
|
const [error, setError] = useState<string | null>(null);
|
|
|
|
const fetchPhases = async () => {
|
|
try {
|
|
setLoading(true);
|
|
const response = await apiClient.get('/phases');
|
|
setPhases(response.data);
|
|
setError(null);
|
|
} catch (err) {
|
|
console.error('Erreur lors du chargement des phases:', err);
|
|
setError('Erreur lors du chargement des phases');
|
|
} finally {
|
|
setLoading(false);
|
|
}
|
|
};
|
|
|
|
const getPhasesByChantier = async (chantierId: string) => {
|
|
try {
|
|
const response = await apiClient.get(`/phases/chantier/${chantierId}`);
|
|
return response.data;
|
|
} catch (err) {
|
|
console.error('Erreur lors du chargement des phases du chantier:', err);
|
|
throw err;
|
|
}
|
|
};
|
|
|
|
const getPhasesByStatut = async (statut: StatutPhaseChantier) => {
|
|
try {
|
|
const response = await apiClient.get(`/phases/statut/${statut}`);
|
|
return response.data;
|
|
} catch (err) {
|
|
console.error('Erreur lors du chargement des phases par statut:', err);
|
|
throw err;
|
|
}
|
|
};
|
|
|
|
const getPhasesEnRetard = async () => {
|
|
try {
|
|
const response = await apiClient.get('/phases/en-retard');
|
|
return response.data;
|
|
} catch (err) {
|
|
console.error('Erreur lors du chargement des phases en retard:', err);
|
|
throw err;
|
|
}
|
|
};
|
|
|
|
const getPhasesCritiques = async () => {
|
|
try {
|
|
const response = await apiClient.get('/phases/critiques');
|
|
return response.data;
|
|
} catch (err) {
|
|
console.error('Erreur lors du chargement des phases critiques:', err);
|
|
throw err;
|
|
}
|
|
};
|
|
|
|
const createPhase = async (phase: Partial<PhaseChantier>) => {
|
|
try {
|
|
const response = await apiClient.post('/phases', phase);
|
|
await fetchPhases();
|
|
return response.data;
|
|
} catch (err) {
|
|
console.error('Erreur lors de la création de la phase:', err);
|
|
throw err;
|
|
}
|
|
};
|
|
|
|
const updatePhase = async (id: string, phase: Partial<PhaseChantier>) => {
|
|
try {
|
|
const response = await apiClient.put(`/phases/${id}`, phase);
|
|
await fetchPhases();
|
|
return response.data;
|
|
} catch (err) {
|
|
console.error('Erreur lors de la mise à jour de la phase:', err);
|
|
throw err;
|
|
}
|
|
};
|
|
|
|
const demarrerPhase = async (id: string) => {
|
|
try {
|
|
const response = await apiClient.post(`/phases/${id}/demarrer`);
|
|
await fetchPhases();
|
|
return response.data;
|
|
} catch (err) {
|
|
console.error('Erreur lors du démarrage de la phase:', err);
|
|
throw err;
|
|
}
|
|
};
|
|
|
|
const terminerPhase = async (id: string) => {
|
|
try {
|
|
const response = await apiClient.post(`/phases/${id}/terminer`);
|
|
await fetchPhases();
|
|
return response.data;
|
|
} catch (err) {
|
|
console.error('Erreur lors de la terminaison de la phase:', err);
|
|
throw err;
|
|
}
|
|
};
|
|
|
|
const suspendrePhase = async (id: string, motif: string) => {
|
|
try {
|
|
const response = await apiClient.post(`/phases/${id}/suspendre`, { motif });
|
|
await fetchPhases();
|
|
return response.data;
|
|
} catch (err) {
|
|
console.error('Erreur lors de la suspension de la phase:', err);
|
|
throw err;
|
|
}
|
|
};
|
|
|
|
const reprendrePhase = async (id: string) => {
|
|
try {
|
|
const response = await apiClient.post(`/phases/${id}/reprendre`);
|
|
await fetchPhases();
|
|
return response.data;
|
|
} catch (err) {
|
|
console.error('Erreur lors de la reprise de la phase:', err);
|
|
throw err;
|
|
}
|
|
};
|
|
|
|
const updateAvancement = async (id: string, pourcentage: number) => {
|
|
try {
|
|
const response = await apiClient.post(`/phases/${id}/avancement`, { pourcentage });
|
|
await fetchPhases();
|
|
return response.data;
|
|
} catch (err) {
|
|
console.error('Erreur lors de la mise à jour de l\'avancement:', err);
|
|
throw err;
|
|
}
|
|
};
|
|
|
|
const deletePhase = async (id: string) => {
|
|
try {
|
|
await apiClient.delete(`/phases/${id}`);
|
|
await fetchPhases();
|
|
} catch (err) {
|
|
console.error('Erreur lors de la suppression de la phase:', err);
|
|
throw err;
|
|
}
|
|
};
|
|
|
|
useEffect(() => {
|
|
fetchPhases();
|
|
}, []);
|
|
|
|
return {
|
|
phases,
|
|
loading,
|
|
error,
|
|
refresh: fetchPhases,
|
|
getPhasesByChantier,
|
|
getPhasesByStatut,
|
|
getPhasesEnRetard,
|
|
getPhasesCritiques,
|
|
createPhase,
|
|
updatePhase,
|
|
demarrerPhase,
|
|
terminerPhase,
|
|
suspendrePhase,
|
|
reprendrePhase,
|
|
updateAvancement,
|
|
deletePhase
|
|
};
|
|
}; |