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(); ?>