using Rugrid.Sdaid.Notation.Documents;
namespace Rugrid.Sdaid.Epas.Nts.Ui
{
/// <summary>
/// Реестр транспортных средств: состав и характеристики ТС в разрезе организационной
/// структуры. Экран модуля «Реестр транспортных средств» (п. 4.2.1 ТЗ).
/// </summary>
public class DOC_VehicleRegistry : IPageDocument, IHasStructuralLinks, IFolder<NtsUiFolder>
{
public SdaidLink[] Links => new[]
{
Rel.Realizes<Rugrid.Sdaid.Epas.Nts.Epics.NtsFuelCalc.UseCases.UC_NtsFuelCalc>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_Vehicle>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleCalc>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_ProcessingStatus>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_ProcessingStatusPolicy>(),
};
public static string _refName = "Реестр транспортных средств";
public string Name => "Реестр транспортных средств";
public string Description =>
@"Список транспортных средств выбранного организационного объекта и, при включённом переключателе «С потомками», подчинённых объектов; переключатель «Все / Действующие» ограничивает список ТС без даты окончания эксплуатации. Характеристики из АИС ОИА ПЭО и данные, вводимые в ЭНТС.";
public string Version => "0.1";
public string Status => "draft";
public string[] Comments => new string[0];
/// <summary>Макет экрана: страница прототипа модуля, состав полей — из описания полей ниже.</summary>
public static string Wireframe = $""""
## Макет
{SdaidHtml.IframeOf<DOC_VehicleRegistry>("vehicle-registry.html", 620)}
{SdaidHtml.LinkTo<DOC_VehicleRegistry>("vehicle-registry.html", "Открыть макет в отдельной вкладке")}
"""";
public static string Structure = $""""
## Структура экрана
Экран реестра ТС открывается из вкладки «Реестр ТС» организационного объекта.
Слева расположено дерево организационной структуры, справа — рабочая область с реестром.
### Блок навигации
В дереве отображаются организационные объекты: компания, МЭС и ПМЭС. ТС числятся за МЭС
и ПМЭС. Выбор узла задаёт объект, для которого строится реестр; у компании и МЭС ТС
подчинённых объектов включаются переключателем «С потомками». Поиск фильтрует дерево
по подстроке наименования; родительские узлы найденных объектов остаются видимыми.
### Таблица реестра
Таблица формируется по выбранному узлу дерева:
- строки — ТС выбранного объекта; при включённом переключателе «С потомками» в список
добавляются ТС подчинённых объектов (для компании и МЭС);
- переключатель «Все / Действующие»: «Действующие» оставляет ТС, у которых не указана
дата окончания эксплуатации; по умолчанию — «Все»;
- одна строка — одно ТС; группировка и итоговые строки не выводятся;
- колонки — фиксированный набор характеристик ТС из описания полей ниже; первая колонка
«№» — порядковый номер строки;
- под таблицей показываются количество записей и элементы перехода между страницами.
Источник данных — АИС ОИА ПЭО. Характеристики ТС, загруженные из АИС, в модуле не
изменяются. Характеристики, которых в АИС нет (марка, модель и модификация ТС, условия
эксплуатации, параметры методики расчёта), ведутся в ЭНТС и редактируются в карточке ТС.
Марка, модель и модификация ТС — свойство ТС, заполняется подбором модификации; если
конкретная модификация не выбрана, ячейка пустая. Нормативный расход, эталонный расход и
статус обработки — результат расчёта и подбора в карточке ТС.
Создание и удаление ТС в реестре не выполняются: состав ТС ведётся в АИС.
### Меню операций с реестром
Над таблицей расположено меню операций:
| Операция | Назначение |
|---|---|
| С потомками / Без потомков | Переключатель состава списка: ТС выбранного объекта и подчинённых объектов или только выбранного объекта. По умолчанию — «С потомками» |
| Все / Действующие | Переключатель отбора действующих ТС: «Действующие» оставляет ТС без даты окончания эксплуатации, «Все» показывает полный состав. По умолчанию — «Все» |
| Применить фильтр | Флаг применения условий фильтрации. Появляется только при заданных условиях: установлен — условия применяются, снят — не применяются. Состав условий не изменяет. При появлении первого условия устанавливается автоматически |
| Фильтры | Иконка перехода в окно «Фильтры». Доступна всегда, в том числе когда условия не заданы |
| Условия фильтрации | Строка-ссылка с заданными условиями; клик открывает то же окно «Фильтры». Выводится только при заданных условиях |
| Очистить фильтр | Удаляет заданные условия; после очистки флаг, строка условий и сама ссылка не выводятся |
В окне «Фильтры» условия задаются по колонкам таблицы; для каждой колонки доступен
оператор, соответствующий типу данных (содержит, равно, больше, меньше, интервал и т. п.).
Несколько условий объединяются связкой «И» или «ИЛИ». В окне доступны добавление условий
и очистка фильтра.
### Поведение
- Выбор узла дерева задаёт организационный объект и состав реестра.
- Переключатель «С потомками / Без потомков» изменяет состав списка; по умолчанию включён «С потомками».
- Переключатель «Все / Действующие» отбирает ТС по дате окончания эксплуатации: «Действующие» —
ТС, у которых дата не указана (пусто или прочерк); по умолчанию — «Все».
- Переключатели действуют совместно: сначала выбирается состав объектов, затем из него
отбираются действующие ТС.
- Флаг «Применить фильтр» только применяет или отменяет заданные условия, не меняя их.
- Если условия не заданы, флаг, строка условий и ссылка «Очистить фильтр» не выводятся;
иконка «Фильтры» остаётся доступной.
- Клик по строке условий или по иконке «Фильтры» открывает окно «Фильтры».
- «Очистить фильтр» удаляет условия и отключает их применение.
- Клик по наименованию ТС открывает карточку ТС.
- Незаполненное значение показывается прочерком.
### Открытые вопросы
Открытые вопросы реестра ТС собраны в эпике: {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Epics.NtsFuelCalc.OQ_VehicleRegistry>()}.
"""";
public static string Body = $$""""
**Описание полей:**
| Название поля | Способ заполнения | Обязательно для заполнения | Редактируемое в режиме редактирования | Правила валидации | Тип поля | Маска / Формат | Значение по умолчанию | Примечания | Группа полей |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Наименование | Транспортное средство. Наименование | Да | Нет | | Ссылка на карточку ТС | | | | |
| Гос. номер | Транспортное средство. Государственный регистрационный знак | Нет | Нет | | Поле только для чтения | | | | |
| Марка, модель и модификация ТС | Транспортное средство --> Марка, модель и модификация ТС. Наименование | Нет | Нет | | Поле только для чтения | | | Свойство ТС, заполняется подбором; если конкретная модификация не выбрана — ячейка пустая | |
| Вид ТС | Транспортное средство --> Вид ТС. Наименование | Да | Нет | | Поле только для чтения | | | Определяет формулу расчёта | |
| Назначение ТС | Транспортное средство --> Назначение ТС. Наименование | Нет | Нет | | Поле только для чтения | | | | |
| Основной вид топлива | Транспортное средство --> Вид автомобильного топлива. Наименование | Да | Нет | | Поле только для чтения | | | | |
| Дата начала эксплуатации | Транспортное средство. Дата начала эксплуатации | Нет | Нет | | Поле только для чтения | DD.MM.YYYY | | | |
| Дата окончания эксплуатации | Транспортное средство. Дата окончания эксплуатации | Нет | Нет | | Поле только для чтения | DD.MM.YYYY | | Заполнена — ТС выбыло из эксплуатации | |
| Нормативный расход, л | Расчёт ТС. Нормативный расход (`fuel.normative_consumption`) | Нет | Нет | | Поле только для чтения | 999,99 | | Результат расчёта Q_н за отчётный пробег; до расчёта или при ошибке — прочерк | |
| Эталонный расход, л | Расчёт ТС. Эталонный расход (`fuel.reference_consumption`) | Нет | Нет | | Поле только для чтения | 999,99 | | Результат расчёта Q_эт тем же алгоритмом, что Q_н, со входом H_эт вместо H_s; до расчёта или при ошибке — прочерк | |
| Статус обработки | Бейдж с наименованием и цветом: Расчёт ТС --> Статус обработки. Наименование; значения — {{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_ProcessingStatus>()}}; логика установки — {{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Backend.Calc.DOC_ProcessingStatusPolicy>()}} | Да | Нет | | Бейдж | | Не выполнена | Итоговый статус обработки ТС. Цвета: серый, красный, жёлтый, зелёный | |
"""";
}
}