start(); // TODO try to remove them if possible include_once(GLPI_ROOT . "/inc/db.function.php"); // Standard includes include_once(GLPI_ROOT . "/inc/config.php"); // Disabled errors => pour le variable res (Ajax) ini_set('display_errors', 0); Session::checkLoginUser(); global $DB; function add(array $request) { global $DB; // Validate input data if (isset($request["month"], $request["year"], $request["start_date"], $request["end_date"]) && !empty($request["month"]) && !empty($request["year"]) && !empty($request["start_date"]) && !empty($request["end_date"])) { // Validate the year if (!is_numeric($request["year"]) || strlen($request["year"]) !== 4) { echo json_encode(["status" => "error", "message" => "Format de l'année invalide ! Veuillez entrer une année valide (par exemple, 2025)."]); exit; } // Validate the month (numeric or string month name) if (is_numeric($request["month"])) { $month = (int) $request["month"]; if ($month < 1 || $month > 12) { echo json_encode(["status" => "error", "message" => "Mois invalide ! Veuillez entrer un numéro de mois valide (1-12)."]); exit; } } // Validate that start_date is before end_date $start_date = strtotime($request["start_date"]); $end_date = strtotime($request["end_date"]); if ($start_date === false || $end_date === false) { echo json_encode(["status" => "error", "message" => "Format de date invalide ! Veuillez fournir des dates de début et de fin valides."]); exit; } if ($start_date > $end_date) { echo json_encode(["status" => "error", "message" => "La date de début doit être antérieure à la date de fin."]); exit; } // Check if there's already an existing record for the same year and month $query = $DB->prepare("SELECT COUNT(*) FROM payroll_period WHERE year = ? AND month = ? AND is_deleted = FALSE"); $query->bind_param("ii", $request["year"], $request["month"]); $query->execute(); $query->bind_result($count); $query->fetch(); $query->close(); if ($count > 0) { echo json_encode(["status" => "error", "message" => "Un période de paie pour ce mois et cette année existe déjà."]); exit; } // Prepare the SQL statement $stmt = $DB->prepare(" INSERT INTO payroll_period (month, year, start_date, end_date, created_on, created_by) VALUES (?, ?, ?, ?, NOW(), ?) "); // Bind the parameters $stmt->bind_param( "iissi", $request["month"], $request["year"], $request["start_date"], $request["end_date"], $_SESSION["glpiID"] ); // Execute the statement if ($stmt->execute()) { echo json_encode(["status" => "success", "message" => "Période de paie ajoutée avec succès."]); } else { echo json_encode(["status" => "error", "message" => "Échec de l'ajout de la période de paie."]); } // Close the statement $stmt->close(); exit; } else { // Handle validation errors echo json_encode(["status" => "error", "message" => "Tous les champs (Mois, Année, Date de début, Date de fin) sont requis !"]); exit; } } function update(array $request) { global $DB; // Validate input data if (isset($request["id"], $request["month"], $request["year"], $request["start_date"], $request["end_date"]) && !empty($request["id"]) && !empty($request["month"]) && !empty($request["year"]) && !empty($request["start_date"]) && !empty($request["end_date"])) { // Validate the year if (!is_numeric($request["year"]) || strlen($request["year"]) !== 4) { echo json_encode(["status" => "error", "message" => "Format de l'année invalide ! Veuillez entrer une année valide."]); exit; } // Validate the month $month = (int) $request["month"]; if ($month < 1 || $month > 12) { echo json_encode(["status" => "error", "message" => "Mois invalide ! Veuillez entrer un numéro de mois valide."]); exit; } // Validate date range $start_date = strtotime($request["start_date"]); $end_date = strtotime($request["end_date"]); if ($start_date === false || $end_date === false) { echo json_encode(["status" => "error", "message" => "Format de date invalide ! Veuillez fournir des dates valides."]); exit; } if ($start_date > $end_date) { echo json_encode(["status" => "error", "message" => "La date de début doit être antérieure à la date de fin."]); exit; } // Check if the record exists $query = $DB->prepare("SELECT id FROM payroll_period WHERE id = ? AND is_deleted = FALSE"); $query->bind_param("i", $request["id"]); $query->execute(); $query->store_result(); if ($query->num_rows === 0) { echo json_encode(["status" => "error", "message" => "Période de paie non trouvée."]); exit; } // Prepare the update SQL statement $stmt = $DB->prepare(" UPDATE payroll_period SET month = ?, year = ?, start_date = ?, end_date = ?, updated_on = NOW(), updated_by = ? WHERE id = ? "); // Bind the parameters $stmt->bind_param( "iissii", $request["month"], $request["year"], $request["start_date"], $request["end_date"], $_SESSION["glpiID"], $request["id"] ); // Execute the statement if ($stmt->execute()) { echo json_encode(["status" => "success", "message" => "Période de paie mise à jour avec succès."]); } else { echo json_encode(["status" => "error", "message" => "Échec de la mise à jour de la période de paie."]); } // Close the statement $stmt->close(); exit; } else { // Handle validation errors echo json_encode(["status" => "error", "message" => "Tous les champs (ID, Mois, Année, Date de début, Date de fin) sont requis."]); exit; } } function delete(array $request) { global $DB; if (!isset($_POST['id']) || empty($_POST['id'])) { echo json_encode(['status' => 'error', 'message' => 'ID invalide.']); exit; } $id = intval($_POST['id']); $deleted_by = $_SESSION["glpiID"]; $stmt = $DB->prepare(" UPDATE payroll_period SET is_deleted = TRUE, deleted_on = NOW(), deleted_by = ? WHERE id = ? "); $stmt->bind_param('ii', $deleted_by, $id); if ($stmt->execute()) { echo json_encode(["status" => "success", "message" => "Période de paie supprimée avec succès."]); } else { echo json_encode(["status" => "error", "message" => "Échec de la suppression de la période de paie."]); } // Close the statement $stmt->close(); exit; } if (isset($_POST)) { switch ($_GET['action']) { case "add": return add($_POST); break; case "delete": return delete($_POST); break; case "update": return update($_POST); break; default: echo json_encode(["status" => "error", "message" => "Action non reconnue."]); break; } } ?>