query('SELECT id, name FROM staff WHERE is_active = 1 ORDER BY name')->fetchAll(); if ($_SERVER['REQUEST_METHOD'] === 'POST') { verify_csrf(); $action = $_POST['action'] ?? ''; if ($action === 'create' || $action === 'update') { $id = $action === 'update' ? (int) ($_POST['id'] ?? 0) : 0; try { department_save($pdo, $id, [ 'name' => $_POST['name'] ?? '', 'email' => $_POST['email'] ?? '', 'is_default' => !empty($_POST['is_default']), 'is_active' => ($_POST['status'] ?? 'active') === 'active', 'manager_id' => $_POST['manager_id'] ?? null, 'sla_plan_id' => $_POST['sla_plan_id'] ?? null, 'notes' => $_POST['notes'] ?? '', 'signature' => $_POST['signature'] ?? '', 'auto_assign_mode' => $_POST['auto_assign_mode'] ?? 'none', 'auto_assign_staff_id' => $_POST['auto_assign_staff_id'] ?? null, ]); audit_log($staff['id'], ($action === 'create' ? 'Abteilung erstellt: ' : 'Abteilung aktualisiert: ') . trim($_POST['name'] ?? '')); flash('success', $action === 'create' ? 'Abteilung erstellt.' : 'Änderungen gespeichert.'); redirect('/staff/departments.php'); } catch (AdminModelException $e) { $errors[] = $e->getMessage(); } } if ($action === 'delete') { try { $deleted = department_delete($pdo, (int) $_POST['id']); audit_log($staff['id'], "Abteilung gelöscht: {$deleted}"); flash('success', 'Abteilung gelöscht.'); } catch (AdminModelException $e) { flash('error', $e->getMessage()); } redirect('/staff/departments.php'); } } $isNew = isset($_GET['new']); $editId = (int) ($_GET['edit'] ?? 0); $showForm = $isNew || $editId || ($errors && in_array($_POST['action'] ?? '', ['create', 'update'], true)); $editDept = null; if ($editId) { $stmt = $pdo->prepare('SELECT * FROM departments WHERE id = ?'); $stmt->execute([$editId]); $editDept = $stmt->fetch() ?: null; } // Mitglieder = Hauptabteilung ODER zusätzlich zugewiesene Abteilung $memberStmt = $pdo->prepare( 'SELECT s.id, s.name, s.email, s.role, s.is_active, (s.department_id = ?) AS is_primary FROM staff s WHERE s.department_id = ? OR s.id IN (SELECT staff_id FROM staff_department WHERE department_id = ?) ORDER BY s.name' ); $departments = $pdo->query( 'SELECT d.*, m.name AS manager_name, (SELECT COUNT(*) FROM staff s WHERE s.department_id = d.id OR s.id IN (SELECT staff_id FROM staff_department sd WHERE sd.department_id = d.id)) AS member_count FROM departments d LEFT JOIN staff m ON m.id = d.manager_id ORDER BY d.name' )->fetchAll(); $emailOptions = $pdo->query( 'SELECT ea.email, d.name AS department_name FROM email_addresses ea JOIN departments d ON d.id = ea.department_id ORDER BY ea.email' )->fetchAll(); $fmt = fn(?string $dt) => $dt ? date('d.m.Y H:i', strtotime($dt)) : '–'; $pageTitle = 'Abteilungen'; $activePage = 'departments'; require __DIR__ . '/_header.php'; ?>
| Name | Status | Mitglieder | Abteilungsleiter | Erstellt | Zuletzt aktualisiert | ||
|---|---|---|---|---|---|---|---|
| = e($d['name']) ?>= $d['is_default'] ? ' (Standard)' : '' ?> | = ($d['is_active'] ?? 1) ? 'Aktiv' : 'Deaktiviert' ?> | = (int) $d['member_count'] ?> | = e($d['manager_name'] ?? '') ?> | = e($d['email']) ?> | = e($fmt($d['created_at'] ?? null)) ?> | = e($fmt($d['updated_at'] ?? null)) ?> | Bearbeiten · Formular= !empty($d['own_form']) ? ' ✓' : '' ?> · |
| Noch keine Abteilungen angelegt. | |||||||