import React, { useState, useEffect } from 'react'; import './NewLeaveRequestForm.css'; export default function NewLeaveRequestForm({ startDate, endDate, onClose, availableLeaveCounters, userId }) { const [leaveType, setLeaveType] = useState('CP'); const [formStartDate, setFormStartDate] = useState(''); const [formEndDate, setFormEndDate] = useState(''); const [comment, setComment] = useState(''); const [numDays, setNumDays] = useState(''); const [error, setError] = useState(''); const formatLocalDateToYYYYMMDD = (dateObject) => { if (!dateObject) return ''; const year = dateObject.getFullYear(); const month = (dateObject.getMonth() + 1).toString().padStart(2, '0'); const day = dateObject.getDate().toString().padStart(2, '0'); return `${year}-${month}-${day}`; }; useEffect(() => { if (startDate) { setFormStartDate(formatLocalDateToYYYYMMDD(startDate)); } if (endDate) { setFormEndDate(formatLocalDateToYYYYMMDD(endDate)); } else if (startDate) { setFormEndDate(formatLocalDateToYYYYMMDD(startDate)); } }, [startDate, endDate]); useEffect(() => { if (formStartDate && formEndDate) { const start = new Date(formStartDate); const end = new Date(formEndDate); if (end < start) { setError("La date de fin ne peut pas être antérieure à la date de début."); setNumDays(''); return; } let totalWorkingDays = 0; let currentDate = new Date(start); while (currentDate <= end) { const dayOfWeek = currentDate.getDay(); if (dayOfWeek !== 0 && dayOfWeek !== 6) { totalWorkingDays++; } currentDate.setDate(currentDate.getDate() + 1); } setNumDays(totalWorkingDays); setError(''); } else { setNumDays(''); setError(''); } }, [formStartDate, formEndDate]); const handleSubmit = async (e) => { e.preventDefault(); setError(''); if (!formStartDate || !formEndDate) { setError("Veuillez sélectionner les dates de début et de fin."); return; } const start = new Date(formStartDate); const end = new Date(formEndDate); if (end < start) { setError("La date de fin ne peut pas être antérieure à la date de début."); return; } if (isNaN(numDays) || numDays <= 0) { setError("Le nombre de jours demandés doit être un nombre positif."); return; } let hasEnoughDays = true; let errorMessage = ''; switch (leaveType) { case 'CP': if (numDays > availableLeaveCounters.availableCP) { hasEnoughDays = false; errorMessage = `Vous n'avez pas assez de jours de Congé Payé. Il vous reste ${availableLeaveCounters.availableCP} jours.`; } break; case 'RTT': if (numDays > availableLeaveCounters.availableRTT) { hasEnoughDays = false; errorMessage = `Vous n'avez pas assez de jours de RTT. Il vous reste ${availableLeaveCounters.availableRTT} jours.`; } break; case 'ABS': if (numDays > availableLeaveCounters.availableABS) { hasEnoughDays = false; errorMessage = `Vous n'avez pas assez de jours d'Absence (Maladie). Il vous reste ${availableLeaveCounters.availableABS} jours.`; } break; default: errorMessage = "Type de congé inconnu."; hasEnoughDays = false; } if (!hasEnoughDays) { setError(errorMessage); return; } const payload = { EmployeeId: userId, TypeConge: leaveType, DateDebut: formStartDate, DateFin: formEndDate, Commentaire: comment, NumDays: numDays }; console.log("Payload envoyé au backend :", payload); try { const response = await fetch('http://localhost/GestionDemandeCongeV1/api/submitLeaveRequest.php', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(payload), }); const text = await response.text(); console.log('Réponse brute du serveur :', text); try { const data = JSON.parse(text); if (data.success) { alert('Demande de congé soumise avec succès et en attente de validation par le manager !'); setLeaveType('CP'); setFormStartDate(''); setFormEndDate(''); setComment(''); setNumDays(''); if (onClose) { onClose(); } } else { setError(data.message || "Erreur lors de la soumission de la demande."); } } catch (jsonError) { console.error("Réponse invalide (pas du JSON) :", text); setError("Réponse du serveur invalide. Consulte la console pour plus de détails."); } } catch (error) { console.error('Erreur réseau ou du serveur lors de la soumission:', error); setError("Erreur de connexion au serveur. Veuillez vérifier que le serveur est démarré."); } }; return (

Nouvelle demande de congé

setFormStartDate(e.target.value)} required />
setFormEndDate(e.target.value)} required />
{error &&

{error}

}
); }