Metadata-Version: 2.4
Name: sqllite_private
Version: 1.1.1
Summary: Учебное Tkinter-приложение ООО Обувь для продвинутого уровня ДЭ
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: Pillow<13,>=11.0
Provides-Extra: build
Requires-Dist: PyInstaller>=6.0; extra == "build"
Requires-Dist: build>=1.2; extra == "build"
Requires-Dist: twine>=6.0; extra == "build"
Provides-Extra: publish
Requires-Dist: build>=1.2; extra == "publish"
Requires-Dist: twine>=6.0; extra == "publish"

# ООО «Обувь» — приложение для ДЭ ПУ

Учебная информационная система для задания демонстрационного экзамена по коду
09.02.07-2-2026, **продвинутый уровень (ДЭ ПУ), модули 1–4**. Проект использует
Python, SQLite, Tkinter и Pillow и рассчитан на Windows.

PyPI-пакет публикуется под именем `sqllite_private`.

## Установка напрямую с GitHub через pip

После публикации этой папки как отдельного GitHub-репозитория установка
выполняется одной командой:

```powershell
python -m pip install "git+https://github.com/ИМЯ_ПОЛЬЗОВАТЕЛЯ/ИМЯ_РЕПОЗИТОРИЯ.git"
```

Если `demo-ex-app-pu` находится внутри более крупного репозитория:

```powershell
python -m pip install "git+https://github.com/ИМЯ_ПОЛЬЗОВАТЕЛЯ/ИМЯ_РЕПОЗИТОРИЯ.git#subdirectory=demo-ex-app-pu"
```

Запуск установленного приложения:

```powershell
shoe-store-pu
# или
python -m shoe_store_pu
```

Все исходники, SQLite, XLSX, изображения и документы входят в устанавливаемый
пакет. Изменяемая рабочая копия автоматически создаётся в
`%LOCALAPPDATA%\ShoeStorePU`. Другой каталог можно задать переменной окружения
`SHOE_STORE_PU_HOME`.

Внутри библиотеки также хранится точный шаблон полного проекта. Поэтому после
установки сохраняются обязательные `.py`, `.md`, `.bat`, SQLite, XLSX,
изображения и документы. Автоматически создаваемые `.venv`, `build`, `dist`,
`__pycache__`, `.spec` и `*.egg-info` в пакет не включаются.

Чтобы выгрузить весь установленный комплект файлов в обычную пустую папку:

```powershell
shoe-store-pu-export .\exported-project
```

Экспортированную папку можно сразу запускать через `python app.py` или
собирать через `build_exe.bat`.

Пересоздание рабочей базы из входящих в пакет XLSX-файлов:

```powershell
shoe-store-pu-import --reset
```

## Реализовано

- база данных SQLite в 3НФ с первичными/внешними ключами и ссылочной целостностью;
- импорт исходных Excel-файлов из `resources/import`;
- авторизация и интерфейсы гостя, клиента, менеджера и администратора;
- вывод карточек товаров с фото или заглушкой;
- зелёный фон при скидке более 15%, голубой фон при нулевом остатке;
- красная перечёркнутая старая цена и чёрная итоговая цена;
- совмещённые поиск, фильтрация по поставщику и сортировка по остатку в реальном времени;
- добавление, редактирование и удаление товаров администратором;
- уменьшение новых JPEG/PNG/GIF-изображений до 300×200 и удаление заменённого изображения;
- запрет удаления товара, который присутствует в заказе;
- просмотр заказов менеджером и администратором;
- добавление, редактирование и удаление заказов администратором;
- проверка артикулов, дат, статусов и пунктов выдачи при сохранении заказа;
- ER-диаграмма и блок-схема алгоритма по ГОСТ 19.701-90 в PDF.

## Структура

- `app.py` — точка запуска Tkinter-приложения;
- `database.py` — работа с SQLite;
- `schema.sql` — скрипт создания базы;
- `import_data.py` — скрипт разбора Excel и импорта в SQLite;
- `build_exe.bat` — единый автоматический скрипт сборки EXE;
- `verify_users.py` — проверка совпадения пользователей с исходным XLSX;
- `create_er_image.py` — создание ER-диаграммы PNG/PDF;
- `create_algorithm_image.py` — создание блок-схемы алгоритма ПУ PNG/PDF;
- `shoe_store.sqlite3` — готовая база с импортированными данными;
- `docs/er_diagram.pdf` — ER-диаграмма;
- `docs/er_diagram.png` — ER-диаграмма в формате изображения;
- `docs/algorithm_gost_19.701-90.pdf` — алгоритм приложения;
- `docs/algorithm_gost_19.701-90.png` — блок-схема ПУ как изображение;
- `docs/testing_report.docx` — документ со скриншотами проверки;

## Самый простой запуск в Windows

Требуется установленный Python 3.11–3.13 с Tkinter.

```powershell
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
.\.venv\Scripts\python.exe app.py
```

Готовая база уже заполнена. При удалении базы приложение самостоятельно
создаст её и импортирует данные из XLSX-файлов.

