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} | | Для спецавтомобилей | Нормы |
"""";
}
}