Les filtreCollaborateur case rh/president et directeur de campus
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
<?php
|
||||
// Récupération des congés de l'équipe pour affichage dans le calendrier
|
||||
header("Access-Control-Allow-Origin: *");
|
||||
header("Access-Control-Allow-Methods: GET, OPTIONS");
|
||||
header("Access-Control-Allow-Headers: Content-Type");
|
||||
@@ -11,7 +10,6 @@ if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
|
||||
|
||||
header("Content-Type: application/json");
|
||||
|
||||
// Log des erreurs pour debug
|
||||
ini_set('display_errors', 1);
|
||||
ini_set('display_startup_errors', 1);
|
||||
error_reporting(E_ALL);
|
||||
@@ -22,93 +20,214 @@ $username = "wpuser";
|
||||
$password = "-2b/)ru5/Bi8P[7_";
|
||||
|
||||
$conn = new mysqli($host, $username, $password, $dbname);
|
||||
|
||||
if ($conn->connect_error) {
|
||||
error_log("Erreur connexion DB getTeamLeaves: " . $conn->connect_error);
|
||||
echo json_encode(["success" => false, "message" => "Erreur de connexion à la base de données"]);
|
||||
exit();
|
||||
}
|
||||
|
||||
// On récupère le rôle directement depuis la requête GET pour la logique PHP
|
||||
$userId = $_GET['user_id'] ?? null;
|
||||
$role = strtolower($_GET['role'] ?? 'collaborateur');
|
||||
|
||||
if ($userId === null) {
|
||||
echo json_encode(["success" => false, "message" => "ID utilisateur manquant"]);
|
||||
exit();
|
||||
}
|
||||
|
||||
error_log("getTeamLeaves - User ID: $userId");
|
||||
|
||||
try {
|
||||
// Récupérer le service de l'utilisateur
|
||||
$queryUserService = "SELECT ServiceId FROM Users WHERE ID = ?";
|
||||
$stmtUser = $conn->prepare($queryUserService);
|
||||
// 🔹 Infos utilisateur
|
||||
$queryUser = "
|
||||
SELECT ca.ServiceId, sa.CampusId, sa.SocieteId,
|
||||
s.Nom as service_nom, c.Nom as campus_nom, so.Nom as societe_nom
|
||||
FROM CollaborateurAD ca
|
||||
JOIN ServiceAffectation sa ON sa.ServiceId = ca.ServiceId
|
||||
JOIN Services s ON ca.ServiceId = s.Id
|
||||
JOIN Campus c ON sa.CampusId = c.Id
|
||||
JOIN Societe so ON sa.SocieteId = so.Id
|
||||
WHERE ca.id = ?
|
||||
LIMIT 1
|
||||
";
|
||||
$stmtUser = $conn->prepare($queryUser);
|
||||
$stmtUser->bind_param("i", $userId);
|
||||
$stmtUser->execute();
|
||||
$resultUser = $stmtUser->get_result();
|
||||
|
||||
if ($userRow = $resultUser->fetch_assoc()) {
|
||||
$serviceId = $userRow['ServiceId'];
|
||||
error_log("getTeamLeaves - Service ID: $serviceId");
|
||||
|
||||
// Récupérer les congés validés de l'équipe (même service)
|
||||
$queryLeaves = "
|
||||
SELECT
|
||||
dc.DateDebut as start_date,
|
||||
dc.DateFin as end_date,
|
||||
CONCAT(u.Prenom, ' ', u.Nom) as employee_name,
|
||||
tc.Nom as type,
|
||||
tc.CouleurHex as color
|
||||
FROM DemandeConge dc
|
||||
JOIN Users u ON dc.EmployeeId = u.ID
|
||||
JOIN TypeConge tc ON dc.TypeCongeId = tc.Id
|
||||
WHERE u.ServiceId = ?
|
||||
AND dc.Statut = 'Validée'
|
||||
AND dc.DateFin >= CURDATE() - INTERVAL 30 DAY
|
||||
ORDER BY dc.DateDebut ASC
|
||||
";
|
||||
|
||||
$stmtLeaves = $conn->prepare($queryLeaves);
|
||||
$stmtLeaves->bind_param("i", $serviceId);
|
||||
$stmtLeaves->execute();
|
||||
$resultLeaves = $stmtLeaves->get_result();
|
||||
|
||||
$leaves = [];
|
||||
while ($row = $resultLeaves->fetch_assoc()) {
|
||||
$leaves[] = [
|
||||
'start_date' => $row['start_date'],
|
||||
'end_date' => $row['end_date'],
|
||||
'employee_name' => $row['employee_name'],
|
||||
'type' => $row['type'],
|
||||
'color' => $row['color'] ?? '#3B82F6'
|
||||
];
|
||||
}
|
||||
|
||||
error_log("getTeamLeaves - Congés trouvés: " . count($leaves));
|
||||
|
||||
echo json_encode([
|
||||
"success" => true,
|
||||
"message" => "Congés de l'équipe récupérés avec succès",
|
||||
"leaves" => $leaves,
|
||||
"service_id" => $serviceId
|
||||
]);
|
||||
|
||||
$stmtLeaves->close();
|
||||
} else {
|
||||
error_log("getTeamLeaves - Utilisateur non trouvé: $userId");
|
||||
echo json_encode([
|
||||
"success" => false,
|
||||
"message" => "Utilisateur non trouvé"
|
||||
]);
|
||||
|
||||
if (!$userRow = $resultUser->fetch_assoc()) {
|
||||
echo json_encode(["success" => false, "message" => "Collaborateur non trouvé"]);
|
||||
exit();
|
||||
}
|
||||
|
||||
$stmtUser->close();
|
||||
|
||||
} catch (Exception $e) {
|
||||
error_log("Erreur getTeamLeaves: " . $e->getMessage());
|
||||
|
||||
$serviceId = $userRow['ServiceId'];
|
||||
$campusId = $userRow['CampusId'];
|
||||
$societeId = $userRow['SocieteId'];
|
||||
|
||||
// -------------------------
|
||||
// 🔹 Construire la requête selon le rôle
|
||||
// -------------------------
|
||||
switch ($role) {
|
||||
case 'president':
|
||||
case 'rh':
|
||||
$queryLeaves = "
|
||||
SELECT
|
||||
DATE_FORMAT(dc.DateDebut, '%Y-%m-%d') as start_date,
|
||||
DATE_FORMAT(dc.DateFin, '%Y-%m-%d') as end_date,
|
||||
CONCAT(ca.prenom, ' ', ca.nom) as employee_name,
|
||||
tc.Nom as type,
|
||||
tc.CouleurHex as color,
|
||||
s.Nom as service_nom,
|
||||
c.Nom as campus_nom,
|
||||
so.Nom as societe_nom
|
||||
FROM DemandeConge dc
|
||||
JOIN CollaborateurAD ca ON dc.CollaborateurADId = ca.id
|
||||
JOIN TypeConge tc ON dc.TypeCongeId = tc.Id
|
||||
JOIN ServiceAffectation sa ON sa.ServiceId = ca.ServiceId
|
||||
JOIN Services s ON sa.ServiceId = s.Id
|
||||
JOIN Campus c ON sa.CampusId = c.Id
|
||||
JOIN Societe so ON sa.SocieteId = so.Id -- CORRIGÉ ICI
|
||||
WHERE dc.Statut = 'Validée'
|
||||
ORDER BY c.Nom, so.Nom, s.Nom, dc.DateDebut ASC
|
||||
";
|
||||
$stmtLeaves = $conn->prepare($queryLeaves);
|
||||
break;
|
||||
|
||||
case 'directeur de campus':
|
||||
$queryLeaves = "
|
||||
SELECT
|
||||
DATE_FORMAT(dc.DateDebut, '%Y-%m-%d') as start_date,
|
||||
DATE_FORMAT(dc.DateFin, '%Y-%m-%d') as end_date,
|
||||
CONCAT(ca.prenom, ' ', ca.nom) as employee_name,
|
||||
tc.Nom as type,
|
||||
tc.CouleurHex as color,
|
||||
s.Nom as service_nom,
|
||||
so.Nom as societe_nom,
|
||||
c.Nom as campus_nom
|
||||
FROM DemandeConge dc
|
||||
JOIN CollaborateurAD ca ON dc.CollaborateurADId = ca.id
|
||||
JOIN TypeConge tc ON dc.TypeCongeId = tc.Id
|
||||
JOIN ServiceAffectation sa ON sa.ServiceId = ca.ServiceId
|
||||
JOIN Services s ON sa.ServiceId = s.Id
|
||||
JOIN Societe so ON sa.SocieteId = so.Id -- CORRIGÉ ICI
|
||||
JOIN Campus c ON sa.CampusId = c.Id
|
||||
WHERE sa.CampusId = ?
|
||||
AND dc.Statut = 'Validée'
|
||||
ORDER BY so.Nom, s.Nom, dc.DateDebut ASC
|
||||
";
|
||||
$stmtLeaves = $conn->prepare($queryLeaves);
|
||||
$stmtLeaves->bind_param("i", $campusId);
|
||||
break;
|
||||
|
||||
case 'validateur':
|
||||
case 'collaborateur':
|
||||
default:
|
||||
$queryLeaves = "
|
||||
SELECT
|
||||
DATE_FORMAT(dc.DateDebut, '%Y-%m-%d') as start_date,
|
||||
DATE_FORMAT(dc.DateFin, '%Y-%m-%d') as end_date,
|
||||
CONCAT(ca.prenom, ' ', ca.nom) as employee_name,
|
||||
tc.Nom as type,
|
||||
tc.CouleurHex as color,
|
||||
s.Nom as service_nom,
|
||||
c.Nom as campus_nom,
|
||||
so.Nom as societe_nom
|
||||
FROM DemandeConge dc
|
||||
JOIN CollaborateurAD ca ON dc.CollaborateurADId = ca.id
|
||||
JOIN TypeConge tc ON dc.TypeCongeId = tc.Id
|
||||
JOIN ServiceAffectation sa ON sa.ServiceId = ca.ServiceId
|
||||
JOIN Services s ON sa.ServiceId = s.Id
|
||||
JOIN Campus c ON sa.CampusId = c.Id
|
||||
JOIN Societe so ON sa.SocieteId = so.Id -- CORRIGÉ ICI
|
||||
WHERE ca.ServiceId = ?
|
||||
AND sa.CampusId = ?
|
||||
AND dc.Statut = 'Validée'
|
||||
AND dc.DateFin >= CURDATE() - INTERVAL 30 DAY
|
||||
ORDER BY dc.DateDebut ASC
|
||||
";
|
||||
$stmtLeaves = $conn->prepare($queryLeaves);
|
||||
$stmtLeaves->bind_param("ii", $serviceId, $campusId);
|
||||
}
|
||||
|
||||
$stmtLeaves->execute();
|
||||
$resultLeaves = $stmtLeaves->get_result();
|
||||
|
||||
$leaves = [];
|
||||
while ($row = $resultLeaves->fetch_assoc()) {
|
||||
$leaves[] = [
|
||||
'start_date' => $row['start_date'],
|
||||
'end_date' => $row['end_date'],
|
||||
'employee_name' => $row['employee_name'],
|
||||
'type' => $row['type'],
|
||||
'color' => $row['color'] ?? '#3B82F6',
|
||||
'service_nom' => $row['service_nom'],
|
||||
'campus_nom' => $row['campus_nom'] ?? null,
|
||||
'societe_nom' => $row['societe_nom'] ?? null
|
||||
];
|
||||
}
|
||||
|
||||
// -------------------------
|
||||
// 🔹 Construire les filtres dynamiques
|
||||
// -------------------------
|
||||
$filters = [];
|
||||
|
||||
if (in_array($role, ['collaborateur', 'validateur'])) {
|
||||
$queryEmployees = "
|
||||
SELECT CONCAT(ca.prenom, ' ', ca.nom) as employee_name
|
||||
FROM CollaborateurAD ca
|
||||
JOIN ServiceAffectation sa ON sa.ServiceId = ca.ServiceId
|
||||
WHERE ca.ServiceId = ?
|
||||
AND sa.CampusId = ?
|
||||
ORDER BY ca.prenom, ca.nom
|
||||
";
|
||||
$stmtEmployees = $conn->prepare($queryEmployees);
|
||||
$stmtEmployees->bind_param("ii", $serviceId, $campusId);
|
||||
$stmtEmployees->execute();
|
||||
$resultEmployees = $stmtEmployees->get_result();
|
||||
|
||||
$employees = [];
|
||||
while ($row = $resultEmployees->fetch_assoc()) {
|
||||
$employees[] = $row['employee_name'];
|
||||
}
|
||||
$filters['employees'] = $employees;
|
||||
$stmtEmployees->close();
|
||||
|
||||
} elseif ($role === 'directeur de campus') {
|
||||
|
||||
$filters['societes'] = [];
|
||||
$filters['services'] = [];
|
||||
$result = $conn->query("SELECT DISTINCT Nom as societe_nom FROM Societe ORDER BY societe_nom");
|
||||
while($row = $result->fetch_assoc()) $filters['societes'][] = $row['societe_nom'];
|
||||
|
||||
$result = $conn->query("SELECT DISTINCT Nom as service_nom FROM Services ORDER BY service_nom");
|
||||
while($row = $result->fetch_assoc()) $filters['services'][] = $row['service_nom'];
|
||||
|
||||
|
||||
} elseif (in_array($role, ['president', 'rh'])) {
|
||||
// 🔹 Récupérer tous les campus, sociétés, services de manière unique
|
||||
$filters['campus'] = [];
|
||||
$filters['societes'] = [];
|
||||
$filters['services'] = [];
|
||||
|
||||
$result = $conn->query("SELECT DISTINCT Nom as campus_nom FROM Campus ORDER BY campus_nom");
|
||||
while($row = $result->fetch_assoc()) $filters['campus'][] = $row['campus_nom'];
|
||||
|
||||
$result = $conn->query("SELECT DISTINCT Nom as societe_nom FROM Societe ORDER BY societe_nom");
|
||||
while($row = $result->fetch_assoc()) $filters['societes'][] = $row['societe_nom'];
|
||||
|
||||
$result = $conn->query("SELECT DISTINCT Nom as service_nom FROM Services ORDER BY service_nom");
|
||||
while($row = $result->fetch_assoc()) $filters['services'][] = $row['service_nom'];
|
||||
}
|
||||
|
||||
echo json_encode([
|
||||
"success" => false,
|
||||
"message" => "Erreur lors de la récupération des congés: " . $e->getMessage()
|
||||
"success" => true,
|
||||
"role" => $role,
|
||||
"leaves" => $leaves,
|
||||
"filters" => $filters
|
||||
]);
|
||||
|
||||
$stmtLeaves->close();
|
||||
$stmtUser->close();
|
||||
|
||||
} catch (Exception $e) {
|
||||
echo json_encode(["success" => false, "message" => "Erreur: " . $e->getMessage()]);
|
||||
}
|
||||
|
||||
$conn->close();
|
||||
|
||||
Reference in New Issue
Block a user