résumé de la demande

This commit is contained in:
2025-08-08 14:37:37 +02:00
parent b066dcd136
commit 011620fb39
5 changed files with 227 additions and 493 deletions

View File

@@ -255,52 +255,64 @@ const NewLeaveRequestModal = ({
const handleSubmit = async (e) => {
e.preventDefault();
if (!validateForm()) return;
setIsSubmitting(true);
setError('');
try {
// Créer une demande pour chaque type de congé
const requests = formData.types.map(type => {
const days = formData.types.length > 1 ? (typeDistribution[type] || 0) : calculatedDays;
// Utiliser le type sélectionné dans la liste déroulante si "Autre" est coché
const finalType = type === 'Autres' ? otherLeaveType : type;
return {
EmployeeId: userId,
TypeConge: type,
DateDebut: formData.startDate,
DateFin: formData.endDate,
Commentaire: formData.reason + (formData.types.length > 1 ? ` (${days} jours ${getTypeLabel(type)})` : ''),
NumDays: days
};
});
// Soumettre toutes les demandes
const responses = await Promise.all(
requests.map(requestData =>
fetch('http://localhost/GTA/project/public/submitLeaveRequest.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(requestData),
})
)
const finalTypes = formData.types.map(type =>
type === 'Autres' ? otherLeaveType : type
);
const results = await Promise.all(responses.map(r => r.json()));
const repartition = finalTypes.map(type => ({
TypeConge: type,
NombreJours: formData.types.length > 1
? (typeDistribution[type] || 0)
: calculatedDays
}));
const allSuccessful = results.every(result => result.success);
const requestData = {
EmployeeId: userId,
DateDebut: formData.startDate,
DateFin: formData.endDate,
Commentaire: formData.reason,
NombreJours: calculatedDays,
Repartition: repartition
};
console.log("Payload envoyé au backend :", JSON.stringify(requestData, null, 2));
if (allSuccessful) {
const formDataToSend = new FormData();
formDataToSend.append('data', JSON.stringify(requestData));
// Ajouter les fichiers
formData.medicalDocuments.forEach((file, index) => {
formDataToSend.append(`medicalDocuments[]`, file);
});
const response = await fetch('http://localhost/GTA/project/public/submitLeaveRequest.php', {
method: 'POST',
body: formDataToSend
});
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.");
return;
}
if (result.success) {
onRequestSubmitted?.();
onClose();
} else {
const failedResults = results.filter(r => !r.success);
setError(`Erreur lors de la soumission : ${failedResults.map(r => r.message).join(', ')}`);
setError(result.message || 'Erreur lors de la soumission');
}
} catch (error) {
console.error('Erreur:', error);
setError('Erreur de connexion au serveur');
@@ -309,6 +321,7 @@ const NewLeaveRequestModal = ({
}
};
const getTypeLabel = (type) => {
switch (type) {
case 'CP': return 'Congés payés';