228 lines
7.5 KiB
PHP
228 lines
7.5 KiB
PHP
<?php
|
|
// Script de réinitialisation des compteurs de congés
|
|
// À exécuter manuellement ou via cron job
|
|
|
|
header("Access-Control-Allow-Origin: *");
|
|
header("Access-Control-Allow-Methods: POST, OPTIONS");
|
|
header("Access-Control-Allow-Headers: Content-Type");
|
|
header("Content-Type: application/json");
|
|
|
|
// Gère la requête OPTIONS (pré-vol CORS)
|
|
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
|
|
http_response_code(200);
|
|
exit();
|
|
}
|
|
|
|
// Log des erreurs pour debug
|
|
ini_set('display_errors', 1);
|
|
ini_set('display_startup_errors', 1);
|
|
error_reporting(E_ALL);
|
|
|
|
$host = "192.168.0.4";
|
|
$dbname = "DemandeConge";
|
|
$username = "wpuser";
|
|
$password = "-2b/)ru5/Bi8P[7_";
|
|
|
|
// Connexion à la base de données
|
|
$conn = new mysqli($host, $username, $password, $dbname);
|
|
|
|
if ($conn->connect_error) {
|
|
error_log("Erreur connexion DB reset: " . $conn->connect_error);
|
|
echo json_encode([
|
|
"success" => false,
|
|
"message" => "Erreur de connexion à la base de données : " . $conn->connect_error
|
|
]);
|
|
exit();
|
|
}
|
|
|
|
// Log de debug
|
|
error_log("Reset counters - Début du script");
|
|
|
|
// Fonction pour déterminer l'exercice des congés payés (01/06 au 31/05)
|
|
function getLeaveYear($date = null) {
|
|
if ($date === null) {
|
|
$date = new DateTime();
|
|
} else {
|
|
$date = new DateTime($date);
|
|
}
|
|
|
|
$currentYear = (int)$date->format('Y');
|
|
$currentMonth = (int)$date->format('m');
|
|
|
|
// Si on est avant le 1er juin, l'exercice a commencé l'année précédente
|
|
if ($currentMonth < 6) {
|
|
return $currentYear - 1;
|
|
}
|
|
// Si on est le 1er juin ou après, l'exercice a commencé cette année
|
|
return $currentYear;
|
|
}
|
|
|
|
// Fonction pour déterminer l'année RTT (01/01 au 31/12)
|
|
function getRTTYear($date = null) {
|
|
if ($date === null) {
|
|
$date = new DateTime();
|
|
} else {
|
|
$date = new DateTime($date);
|
|
}
|
|
|
|
return (int)$date->format('Y');
|
|
}
|
|
|
|
try {
|
|
$conn->begin_transaction();
|
|
|
|
$currentDate = new DateTime();
|
|
$leaveYear = getLeaveYear();
|
|
$rttYear = getRTTYear();
|
|
|
|
error_log("Reset counters - Exercice CP: $leaveYear, RTT: $rttYear");
|
|
|
|
$resetLog = [];
|
|
|
|
// 1. Récupérer tous les employés depuis la table Users
|
|
$queryEmployees = "SELECT ID FROM Users";
|
|
$resultEmployees = $conn->query($queryEmployees);
|
|
|
|
if (!$resultEmployees) {
|
|
throw new Exception("Erreur lors de la récupération des employés : " . $conn->error);
|
|
}
|
|
|
|
error_log("Reset counters - Nombre d'employés trouvés: " . $resultEmployees->num_rows);
|
|
|
|
// 2. Récupérer les IDs des types de congés
|
|
$queryTypes = "SELECT Id, Nom FROM TypeConge WHERE Nom IN ('Congé payé', 'RTT', 'Congé maladie')";
|
|
$resultTypes = $conn->query($queryTypes);
|
|
|
|
$typeIds = [];
|
|
while ($row = $resultTypes->fetch_assoc()) {
|
|
$typeIds[$row['Nom']] = $row['Id'];
|
|
}
|
|
|
|
error_log("Reset counters - Types trouvés: " . print_r($typeIds, true));
|
|
|
|
if (count($typeIds) < 3) {
|
|
throw new Exception("Types de congés manquants dans la base de données");
|
|
}
|
|
|
|
// 3. Pour chaque employé, réinitialiser les compteurs
|
|
$employeesUpdated = 0;
|
|
while ($employee = $resultEmployees->fetch_assoc()) {
|
|
$employeeId = $employee['ID'];
|
|
|
|
error_log("Reset counters - Traitement employé: $employeeId");
|
|
|
|
// CONGÉS PAYÉS - Exercice du 01/06 au 31/05 (25 jours)
|
|
$queryUpdateCP = "
|
|
INSERT INTO CompteurConges (EmployeeId, TypeCongeId, Annee, Solde, Total)
|
|
VALUES (?, ?, ?, 25, 25)
|
|
ON DUPLICATE KEY UPDATE
|
|
Solde = 25,
|
|
Total = 25
|
|
";
|
|
$stmtCP = $conn->prepare($queryUpdateCP);
|
|
if (!$stmtCP) {
|
|
throw new Exception("Erreur préparation CP: " . $conn->error);
|
|
}
|
|
$stmtCP->bind_param("iii", $employeeId, $typeIds['Congé payé'], $leaveYear);
|
|
|
|
if (!$stmtCP->execute()) {
|
|
throw new Exception("Erreur lors de la mise à jour des CP pour l'employé $employeeId : " . $stmtCP->error);
|
|
}
|
|
$stmtCP->close();
|
|
|
|
// RTT - Année civile du 01/01 au 31/12
|
|
// Calcul du nombre de RTT selon l'année
|
|
$rttCount = 10; // Par défaut 10 pour 2025
|
|
if ($rttYear == 2024) {
|
|
$rttCount = 8; // Exemple pour 2024
|
|
} elseif ($rttYear >= 2025) {
|
|
$rttCount = 10; // 10 pour 2025 et après
|
|
}
|
|
|
|
$queryUpdateRTT = "
|
|
INSERT INTO CompteurConges (EmployeeId, TypeCongeId, Annee, Solde, Total)
|
|
VALUES (?, ?, ?, ?, ?)
|
|
ON DUPLICATE KEY UPDATE
|
|
Solde = ?,
|
|
Total = ?
|
|
";
|
|
$stmtRTT = $conn->prepare($queryUpdateRTT);
|
|
if (!$stmtRTT) {
|
|
throw new Exception("Erreur préparation RTT: " . $conn->error);
|
|
}
|
|
$stmtRTT->bind_param("iiiiiii", $employeeId, $typeIds['RTT'], $rttYear, $rttCount, $rttCount, $rttCount, $rttCount);
|
|
|
|
if (!$stmtRTT->execute()) {
|
|
throw new Exception("Erreur lors de la mise à jour des RTT pour l'employé $employeeId : " . $stmtRTT->error);
|
|
}
|
|
$stmtRTT->close();
|
|
|
|
// CONGÉ MALADIE - Réinitialiser à 0 (pas de limite)
|
|
$queryUpdateABS = "
|
|
INSERT INTO CompteurConges (EmployeeId, TypeCongeId, Annee, Solde, Total)
|
|
VALUES (?, ?, ?, 0, 0)
|
|
ON DUPLICATE KEY UPDATE
|
|
Solde = 0,
|
|
Total = 0
|
|
";
|
|
$stmtABS = $conn->prepare($queryUpdateABS);
|
|
if (!$stmtABS) {
|
|
throw new Exception("Erreur préparation ABS: " . $conn->error);
|
|
}
|
|
$stmtABS->bind_param("iii", $employeeId, $typeIds['Congé maladie'], $rttYear);
|
|
|
|
if (!$stmtABS->execute()) {
|
|
throw new Exception("Erreur lors de la mise à jour des ABS pour l'employé $employeeId : " . $stmtABS->error);
|
|
}
|
|
$stmtABS->close();
|
|
|
|
$resetLog[] = "Employé $employeeId : CP=$leaveYear (25j), RTT=$rttYear ({$rttCount}j), ABS=$rttYear (0j)";
|
|
$employeesUpdated++;
|
|
}
|
|
|
|
error_log("Reset counters - Employés mis à jour: $employeesUpdated");
|
|
|
|
// 4. Log de la réinitialisation
|
|
$logEntry = "
|
|
=== RÉINITIALISATION DES COMPTEURS ===
|
|
Date: " . $currentDate->format('Y-m-d H:i:s') . "
|
|
Exercice CP: $leaveYear (01/06/$leaveYear au 31/05/" . ($leaveYear + 1) . ")
|
|
Année RTT: $rttYear (01/01/$rttYear au 31/12/$rttYear)
|
|
Employés traités: $employeesUpdated
|
|
|
|
Détails:
|
|
" . implode("\n ", $resetLog) . "
|
|
";
|
|
|
|
// Sauvegarder le log (optionnel - créer une table de logs si nécessaire)
|
|
error_log($logEntry, 3, "reset_counters.log");
|
|
|
|
$conn->commit();
|
|
error_log("Reset counters - Transaction commitée avec succès");
|
|
|
|
echo json_encode([
|
|
"success" => true,
|
|
"message" => "Compteurs réinitialisés avec succès",
|
|
"details" => [
|
|
"employees_updated" => $employeesUpdated,
|
|
"leave_year" => $leaveYear,
|
|
"rtt_year" => $rttYear,
|
|
"cp_days" => 25,
|
|
"rtt_days" => $rttCount,
|
|
"reset_date" => $currentDate->format('Y-m-d H:i:s')
|
|
],
|
|
"log" => $resetLog
|
|
]);
|
|
|
|
} catch (Exception $e) {
|
|
$conn->rollback();
|
|
error_log("Erreur réinitialisation compteurs : " . $e->getMessage());
|
|
|
|
echo json_encode([
|
|
"success" => false,
|
|
"message" => "Erreur lors de la réinitialisation : " . $e->getMessage()
|
|
]);
|
|
}
|
|
|
|
$conn->close();
|
|
?>
|