verlangeAnmeldung(); $vorschlag = Monatsabschluss::naechsterOffener(); $jahr = (int)($this->query('jahr') ?: $vorschlag['jahr']); $monat = (int)($this->query('monat') ?: $vorschlag['monat']); if ($monat < 1 || $monat > 12) { $monat = $vorschlag['monat']; } $this->render('planung/monatsabschluss.php', [ 'titel' => 'Monatsabschluss', 'jahr' => $jahr, 'monat' => $monat, 'pruefung' => Monatsabschluss::pruefen($jahr, $monat), 'vorhanden' => Monatsabschluss::fuerMonat($jahr, $monat), 'abschluesse' => Monatsabschluss::alle(), 'monatsnamen' => Budgetplaner::MONATSNAMEN, ]); } public function abschliessen(): void { $this->verlangeAnmeldung(); $jahr = (int)$this->post('jahr'); $monat = (int)$this->post('monat'); try { $benutzer = Auth::benutzer(); Monatsabschluss::abschliessen( $jahr, $monat, $this->post('notiz'), (string)($benutzer['anzeigename'] ?: $benutzer['benutzername'] ?? '') ); } catch (\Throwable $e) { View::redirect(self::pfad($jahr, $monat), $e->getMessage(), 'fehler'); return; } View::redirect( self::pfad($jahr, $monat), sprintf('%s %d ist abgeschlossen.', Budgetplaner::MONATSNAMEN[$monat] ?? '', $jahr) ); } /** @param array $params */ public function wiedereroeffnen(array $params): void { $this->verlangeAnmeldung(); $abschluss = Monatsabschluss::find((int)$params['id']); if ($abschluss === null) { View::redirect('/planung/monatsabschluss', 'Den Abschluss gibt es nicht.', 'fehler'); return; } Monatsabschluss::wiedereroeffnen((int)$abschluss['id']); View::redirect( self::pfad((int)$abschluss['jahr'], (int)$abschluss['monat']), 'Der Monat ist wieder offen. Der Snapshot des Abschlusses bleibt erhalten.' ); } /** @param array $params */ public function snapshot(array $params): void { $this->verlangeAnmeldung(); $abschluss = Monatsabschluss::find((int)$params['id']); if ($abschluss === null) { View::redirect('/planung/monatsabschluss', 'Den Abschluss gibt es nicht.', 'fehler'); return; } $daten = json_decode((string)$abschluss['snapshot'], true); $this->render('planung/snapshot.php', [ 'titel' => 'Abschluss ' . ($abschluss['monat'] . '/' . $abschluss['jahr']), 'abschluss' => $abschluss, 'snapshot' => is_array($daten) ? $daten : [], 'monatsnamen' => Budgetplaner::MONATSNAMEN, ]); } private static function pfad(int $jahr, int $monat): string { return '/planung/monatsabschluss?jahr=' . $jahr . '&monat=' . $monat; } }