$_POST['company_name'] ?? '', 'company_address' => $_POST['company_address'] ?? '', 'company_zip' => $_POST['company_zip'] ?? '', 'company_city' => $_POST['company_city'] ?? '', 'company_country' => $_POST['company_country'] ?? '', 'tax_id' => $_POST['tax_id'] ?? '', 'vat_mode' => $_POST['vat_mode'] ?? 'klein', 'default_vat_rate'=> $_POST['default_vat_rate'] ?? 19.0, 'payment_terms' => $_POST['payment_terms'] ?? '', 'footer_text' => $_POST['footer_text'] ?? '', 'logo_path' => $settings['logo_path'] ?? null, 'iban' => $_POST['iban'] ?? '', 'phone' => $_POST['phone'] ?? '', 'email' => $_POST['email'] ?? '', 'website' => $_POST['website'] ?? '', ]; if (!empty($_FILES['logo']['tmp_name'])) { $targetDir = __DIR__ . '/uploads/'; if (!is_dir($targetDir)) { mkdir($targetDir, 0775, true); } $targetFile = $targetDir . 'logo.png'; if (move_uploaded_file($_FILES['logo']['tmp_name'], $targetFile)) { $data['logo_path'] = 'uploads/logo.png'; } } save_settings($data); $settings = get_settings(); $msg = 'Einstellungen gespeichert.'; } // === JOURNAL TAB === // Jahr erstellen if ($form === 'year') { $y = (int)($_POST['year'] ?? 0); if ($y >= 2000 && $y <= 2099) { $existing = get_journal_year_by_year($y); if ($existing) { $error = "Jahr $y existiert bereits."; } else { create_journal_year($y, $_POST['notes'] ?? ''); $msg = "Jahr $y erstellt."; } } else { $error = 'Ungültiges Jahr.'; } $tab = 'journal'; } // Jahr öffnen/schließen if ($form === 'toggle_year') { $id = (int)($_POST['id'] ?? 0); if ($id) { toggle_journal_year_closed($id); $msg = 'Jahresstatus geändert.'; } $tab = 'journal'; } // Lieferant speichern if ($form === 'supplier') { $id = !empty($_POST['id']) ? (int)$_POST['id'] : null; $data = [ 'name' => $_POST['name'] ?? '', 'sort_order' => $_POST['sort_order'] ?? 0, 'is_active' => isset($_POST['is_active']), ]; if ($data['name']) { save_journal_supplier($id, $data); $msg = 'Lieferant gespeichert.'; } else { $error = 'Name ist Pflichtfeld.'; } $tab = 'journal'; } // Lieferant löschen if ($form === 'delete_supplier') { delete_journal_supplier((int)$_POST['id']); $msg = 'Lieferant gelöscht.'; $tab = 'journal'; } // Wareneingang-Kategorie speichern if ($form === 'rev_cat') { $id = !empty($_POST['id']) ? (int)$_POST['id'] : null; $data = [ 'name' => $_POST['name'] ?? '', 'category_type' => $_POST['category_type'] ?? 'wareneingang', 'vat_rate' => $_POST['vat_rate'] ?? 19, 'sort_order' => $_POST['sort_order'] ?? 0, 'is_active' => isset($_POST['is_active']), ]; if ($data['name']) { save_journal_revenue_category($id, $data); $msg = 'Kategorie gespeichert.'; } else { $error = 'Name ist Pflichtfeld.'; } $tab = 'journal'; } // Wareneingang-/Erlös-Kategorie löschen if ($form === 'delete_rev_cat') { delete_journal_revenue_category((int)$_POST['id']); $msg = 'Kategorie gelöscht.'; $tab = 'journal'; } // Aufwandskategorie speichern if ($form === 'exp_cat') { $id = !empty($_POST['id']) ? (int)$_POST['id'] : null; $data = [ 'name' => $_POST['name'] ?? '', 'side' => $_POST['side'] ?? 'soll', 'sort_order' => $_POST['sort_order'] ?? 0, 'is_active' => isset($_POST['is_active']), ]; if ($data['name']) { save_journal_expense_category($id, $data); $msg = 'Aufwandskategorie gespeichert.'; } else { $error = 'Name ist Pflichtfeld.'; } $tab = 'journal'; } // Aufwandskategorie löschen if ($form === 'delete_exp_cat') { delete_journal_expense_category((int)$_POST['id']); $msg = 'Aufwandskategorie gelöscht.'; $tab = 'journal'; } // Abzug speichern if ($form === 'ded_cat') { $id = !empty($_POST['id']) ? (int)$_POST['id'] : null; $data = [ 'name' => $_POST['name'] ?? '', 'sort_order' => $_POST['sort_order'] ?? 0, 'is_active' => isset($_POST['is_active']), ]; if ($data['name']) { save_journal_deduction_category($id, $data); $msg = 'Abzug gespeichert.'; } else { $error = 'Name ist Pflichtfeld.'; } $tab = 'journal'; } // Abzug löschen if ($form === 'delete_ded_cat') { delete_journal_deduction_category((int)$_POST['id']); $msg = 'Abzug gelöscht.'; $tab = 'journal'; } // Zusammenfassungsposten speichern if ($form === 'summary_item') { $id = !empty($_POST['id']) ? (int)$_POST['id'] : null; $data = [ 'name' => $_POST['name'] ?? '', 'sort_order' => $_POST['sort_order'] ?? 0, 'is_active' => isset($_POST['is_active']), ]; if ($data['name']) { save_journal_summary_item($id, $data); $msg = 'Posten gespeichert.'; } else { $error = 'Name ist Pflichtfeld.'; } $tab = 'journal'; } // Zusammenfassungsposten löschen if ($form === 'delete_summary_item') { delete_journal_summary_item((int)$_POST['id']); $msg = 'Posten gelöscht.'; $tab = 'journal'; } // === KONTO TAB === // Benutzername ändern if ($form === 'change_username') { $new_username = trim($_POST['new_username'] ?? ''); if (strlen($new_username) < 3) { $error = 'Benutzername muss mindestens 3 Zeichen haben.'; } elseif (!update_username($_SESSION['user_id'], $new_username)) { $error = 'Benutzername existiert bereits.'; } else { $msg = 'Benutzername geändert.'; } $tab = 'konto'; } // Passwort ändern if ($form === 'change_password') { $current_pw = $_POST['current_password'] ?? ''; $new_pw = $_POST['new_password'] ?? ''; $confirm_pw = $_POST['confirm_password'] ?? ''; if (strlen($new_pw) < 6) { $error = 'Neues Passwort muss mindestens 6 Zeichen haben.'; } elseif ($new_pw !== $confirm_pw) { $error = 'Passwörter stimmen nicht überein.'; } elseif (!update_password($_SESSION['user_id'], $current_pw, $new_pw)) { $error = 'Aktuelles Passwort ist falsch.'; } else { $msg = 'Passwort geändert.'; } $tab = 'konto'; } } // Journal-Daten laden $years = get_journal_years(); $suppliers = get_journal_suppliers(); $we_cats = get_journal_revenue_categories('wareneingang'); $er_cats = get_journal_revenue_categories('erloese'); $exp_cats = get_journal_expense_categories(); $ded_cats = get_journal_deduction_categories(); $summary_items = get_journal_summary_items(); ?> Einstellungen

