⟨/⟩ Nts/65_Ui/VehicleModificationCard.cs

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

using Rugrid.Sdaid.Notation.Documents;

namespace Rugrid.Sdaid.Epas.Nts.Ui
{
    /// <summary>
    /// Карточка записи справочника «Марка, модель и модификация ТС»: создание и изменение
    /// модификации — вид ТС, вид топлива, марка, модель, модификация, период и нормы расхода.
    /// </summary>
    public class DOC_VehicleModificationCard : IPageDocument, IHasStructuralLinks, IFolder<NtsUiFolder>
    {
        public SdaidLink[] Links => new[]
        {
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleModification>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleMark>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleModel>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleKind>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_FuelKind>(),
            Rel.Uses<DOC_VehicleModificationRegistry>(),
            Rel.Uses<DOC_VehicleCard>(),
            Rel.Uses<DOC_ModificationSelectionModal>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Backend.ModificationSelection.DOC_ModificationNameRecognition>(),
            Rel.Uses<Rugrid.Sdaid.Epas.Nts.Vision.DOC_NtsVision>(),
        };

        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];

        public static string Wireframe = $$""""
        ## Макет

        {{SdaidHtml.IframeOf<DOC_VehicleModificationCard>("vehicle-modification-card.html", 620)}}

        {{SdaidHtml.LinkTo<DOC_VehicleModificationCard>("vehicle-modification-card.html", "Открыть макет в отдельной вкладке")}}
        """";

        public static string Structure = $$""""
        ## Структура экрана

        Открывается из {{SdaidAnchors.RefTo<DOC_VehicleModificationRegistry>()}} (клик по записи —
        просмотр/правка существующей; «Создать» — новая запись) и из окна подбора модификаций
        ({{SdaidAnchors.RefTo<DOC_ModificationSelectionModal>()}}) по кнопке «Создать модификация»
        в подвале окна (доступна всегда, не только при пустом отборе) — в этом случае вид ТС и
        вид топлива предзаполнены точно по ТС, марка и модель — редактируемым предложением.

        **Путь создания/изменения записи у обеих точек входа один и тот же** — состав полей,
        валидация и создание связанных записей `VehicleMark`/`VehicleModel` (поле «Марка»/«Модель» —
        выбор существующей записи или ввод нового значения) не зависят от того, откуда открыта
        карточка. Точки входа различаются только предзаполнением полей и тем, куда ведёт
        «Сохранить» (см. «Поведение») — не отдельной реализацией сохранения. Если для задачи
        подбора понадобится дополнительное, специфичное для контекста ТС поведение (например,
        сразу отбирать только что созданную модификацию) — это дополнение к общему пути, а не
        повод заводить вторую, независимо реализованную форму создания модификации.

        Доступ — по правам пользователя: просмотр доступен всем пользователям модуля, создание и
        изменение — роли «Администратор модуля»
        ({{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Vision.DOC_NtsVision>()}}, раздел «Роли
        пользователей»).

        ### Основные интерфейсные элементы

        | Элемент | Роль |
        |---|---|
        | Вид ТС | Выбор из значений справочника {{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleKind>()}}, загруженного из АИС; создание нового значения с этой карточки недоступно |
        | Вид топлива | Выбор из значений справочника {{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_FuelKind>()}}, загруженного из АИС; создание нового значения с этой карточки недоступно |
        | Марка | Выбор существующей записи {{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleMark>()}} или ввод нового наименования — создаёт новую запись |
        | Модель | Выбор существующей записи {{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleModel>()}}, список сужен выбранной маркой, или ввод нового наименования — создаёт новую запись, привязанную к выбранной (в т. ч. только что созданной) марке |
        | Модификация | Текстовое уточнение (двигатель, исполнение); если для одной и той же модификации действовали разные нормы в разные периоды постановления, различие вносится прямо в текст (например, «до 1997») |
        | Нормы расхода | Базовая норма на пробег и остальные нормы — состав по виду ТС, см. «Описание полей» |
        | Кнопки «Сохранить», «Отменить» | Сохранение записи справочника / выход без изменений |

        ### Поведение

        - Вид ТС и вид топлива — справочники АИС, в модуле только читаются; выбор ограничен уже
          загруженными значениями.
        - Марка и модель — собственные справочники ЭНТС ({{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleMark>()}},
          {{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleModel>()}}): поле допускает
          выбор из списка или ввод нового значения — новое значение создаёт запись справочника при
          сохранении карточки, без перехода в отдельный реестр марок или моделей. Модель обязательно
          привязывается к выбранной марке (в т. ч. только что введённой).
        - При открытии из окна подбора модификаций по кнопке «Создать модификация» вид ТС и вид
          топлива заполняются значениями ТС точно; марка и модель — предложением распознавания
          ({{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Backend.ModificationSelection.DOC_ModificationNameRecognition>()}},
          отдельная композиция: марка распознаётся в «Марка и модель базы ТС»
          ({{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_Vehicle>()}}), модель — остаток
          наименования без марки; это не автоподбор окна подбора, где модель ищется в
          справочнике); администратор может исправить марку и модель перед сохранением.
        - Состав норм зависит от вида ТС: показываются только применимые к выбранному виду — как в
          карточке ТС ({{SdaidAnchors.RefTo<DOC_VehicleCard>()}}), применимость задана в столбце
          «Примечания» таблицы «Описание полей».
        - «Сохранить» создаёт или изменяет запись справочника
          {{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleModification>()}} (и, при
          вводе нового значения, записи {{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleMark>()}}/
          {{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleModel>()}}). При открытии из
          реестра — возвращает в реестр модификаций. При открытии из окна подбора модификаций —
          возвращает в то же окно, где новая запись уже доступна для отбора; окно не закрывается и
          группу автоматически не применяет — дальнейший подбор и запуск расчёта остаются отдельным
          действием пользователя.
        - «Отменить» — закрытие без сохранения.
        """";

