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'] ?? '', ]); 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'; ?>
$_POST[$k] ?? $default; $v = fn(string $k, string $col, $default = '') => $f($k, $editDept[$col] ?? $default); $curStatus = $_POST ? ($_POST['status'] ?? 'active') : (($editDept['is_active'] ?? 1) ? 'active' : 'inactive'); $curEmail = strtolower((string) $v('email', 'email')); $curManager = (string) $v('manager_id', 'manager_id'); $isDefaultChecked = $_POST ? !empty($_POST['is_default']) : !empty($editDept['is_default']); $members = []; if ($editDept) { $did = (int) $editDept['id']; $memberStmt->execute([$did, $did, $did]); $members = $memberStmt->fetchAll(); } $seen = false; ?>

—

Ticket-Formular

Abteilungsinformationen

Adressen, Priorität und Postfach-Abruf pflegst du unter E-Mail-Adressen.

Administratornotizen – Interne Notizen, sichtbar für alle Administratoren

Abbrechen

Abteilungen

Neue Abteilung hinzufügen
NameStatusMitgliederAbteilungsleiterE-MailErstelltZuletzt aktualisiert
(Standard)' : '' ?> Bearbeiten · Formular ·
Noch keine Abteilungen angelegt.