Тестовая учётная запись администратора:

```text
Логин: 94d5ous@gmail.com
Пароль: uzWC67
```

## Импорт данных

Импортёр написан на стандартной библиотеке Python и не использует `openpyxl`.
Он ожидает исходные имена и столбцы файлов:

- `Tovar.xlsx`;
- `user_import.xlsx`;
- `Заказ_import.xlsx`;
- `Пункты выдачи_import.xlsx`.

Запуск пересоздания базы:

```powershell
python import_data.py --reset
```

Позиции заказа из строки вида `А112Т4, 2, F635R4, 2` разбираются в отдельную
таблицу `order_items`. Некорректные значения не прерывают импорт дат:
например, исходная дата `30.02.2025` сохраняется в `import_warnings`, а поле
даты заказа становится `NULL`.

## Создание EXE

Запустите двойным щелчком:

```powershell
build_exe.bat
```

Это единственный BAT-файл, необходимый для сборки. Он:

1. создаёт виртуальное окружение;
2. устанавливает Pillow и PyInstaller;
3. создаёт настоящий ICO-файл;
4. пересоздаёт SQLite из актуальных XLSX-файлов;
5. проверяет полное совпадение пользователей с `user_import.xlsx`;
6. собирает приложение.

Готовый файл появится в `dist\ShoeStorePU\ShoeStorePU.exe`. Для SQLite
используется сборка в виде папки (`onedir`), потому что приложению необходимо
изменять файл базы рядом с EXE. Запускайте EXE из каталога, доступного
пользователю на запись, например из папки `Документы`, а не из `Program Files`.

### Альтернативная сборка EXE без BAT

Если `build_exe.bat` не запускается, откройте PowerShell в корне проекта и
выполните команды вручную:

```powershell
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install Pillow PyInstaller
python import_data.py --reset
python verify_users.py
python create_er_image.py
python create_algorithm_image.py
python -m PyInstaller --noconfirm --clean --windowed --name ShoeStorePU `
  --icon "resources\Icon.ico" `
  --add-data "schema.sql;." `
  --add-data "resources;resources" `
  app.py
```

Результат также появится в `dist\ShoeStorePU\ShoeStorePU.exe`. Перед повторной
сборкой закройте ранее запущенный EXE, иначе Windows может заблокировать файлы.

## ER-диаграмма SQLite

Готовая диаграмма уже находится в `docs/er_diagram.pdf`.

Вариант выгрузки средствами **DB Browser for SQLite**:

1. Откройте `shoe_store.sqlite3`.
2. Перейдите на вкладку `Database Structure`.
3. Нажмите `Relationships`.
4. Разместите таблицы так, чтобы связи не пересекались.
5. Используйте печать в системный принтер `Microsoft Print to PDF`.

Вариант через **DBeaver**:

1. Создайте подключение SQLite к `shoe_store.sqlite3`.
2. Выделите все таблицы в навигаторе.
3. Выберите `View Diagram`.
4. В окне диаграммы выберите `Export Diagram` → `PDF`.

## Адаптация проекта под другой вариант

Ниже описан полный порядок подмены проекта под другой вариант задания.
Перед изменениями сохраните резервную копию папки проекта.

### 1. Сначала изучите новый вариант

В новом комплекте найдите:

- описание предметной области и доступных ролей;
- руководство по стилю с цветами, шрифтом, логотипом и иконкой;
- XLSX-файлы с пометкой `import`;
- изображения товаров и изображение-заглушку;
- требования к подсветке, скидкам, сортировке, фильтрации и поиску;
- перечень обязательных полей и связей базы данных.

Если предметная область остаётся магазином обуви и названия столбцов не
изменились, обычно достаточно заменить ресурсы и константы. Если изменились
таблицы, поля или связи, потребуется также изменить схему БД и импортёр.

### 2. Подмена исходных таблиц

Замените файлы в каталоге `resources/import`:

| Файл | Назначение | Ожидаемые столбцы |
|---|---|---|
| `Tovar.xlsx` | Товары | `Артикул`, `Наименование товара`, `Единица измерения`, `Цена`, `Поставщик`, `Производитель`, `Категория товара`, `Действующая скидка`, `Кол-во на складе`, `Описание товара`, `Фото` |
| `user_import.xlsx` | Пользователи | `Роль сотрудника`, `ФИО`, `Логин`, `Пароль` |
| `Заказ_import.xlsx` | Заказы | `Номер заказа`, `Артикул заказа`, `Дата заказа`, `Дата доставки`, `Адрес пункта выдачи`, `ФИО авторизированного клиента`, `Код для получения`, `Статус заказа` |
| `Пункты выдачи_import.xlsx` | Пункты выдачи | Один адрес в каждой строке |

Имена файлов и заголовки столбцов должны совпадать точно. Если в новом
варианте используются другие имена, измените соответствующие обращения
`row["Название столбца"]` в `import_data.py`.

Позиции заказа сейчас ожидаются в формате:

