render('layout/base.php', [ 'pageTitle' => 'Anlagevermögen', 'content' => $this->renderView('assets/list', [ 'assets' => $assets, ]), 'topbarActions' => '+ Wirtschaftsgut anlegen', ]); } public function create(array $params): void { $view = new View(); $view->render('layout/base.php', [ 'pageTitle' => 'Wirtschaftsgut anlegen', 'content' => $this->renderView('assets/form', [ 'asset' => [], 'errors' => [], 'action' => '/assets', ]), ]); } public function store(array $params): void { $data = $this->extractPost(); $errors = $this->validate($data); if ($errors) { $view = new View(); $view->render('layout/base.php', [ 'pageTitle' => 'Wirtschaftsgut anlegen', 'content' => $this->renderView('assets/form', [ 'asset' => $data, 'errors' => $errors, 'action' => '/assets', ]), ]); return; } Asset::create($data); View::redirect('/assets', 'Wirtschaftsgut erfolgreich angelegt.'); } public function edit(array $params): void { $asset = Asset::find((int)$params['id']); if (!$asset) { http_response_code(404); return; } $view = new View(); $view->render('layout/base.php', [ 'pageTitle' => 'Wirtschaftsgut bearbeiten', 'content' => $this->renderView('assets/form', [ 'asset' => $asset, 'errors' => [], 'action' => '/assets/' . $asset['id'], ]), ]); } public function update(array $params): void { $id = (int)$params['id']; $asset = Asset::find($id); if (!$asset) { http_response_code(404); return; } $data = $this->extractPost(); $errors = $this->validate($data); if ($errors) { $view = new View(); $view->render('layout/base.php', [ 'pageTitle' => 'Wirtschaftsgut bearbeiten', 'content' => $this->renderView('assets/form', [ 'asset' => array_merge($asset, $data), 'errors' => $errors, 'action' => '/assets/' . $id, ]), ]); return; } Asset::update($id, $data); View::redirect('/assets', 'Wirtschaftsgut aktualisiert.'); } public function destroy(array $params): void { if (!Asset::delete((int)$params['id'])) { View::redirect('/assets', 'Wirtschaftsgut konnte nicht gelöscht werden.', 'error'); return; } View::redirect('/assets', 'Wirtschaftsgut gelöscht.'); } // ── Private helpers ────────────────────────────────────────── private function extractPost(): array { return [ 'bezeichnung' => trim($_POST['bezeichnung'] ?? ''), 'anschaffungsdatum' => trim($_POST['anschaffungsdatum'] ?? ''), 'anschaffungskosten' => $_POST['anschaffungskosten'] ?? '0', 'zugaenge' => $_POST['zugaenge'] ?? '0', 'abgaenge' => $_POST['abgaenge'] ?? '0', 'abschreibung_jahr' => $_POST['abschreibung_jahr'] ?? '0', 'nutzungsdauer' => trim($_POST['nutzungsdauer'] ?? ''), 'notizen' => trim($_POST['notizen'] ?? ''), ]; } private function validate(array $data): array { $errors = []; if ($data['bezeichnung'] === '') { $errors['bezeichnung'] = 'Pflichtfeld'; } if ($data['anschaffungsdatum'] === '') { $errors['anschaffungsdatum'] = 'Pflichtfeld'; } elseif (!strtotime($data['anschaffungsdatum'])) { $errors['anschaffungsdatum'] = 'Ungültiges Datum'; } if (!is_numeric($data['anschaffungskosten']) || (float)$data['anschaffungskosten'] < 0) { $errors['anschaffungskosten'] = 'Muss eine positive Zahl sein'; } return $errors; } private function renderView(string $template, array $data): string { extract($data, EXTR_SKIP); ob_start(); include dirname(__DIR__) . '/Views/' . $template . '.php'; return ob_get_clean(); } }