⟨/⟩ Nts/65_Ui/VehicleRegistry.cs

132 строк · в начало

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>()}} | Да | Нет |  | Бейдж |  | Не выполнена | Итоговый статус обработки ТС. Цвета: серый, красный, жёлтый, зелёный |  |
"""";
    }
}