# Руководство пользователя RateLoader v3.0

Добро пожаловать в **RateLoader v3.0** — унифицированное приложение для Windows, предназначенное для управления тарифами отеля. Оно объединяет три legacy-утилиты в единый интерфейс с GUI и фоновым планировщиком:

1. **ExportMailer** — экспорт данных в CSV и отправка по email.
2. **PriceExport** — экспорт цен в JSON на внешний API.
3. **RateLoader** — HTTP-сервер для приёма тарифов и записи в Oracle.

Приложение обеспечивает **полную обратную совместимость** с legacy-скриптами (форматы файлов, имена, поведение), **последовательное выполнение задач**, **логирование ошибок** без краха и **автоматическое планирование**.

## Системные требования

- **ОС**: Windows 7+ (рекомендуется Windows 10+).
- **Oracle Client**: 32-битный (для подключения к БД).
- **RAM**: минимум 512 МБ, рекомендуется 2 ГБ.
- **Диск**: ~200 МБ.

## Установка

### Вариант 1: Готовый exe (рекомендуется)

1. Скачайте `rateloader-gui.exe`.
2. Распакуйте в папку (например, `C:\RateLoader\`).
3. Убедитесь, что `settings.ini` настроен (создаётся автоматически с дефолтами).
4. Запустите `rateloader-gui.exe`.

**Структура папок**:

```
RateLoader/
├── rateloader-gui.exe
├── settings.ini          # Конфигурация
└── log/                  # Логи (создаётся автоматически)
    └── rateloader.log
```

### Вариант 2: Исходный код (Python 3.8 32-bit)

1. Установите зависимости (cx_Oracle, requests и т.д.).
2. Запуск GUI: `python gui/app.py`.
3. Фон: `python main.py` (планировщик + сервер).

## Запуск и интерфейс

### GUI (основной режим)

Запуск открывает окно с **вкладками** (tkinter):

1. **Rate Loader** (первая вкладка):

   - Кнопки **Start/Stop** HTTP-сервера (порт из `server_port`, дефолт 8000).
   - Статус очереди, прогресс.
   - Эндпоинты:
     - `GET /ping` — `{"status":"ok"}`.
     - `GET /status` — статус очереди.
     - `POST /load` — загрузка JSON-тарифов (асинхронно в Oracle).

2. **Export Mailer**:

   - Кнопка **"Run now"** — ручной запуск экспорта CSV + email.
   - Прогресс-бар, статус, дата последнего запуска.

3. **Price Export**:

   - Кнопка **"Run now"** — экспорт JSON-цен на API (на `months` дней вперёд).
   - Статус, прогресс.

4. **IP Management**:

   - Глобальный режим: Allowed/Restricted.
   - Таблица IP: статус, последнее обращение, запросы (`ip_access.json`).

5. **Database Schema**.

6. **Settings**:

   - Редактирование всех параметров `settings.ini`.
   - Чекбоксы: SSL, сжатие вложений, автообновление SQL и т.д.
   - Кнопки **Save**, **Reload**, **Apply**.

7. **Logs** (последняя):
   - Выбор файла: `rateloader.log` (основной).
   - Автообновление, поиск.
   - Префиксы: `[EXPORT]`, `[PRICE]`, `[RATELOADER]` и др.

**Строка состояния**: Время, статус сервера/очереди.

### Фоновая работа (без GUI)

- **Одна рабочая нить** (очередь FIFO).
- **Планировщик**: каждые 30 сек, запускает в 08:00, 12:00, 15:00, 18:00, 20:00:
  1. ExportMailer.
  2. PriceExport.

## Конфигурация (`settings.ini`)

Автосоздание с дефолтами. Раздел `[settings]`:

```
# Oracle
oracleconnectstring = v8live/live@v8
nls_lang = AMERICAN_AMERICA.CL8MSWIN1251
file_encoding = cp1251

# ExportMailer
url = http://fidelio.pro/select.sql
block-url = http://fidelio.pro/selectBlocks.sql
sendfrom = radio-moscow@hotellab.io
sendto = someone@example.com
mailserver = mail.hotellab.io
port = 25
pwd = ***
ssl = 0

# PriceExport
api_url = https://app.hotellab.io/privat/api/integration/1c/set-pms-prices/5
token = 1111
months = 12

# RateLoader
server_port = 8000

# Планировщик
schedule_hours = 8,12,15,18,20

# Дополнительно
compress_attachments = 1
auto_update_sql = 1
deeper_logging = 0
```

**Изменения**: GUI (Settings) или редактор. Reload в GUI.

## Основные функции

### 1. ExportMailer

- SQL-запросы, fallback локальные.
- Экспорт **первой колонки** в CSV (`<KEY>.csv`, `BLOCKS-<KEY>.csv`).
- Сжатие, SMTP.

### 2. PriceExport

- `m_hlpricejson('dd.mm.yyyy')` на `months` дней.
- POST с токеном.

### 3. RateLoader

- JSON → PL/SQL (`m_rlputrate`, `m_rladdchild`).
- 200 OK сразу.

## Логирование

- `log/rateloader.log` (ротация 5MB, UTF-8).
- Формат: `YYYY-MM-DD HH:MM:SS - [COMPONENT] Message`.
- GUI: живой tail.

## Обработка ошибок

- Лог + продолжение (не краш).

## Устранение неисправностей

- Логи по префиксам.
- Oracle/Email/Сервер: см. разделы.

## Дополнительно

**Вопросы?** Пришлите логи + `settings.ini`.
