Ajout des nouveaux dossiers et fichiers, nettoyage des fichiers générés ensuite les nouveaux fichiers consiste à avoir la page de connexion et le dashboard

This commit is contained in:
2025-07-01 16:58:39 +02:00
parent fb719d95d7
commit 9f2669ec90
62 changed files with 19665 additions and 391 deletions

157
api/getLeaveCounters.php Normal file
View File

@@ -0,0 +1,157 @@
<?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();
?>

73
api/login.php Normal file
View File

@@ -0,0 +1,73 @@
<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: POST, 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
die(json_encode(["success" => false, "message" => "Erreur de connexion à la base de données : " . $conn->connect_error]));
}
// Récupère les données JSON envoyées via la requête POST
$data = json_decode(file_get_contents('php://input'), true);
$email = $data['email'] ?? '';
$mot_de_passe = $data['mot_de_passe'] ?? '';
$query = "SELECT ID, Prenom, Nom, Email FROM Users WHERE Email = ? AND MDP = ?";
$stmt = $conn->prepare($query);
// Vérifie si la préparation de la requête a réussi
if ($stmt === false) {
die(json_encode(["success" => false, "message" => "Erreur de préparation de la requête : " . $conn->error]));
}
// Lie les paramètres (ss = string, string pour email et mot_de_passe)
$stmt->bind_param("ss", $email, $mot_de_passe);
$stmt->execute();
// Récupère le résultat de la requête
$result = $stmt->get_result();
// Vérifie si un utilisateur correspondant a été trouvé
if ($result->num_rows === 1) {
// Récupère la ligne de l'utilisateur sous forme de tableau associatif
$user = $result->fetch_assoc();
// Renvoie une réponse JSON de succès avec les données de l'utilisateur
echo json_encode([
"success" => true,
"message" => "Connexion réussie.",
"user" => [
"id" => $user['ID'],
"prenom" => $user['Prenom'],
"nom" => $user['Nom'],
"email" => $user['Email']
]
]);
} else {
// Renvoie une réponse JSON d'échec si les identifiants sont incorrects
echo json_encode(["success" => false, "message" => "Identifiants incorrects."]);
}
// Ferme la connexion à la base de données
$stmt->close();
$conn->close();
?>

148
api/submitLeaveRequest.php Normal file
View File

@@ -0,0 +1,148 @@
<?php
// Active l'affichage des erreurs pour le dev
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: POST, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type");
// Gère le pré-vol CORS
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
http_response_code(200);
exit();
}
header("Content-Type: application/json");
// --- Paramètres de connexion ---
$host = "192.168.0.4";
$dbname = "DemandeConge";
$username = "wpuser";
$password = "-2b/)ru5/Bi8P[7_";
// Connexion
$conn = new mysqli($host, $username, $password, $dbname);
if ($conn->connect_error) {
echo json_encode([
"success" => false,
"message" => "Erreur de connexion DB : " . $conn->connect_error
]);
exit();
}
// Lecture du JSON envoyé
$input = file_get_contents('php://input');
$data = json_decode($input, true);
if (!isset(
$data['EmployeeId'],
$data['TypeConge'],
$data['DateDebut'],
$data['DateFin'],
$data['NumDays']
)) {
echo json_encode([
"success" => false,
"message" => "Données manquantes pour la demande de congé."
]);
exit();
}
// Récupération des champs
$employeeId = (int) $data['EmployeeId'];
$typeCongeNom= $data['TypeConge'];
$dateDebut = $data['DateDebut'];
$dateFin = $data['DateFin'];
$commentaire = $data['Commentaire'] ?? '';
$numDays = (int) $data['NumDays'];
$statut = 'En attente';
$validateur = null;
$currentDate= date('Y-m-d'); // date complète pour DateDemande
// Mapping frontend → DB
switch ($typeCongeNom) {
case 'CP': $dbTypeCongeName = 'Congé payé'; break;
case 'RTT': $dbTypeCongeName = 'RTT'; break;
case 'ABS': $dbTypeCongeName = 'Congé maladie'; break;
default:
echo json_encode([
"success" => false,
"message" => "Type de congé inconnu."
]);
$conn->close();
exit();
}
// Récupération de l'ID du type de congé
$stmt = $conn->prepare("SELECT Id FROM TypeConge WHERE Nom = ?");
$stmt->bind_param("s", $dbTypeCongeName);
$stmt->execute();
$res = $stmt->get_result();
if ($row = $res->fetch_assoc()) {
$typeCongeId = (int) $row['Id'];
} else {
echo json_encode([
"success" => false,
"message" => "Type de congé non trouvé en DB : $dbTypeCongeName"
]);
$stmt->close();
$conn->close();
exit();
}
$stmt->close();
// Requête d'insertion avec DateDemande explicitement dans l'insert
$query = "
INSERT INTO DemandeConge
(EmployeeId, DateDebut, DateFin, TypeCongeId, Statut, DateDemande, Commentaire, Validateur)
VALUES
(?, ?, ?, ?, ?, ?, ?, ?)
";
// Préparation de la requête
$stmt = $conn->prepare($query);
if (!$stmt) {
error_log("Erreur prepare insert : " . $conn->error);
echo json_encode([
"success" => false,
"message" => "Erreur interne lors de la préparation de la requête."
]);
$conn->close();
exit();
}
// Pour la colonne Validateur, on passe '' si null
$validParam = $validateur ?? '';
// Bind des paramètres (types : i=integer, s=string)
$stmt->bind_param(
"ississss",
$employeeId, // i
$dateDebut, // s
$dateFin, // s
$typeCongeId, // i
$statut, // s
$currentDate, // s - DateDemande
$commentaire, // s
$validParam // s
);
// Exécution
if ($stmt->execute()) {
echo json_encode([
"success" => true,
"message" => "Demande de congé soumise avec succès."
]);
} else {
error_log("Erreur execute insert : " . $stmt->error);
echo json_encode([
"success" => false,
"message" => "Erreur lors de l'enregistrement : " . $stmt->error
]);
}
$stmt->close();
$conn->close();

14
api/test_db.php Normal file
View File

@@ -0,0 +1,14 @@
<?php
$host = "192.168.0.4";
$dbname = "DemandeConge";
$username = "wpuser";
$password = "-2b/)ru5/Bi8P[7_";
$conn = new mysqli($host, $username, $password, $dbname);
if ($conn->connect_error) {
die("❌ Connexion échouée : " . $conn->connect_error);
}
echo "✅ Connexion réussie à la base de données !";
?>