157 lines
5.5 KiB
PHP
157 lines
5.5 KiB
PHP
<?php
|
|
header("Access-Control-Allow-Origin: *");
|
|
header("Access-Control-Allow-Methods: GET, OPTIONS");
|
|
header("Access-Control-Allow-Headers: Content-Type");
|
|
|
|
// Gère la requête OPTIONS (pré-vol CORS)
|
|
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
|
|
http_response_code(200);
|
|
exit();
|
|
}
|
|
|
|
header("Content-Type: application/json");
|
|
|
|
$host = "192.168.0.4";
|
|
$dbname = "DemandeConge";
|
|
$username = "wpuser";
|
|
$password = "-2b/)ru5/Bi8P[7_";
|
|
|
|
// Crée une nouvelle connexion à la base de données
|
|
$conn = new mysqli($host, $username, $password, $dbname);
|
|
|
|
// Vérifie la connexion
|
|
if ($conn->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();
|
|
?>
|