query("SELECT COUNT(*) FROM pf_budget_categories")->fetchColumn() > 0); $hasSalaries = ((int)$pdo->query("SELECT COUNT(*) FROM pf_salary_config WHERE year = $currentYear")->fetchColumn() > 0); $hasAccounts = ((int)$pdo->query("SELECT COUNT(*) FROM pf_bank_accounts")->fetchColumn() > 0); $hasBudgetItems = ((int)$pdo->query("SELECT COUNT(*) FROM pf_budget_items")->fetchColumn() > 0); // Le minimum vital pour que ça tourne $isBudgetSetupOk = ($hasCategories && $hasSalaries && $hasAccounts); // ============================================================================ // GESTION DES VUES (MANDATORY VS OPTIONAL) // ============================================================================ $enabledViews = $_SESSION['enabled_views'] ?? ['budget_prev', 'budget_epargne', 'budget_provisions']; // Vues obligatoires pour le cœur du budget $allowedTabs = ['suivi', 'recap']; if (in_array('budget_prev', $enabledViews)) $allowedTabs[] = 'budget_prev'; if (in_array('budget_epargne', $enabledViews)) $allowedTabs[] = 'epargne'; if (in_array('budget_provisions', $enabledViews)) $allowedTabs[] = 'provisions'; // Gestion de l'onglet actif avec fallback de sécurité $tab = $_GET['tab'] ?? 'suivi'; if (!in_array($tab, $allowedTabs)) { $tab = 'suivi'; } $pageTitle = tr('budget_page_title'); $activePage = "budget"; $pageCss = "/modules/budget/budget.css"; require __DIR__ . '/header.php'; ?>
" . sprintf(tr('budget_err_file_detail'), htmlspecialchars($tab)) . "
"; echo "" . tr('budget_err_not_authorized') . "
"; } ?>