```text
А112Т4, 2, F635R4, 2
```

То есть пары `артикул, количество`. Если формат в варианте другой, измените
функцию `parse_order_items()` в `import_data.py`.

Пользователи не записаны в коде вручную. Роль, ФИО, логин и пароль
импортируются из `resources/import/user_import.xlsx`. Во время сборки
`verify_users.py` проверяет полное совпадение XLSX и SQLite.

### 3. Подмена изображений

Замените содержимое каталога `resources/images`:

- `Icon.png` — логотип на форме входа и источник иконки EXE;
- `picture.png` — изображение-заглушка;
- остальные JPEG/PNG-файлы — фотографии товаров.

Имя фотографии должно совпадать со значением столбца `Фото` в `Tovar.xlsx`.
Например, значению `1.jpg` должен соответствовать файл
`resources/images/1.jpg`.

Для новых загружаемых изображений приложение поддерживает JPEG, PNG и GIF и
уменьшает их до размера не более 300×200 пикселей.

### 4. Изменение цветов, шрифтов и порогов

Основные настройки находятся в начале `app.py`:

```python
WHITE = "#FFFFFF"             # основной фон
SECONDARY = "#7FFF00"         # дополнительный фон
ACCENT = "#00FA9A"            # акцентные кнопки
HIGH_DISCOUNT = "#2E8B57"     # фон товара с большой скидкой
OUT_OF_STOCK = "#ADD8E6"      # фон товара без остатка
FONT = ("Times New Roman", 11)
FONT_BOLD = ("Times New Roman", 11, "bold")
```

Порог большой скидки находится в методе `create_product_card()` файла
`app.py`:

```python
product["discount"] > 15
```

Число `15` замените на значение из нового задания.

Логика подсветки сейчас имеет такой приоритет:

1. если остаток равен нулю — голубой фон;
2. иначе, если скидка больше порога — зелёный фон;
3. иначе — основной белый фон.

### 5. Изменение ролей и прав доступа

Названия ролей импортируются из `user_import.xlsx`, но используемые
интерфейсом названия также проверяются в `app.py`:

```python
role in {"Менеджер", "Администратор"}
role == "Администратор"
```

Список базовых ролей для первоначального создания находится в
`import_data.py`:

```python
role_names = ["Администратор", "Менеджер", "Авторизированный клиент"]
```

При изменении названий ролей замените их одновременно в `user_import.xlsx`,
`import_data.py` и проверках роли в `app.py`.

### 6. Изменение подписей и названия организации

Все пользовательские надписи находятся в `app.py`. Для быстрой замены можно
выполнить поиск по текущим значениям:

- `ООО «Обувь»`;
- `Список товаров`;
- `Добавить товар`;
- `Все поставщики`;
- `Без сортировки`;
- `По возрастанию`;
- `По убыванию`.

Если меняются значения `Все поставщики` или варианты сортировки, такие же
строки необходимо заменить в `database.py`, поскольку они используются при
формировании SQL-запроса.

### 7. Изменение структуры базы данных

Схема базы находится в `schema.sql`.

Если в новом варианте добавлены или удалены сущности/поля:

1. измените таблицы, ключи и ограничения в `schema.sql`;
2. измените импорт данных в `import_data.py`;
3. измените SQL-запросы и сохранение данных в `database.py`;
4. измените поля форм и карточек в `app.py`;
5. обновите ER-диаграмму.

После изменения структуры обязательно удалите старую базу или выполните:

```powershell
.\.venv\Scripts\python.exe import_data.py --reset
```

### 8. Обновление ER-диаграммы

Изображение ER-диаграммы создаётся скриптом:

```powershell
.\.venv\Scripts\python.exe create_er_image.py
```

Скрипт создаёт:

- `docs/er_diagram.png` — изображение;
- `docs/er_diagram.pdf` — PDF для сдачи.

Если структура БД изменилась, необходимо вручную обновить список таблиц,
полей и связей в `create_er_image.py`, затем снова запустить скрипт.

### 9. Пересборка под новый вариант

После всех замен запустите единственный BAT-файл:

```powershell
build_exe.bat
```

Он автоматически:

1. установит необходимые библиотеки;
2. создаст ICO из нового `Icon.png`;
3. удалит старую SQLite и импортирует актуальные XLSX-файлы;
4. проверит совпадение пользователей;
5. обновит ER-диаграмму и блок-схему алгоритма;
6. соберёт новый EXE.

Результат находится здесь:

```text
dist\ShoeStorePU\ShoeStorePU.exe
```

После сборки проверьте:

- авторизацию каждой ролью;
- отображение ФИО после входа;
- количество импортированных товаров;
- фотографии и заглушку;
- цвета и пороги подсветки;
- расчёт итоговой цены;
- поиск, фильтрацию и сортировку;
- добавление, редактирование и удаление товаров;
- запрет удаления товара из заказа;
- просмотр заказов менеджером;
- добавление, редактирование и удаление заказов администратором;
- соответствие ER-диаграммы актуальной базе.
