Веб-інтерфейси

Система надає веб-інтерфейси на основі ролей для різних співробітників для управління VIP доступом.

Огляд

Інтерфейс URL Необхідна роль Опис
Перевірка касира /cashier/ cashier, admin Перевірка валідності скіпасу на вході
Управління лижною школою /skischool/ skischool, admin Створення та управління уроками
Бронювання готелю /hotel/ hotel, admin Створення бронювань готелів з VIP доступом
Журнал аудиту /audit/ admin, auditor Перегляд всіх дій операторів
Звіти та аналітика /reports/ admin, reports_manager Попередній перегляд, фільтрація та експорт уроків, бронювань і проходів

Аутентифікація

Всі інтерфейси вимагають аутентифікації. Користувачі повинні: 1. Увійти в систему на /login/ 2. Бути призначені до відповідної групи (cashier/skischool/hotel/admin/reports_manager) 3. Мати активний обліковий запис

Інтерфейс касира

URL: /cashier/

Призначення: Швидка перевірка скіпасів на вхідних турнікетах

Можливості: - Перевірка скіпасів в реальному часі - Показує статус VIP доступу (✅ дозволено / ❌ заборонено) - Відображає інформацію про бронювання для валідних скіпасів - Показує періоди майбутньої валідності для зараз невалідних скіпасів - Автоматичний фокус на полі вводу після кожної перевірки для швидкої обробки

Відображається інформація:

Коли доступ ДОЗВОЛЕНО: - ✅ VIP ДОСТУП ДОЗВОЛЕНО - Номер бронювання - ID уроку (якщо застосовно) - Номер скіпасу - Час перевірки

Коли доступ ЗАБОРОНЕНО, але скіпас знайдено в системі: - ❌ ДОСТУП ЗАБОРОНЕНО - Причина заборони - Номер скіпасу - ℹ️ Інформація про скіпас: - Номер бронювання - Активний з (дата та час) - Активний до (дата та час) - Статус (Активний/Скасований/Завершений)

Послідовність використання: 1. Введіть номер скіпасу (наприклад, 1-12-223-2323) 2. Натисніть "Перевірити доступ" або натисніть Enter 3. Перегляньте результат 4. Поле вводу автоматично очищається для наступної перевірки

Інтерфейс лижної школи

URL: /skischool/

Призначення: Управління уроками лижної школи та учасниками

Можливості: - Створення нових уроків з кількома учасниками - Додавання кількох скіпасів на учасника - Перегляд списку активних уроків - Пошук та фільтрація уроків - Управління деталями уроків - Редагування вже створених уроків з вкладки "Список уроків" (кнопка ✏️ завантажує дані у форму)

Вкладки: 1. Створити урок - Деталі уроку (номер бронювання, дати, місце, інструктор) - Додавання учасників з інформацією про клієнта - Додавання кількох скіпасів на учасника

  1. Список уроків
  2. Перегляд всіх уроків
  3. Фільтрація за статусом, датою, номером бронювання
  4. Швидкий доступ до деталей уроку

