fix bêtises et update schema sql
This commit is contained in:
@@ -60,59 +60,85 @@ if ($action === 'update_salary_config') {
|
||||
|
||||
// 2. MISE A JOUR TABLEAU REPARTITION (AJAX)
|
||||
if ($action === 'update_allocation') {
|
||||
header('Content-Type: application/json');
|
||||
$date = $_POST['month_date'];
|
||||
$catId = $_POST['cat_id'];
|
||||
$person = $_POST['person']; // 'amount_alex' ou 'amount_laia'
|
||||
$value = floatval($_POST['value']);
|
||||
header('Content-Type: application/json');
|
||||
$date = $_POST['month_date'];
|
||||
$catId = (int)$_POST['cat_id'];
|
||||
$personId = (int)$_POST['person_id']; // 🟢 Reçoit l'ID de la personne directement !
|
||||
$value = floatval($_POST['value']);
|
||||
|
||||
$stmt = $pdo->prepare("INSERT INTO pf_alloc_values (month_date, cat_id, $person) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE $person = VALUES($person)");
|
||||
$stmt->execute([$date, $catId, $value]);
|
||||
if ($catId <= 0 || $personId <= 0) {
|
||||
echo json_encode(['success' => false, 'error' => 'Données invalides.']);
|
||||
exit;
|
||||
}
|
||||
|
||||
$stmt = $pdo->prepare("INSERT INTO pf_alloc_values (month_date, cat_id, person_id, amount)
|
||||
VALUES (?, ?, ?, ?)
|
||||
ON DUPLICATE KEY UPDATE amount = VALUES(amount)");
|
||||
$stmt->execute([$date, $catId, $personId, $value]);
|
||||
|
||||
echo json_encode(['success' => true]);
|
||||
exit;
|
||||
}
|
||||
|
||||
// 3. GESTION DES CATEGORIES (Ajout)
|
||||
if ($action === 'add_category') {
|
||||
$name = trim($_POST['name']);
|
||||
$target = trim($_POST['target']);
|
||||
$holiday_id = !empty($_POST['holiday_id']) ? (int)$_POST['holiday_id'] : null;
|
||||
|
||||
if (!empty($name)) {
|
||||
$stmt = $pdo->prepare("INSERT INTO pf_alloc_categories (name, target, holiday_id) VALUES (?, ?, ?)");
|
||||
$stmt->execute([$name, $target, $holiday_id]);
|
||||
}
|
||||
|
||||
// --- NOUVEAU : Réponse AJAX ---
|
||||
if (isset($_POST['ajax'])) {
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode(['success' => true]);
|
||||
try {
|
||||
$name = trim($_POST['name']);
|
||||
$transfer_dest = trim($_POST['transfer_dest'] ?? '');
|
||||
$target = floatval($_POST['target'] ?? 0);
|
||||
$holiday_id = !empty($_POST['holiday_id']) ? (int)$_POST['holiday_id'] : null;
|
||||
|
||||
if (!empty($name)) {
|
||||
$stmt = $pdo->prepare("INSERT INTO pf_alloc_categories (name, target, transfer_dest, holiday_id) VALUES (?, ?, ?, ?)");
|
||||
$stmt->execute([$name, $target, $transfer_dest, $holiday_id]);
|
||||
}
|
||||
|
||||
if (isset($_POST['ajax'])) {
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode(['success' => true]);
|
||||
exit;
|
||||
}
|
||||
header("Location: " . $_SERVER['HTTP_REFERER']);
|
||||
exit;
|
||||
} catch (Exception $e) {
|
||||
if (isset($_POST['ajax'])) {
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode(['success' => false, 'error' => $e->getMessage()]);
|
||||
exit;
|
||||
}
|
||||
die($e->getMessage());
|
||||
}
|
||||
header("Location: " . $_SERVER['HTTP_REFERER']);
|
||||
exit;
|
||||
}
|
||||
|
||||
// 4. MODIFICATION D'UNE CATEGORIE
|
||||
if ($action === 'update_category') {
|
||||
$id = (int)$_POST['cat_id'];
|
||||
$name = trim($_POST['name']);
|
||||
$target = trim($_POST['target']);
|
||||
$holiday_id = !empty($_POST['holiday_id']) ? (int)$_POST['holiday_id'] : null;
|
||||
try {
|
||||
$id = (int)$_POST['cat_id'];
|
||||
$name = trim($_POST['name']);
|
||||
$transfer_dest = trim($_POST['transfer_dest'] ?? '');
|
||||
$target = floatval($_POST['target'] ?? 0);
|
||||
$holiday_id = !empty($_POST['holiday_id']) ? (int)$_POST['holiday_id'] : null;
|
||||
|
||||
if ($id > 0 && !empty($name)) {
|
||||
$stmt = $pdo->prepare("UPDATE pf_alloc_categories SET name = ?, target = ?, holiday_id = ? WHERE id = ?");
|
||||
$stmt->execute([$name, $target, $holiday_id, $id]);
|
||||
}
|
||||
if ($id > 0 && !empty($name)) {
|
||||
$stmt = $pdo->prepare("UPDATE pf_alloc_categories SET name = ?, target = ?, transfer_dest = ?, holiday_id = ? WHERE id = ?");
|
||||
$stmt->execute([$name, $target, $transfer_dest, $holiday_id, $id]);
|
||||
}
|
||||
|
||||
// --- NOUVEAU : Réponse AJAX ---
|
||||
if (isset($_POST['ajax'])) {
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode(['success' => true]);
|
||||
if (isset($_POST['ajax'])) {
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode(['success' => true]);
|
||||
exit;
|
||||
}
|
||||
header("Location: " . $_SERVER['HTTP_REFERER']);
|
||||
exit;
|
||||
} catch (Exception $e) {
|
||||
if (isset($_POST['ajax'])) {
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode(['success' => false, 'error' => $e->getMessage()]);
|
||||
exit;
|
||||
}
|
||||
die($e->getMessage());
|
||||
}
|
||||
header("Location: " . $_SERVER['HTTP_REFERER']);
|
||||
exit;
|
||||
}
|
||||
|
||||
// 5. SUPPRESSION CATEGORIE
|
||||
@@ -136,43 +162,48 @@ if ($action === 'delete_category') {
|
||||
// 6. VALIDATION DES VIREMENTS (Complex Business Logic)
|
||||
if ($action === 'validate_transfers') {
|
||||
header('Content-Type: application/json');
|
||||
$person = $_POST['person'];
|
||||
$personId = (int)$_POST['person_id']; // Reçoit l'ID parent
|
||||
$monthDate = $_POST['month_date'];
|
||||
|
||||
try {
|
||||
$pdo->beginTransaction();
|
||||
|
||||
$stmtP = $pdo->prepare("SELECT name FROM pf_people WHERE id = ?");
|
||||
$stmtP->execute([$personId]);
|
||||
$dbPersonName = $stmtP->fetchColumn();
|
||||
if (!$dbPersonName) throw new Exception("Parent introuvable.");
|
||||
|
||||
$stmt = $pdo->prepare("
|
||||
SELECT v.*, c.name as cat_name, c.target, c.holiday_id
|
||||
FROM pf_alloc_values v
|
||||
SELECT v.amount, c.name as cat_name, c.transfer_dest, c.holiday_id
|
||||
FROM pf_alloc_values v
|
||||
JOIN pf_alloc_categories c ON v.cat_id = c.id
|
||||
WHERE v.month_date = ?
|
||||
WHERE v.month_date = ? AND v.person_id = ?
|
||||
");
|
||||
$stmt->execute([$monthDate]);
|
||||
$stmt->execute([$monthDate, $personId]);
|
||||
$budgetLines = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
$transfersToDo = [];
|
||||
|
||||
foreach ($budgetLines as $line) {
|
||||
$amount = ($person === 'Alex') ? $line['amount_alex'] : $line['amount_laia'];
|
||||
if ($amount <= 0) continue;
|
||||
$amount = (float)$line['amount'];
|
||||
if ($amount <= 0) continue;
|
||||
|
||||
$target = trim($line['target']);
|
||||
$dest = trim($line['transfer_dest']);
|
||||
$catName = trim($line['cat_name']);
|
||||
$holidayId = $line['holiday_id'];
|
||||
$holidayId = $line['holiday_id'];
|
||||
|
||||
$targetOwner = null;
|
||||
if ($target === 'vers L.Perso') { $targetOwner = $person; }
|
||||
elseif ($target === 'vers L.Pol') { $targetOwner = 'Pol'; }
|
||||
elseif ($target === 'vers L.Pep') { $targetOwner = 'Pep'; }
|
||||
elseif ($target === 'vers commune') { continue; }
|
||||
if ($dest === 'vers L.Perso') { $targetOwner = $dbPersonName; }
|
||||
elseif ($dest === 'vers L.Pol') { $targetOwner = 'Pol'; }
|
||||
elseif ($dest === 'vers L.Pep') { $targetOwner = 'Pep'; }
|
||||
elseif ($dest === 'vers commune') { continue; }
|
||||
|
||||
if ($targetOwner) {
|
||||
if (!isset($transfersToDo[$targetOwner])) {
|
||||
$transfersToDo[$targetOwner] = ['total_add' => 0, 'cats' => []];
|
||||
}
|
||||
$transfersToDo[$targetOwner]['total_add'] += $amount;
|
||||
|
||||
|
||||
if (!isset($transfersToDo[$targetOwner]['cats'][$catName])) {
|
||||
$transfersToDo[$targetOwner]['cats'][$catName] = ['amount' => 0, 'holiday_id' => $holidayId];
|
||||
}
|
||||
@@ -181,7 +212,6 @@ if ($action === 'validate_transfers') {
|
||||
}
|
||||
|
||||
foreach ($transfersToDo as $owner => $data) {
|
||||
// A. VERIFIER EXISTENCE (Inchangé)
|
||||
$stmtCheck = $pdo->prepare("SELECT COUNT(*) FROM pf_savings WHERE owner = ? AND month_date = ? AND category = 'TOTAL_BANQUE'");
|
||||
$stmtCheck->execute([$owner, $monthDate]);
|
||||
$exists = $stmtCheck->fetchColumn() > 0;
|
||||
@@ -200,54 +230,38 @@ if ($action === 'validate_transfers') {
|
||||
}
|
||||
}
|
||||
|
||||
// B. UPDATE TOTAL (Inchangé)
|
||||
$stmtUpdTotal = $pdo->prepare("UPDATE pf_savings SET amount = amount + ? WHERE owner = ? AND month_date = ? AND category = 'TOTAL_BANQUE'");
|
||||
$stmtUpdTotal->execute([$data['total_add'], $owner, $monthDate]);
|
||||
|
||||
// C. UPDATE CATÉGORIES (Modifié pour gérer le holiday_id)
|
||||
foreach ($data['cats'] as $catName => $catInfo) {
|
||||
$catAmount = $catInfo['amount'];
|
||||
$catHolidayId = $catInfo['holiday_id']; // NOUVEAU
|
||||
$catHolidayId = $catInfo['holiday_id'];
|
||||
|
||||
if ($catName === 'Eco Alex' || $catName === 'Eco Laia') { continue; }
|
||||
if (strpos($catName, 'Eco P') === 0) { continue; }
|
||||
|
||||
$stmtCheckCat = $pdo->prepare("SELECT id FROM pf_savings WHERE owner = ? AND month_date = ? AND category = ?");
|
||||
$stmtCheckCat->execute([$owner, $monthDate, $catName]);
|
||||
$catId = $stmtCheckCat->fetchColumn();
|
||||
|
||||
if ($catId) {
|
||||
// Update : On actualise aussi le holiday_id au cas où il aurait changé
|
||||
$stmtUpdateCat = $pdo->prepare("UPDATE pf_savings SET amount = amount + ?, holiday_id = ? WHERE id = ?");
|
||||
$stmtUpdateCat->execute([$catAmount, $catHolidayId, $catId]);
|
||||
} else {
|
||||
// Insert
|
||||
$stmtInsertCat = $pdo->prepare("INSERT INTO pf_savings (month_date, owner, category, amount, holiday_id) VALUES (?, ?, ?, ?, ?)");
|
||||
$stmtInsertCat->execute([$monthDate, $owner, $catName, $catAmount, $catHolidayId]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 3. ENREGISTRER LA VALIDATION (Mise à jour table existante)
|
||||
|
||||
// a. Trouver l'ID de la catégorie système
|
||||
$stmtSys = $pdo->prepare("SELECT id FROM pf_alloc_categories WHERE name = 'SYSTEM_VALIDATION' LIMIT 1");
|
||||
$stmtSys->execute();
|
||||
$sysCatId = $stmtSys->fetchColumn();
|
||||
|
||||
if ($sysCatId) {
|
||||
|
||||
if ($person === 'Alex') {
|
||||
$sql = "INSERT INTO pf_alloc_values (month_date, cat_id, amount_alex, amount_laia)
|
||||
VALUES (?, ?, 1, 0)
|
||||
ON DUPLICATE KEY UPDATE amount_alex = 1";
|
||||
} else {
|
||||
$sql = "INSERT INTO pf_alloc_values (month_date, cat_id, amount_alex, amount_laia)
|
||||
VALUES (?, ?, 0, 1)
|
||||
ON DUPLICATE KEY UPDATE amount_laia = 1";
|
||||
}
|
||||
|
||||
$stmtVal = $pdo->prepare($sql);
|
||||
$stmtVal->execute([$monthDate, $sysCatId]);
|
||||
$stmtVal = $pdo->prepare("INSERT INTO pf_alloc_values (month_date, cat_id, person_id, amount)
|
||||
VALUES (?, ?, ?, 1)
|
||||
ON DUPLICATE KEY UPDATE amount = 1");
|
||||
$stmtVal->execute([$monthDate, $sysCatId, $personId]);
|
||||
}
|
||||
|
||||
$pdo->commit();
|
||||
@@ -258,6 +272,4 @@ if ($action === 'validate_transfers') {
|
||||
echo json_encode(['success' => false, 'error' => $e->getMessage()]);
|
||||
}
|
||||
exit;
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user