changement au niveau de requetes adaptés aux collaborateurs AD
This commit is contained in:
@@ -1,14 +1,21 @@
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import { X, Calendar, Clock, AlertCircle, RotateCcw } from 'lucide-react';
|
||||
import { useMsal } from "@azure/msal-react";
|
||||
import { loginRequest } from "../AuthConfig";
|
||||
|
||||
|
||||
const NewLeaveRequestModal = ({
|
||||
onClose,
|
||||
availableLeaveCounters,
|
||||
userId,
|
||||
userEmail,
|
||||
userName,
|
||||
accessToken,
|
||||
onRequestSubmitted,
|
||||
preselectedStartDate = null,
|
||||
preselectedEndDate = null,
|
||||
preselectedType = null
|
||||
preselectedType = null,
|
||||
|
||||
}) => {
|
||||
const [formData, setFormData] = useState({
|
||||
types: preselectedType ? [preselectedType] : [],
|
||||
@@ -18,6 +25,7 @@ const NewLeaveRequestModal = ({
|
||||
medicalDocuments: []
|
||||
});
|
||||
|
||||
|
||||
const [typeDistribution, setTypeDistribution] = useState({});
|
||||
|
||||
const [isSubmitting, setIsSubmitting] = useState(false);
|
||||
@@ -27,6 +35,25 @@ const NewLeaveRequestModal = ({
|
||||
const [isOtherChecked, setIsOtherChecked] = useState(false);
|
||||
const [otherLeaveType, setOtherLeaveType] = useState('');
|
||||
|
||||
const { instance, accounts } = useMsal();
|
||||
|
||||
|
||||
// --- Helper pour garantir un token Graph valide
|
||||
const ensureGraphToken = async () => {
|
||||
if (!accounts[0]) throw new Error("Aucun utilisateur connecté");
|
||||
|
||||
const request = { ...loginRequest, account: accounts[0] };
|
||||
|
||||
try {
|
||||
const response = await instance.acquireTokenSilent(request);
|
||||
return response.accessToken;
|
||||
} catch (err) {
|
||||
console.warn("⚠️ Silent token failed, trying popup:", err);
|
||||
const response = await instance.acquireTokenPopup(request);
|
||||
return response.accessToken;
|
||||
}
|
||||
};
|
||||
|
||||
// Vérifier si des valeurs sont pré-sélectionnées
|
||||
useEffect(() => {
|
||||
if (preselectedStartDate || preselectedEndDate || preselectedType) {
|
||||
@@ -273,55 +300,50 @@ const NewLeaveRequestModal = ({
|
||||
}));
|
||||
|
||||
const requestData = {
|
||||
EmployeeId: userId,
|
||||
DateDebut: formData.startDate,
|
||||
DateFin: formData.endDate,
|
||||
Commentaire: formData.reason,
|
||||
NombreJours: calculatedDays,
|
||||
Repartition: repartition
|
||||
Repartition: repartition,
|
||||
Email: userEmail,
|
||||
Nom: userName
|
||||
};
|
||||
console.log("Payload envoyé au backend :", JSON.stringify(requestData, null, 2));
|
||||
|
||||
const formDataToSend = new FormData();
|
||||
formDataToSend.append('data', JSON.stringify(requestData));
|
||||
|
||||
// Ajouter les fichiers
|
||||
formData.medicalDocuments.forEach((file, index) => {
|
||||
formDataToSend.append(`medicalDocuments[]`, file);
|
||||
});
|
||||
console.log("📤 Payload envoyé au backend :", JSON.stringify(requestData, null, 2));
|
||||
|
||||
const response = await fetch('http://localhost/GTA/project/public/php/submitLeaveRequest.php', {
|
||||
method: 'POST',
|
||||
body: formDataToSend
|
||||
headers: {
|
||||
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(requestData)
|
||||
});
|
||||
|
||||
const result = await response.json();
|
||||
console.log("📥 Réponse backend :", result);
|
||||
|
||||
const text = await response.text();
|
||||
let result;
|
||||
try {
|
||||
result = JSON.parse(text);
|
||||
} catch (err) {
|
||||
console.error("Réponse non JSON:", text);
|
||||
setError("Erreur serveur : réponse invalide.");
|
||||
if (!result.success) {
|
||||
setError(result.message || "Erreur lors de l'enregistrement");
|
||||
return;
|
||||
}
|
||||
|
||||
if (result.success) {
|
||||
onRequestSubmitted?.();
|
||||
onClose();
|
||||
} else {
|
||||
setError(result.message || 'Erreur lors de la soumission');
|
||||
}
|
||||
console.log("✅ Demande enregistrée (et mails envoyés côté PHP)");
|
||||
|
||||
// Fermer modal et rafraîchir
|
||||
onRequestSubmitted?.();
|
||||
onClose();
|
||||
|
||||
} catch (error) {
|
||||
console.error('Erreur:', error);
|
||||
setError('Erreur de connexion au serveur');
|
||||
console.error('❌ Erreur handleSubmit:', error);
|
||||
setError("Erreur de connexion au serveur");
|
||||
} finally {
|
||||
setIsSubmitting(false);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
const getTypeLabel = (type) => {
|
||||
switch (type) {
|
||||
case 'CP': return 'Congés payés';
|
||||
|
||||
@@ -13,7 +13,7 @@ const Sidebar = ({ isOpen, onToggle }) => {
|
||||
switch (role) {
|
||||
case 'Admin':
|
||||
return 'bg-red-100 text-red-800';
|
||||
case 'Manager':
|
||||
case 'Validateur':
|
||||
return 'bg-green-100 text-green-800';
|
||||
default:
|
||||
return 'bg-blue-100 text-blue-800';
|
||||
@@ -109,7 +109,7 @@ const Sidebar = ({ isOpen, onToggle }) => {
|
||||
<span className="font-medium">Calendrier</span>
|
||||
</Link>
|
||||
|
||||
{(user?.role === 'Manager' || user?.role === 'Admin' || user?.role === 'Employe') && (
|
||||
{(user?.role === 'Validateur' || user?.role === 'Admin' || user?.role === 'Collaborateur') && (
|
||||
<Link
|
||||
to="/manager"
|
||||
onClick={() => window.innerWidth < 1024 && onToggle()}
|
||||
@@ -118,7 +118,7 @@ const Sidebar = ({ isOpen, onToggle }) => {
|
||||
>
|
||||
<Users className="w-5 h-5" />
|
||||
<span className="font-medium">
|
||||
{user?.role === 'Employe' ? 'Mon équipe' : 'Équipe'}
|
||||
{user?.role === 'Collaborateur' ? 'Mon équipe' : 'Équipe'}
|
||||
</span>
|
||||
</Link>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user