# Театральная система управления билетами

Десктопное приложение на **Python + PyQt6** для автоматизации продажи билетов, 
управления событиями и учёта пользователей театра. Данные хранятся в реляционной базе **PostgreSQL**.

---

# Введение

## Основные возможности

- Управление билетами — создание, редактирование, удаление, продажа
- Учёт продаж — история транзакций, фильтрация, экспорт CSV
- Управление пользователями — регистрация, назначение ролей, блокировка
- Отчёты — выручка по спектаклям, журнал аудита
- Разграничение доступа по ролям: **admin**, **cashier**, **buyer**
- Экспорт данных в CSV из любой вкладки

---

# Назначение и условия применения

Система предназначена для кассиров и администраторов театра, обеспечивающих:

- продажу и возврат билетов на спектакли;
- ведение репертуара (спектакли, залы, места);
- контроль остатков и статусов билетов;
- формирование отчётности для руководства.

**Условия применения:** локальная сеть театра или выделенный сервер с доступом к PostgreSQL. Клиентская часть запускается на Windows.

---

# Установка

База данных развёрнута на сервере — дополнительная настройка подключения не требуется.

## Шаги установки

1. Скачать установочный файл TheatreSetup.exe

2. Запустить TheatreSetup.exe двойным щелчком

3. - [ ] Следовать инструкциям мастера установки
   - [ ] Выбрать папку назначения и нажать «Далее»
   - [ ] По завершении нажать «Готово»

4. Запустить приложение через ярлык на рабочем столе

5. В диалоге входа ввести логин и пароль учётной записи:
   - Email: `admin@theatre.local`
   - Пароль: `admin123`

Для удаления приложения воспользуйтесь файлом unins000.exe в папке установки или разделом «Программы и компоненты» в Панели управления.

---

# Описание операций

| Операция | Роль | Вкладка | Действие |
|---|---|---|---|
| Просмотр билетов | все | Билеты | Открыть вкладку, применить фильтры |
| Продажа билета | cashier, admin | Билеты | Выбрать билет, нажать «Продать» |
| Добавить билет | cashier, admin | Билеты | Нажать «Добавить», заполнить форму |
| Просмотр продаж | cashier, admin | Продажи | Открыть вкладку |
| Добавить пользователя | admin | Пользователи | Нажать «Добавить», заполнить форму |
| Заблокировать пользователя | admin | Пользователи | Выбрать пользователя, нажать «Блок.» |
| Отчёт по выручке | cashier, admin | Отчёты | Нажать «Выручка по спектаклям» |
| Журнал аудита | admin | Отчёты | Нажать «Журнал аудита» |

---

# Термины и сокращения

| Термин / сокращение | Расшифровка |
|---|---|
| БД | База данных |
| СУБД | Система управления базами данных |
| PostgreSQL | Объектно-реляционная СУБД с открытым исходным кодом |
| PyQt6 | Python-биндинг к фреймворку Qt6 для создания GUI |
| PyInstaller | Инструмент упаковки Python-приложения в исполняемый .exe файл |
| Inno Setup | Инструмент для создания установщиков Windows |
| GUI | Graphical User Interface — графический интерфейс пользователя |
| CSV | Comma-Separated Values — формат хранения табличных данных |
| audit_log | Журнал аудита — таблица автоматической фиксации изменений в БД |
| admin | Роль пользователя с полным доступом к системе |
| cashier | Роль кассира — продажа билетов и просмотр отчётов |
| buyer | Роль покупателя — только просмотр доступных билетов |
| PK | Primary Key — первичный ключ таблицы |
| FK | Foreign Key — внешний ключ, ссылка на другую таблицу |