# ComputerSalesApp

WinForms-приложение для темы «Продажа компьютерной техники».

## Подключение

Строка подключения находится в файле:

`ComputerSalesApp/Data/ConnectionSettings.cs`

Используется схема `ryzhov_ka`.

## Роли

- `admin` — видит все таблицы и может добавлять, изменять, удалять записи.
- `user` — покупатель. Видит только свои данные, товары, свои заказы и позиции своих заказов.

## Тестовые пользователи

- `admin / admin123`
- `user / user123`

## Важное изменение логики пользователей

Учётная запись `user` теперь связана с покупателем через поле `app_users.customer_id`, а не с сотрудником. Это нужно для ограничения доступа: покупатель не должен видеть чужие заказы.

## Порядок подготовки БД

Для новой базы:

1. `database/sql/01_schema.sql`
2. импорт CSV по `database/csv/import_order.txt`
3. `database/sql/03_pgcrypto_auth.sql`
4. `database/sql/04_views.sql`
5. `database/sql/05_after_import_identity.sql`

Для уже созданной старой базы можно выполнить:

`database/sql/06_patch_app_users_customer.sql`

## Исправление 2026-06-01

- Исправлена ошибка `Object reference not set to an instance of an object` при поиске заказов.
- Отчёт больше не запускается автоматически при открытии приложения: пользователь сам нажимает `Найти`.
- Настройка колонок DataGridView стала безопасной: отсутствующие или пустые колонки больше не вызывают падение.
- Левое меню расширено, чтобы названия разделов меньше обрезались.


## Исправление тестовых покупателей

В тестовых данных покупатели и сотрудники теперь разные люди. Если база уже была создана раньше, выполните в pgAdmin:

```sql
-- database/sql/07_fix_test_customer_names.sql
```

Скрипт меняет только ФИО и контактные данные покупателей, структуру БД не трогает.


## Проверенная последовательность подготовки БД

1. Выполнить `database/sql/01_schema.sql`.
2. Импортировать CSV из `database/csv` по порядку из `import_order.txt`.
3. Выполнить `database/sql/03_pgcrypto_auth.sql`.
4. Выполнить `database/sql/04_views.sql`.
5. Выполнить `database/sql/05_after_import_identity.sql`.
6. Выполнить `database/sql/08_security_audit.sql`.

Если база уже создана раньше, без полного пересоздания можно выполнить:
`06_patch_app_users_customer.sql`, затем `04_views.sql`, затем `08_security_audit.sql`.
