connect_error) { // En cas d'erreur de connexion, renvoie un JSON d'échec echo json_encode(["success" => false, "message" => "Erreur de connexion à la base de données : " . $conn->connect_error]); exit(); } // Récupère l'ID utilisateur depuis les paramètres de requête GET $userId = $_GET['user_id'] ?? null; if ($userId === null) { echo json_encode(["success" => false, "message" => "ID utilisateur manquant."]); exit(); } $currentYear = date('Y'); // Année actuelle pour CompteurConges $currentDate = date('Y-m-d'); // Date actuelle pour les filtres de demandes // Variables pour les soldes disponibles $cpSolde = 0; $rttSolde = 0; $absSolde = 0; // Solde pour 'Congé maladie' // Variables pour les demandes en cours/validées $rttInProcess = 0; $absenteism = 0; $queryCPSolde = "SELECT cc.Solde FROM CompteurConges cc JOIN TypeConge tc ON cc.TypeCongeId = tc.Id WHERE cc.EmployeeId = ? AND tc.Nom = 'Congé payé' AND cc.Annee = ?"; $stmtCPSolde = $conn->prepare($queryCPSolde); if ($stmtCPSolde === false) { error_log("Erreur de préparation de la requête CP Solde : " . $conn->error); } else { $stmtCPSolde->bind_param("ii", $userId, $currentYear); $stmtCPSolde->execute(); $resultCPSolde = $stmtCPSolde->get_result(); if ($rowCPSolde = $resultCPSolde->fetch_assoc()) { $cpSolde = $rowCPSolde['Solde']; } $stmtCPSolde->close(); } $queryRTTSolde = "SELECT cc.Solde FROM CompteurConges cc JOIN TypeConge tc ON cc.TypeCongeId = tc.Id WHERE cc.EmployeeId = ? AND tc.Nom = 'RTT' AND cc.Annee = ?"; $stmtRTTSolde = $conn->prepare($queryRTTSolde); if ($stmtRTTSolde === false) { error_log("Erreur de préparation de la requête RTT Solde : " . $conn->error); } else { $stmtRTTSolde->bind_param("ii", $userId, $currentYear); $stmtRTTSolde->execute(); $resultRTTSolde = $stmtRTTSolde->get_result(); if ($rowRTTSolde = $resultRTTSolde->fetch_assoc()) { $rttSolde = $rowRTTSolde['Solde']; } $stmtRTTSolde->close(); } $queryABSSolde = "SELECT cc.Solde FROM CompteurConges cc JOIN TypeConge tc ON cc.TypeCongeId = tc.Id WHERE cc.EmployeeId = ? AND tc.Nom = 'Congé maladie' AND cc.Annee = ?"; $stmtABSSolde = $conn->prepare($queryABSSolde); if ($stmtABSSolde === false) { error_log("Erreur de préparation de la requête ABS Solde : " . $conn->error); } else { $stmtABSSolde->bind_param("ii", $userId, $currentYear); $stmtABSSolde->execute(); $resultABSSolde = $stmtABSSolde->get_result(); if ($rowABSSolde = $resultABSSolde->fetch_assoc()) { $absSolde = $rowABSSolde['Solde']; } $stmtABSSolde->close(); } // --- Calcul des RTT en cours (somme des jours DATEDIFF à partir de DemandeConge) --- $queryRTTInProcess = "SELECT SUM(DATEDIFF(dc.DateFin, dc.DateDebut) + 1) AS total_rtt_en_cours FROM DemandeConge dc JOIN TypeConge tc ON dc.TypeCongeId = tc.Id WHERE dc.EmployeeId = ? AND tc.Nom = 'RTT' AND dc.Statut IN ('En attente', 'Validée') AND dc.DateFin >= ?"; $stmtRTTInProcess = $conn->prepare($queryRTTInProcess); if ($stmtRTTInProcess === false) { error_log("Erreur de préparation de la requête RTT en cours : " . $conn->error); } else { $stmtRTTInProcess->bind_param("is", $userId, $currentDate); $stmtRTTInProcess->execute(); $resultRTTInProcess = $stmtRTTInProcess->get_result(); if ($rowRTTInProcess = $resultRTTInProcess->fetch_assoc()) { $rttInProcess = $rowRTTInProcess['total_rtt_en_cours'] ?? 0; } $stmtRTTInProcess->close(); } // --- Calcul des jours d'absence (ABS) (somme des jours DATEDIFF à partir de DemandeConge) --- $queryABSInProcess = "SELECT SUM(DATEDIFF(dc.DateFin, dc.DateDebut) + 1) AS total_abs FROM DemandeConge dc JOIN TypeConge tc ON dc.TypeCongeId = tc.Id WHERE dc.EmployeeId = ? AND tc.Nom = 'Congé maladie' AND dc.Statut = 'Validée'"; $stmtABSInProcess = $conn->prepare($queryABSInProcess); if ($stmtABSInProcess === false) { error_log("Erreur de préparation de la requête ABS en cours : " . $conn->error); } else { $stmtABSInProcess->bind_param("i", $userId); $stmtABSInProcess->execute(); $resultABSInProcess = $stmtABSInProcess->get_result(); if ($rowABSInProcess = $resultABSInProcess->fetch_assoc()) { $absenteism = $rowABSInProcess['total_abs'] ?? 0; } $stmtABSInProcess->close(); } // Renvoie les compteurs sous format JSON echo json_encode([ "success" => true, "message" => "Compteurs récupérés avec succès.", "counters" => [ "availableCP" => (int)$cpSolde, "availableRTT" => (int)$rttSolde, "availableABS" => (int)$absSolde, "rttInProcess" => (int)$rttInProcess, "absenteism" => (int)$absenteism ] ]); $conn->close(); ?>