Files
MYSOPHAL/ajax/payroll.period.php
2025-08-07 13:15:31 +01:00

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;
}
}
?>