Створення уроку: 1. Заповніть деталі уроку: - Номер бронювання - Дата та час початку та закінчення - Ім'я інструктора - Місце проведення - Опис 2. Додайте учасників: - Інформація про клієнта (ім'я, прізвище, телефон, email) - Натисніть "Додати учасника" 3. Додайте скіпаси для кожного учасника: - Номер скіпасу - Період валідності (необов'язково) - Натисніть "Додати скіпас" 4. Натисніть "Створити урок"

Інтерфейс готелю

URL: /hotel/

Призначення: Створення бронювань готелів з VIP доступом

Можливості: - Створення бронювань готелів - Прив'язка скіпасів до бронювань - Надання VIP доступу для гостей готелю - Перегляд існуючих бронювань - Редагування активних бронювань безпосередньо зі списку (кнопка ✏️ відкриває форму з даними)

Вкладки: 1. Створити бронювання - Інформація про гостя - Деталі готелю та номера - Дати бронювання - Скіпаси гостей

  1. Список бронювань
  2. Перегляд всіх бронювань готелів
  3. Фільтрація за датами, готелем, ID бронювання
  4. Швидкий доступ до деталей бронювання

Створення бронювання: 1. Заповніть дані гостя: - Ім'я, прізвище - Номер телефону - Email 2. Заповніть деталі бронювання: - ID готелю - ID номера - ID бронювання - Дати заїзду та виїзду 3. Додайте гостей та їх скіпаси: - Ім'я та деталі гостя - Номер скіпасу - Натисніть "Додати гостя" 4. Натисніть "Створити VIP бронювання"

Інтерфейс журналу аудиту

URL: /audit/

Роль: admin, auditor

Призначення: Моніторинг всіх дій операторів для безпеки та підзвітності

Можливості: - Перегляд всіх дій системи з розкриттям детальних даних - Фіксація попереднього/нового стану уроків і бронювань (учасники, скіпаси, дати) - JSON-блоки «До/Після» для кожного оновлення дозволяють швидко побачити відмінності - Таблиця «Змінені поля» підсвічує різницю по кожному ключу - Кнопка 📥 Експорт в Excel, що враховує активні фільтри - Фільтрація за: - Користувачем - Типом дії (створення/оновлення/видалення, перевірки, відмови, вхід/вихід) - Діапазоном дат (з точністю до хвилини) - Статусом (успіх/помилка/заборонено) - IP адресою - Номером скіпасу (пошук усіх дій з конкретним номером) - Експорт логів - Відстеження сесій користувачів

Логовані дії: - Вхід/вихід користувача - Перевірки скіпасів - Створення/зміна/видалення уроків (включно з учасниками та скіпасами) - Створення/зміна/видалення бронювань (включно з гостями та скіпасами) - Спроби доступу, що були заборонені - Перегляд звітів

Відображається інформація: - Часова мітка - Ім'я користувача - Тип дії - Статус - IP адреса - User agent - Деталі запиту - Цільовий об'єкт (урок, бронювання, тощо) - Внесені зміни (для оновлень)

Управління ролями

Для надання доступу користувачам:

  1. Перейдіть до Django Admin: /admin/
  2. Перейдіть до "Groups"
  3. Призначте користувачів до відповідних груп:
  4. cashier - Доступ до інтерфейсу перевірки скіпасів
  5. skischool - Доступ до управління уроками
  6. hotel - Доступ до управління бронюваннями готелів
  7. admin - Повний доступ, включаючи журнал аудиту
  8. auditor - Перегляд журналу аудиту та експорт

Функції безпеки

  • Всі дії логуються в системі аудиту
  • Відстеження сесій для кожного користувача
  • Запис IP адреси та user agent
  • Спроби доступу, що були заборонені, логуються
  • Пароль вимагається для всіх чутливих операцій
  • Захист від CSRF на всіх формах
  • Контроль доступу на основі ролей

Мобільна оптимізація

Всі інтерфейси адаптивні та працюють на: - Десктопних браузерах - Планшетах - Мобільних телефонах

Рекомендується використовувати інтерфейс касира на планшетах для швидкої обробки на вхідних турнікетах.

Підтримка браузерів

  • Chrome (рекомендовано)
  • Firefox
  • Safari
  • Edge

Мінімальна роздільна здатність екрана: 320px ширини

Інтерфейс звітів

URL: /reports/

Ролі: admin, reports_manager

Призначення: єдина точка для перегляду уроків, бронювань та проходів з можливістю експортувати Excel прямо з браузера.

Структура: - 🎿 Уроки — працює поверх GET /api/v1/lessons/, показує кількість учасників і скіпасів, дозволяє фільтрувати за датою початку та статусом - 🏨 Бронювання — використовує GET /api/v1/bookings/, відображає готель, клієнта, скіпаси й статус бронювання - 🎫 Проходи — використовує GET /api/v1/reports/entries/, показує останні 1000 проходів із підрахунком валідних/невалідних

Фільтри: - Для уроків/бронювань — період дат (за замовчуванням останні 30 днів) та статус - Для проходів — часовий діапазон та статус valid/invalid

Експорт: - GET /api/v1/reports/export-lessons/?from=&to= — Excel з уроками та скіпасами - GET /api/v1/reports/export-bookings/?from=&to= — Excel з бронюваннями та гостями - GET /api/v1/reports/export-validations/?from=&to=&status= — Excel зі всіма проходами з кольоровими статусами

UX особливості: - Автоматичне підставлення діапазону дат (останній місяць) - Картки з короткою статистикою над кожною таблицею - Попередній перегляд дозволяє перевірити дані перед експортом

Детальний посібник із прикладами CURL і створенням групи reports_manager: docs/REPORTS_GUIDE.md