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'; ?>
$_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'); $curAutoMode = (string) $v('auto_assign_mode', 'auto_assign_mode', 'none'); $curAutoStaff = (string) $v('auto_assign_staff_id', 'auto_assign_staff_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

Gilt für Tickets aus Formular, E-Mail, API (z. B. Minecraft-Plugin) und Live-Chat. Eine Ticket-Regel mit „Mitarbeiter zuweisen“ hat Vorrang. Ist der Mitarbeiter im Urlaub, geht das Ticket an seine Vertretung. „Reihum“ überspringt Mitarbeiter im Urlaub, offline oder außerhalb ihrer Schicht.

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.