prepare("INSERT INTO expense_categories (name, description, account_id) VALUES (?, ?, ?)"); $stmt->execute([$name, $description, $account_id]); $_SESSION['success'] = 'تم إضافة التصنيف بنجاح'; } elseif ($action === 'edit' && $id) { $stmt = $db->prepare("UPDATE expense_categories SET name = ?, description = ?, account_id = ? WHERE id = ?"); $stmt->execute([$name, $description, $account_id, $id]); $_SESSION['success'] = 'تم تحديث التصنيف بنجاح'; } redirect('expense_categories.php'); } catch (PDOException $e) { $error = 'حدث خطأ: ' . $e->getMessage(); } } else { $error = 'اسم التصنيف مطلوب'; } } if (isset($_GET['action']) && $_GET['action'] === 'delete' && isset($_GET['id'])) { if (!canDelete('expense_settings')) redirect('expense_categories.php'); $id = $_GET['id']; try { $db = db(); $stmt = $db->prepare("DELETE FROM expense_categories WHERE id = ?"); $stmt->execute([$id]); $_SESSION['success'] = 'تم حذف التصنيف بنجاح'; } catch (PDOException $e) { if ($e->getCode() == 23000) { $_SESSION['error'] = 'لا يمكن حذف هذا التصنيف لأنه مرتبط بمصروفات مسجلة'; } else { $_SESSION['error'] = 'حدث خطأ: ' . $e->getMessage(); } } redirect('expense_categories.php'); } $categories = db()->query("SELECT c.*, a.name as account_name FROM expense_categories c LEFT JOIN accounting_accounts a ON c.account_id = a.id ORDER BY c.name")->fetchAll(PDO::FETCH_ASSOC); $accounts = db()->query("SELECT * FROM accounting_accounts ORDER BY type, name")->fetchAll(PDO::FETCH_ASSOC); if (isset($_SESSION['success'])) { $success = $_SESSION['success']; unset($_SESSION['success']); } if (isset($_SESSION['error'])) { $error = $_SESSION['error']; unset($_SESSION['error']); } ?>