'Montag', 2 => 'Dienstag', 3 => 'Mittwoch', 4 => 'Donnerstag', 5 => 'Freitag', 6 => 'Samstag', 0 => 'Sonntag']; $weekdayOrder = [1, 2, 3, 4, 5, 6, 0]; $errors = []; if ($_SERVER['REQUEST_METHOD'] === 'POST') { verify_csrf(); $action = $_POST['action'] ?? ''; if ($action === 'save_hours') { $enabled = !empty($_POST['business_hours_enabled']) ? '1' : '0'; set_setting('business_hours_enabled', $enabled); $stmt = $pdo->prepare('UPDATE business_hours SET is_open=?, open_time=?, close_time=? WHERE weekday=?'); foreach ($weekdayOrder as $wd) { $isOpen = !empty($_POST["open_{$wd}"]) ? 1 : 0; $openTime = trim($_POST["from_{$wd}"] ?? '09:00') . ':00'; $closeTime = trim($_POST["to_{$wd}"] ?? '17:00') . ':00'; $stmt->execute([$isOpen, $openTime, $closeTime, $wd]); } audit_log($staff['id'], 'Geschäftszeiten aktualisiert'); flash('success', 'Geschäftszeiten gespeichert.'); redirect('/staff/business_hours.php'); } if ($action === 'add_holiday') { $date = trim($_POST['holiday_date'] ?? ''); $name = trim($_POST['holiday_name'] ?? ''); if (!preg_match('/^\d{4}-\d{2}-\d{2}$/', $date)) { $errors[] = 'Bitte ein gültiges Datum angeben.'; } elseif ($name === '') { $errors[] = 'Bitte einen Namen für den Feiertag angeben.'; } else { $pdo->prepare('INSERT INTO business_holidays (holiday_date, name) VALUES (?,?)')->execute([$date, $name]); audit_log($staff['id'], "Feiertag hinzugefügt: {$name} ({$date})"); flash('success', 'Feiertag hinzugefügt.'); redirect('/staff/business_hours.php?tab=holidays'); } } if ($action === 'delete_holiday') { $id = (int) $_POST['id']; $pdo->prepare('DELETE FROM business_holidays WHERE id = ?')->execute([$id]); redirect('/staff/business_hours.php?tab=holidays'); } if ($action === 'import_holidays') { $stateCode = $_POST['state_code'] ?? ''; $importYear = (int) ($_POST['import_year'] ?? 0); if (!isset(GERMAN_STATE_NAMES[$stateCode])) { $errors[] = 'Bitte ein gültiges Bundesland auswählen.'; } elseif ($importYear < 2000 || $importYear > 2100) { $errors[] = 'Bitte ein gültiges Jahr auswählen.'; } else { $newHolidays = german_public_holidays($stateCode, $importYear); $existingDates = array_flip($pdo->query('SELECT holiday_date FROM business_holidays')->fetchAll(PDO::FETCH_COLUMN)); $insertStmt = $pdo->prepare('INSERT INTO business_holidays (holiday_date, name) VALUES (?,?)'); $added = 0; $skipped = 0; foreach ($newHolidays as $h) { if (isset($existingDates[$h['date']])) { $skipped++; continue; } $insertStmt->execute([$h['date'], $h['name']]); $existingDates[$h['date']] = true; $added++; } $stateName = GERMAN_STATE_NAMES[$stateCode]; audit_log($staff['id'], "Feiertage {$importYear} für {$stateName} importiert ({$added} hinzugefügt, {$skipped} bereits vorhanden)"); flash('success', "{$added} Feiertag(e) für {$stateName} {$importYear} hinzugefügt" . ($skipped ? ", {$skipped} waren bereits vorhanden." : '.')); redirect('/staff/business_hours.php?tab=holidays'); } } } $hoursEnabled = get_setting('business_hours_enabled', '0') === '1'; $hoursByWeekday = []; foreach ($pdo->query('SELECT * FROM business_hours')->fetchAll() as $r) $hoursByWeekday[(int) $r['weekday']] = $r; $holidays = $pdo->query('SELECT * FROM business_holidays ORDER BY holiday_date')->fetchAll(); $pageTitle = 'Geschäftszeiten'; $activePage = 'business_hours'; require __DIR__ . '/_header.php'; ?>
Legt fest, innerhalb welcher Zeiten die SLA-Fristen (Reaktion/Lösung) laufen. Bei deaktivierten Geschäftszeiten gelten die Fristen wie bisher rund um die Uhr. Achtung: Wenige Stunden pro Tag (z. B. nur abends) lassen die Fälligkeit in Prioritäten & SLA-Zeiten entsprechend weiter in die Zukunft rücken – eine 72-Std-Lösungsfrist kann bei 3 offenen Stunden/Tag mehrere Wochen dauern.