235 lines
7.2 KiB
PHP
235 lines
7.2 KiB
PHP
<?php
|
|
if (!defined('GLPI_ROOT')) {
|
|
define('GLPI_ROOT', dirname(__DIR__));
|
|
}
|
|
|
|
include_once GLPI_ROOT . '/inc/based_config.php';
|
|
// Init Timer to compute time of display
|
|
$TIMER_DEBUG = new Timer();
|
|
$TIMER_DEBUG->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;
|
|
}
|
|
}
|
|
|
|
?>
|