changement au niveau de requetes adaptés aux collaborateurs AD
This commit is contained in:
@@ -1,11 +1,14 @@
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import { useAuth } from '../context/AuthContext';
|
||||
import Sidebar from '../components/Sidebar';
|
||||
import { Calendar as CalendarIcon, Clock, Users, TrendingUp, Plus, Settings, RefreshCw, Menu, FileText } from 'lucide-react';
|
||||
import { Calendar as CalendarIcon, Clock, Plus, Settings, RefreshCw, Menu, FileText } from 'lucide-react';
|
||||
import NewLeaveRequestModal from '../components/NewLeaveRequestModal';
|
||||
import { useMsal } from "@azure/msal-react";
|
||||
import { loginRequest } from "../authConfig";
|
||||
|
||||
const Dashboard = () => {
|
||||
const { user } = useAuth();
|
||||
const [graphToken, setGraphToken] = useState(null);
|
||||
const [sidebarOpen, setSidebarOpen] = useState(false);
|
||||
const [leaveCounters, setLeaveCounters] = useState({
|
||||
availableCP: 0,
|
||||
@@ -20,54 +23,82 @@ const Dashboard = () => {
|
||||
const [recentRequests, setRecentRequests] = useState([]);
|
||||
const [allRequests, setAllRequests] = useState([]);
|
||||
|
||||
const { instance, accounts } = useMsal();
|
||||
|
||||
// Récupération du bon ID utilisateur (CollaborateurAD)
|
||||
const userId = user?.id || user?.CollaborateurADId || user?.ID;
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
if (user?.id) {
|
||||
console.log("🔎 Utilisateur chargé dans Dashboard:", user);
|
||||
}, [user]);
|
||||
|
||||
useEffect(() => {
|
||||
if (accounts.length > 0) {
|
||||
const request = {
|
||||
...loginRequest,
|
||||
account: accounts[0],
|
||||
};
|
||||
|
||||
instance.acquireTokenSilent(request)
|
||||
.then((response) => {
|
||||
console.log("✅ Token Graph récupéré (silent):", response.accessToken);
|
||||
setGraphToken(response.accessToken);
|
||||
})
|
||||
.catch(async (err) => {
|
||||
console.warn("⚠️ Silent échoué, on tente un popup:", err);
|
||||
try {
|
||||
const tokenResponse = await instance.acquireTokenPopup(request);
|
||||
console.log("✅ Token Graph récupéré (popup):", tokenResponse.accessToken);
|
||||
setGraphToken(tokenResponse.accessToken);
|
||||
} catch (popupErr) {
|
||||
console.error("❌ Impossible d'obtenir un token:", popupErr);
|
||||
}
|
||||
});
|
||||
}
|
||||
}, [accounts, instance]);
|
||||
|
||||
// Vérification rapide du token
|
||||
useEffect(() => {
|
||||
if (graphToken) {
|
||||
console.log("🔎 Token prêt ?",
|
||||
graphToken.split(".").length === 3 ? "✅ JWT valide" : "❌ Token invalide: " + graphToken
|
||||
);
|
||||
}
|
||||
}, [graphToken]);
|
||||
|
||||
// 🔄 Récupération compteurs et demandes
|
||||
useEffect(() => {
|
||||
if (userId) {
|
||||
fetchLeaveCounters();
|
||||
fetchAllRequests();
|
||||
}
|
||||
}, [user]);
|
||||
}, [userId]);
|
||||
|
||||
const fetchLeaveCounters = async () => {
|
||||
try {
|
||||
const url = `http://localhost/GTA/project/public/php/getLeaveCounters.php?user_id=${user.id}`;
|
||||
console.log(' Dashboard - Récupération des compteurs:', url);
|
||||
console.log(' Dashboard - User ID utilisé:', user.id);
|
||||
|
||||
const url = `http://localhost/GTA/project/public/php/getLeaveCounters.php?user_id=${userId}`;
|
||||
const response = await fetch(url);
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`Erreur HTTP: ${response.status}`);
|
||||
}
|
||||
if (!response.ok) throw new Error(`Erreur HTTP: ${response.status}`);
|
||||
|
||||
const text = await response.text();
|
||||
console.log(' Dashboard - Réponse brute compteurs:', text);
|
||||
console.log(' Dashboard - Longueur de la réponse:', text.length);
|
||||
console.log(' Dashboard - Premiers 500 caractères:', text.substring(0, 500));
|
||||
console.log("🔎 Réponse brute getLeaveCounters:", text);
|
||||
|
||||
let data;
|
||||
try {
|
||||
data = JSON.parse(text);
|
||||
} catch (parseError) {
|
||||
console.error(' Dashboard - Erreur parsing JSON:', parseError);
|
||||
console.error(' Dashboard - Texte qui a causé l\'erreur:', text);
|
||||
throw new Error('Réponse PHP invalide: ' + text.substring(0, 200));
|
||||
} catch (e) {
|
||||
throw new Error("Le serveur PHP ne renvoie pas un JSON valide");
|
||||
}
|
||||
|
||||
console.log(' Dashboard - Compteurs parsés:', data);
|
||||
|
||||
if (data.success) {
|
||||
console.log(' Dashboard - Compteurs récupérés:', data.counters);
|
||||
setLeaveCounters(data.counters);
|
||||
} else {
|
||||
console.error(' Dashboard - Erreur API compteurs:', data.message);
|
||||
console.error(' Dashboard - Données complètes:', data);
|
||||
throw new Error('API Error: ' + (data.message || 'Erreur inconnue'));
|
||||
throw new Error(data.message || "Erreur lors de la récupération des compteurs");
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('💥 Dashboard - Erreur lors de la récupération des compteurs:', error);
|
||||
|
||||
// Fallback avec des données par défaut
|
||||
console.log(' Dashboard - Utilisation des données par défaut');
|
||||
console.error("💥 Erreur compteurs:", error);
|
||||
setLeaveCounters({
|
||||
availableCP: 25,
|
||||
availableRTT: 10,
|
||||
@@ -75,78 +106,63 @@ const Dashboard = () => {
|
||||
rttInProcess: 0,
|
||||
absenteism: 0
|
||||
});
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
|
||||
setIsLoading(false);
|
||||
};
|
||||
|
||||
const fetchAllRequests = async () => {
|
||||
console.log(' Dashboard - Début fetchAllRequests pour user:', user?.id);
|
||||
|
||||
try {
|
||||
const url = `http://localhost/GTA/project/public/php/getRequests.php?user_id=${user.id}`;
|
||||
console.log(' Dashboard - URL appelée:', url);
|
||||
|
||||
const url = `http://localhost/GTA/project/public/php/getRequests.php?user_id=${userId}`;
|
||||
const response = await fetch(url);
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`Erreur HTTP: ${response.status}`);
|
||||
}
|
||||
if (!response.ok) throw new Error(`Erreur HTTP: ${response.status}`);
|
||||
|
||||
const text = await response.text();
|
||||
console.log(' Dashboard - Réponse brute:', text);
|
||||
console.log("🔎 Réponse brute getRequests:", text);
|
||||
|
||||
const data = JSON.parse(text);
|
||||
console.log(' Dashboard - Données parsées:', data);
|
||||
let data;
|
||||
try {
|
||||
data = JSON.parse(text);
|
||||
} catch {
|
||||
throw new Error("Le serveur PHP ne renvoie pas un JSON valide");
|
||||
}
|
||||
|
||||
if (data.success) {
|
||||
console.log('Dashboard - Demandes récupérées:', data.requests?.length || 0);
|
||||
setAllRequests(data.requests || []);
|
||||
setRecentRequests(data.requests?.slice(0, 3) || []);
|
||||
} else {
|
||||
throw new Error(data.message || 'Erreur lors de la récupération des demandes');
|
||||
throw new Error(data.message || "Erreur lors de la récupération des demandes");
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(' Dashboard - Erreur lors de la récupération des demandes:', error);
|
||||
|
||||
// En cas d'erreur, on garde des tableaux vides
|
||||
console.error("💥 Erreur demandes:", error);
|
||||
setAllRequests([]);
|
||||
setRecentRequests([]);
|
||||
}
|
||||
};
|
||||
|
||||
const handleResetCounters = async () => {
|
||||
if (!confirm(' ATTENTION !\n\nCette action va réinitialiser TOUS les compteurs de congés selon les règles de gestion :\n\n• Congés Payés : 25 jours (exercice 01/06 au 31/05)\n• RTT : 10 jours pour 2025 (exercice 01/01 au 31/12)\n• Congés Maladie : 0 jours\n\nCette action est IRRÉVERSIBLE !\n\nÊtes-vous sûr de vouloir continuer ?')) {
|
||||
return;
|
||||
}
|
||||
if (!confirm("⚠️ Voulez-vous vraiment réinitialiser les compteurs ?")) return;
|
||||
|
||||
try {
|
||||
const response = await fetch('http://localhost/GTA/project/public/php/resetLeaveCounters.php', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ manual_reset: true }),
|
||||
});
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (data.success) {
|
||||
alert(` Réinitialisation réussie !\n\n• ${data.details.employees_updated} employés mis à jour\n• Exercice CP : ${data.details.leave_year}\n• Année RTT : ${data.details.rtt_year}\n• Date : ${data.details.reset_date}`);
|
||||
alert("✅ Réinitialisation réussie !");
|
||||
fetchLeaveCounters();
|
||||
} else {
|
||||
alert(` Erreur lors de la réinitialisation :\n${data.message}`);
|
||||
alert(`❌ Erreur : ${data.message}`);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Erreur:', error);
|
||||
alert(' Erreur de connexion au serveur');
|
||||
console.error("Erreur:", error);
|
||||
alert("❌ Erreur serveur");
|
||||
}
|
||||
};
|
||||
|
||||
const openManualResetPage = () => {
|
||||
window.open('http://localhost/GTA/project/public/php/manualResetCounters.php', '_blank');
|
||||
};
|
||||
|
||||
const getStatusColor = (status) => {
|
||||
switch (status) {
|
||||
case 'Approuvé':
|
||||
@@ -392,7 +408,10 @@ const Dashboard = () => {
|
||||
<NewLeaveRequestModal
|
||||
onClose={() => setShowNewRequestModal(false)}
|
||||
availableLeaveCounters={leaveCounters}
|
||||
userId={user?.id}
|
||||
accessToken={graphToken}
|
||||
userId={userId}
|
||||
userEmail={user.email}
|
||||
userName={`${user.prenom} ${user.nom}`}
|
||||
onRequestSubmitted={() => {
|
||||
fetchLeaveCounters();
|
||||
fetchAllRequests();
|
||||
|
||||
Reference in New Issue
Block a user