PIRP

Allgemein Journal Konto

Firmeneinstellungen

Aktuelles Logo:

Jahre Einnahmen Ausgaben Sonstiges

Journal-Jahre

Hier verwalten Sie die Buchungsjahre. Ein geschlossenes Jahr kann nicht mehr bearbeitet werden.

JahrStatusNotizenAktion
Geschlossen' : 'Offen' ?>
Zum Journal

Noch keine Jahre angelegt. Erstellen Sie ein Jahr, um mit der Buchführung zu beginnen.

Erlös-Kategorien

Kategorien für Einnahmen/Erlöse (z.B. "Umsatz 7%", "Umsatz 19%"). Diese erscheinen als Spalten im Journal.

NameMwStSort.AktivAktion
>

Wareneingang-Kategorien

Kategorien für Wareneinkauf (z.B. "WE 7%", "WE 19%"). Diese erscheinen als Spalten im Journal.

NameMwStSort.AktivAktion
>

Aufwandskategorien

Kategorien für Betriebsausgaben (z.B. "Miete", "Versicherung", "Telefon"). Diese erscheinen als Spalten im Journal und werden in der EÜR berücksichtigt.

NameTypSort.AktivAktion
>

Abzüge

Abzugskategorien (z.B. "Skonto", "Lotto"). Diese erscheinen als Haben-Spalten im Journal und werden in der EÜR berücksichtigt.

NameSort.AktivAktion
>

Lieferanten

Lieferanten können bei Buchungen ausgewählt werden, um die Zuordnung zu erleichtern.

NameSort.AktivAktion
>

Umsatz-Zusammenfassungsposten

Zusätzliche Posten für die monatliche Umsatzübersicht im Journal (z.B. "Reinigung", "RMV").

NameSort.AktivAktion
>

Benutzername ändern

Passwort ändern