# Курсы

# Управление курсами

Раздел **Курсы** в боковом меню содержит подразделы для управления всей учебной структурой: от дисциплин и специализаций до конкретных курсов с расписанием.

## Структура меню «Курсы»

| Подраздел | Назначение |
|-----------|------------|
| **Заявления** | Управление заявлениями студентов на курсы (подробнее: [04-applications.md](https://docs.huvis.ee/link/143)) |
| **Дисциплины** | Предметные области (верхний уровень иерархии) |
| **Специализации** | Направления внутри дисциплин (содержат курсы) |
| **Домашние задания** | Задания для студентов с оценками и обратной связью |
| **Учебные программы** | Тематические планы: темы, часы, уровни |
| **Добавить заявление** | Быстрое создание нового заявления |
| **Настройки** | Учебный год, шаблоны, анкеты, настройки регистрации |

## Иерархия: Дисциплина → Специализация → Курс

Система использует трёхуровневую иерархию:

```
Дисциплина (например, «Математика»)
  └── Специализация (например, «Алгебра»)
        └── Курс (например, «Алгебра — группа А, 2025/2026»)
```

Прежде чем создать курс, необходимо создать дисциплину и специализацию.

---

## Дисциплины

Дисциплина — это предметная область (например, «Математика», «Английский язык»).

### Список дисциплин

1. Перейдите в **Курсы → Дисциплины**.
2. Отображается таблица со всеми дисциплинами: название, количество специализаций.
3. Используйте поиск и сортировку для навигации.

### Создание дисциплины

1. Нажмите кнопку **Добавить дисциплину**.
2. Заполните **Название** на каждом доступном языке (например, на эстонском и русском).
3. Нажмите **Сохранить**.

> **Примечание:** Название дисциплины переводится на все языки системы. Пользователь видит название на своём языке интерфейса.

### Редактирование и удаление

- Нажмите на дисциплину для редактирования.
- Удаление возможно, если у дисциплины нет активных специализаций и курсов.

---

## Специализации

Специализация — это направление внутри дисциплины. Каждая специализация содержит один или несколько курсов.

### Список специализаций

1. Перейдите в **Курсы → Специализации**.
2. Таблица: название, дисциплина, количество курсов.

### Создание специализации

1. Нажмите **Добавить специализацию**.
2. Заполните:
   - **Название** — на каждом доступном языке.
   - **Дисциплина** — выберите из выпадающего списка.
3. Нажмите **Сохранить**.

### Редактирование и удаление

- Нажмите на специализацию для редактирования.
- Удаление заблокировано, если есть активные заявления в курсах этой специализации.

### Переход к курсам

Со страницы специализации можно перейти к списку её курсов или создать новый курс.

---

## Создание курса

Курс — это конкретная учебная группа с расписанием, преподавателем и студентами. Создание, редактирование и копирование курсов выполняется через **пошаговый wizard** (мастер).

### Как открыть wizard

- **Создание:** На странице курсов нажмите кнопку **«+ Lisa uus»** (Добавить новый) в боковой панели.
- **Редактирование:** На странице курса нажмите **«✏️ Muuda»** (Редактировать) в баннере.
- **Копирование:** Нажмите **⋮** (меню) в баннере курса → **«Kopeeri kursust»** (Копировать курс).

### Шаги wizard

Wizard состоит из 5 шагов (при копировании — 6):

#### Шаг 1: Основная информация (Põhiinfo)

| Поле | Описание | Обязательное |
|------|----------|:------------:|
| **Название** | Название курса на каждом языке системы (ET, RU) | Да |
| **Учебный год** | К какому учебному году относится курс | Да |
| **Дата начала** | Дата первого занятия | Да |
| **Дата окончания** | Дата последнего занятия (должна быть позже даты начала) | Да |
| **Дата начала регистрации** | Когда форма регистрации станет доступной. Если пусто — доступна всегда | Нет |
| **Макс. кол-во студентов** | Лимит мест в группе (минимум 1) | Да |
| **Лимит листа ожидания** | Сколько заявлений могут быть в очереди. 0 = отключён | Нет |
| **Мин./Макс. возраст** | Возрастные ограничения (макс. >= мин.) | Да |
| **Ассистенты** | Дополнительные преподаватели | Нет |

> **Валидация:** Wizard не позволит перейти к следующему шагу, если обязательные поля не заполнены или содержат ошибки (например, дата окончания раньше даты начала).

> **Важно:** Курс привязан к учебному году. Убедитесь, что выбран нужный учебный год.

#### Шаг 2: Расписание (Tunniplaan)

Отображается недельная сетка расписания. Нажмите **«+ Lisa tund»** (Добавить занятие) чтобы открыть диспетчер расписания.

**Диспетчер расписания:**
- Сетка кабинетов × часов (8:00–23:00) для выбранного дня недели
- Drag & drop для размещения занятия (привязка к 15-минутным интервалам)
- Визуальное выделение конфликтов (красная подсветка при пересечении времени)
- Существующие занятия других курсов показаны как заблокированные (нельзя двигать)
- Расписание выбранного преподавателя отображается внизу

> Расписание необязательно — можно создать курс без занятий и добавить их позже.

#### Шаг 3: Цена (Hind)

**Тип биллинга** — выберите один из трёх:
- 🔄 **Tellimus** (Подписка) — ежемесячная оплата
- 🎫 **Pakett** (Пакет) — фиксированное число занятий
- 🔀 **Tellimus + Pakett** (Смешанный) — студент выбирает

**Цены по частоте** (для подписки/смешанного):
- Ежемесячно, квартально, полугодие, год — введите цену в евро для каждого периода

**Интенсивность** (для подписки/смешанного):
- Включите toggle → задайте мин./макс. занятий в неделю
- Для каждого варианта (1-5 занятий/неделю) задайте цену

**Пакетные опции** (для пакета/смешанного):
- Нажмите **«Lisa pakett»** → задайте кол-во занятий и цену
- Можно добавить несколько пакетов (например, 5 занятий / 10 занятий / 20 занятий)

**Пробный урок:**
- Включите toggle → появятся настройки: цена, режим оплаты, режим договора, режим мест

#### Шаг 4: Шаблоны (Mallid)

- **Шаблон заявки** — выберите шаблон документа для заявлений
- **Шаблон пробного урока** — появляется только если пробный урок включён
- **Уведомления по статусам** — для каждого статуса заявления выберите шаблон уведомления плательщику
- **Уведомления работникам** — для каждого статуса выберите работников для уведомления

#### Шаг 5: Настройки (Seaded)

- **Уведомлять преподавателей** — toggle
- **Уведомлять ассистентов** — toggle
- **Авто-закрытие** — система закрывает регистрацию при заполнении мест
- **🔒 Ручное закрытие** — администратор закрывает регистрацию вручную. Курс не откроется автоматически даже при освобождении мест.

> При редактировании на этом шаге отображается **статистика курса**: активные заявления, свободные места, лист ожидания.

#### Шаг 6: Студенты (Õpilased) — только при копировании

Выберите какие заявления перенести в новый курс:

| Режим | Описание |
|-------|----------|
| **Ülekandmine** (Перенос) | Статус заявления **сохраняется** (подписано → подписано). Файлы и скидки копируются. |
| **Uus avaldus** (Новое) | Создаётся **новое заявление** со статусом «Создано». Файлы и скидки копируются. |

- Выберите студентов через чекбоксы или нажмите **«Vali kõik»** (Выбрать все)
- Фильтруйте по статусу через цветные badges
- Дополнительно: toggle'ы для копирования тестов, анкет, вступительных тестов

> В обоих режимах исходные заявления **не изменяются**.

### Закрытие регистрации

**Автоматическое закрытие** (`close`): регистрация закрывается когда:
1. Все основные места заняты
2. Лист ожидания заполнен или отключён

При освобождении места курс автоматически **открывается** обратно.

**Ручное закрытие** (`force_closed`): администратор закрывает регистрацию вручную. Отличия:
- Курс **не откроется** автоматически при освобождении мест
- Авто-закрытие toggle отключается (неактивен)
- Красный баннер предупреждает что курс закрыт вручную

### Сохранение

Нажмите зелёную кнопку на последнем шаге:
- **«Loo kursus»** — при создании
- **«Salvesta»** — при редактировании
- **«Kopeeri kursus»** — при копировании

После сохранения вы будете перенаправлены на страницу курса.

---

## Страница курса (вкладки)

Каждый курс имеет детальную страницу с вкладками. Для перехода: **Специализации → [специализация]** → нажмите на курс.

### Вкладка «Информация»

Обзорная страница курса с ключевыми показателями.

**Карточки KPI (верхний ряд):**

| Карточка | Описание |
|----------|----------|
| Активные | Количество активных заявлений |
| Вместимость | Максимальное число мест |
| Свободные | Доступные места |
| Лист ожидания | Заявления в листе ожидания |

**Диаграмма статусов:** Круговая диаграмма распределения заявлений по статусам (созданные, отправленные, подписанные и т.д.).

**Расписание:** Визуальная сетка расписания по дням недели — время, кабинет, преподаватель, признак онлайн.

**Еженедельный план:** Таблица с блоками расписания и датами начала действия каждого блока.

### Цены и шаблоны

> **Примечание:** Управление ценами, пробным уроком, шаблонами заявлений и уведомлениями перенесено в **wizard** (шаги 3 «Hind» и 4 «Mallid»). Для изменения нажмите **«✏️ Muuda»** в баннере курса.
>
> Скидки курса по-прежнему доступны через вкладку «Информация» или через прямые URL-ы.
- Нажмите **Сохранить** для применения.

**Шаблоны уведомлений плательщику:**
- Для каждого статуса заявления (Создано, Отправлено, Подписано, Закрыто, Аннулировано, Лист ожидания) можно выбрать шаблон email-уведомления.
- Используйте шаблон по умолчанию или выберите персонализированный для этого курса.
- Если шаблон не выбран, используется общий шаблон из настроек.

**Уведомления работникам:**
- Настройка, при каких статусах уведомлять работников (преподавателей/ассистентов).
- Для каждого статуса можно включить или выключить уведомление.

> **Последствия:** Изменение шаблонов влияет только на будущие уведомления. Ранее отправленные письма не изменяются.

### Вкладка «Студенты»

Список всех заявлений курса с фильтрацией по статусу.

**Фильтры:**
- Вкладки по статусам: Лист ожидания, Созданные, Отправленные, Подписанные, Закрытые, Аннулированные
- Каждая вкладка показывает количество заявлений

**Таблица:**
- ID, Студент, Плательщик, Курс, Дата создания, Дата первого урока, Статус
- Сортировка по любому столбцу
- Нажмите на строку для перехода к заявлению

### Вкладка «Конференции»

Управление видеоконференциями (BigBlueButton). Доступна при включённом модуле **Конференции**.

- **Начать конференцию** — создаёт и запускает видеоконференцию для группы.
- **Создать встречу** — планирование будущей конференции.
- **Список встреч** — таблица прошедших и запланированных встреч: дата, статус (онлайн/офлайн), количество участников, время.

### Вкладка «Начальное тестирование»

Управление вступительными тестами. Доступна при включённом модуле **Тесты**.

**Тесты:**
- Таблица настроенных тестов: название, способ связи, оставшиеся места, дней ожидания.

**Назначения тестов:**
- Таблица: студент, дата создания, срок ответа, оценка, комментарий.
- Можно назначить тест конкретному студенту.

### Вкладка «Посещаемость»

Просмотр и управление посещаемостью занятий.

**На мобильных:** Две вкладки — «Предстоящие» и «Прошедшие» сессии.

**На десктопе:** Календарная сетка:
- Строки — студенты
- Столбцы — даты занятий
- Цвета: зелёный (присутствовал), красный (отсутствовал), серый (не отмечено)
- Клик по ячейке для отметки

**Карточки сессий:** Дата, время, статус (проведено / запланировано), кнопка для отметки.

### Вкладка «Счета»

Финансовая информация по курсу. Доступна при включённом модуле **Счета**.

**KPI карточки:**
- Количество выставленных счетов и сумма
- Сумма оплаченных счетов
- Задолженность

**График:** Линейная диаграмма: выставлено / оплачено / должники по месяцам.

**Таблица студентов:** Группировка по плательщику → студент → список счетов с суммами и статусами. Номер счёта является ссылкой на детальную страницу счёта.

**Массовая скидка:** Через меню **⋮** (три точки) в заголовке курса → **«Lisa allahindlus»** можно применить процентную скидку ко всем неотправленным счетам курса. Подробнее — в разделе [Массовая скидка на курс](https://docs.huvis.ee/link/144#массовая-скидка-на-курс).

### Вкладка «Замены уроков»

Управление заменами преподавателей и переносами занятий.

**Замена преподавателя (левая колонка):**
1. Выберите дату и время урока.
2. Укажите нового преподавателя.
3. Укажите причину замены.
4. Отметьте, нужно ли уведомить студентов/родителей.
5. Нажмите **Сохранить**.

**Перенос занятия (правая колонка):**
1. Выберите исходную дату урока.
2. Укажите новую дату.
3. Укажите причину переноса.
4. Отметьте, нужно ли уведомить.
5. Нажмите **Сохранить**.

> **Последствия:** При включённых уведомлениях студенты и/или плательщики получат email о замене или переносе.

### Вкладка «Опросник»

Вкладка содержит две под-вкладки:

**Под-вкладка «Шаблон анкеты»:**
- Выберите анкету из выпадающего списка (создаются в Настройки → Анкеты)
- Дефолтная анкета организации — её поля отображаются на всех курсах автоматически
- Можно назначить курсу дополнительную (не-дефолтную) анкету — её поля покажутся вместе с дефолтными
- Превью полей выбранной анкеты

**Под-вкладка «Ответы»:**
- Таблица ответов на анкету по всем заявлениям курса
- Поиск по имени ученика
- Каждая строка — ученик с его ответами и ссылкой на заявление

Типы полей: текст, текстовое поле, выбор из списка, чекбокс.

---

## Домашние задания

Раздел **Курсы → Домашние задания**. Доступен при включённом модуле **Домашние задания**.

### Список заданий

Таблица всех домашних заданий: название, курс, студент, срок сдачи, оценка, статус.

### Создание задания

1. Нажмите **Создать задание**.
2. Заполните:
   - Название и описание
   - Курс
   - Привязка к учебной программе (необязательно)
   - Срок сдачи
   - Максимальный балл
3. Приложите файлы (если нужно).
4. Нажмите **Сохранить**.

### Оценка и обратная связь

1. Откройте задание.
2. Просмотрите ответ студента и приложенные файлы.
3. Укажите баллы и оставьте комментарий.
4. Нажмите **Сохранить обратную связь**.

---

## Учебные программы

Раздел **Курсы → Учебные программы**. Тематические планы по предметам.

### Список

Таблица: тема, часы, уровень (класс). Сортировка и фильтрация по уровню.

### Создание

1. Нажмите **Создать**.
2. Заполните:
   - **Тема** — название темы
   - **Часы** — запланированное количество часов
   - **Уровень (класс)** — для какого класса предназначена тема
3. Можно добавить подтемы (подэлементы программы).
4. Нажмите **Сохранить**.

### Подтемы

Каждый элемент программы может содержать подтемы. Нажмите **Добавить подтему** на странице элемента.

---

## Настройки курсов

Раздел **Курсы → Настройки**. Глобальные настройки, влияющие на все курсы организации.

### Учебный год

Управление учебными годами:

| Настройка | Описание |
|-----------|----------|
| **Доступные годы** | Список учебных годов, доступных для выбора (например, «2024/2025», «2025/2026») |
| **Учебный год по умолчанию** | Год, который назначается новым курсам по умолчанию |
| **Год для веб-регистрации** | Учебный год, отображаемый на публичных формах регистрации |

> **Важно:** Переключение учебного года в верхней панели влияет на то, какие курсы и заявления отображаются в системе. Создавайте курсы при выбранном правильном году.

### Шаблон заявления

- Загрузка документа-шаблона (.docx), который используется для генерации PDF заявления.
- Шаблон по умолчанию применяется ко всем курсам, если на вкладке «Шаблон» курса не выбран индивидуальный.

### Уведомления работников

- Настройка шаблонов email-уведомлений для работников при изменении статуса заявлений.
- Для каждого статуса можно выбрать свой шаблон.

### Имя файла подписания

- Шаблон имени файла для подписанных документов (поддерживает переменные).

### Текст заголовка iframe

- Пользовательский текст, который отображается вверху публичной формы регистрации.

### Анкеты

Управление анкетами (Настройки → Анкеты):
- Создание именованных анкет (например: «Танцевальный курс», «Лагерь», «По умолчанию»)
- Каждая анкета содержит набор полей с возможностью перетаскивания для изменения порядка
- Дефолтная анкета — её поля отображаются на всех курсах автоматически
- Курс может ссылаться на дополнительную анкету — поля объединяются при регистрации

### Поля анкеты

CRUD для управления полями анкеты:
- Создание, редактирование, удаление полей
- Перетаскивание для изменения порядка
- Глобальные поля автоматически привязываются к дефолтной анкете организации
- Типы: текст, текстовое поле, выбор из списка, чекбокс

**Системные поля** (создаются администратором платформы):
- Отмечаются флагом «Системное поле» при создании
- Видны во **всех** организациях автоматически — никто не может их отключить
- Пример: «Согласие на обработку персональных данных»

**Ссылки в описании:**
- Описание поля поддерживает форматирование (жирный, курсив, списки, ссылки)
- Для чекбоксов: описание с ссылками отображается рядом с галочкой
- Пример: `☑ Olen tutvunud privaatsuspoliitikaga ja nõustun...` — где слово является ссылкой на документ

### Причины отчисления

- Управление списком причин, которые выбираются при закрытии заявления.

### Настройки регистрации

- Видимость и обязательность полей на публичной форме регистрации:
  - Для студента: адрес, телефон, email
  - Для плательщика: адрес, телефон, email
- Каждое поле может быть: обязательным, необязательным или скрытым.

---

## Публичная регистрация (iframe)

Публичная форма регистрации позволяет плательщикам и студентам самостоятельно записываться на курсы через ссылку.

### Как создать публичную ссылку

1. Перейдите в **Настройки → Публичные ссылки**.
2. Нажмите **Создать**.
3. Настройте параметры (дата начала/окончания регистрации).
4. Скопируйте сгенерированную ссылку.

### Форма регистрации

Когда пользователь переходит по ссылке, он видит форму с 4 разделами:

**1. Выбор курса:**
- Выпадающий список курсов
- При выборе отображается расписание и доступные тарифы (радиокнопки)
- Если курс закрыт — красное предупреждение
- Если места заняты и включён лист ожидания — жёлтое предупреждение
- Если включён пробный урок — дополнительная опция (фиолетовая)
- Выбор даты начала из доступных дат расписания

**2. Данные студента:**
- Имя / Фамилия (или единое поле — настраивается)
- Личный код (isikukood) — с валидацией контрольной суммы
- Адрес, телефон, email — видимость и обязательность определяются настройками

**3. Данные плательщика:**
- Те же поля, что и для студента
- Email поддерживает несколько адресов через запятую

**4. Анкета:**
- Поля дефолтной анкеты организации (отображаются сразу при загрузке страницы)
- Поля анкеты курса (подгружаются динамически при выборе курса, если курсу назначена не-дефолтная анкета)

### Что происходит после отправки формы

1. Система находит или создаёт запись студента по личному коду.
2. Система находит или создаёт запись плательщика по личному коду.
3. Проверяется, нет ли у студента активного заявления на этот курс (дубликат запрещён).
4. Определяется статус заявления:
   - **Пробный** — если выбран пробный урок
   - **Лист ожидания** — если мест нет и включён waitlist
   - **Создано** — в обычном случае
5. Сохраняются ответы на анкету.
6. Заявление появляется в системе.

> **Важно:** При регистрации через публичную форму email-уведомление плательщику **не отправляется автоматически**. Администратор должен вручную отправить документ через кнопку «Отправить» на странице заявления. Исключение: для пробного урока с режимом «Всегда платный» автоматически создаётся счёт.

> **Уведомление работникам:** Если на курсе включены уведомления преподавателей/ассистентов, они получат email о новом заявлении автоматически.

### Курс создан, но не отображается в форме регистрации

Если новый курс уже сохранён, а в выпадающем списке курса на публичной форме его нет — последовательно проверьте по списку. После каждой правки обновите страницу регистрации.

1. **Учебный год курса совпадает с годом веб-регистрации.**
   - Откройте курс → поле **«Учебный год»**.
   - Сравните со значением в **Курсы → Настройки → Год для веб-регистрации (`DEFAULT_WEB_ACADEMIC_YEAR`)**.
   - Форма регистрации показывает только курсы того года, который указан в этой настройке. Если курс на `2026/2027`, а веб-регистрация на `2025/2026` — курса не будет.

2. **Регистрация на курсе не закрыта.**
   - На странице курса → переключатель **«Регистрация закрыта»** должен быть выключен.
   - Если включён — курс прячется из формы независимо от прочих условий.

3. **Дата начала регистрации уже наступила.**
   - На странице курса → поле **«Дата начала регистрации» (`registration_start_at`)**.
   - Если поле пустое — регистрация открыта всегда.
   - Если задана дата в будущем — курс появится только начиная с этой даты.

4. **На курсе настроена цена.**
   - Курсы → [курс] → **Цены**. Должен быть хотя бы один тариф (месяц/квартал/год).
   - Без цены форма регистрации не сможет показать тариф и курс не появится.

5. **На курсе есть расписание.**
   - Курсы → [курс] → **Расписание**. Должен быть хотя бы один блок с днём недели и временем.
   - Без расписания форма не сможет рассчитать «дату первого урока» и курс прячется.

6. **Возрастной фильтр (если используется).**
   - Курс показывается только если возраст в форме (или не задан) попадает в диапазон `min_age..max_age` курса.

7. **Курс не архивирован и не удалён.**
   - В списке курсов фильтр **«Только активные»** должен показывать ваш курс. Если он в архиве — снимите архивный флаг.

8. **Кэш страницы.**
   - После любой правки нажмите Ctrl+F5 на странице регистрации (полная перезагрузка), чтобы сбросить кэш браузера.

> **Ничего не помогло?** Проверьте, что публичная ссылка (token) принадлежит **той же организации**, что и курс. В **Настройки → Публичные ссылки** у каждой ссылки указана организация — курсы из других организаций по этой ссылке не видны.

---

## Копирование курса на новый учебный год

Когда начинается новый учебный год, не нужно создавать курсы заново вручную. Функция **«Копировать курс»** позволяет за несколько минут создать новый курс на основе существующего, перенеся расписание, цены, шаблоны и студентов. Процесс проходит через 6 простых шагов — на каждом вы выбираете, что именно копировать.

### Где найти кнопку «Копировать курс»

1. Откройте курс, который хотите скопировать: **Курсы → Специализации → [специализация] → [курс]**.
2. В верхнем баннере курса (рядом с названием) найдите кнопку **«Копировать курс»** — она полупрозрачная, белая.
3. Нажмите на неё — откроется страница визарда копирования.

> **Не видите кнопку?** Она доступна только пользователям с правом редактирования курсов.

Вверху страницы визарда вы увидите **горизонтальную полосу с 6 шагами**. Текущий шаг подсвечен синим, пройденные шаги — зелёной галочкой. Вы можете нажать на любой пройденный шаг, чтобы вернуться и что-то изменить.

---

### Шаг 1 из 6: Основные данные нового курса

На этом шаге вы задаёте **базовые параметры нового курса**. Все поля предзаполнены значениями из исходного курса — измените то, что нужно.

**Что вы видите и заполняете:**

- **Учебный год** — выберите из выпадающего списка (например, `2026/2027`). Обычно выбирают следующий год.
- **Название курса** — отдельное поле для каждого языка (ET, RU). Предзаполнено из исходного курса. Обычно достаточно изменить год в названии.
- **Дата начала курса** и **Дата окончания курса** — нажмите на поле, откроется календарь. Укажите даты нового учебного периода.
- **Дата начала регистрации** — необязательно. Если указать дату, форма регистрации станет доступной только после неё. Если оставить пустым — регистрация открыта сразу.
- **Макс. кол-во студентов** — лимит мест в группе.
- **Лимит листа ожидания** — сколько студентов могут встать в очередь, когда места закончатся. `0` = лист ожидания отключён.
- **Возраст** — ползунок для выбора минимального и максимального возраста.
- **Переключатели внизу:**
  - *Регистрация закрыта* — если включить, на новый курс нельзя будет зарегистрироваться через публичную форму.
  - *Уведомлять преподавателей* — преподаватели получат email при новых заявлениях.
  - *Уведомлять ассистентов* — то же самое для ассистентов.
  - *Пробный урок* — включить возможность пробного урока на новом курсе.

Нажмите **Далее →** для перехода к следующему шагу.

---

### Шаг 2 из 6: Расписание

На этом шаге вы видите **доску расписания исходного курса** — те же блоки с днями недели, временем, преподавателями и кабинетами, которые вы видите на вкладке «Информация» курса.

Расписание копируется «как есть» — дни, время, преподаватели, кабинеты. Вы можете отредактировать его позже на странице нового курса.

Нажмите **Далее →** или **← Назад**, чтобы вернуться к предыдущему шагу.

---

### Шаг 3 из 6: Цены

Здесь вы задаёте **цены нового курса**. Отображаются 4 карточки — по одной для каждой частоты оплаты:

| Карточка | Пример |
|----------|--------|
| Ежемесячная | 170.00 € |
| Каждые 3 месяца | 480.00 € |
| Каждые 6 месяцев | 900.00 € |
| Годовая | 1700.00 € |

**Как это выглядит:**

- Карточки с ценами выделены **синей рамкой** — это цены, которые будут скопированы.
- Серые карточки — частоты оплаты без цены (они не копируются).
- В каждой карточке два значения:
  - **Оригинальная цена** (серым, для справки) — цена из исходного курса.
  - **Новая цена** (поле ввода) — можете изменить. Предзаполнена из исходного.
- Если вы изменили цену, появится **жёлтое предупреждение** «Цена изменена» — напоминание проверить условия договора.

> **Скидки курса** (discount rules) автоматически копируются вместе с ценами. Например, если на исходном курсе была скидка «Второй ребёнок -15%», она появится и на новом.

---

### Шаг 4 из 6: Шаблоны, уведомления и тесты

Этот шаг позволяет настроить **шаблоны документов, уведомления и перенос дополнительных данных**.

**Что вы видите на странице (сверху вниз):**

**1. Шаблон заявления** — выпадающий список с шаблонами документов. Выберите, какой шаблон PDF будет использоваться для заявлений нового курса. Если оставить пустым, используется шаблон по умолчанию.

**2. Шаблон пробного заявления** — появляется только если на исходном курсе был включён пробный урок. Аналогично выберите шаблон.

**3. Шаблоны уведомлений по статусам** — для каждого статуса заявления (Создано, Отправлено, Подписано и т.д.) можно выбрать шаблон email, который плательщик получит при переходе заявления в этот статус.

**4. Уведомления работников по статусам** — для каждого статуса можно выбрать, каких работников уведомлять.

**5. Копирование связанных данных** — внизу страницы 3 переключателя:

| Переключатель | Что копирует | Счётчик |
|--------------|-------------|---------|
| **Тесты** | Квизы, привязанные к курсу | Показывает «N шт.» |
| **Поля анкеты** | Анкета курса (questionnaire_id) и привязанные поля | Показывает «N шт.» |
| **Вступительные тесты** | Тесты при поступлении (вместе с файлами) | Показывает «N шт.» |

По умолчанию все переключатели включены. Если что-то не нужно — выключите.

---

### Шаг 5 из 6: Студенты

Здесь вы решаете, **каких студентов перенести** на новый курс и **каким способом**.

**Если на исходном курсе нет студентов** — вы увидите сообщение «Нет студентов» и можете сразу перейти к следующему шагу.

**Если студенты есть, страница разделена на 3 части:**

#### Часть 1: Выбор способа переноса

Два варианта (радиокнопки):

- **«Перенести»** — заявки студентов переносятся на новый курс. Старые заявки закрываются автоматически. Файлы и скидки сохраняются. Используйте этот режим, когда студент **продолжает обучение** на новом курсе.

- **«Создать новые заявки»** — на новом курсе создаются **чистые заявки** (статус: Создано). Старые заявки на исходном курсе **не изменяются** — они остаются в том же статусе. Между новой и старой заявкой сохраняется ссылка. Используйте этот режим, когда хотите **сохранить историю** на старом курсе без изменений.

#### Часть 2: Фильтр по статусам

Горизонтальная полоса с **цветными бейджами статусов** и количеством студентов в каждом:

```
[Подписано (15)]  [Создано (5)]  [Отправлено (3)]  [Лист ожидания (2)]
```

- **Нажмите на бейдж** — все студенты с этим статусом будут выбраны (или сняты, если уже были выбраны).
- Это быстрый способ: например, нажмите «Подписано» — и все 15 подписанных студентов будут отмечены для переноса.
- Ссылки **«Выбрать всех»** и **«Снять всех»** — для массового выбора/снятия.

#### Часть 3: Таблица студентов

Таблица со списком всех студентов исходного курса:

| ☑ | Студент | Плательщик | Статус | Дата создания |
|---|---------|------------|--------|---------------|
| ☑ | Иванов Иван | Иванова Мария | Подписано | 01.09.2025 |
| ☑ | Петров Пётр | Петрова Анна | Подписано | 03.09.2025 |
| ☐ | Сидоров Сергей | Сидорова Елена | Закрыто | 15.09.2025 |

- **Чекбокс слева** — отметьте конкретных студентов для переноса.
- Студенты, выбранные через фильтр статусов, уже отмечены.
- Можно **убрать галочку** с конкретного студента, даже если его статус выбран в фильтре.

Внизу таблицы показано: **«N студентов выбрано»**.

> **Не хотите переносить студентов?** Просто снимите все галочки и нажмите «Далее». Курс будет создан пустым.

---

### Шаг 6 из 6: Проверка и подтверждение

Последний шаг — **итоговая сводка** всего, что будет скопировано. Проверьте всё перед подтверждением.

**Страница разделена на 5 блоков:**

**1. Курс** — таблица с основными данными: учебный год, название, даты, лимиты, настройки. Убедитесь, что данные верны.

**2. Расписание** — показывает, сколько блоков и занятий будет скопировано (например, «2 блока, 8 занятий»). Если расписание не выбрано — **жёлтое предупреждение** «Не выбрано».

**3. Цены** — показывает цены по каждой частоте оплаты (например, «Ежемесячная: 170.00 €»). Если цены не заданы — жёлтое предупреждение.

**4. Шаблоны** — список с галочками (зелёная ✓) и крестиками (серый ✗):
- ✓ Шаблон заявления — выбран
- ✓ Шаблоны уведомлений — 5 из 7 настроено
- ✗ Тесты — не копируются
- ✓ Поля анкеты — копируются
- и т.д.

**5. Студенты** — показывает количество выбранных студентов и режим переноса (например, «23 студента · Перенести»). Если студенты не выбраны — жёлтое предупреждение.

> **Жёлтые предупреждения** — это не ошибки. Они просто обращают внимание, что некоторые секции пустые. Курс можно создать и без расписания или студентов — добавите позже.

**Кнопка «Подтвердить»:**

Нажмите **Подтвердить** внизу справа. Система попросит подтверждение — нажмите **OK**.

**Что произойдёт после подтверждения:**
1. Создаётся новый курс со всеми выбранными настройками.
2. Копируются расписание, цены, шаблоны, тесты — всё, что вы отметили.
3. Переносятся студенты в выбранном режиме.
4. Вы будете перенаправлены на **страницу редактирования нового курса**.
5. Появится зелёное уведомление «Курс успешно скопирован».

Все действия выполняются **атомарно**: если что-то пойдёт не так, ничего не изменится — ни новый курс, ни заявки студентов.

---

### Что происходит со студентами после копирования

**Режим «Перенести»:**
- Заявки студентов переносятся на новый курс.
- На старом курсе заявка получает ссылку на новую (видна на странице заявления).
- Файлы и скидки переносятся вместе с заявкой.

**Режим «Создать новые заявки»:**
- На новом курсе появляются новые заявки со статусом **«Создано»**.
- Старые заявки на исходном курсе **не меняются** — остаются как были.
- На странице новой заявки видна ссылка: «Создано на основе заявления #N» — можно кликнуть и перейти к исходной.

> **Предупреждение о учебном годе:** Если вы просматриваете заявление, а курс относится к другому учебному году, чем текущий выбранный — вверху страницы появится жёлтое предупреждение. Переключите учебный год в верхней панели, чтобы оно исчезло.

---

## Редактирование курса

1. Перейдите на страницу специализации.
2. Нажмите кнопку редактирования рядом с курсом.
3. Измените необходимые поля и расписание.
4. Нажмите **Сохранить**.

> **Последствия:** Изменение расписания влияет на расчёт уроков и счетов. Система автоматически пересчитает даты занятий для блоков расписания с соответствующими датами начала.

> **Совет:** Виджеты, вкладки и действия на странице курса зависят от вашей роли, прав доступа и включённых модулей в системе.