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:
157
api/getLeaveCounters.php
Normal file
157
api/getLeaveCounters.php
Normal 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
73
api/login.php
Normal 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
148
api/submitLeaveRequest.php
Normal 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
14
api/test_db.php
Normal 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 !";
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user