        public static string Body = $$""""
        **Описание полей:**

        | Название поля | Способ заполнения | Обязательно для заполнения | Редактируемое в режиме редактирования | Правила валидации | Тип поля | Маска / Формат | Значение по умолчанию | Примечания | Группа полей |
        | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
        | Вид ТС | Модификация --> Вид ТС. Наименование | Да | Да |  | Поле выбора из справочника |  |  | Только выбор; значения — из справочника видов, загруженного из АИС | Модификация ТС |
        | Вид топлива | Модификация --> Вид топлива. Наименование | Нет | Да |  | Поле выбора из справочника |  |  | Только выбор; значения — из справочника видов топлива, загруженного из АИС | Модификация ТС |
        | Марка | Модификация --> Модель --> Марка ТС. Наименование | Да | Да |  | Поле выбора из справочника с возможностью ввода нового значения |  |  | Выбор существующей марки или создание новой | Модификация ТС |
        | Модель | Модификация --> Модель. Наименование | Да | Да |  | Поле выбора из справочника с возможностью ввода нового значения |  |  | Список сужен выбранной маркой; выбор существующей модели или создание новой, привязанной к марке | Модификация ТС |
        | Модификация | Модификация. Модификация | Нет | Да |  | Поле для ввода |  |  | Уточнение из скобок (двигатель, исполнение); разные нормы одной модификации в разные периоды постановления различаются текстом (например, «до 1997») | Модификация ТС |
        | Базовая норма на пробег, л/100 км | Модификация. Норма на пробег автомобиля | Нет | Да |  | Поле для ввода | {999,99} |  |  | Нормы |
        | Транспортная норма, л/100 км | Модификация. Транспортная норма | Нет | Да |  | Поле для ввода | {999,99} |  | Для автобусов и самосвалов | Нормы |
        | Норма на работу оборудования, л/ч | Модификация. Норма на работу оборудования | Нет | Да |  | Поле для ввода | {999,99} |  | Для спецавтомобилей | Нормы |
        | Норма при работе со спец. агрегатами, л/мин | Модификация. Норма расхода топлива при работе двигателя со спец. агрегатами | Нет | Да |  | Поле для ввода | {999,99} |  | Для спецавтомобилей | Нормы |
        | Норма в стационарном режиме без нагрузки, л/мин | Модификация. Норма расхода топлива при работе двигателя в стационарном режиме без нагрузки | Нет | Да |  | Поле для ввода | {999,99} |  | Для спецавтомобилей | Нормы |
        | Норма на работу битумного насоса, л/ч | Модификация. Норма на 1 ч работы битумного насоса | Нет | Да |  | Поле для ввода | {999,99} |  | Для спецавтомобилей | Нормы |
        | Норма на работу подогревателя цистерны, л/ч | Модификация. Норма на 1 ч работы подогревателя цистерны | Нет | Да |  | Поле для ввода | {999,99} |  | Для спецавтомобилей | Нормы |
        | Норма на работу гудронатора, л/ч | Модификация. Норма на 1 ч работы гудронатора | Нет | Да |  | Поле для ввода | {999,99} |  | Для спецавтомобилей | Нормы |
        | Норма на погрузку и разгрузку контейнеров, л | Модификация. Норма на погрузку и разгрузку комплекта контейнеров | Нет | Да |  | Поле для ввода | {999,99} |  | Для спецавтомобилей | Нормы |
        | Норма на заполнение и слив цистерны, л | Модификация. Норма на заполнение и слив одной цистерны | Нет | Да |  | Поле для ввода | {999,99} |  | Для спецавтомобилей | Нормы |
        | Норма на загрузку и обдув цистерны, л | Модификация. Норма на загрузку и обдув одной цистерны | Нет | Да |  | Поле для ввода | {999,99} |  | Для спецавтомобилей | Нормы |
        """";
    }
}