using Rugrid.Sdaid.Notation.Documents;
namespace Rugrid.Sdaid.Epas.Nts.Ui
{
/// <summary>
/// Виджет сводной статистики ТС: ровно две плашки — состояние обработки и потребление
/// автотоплива; разбивка по статусам/видам топлива — строки внутри каждой плашки, не
/// отдельные плашки на каждое значение. Переиспользуемый компонент — встраивается на главную
/// страницу модуля (без фильтра) и на вкладку «Сведения» организационного объекта (с
/// фильтром по этому объекту).
/// </summary>
public class DOC_VehicleSummaryWidget : IUiComponentDocument, IHasStructuralLinks, IFolder<NtsUiFolder>
{
public SdaidLink[] Links => new[]
{
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleSummaryStatistics>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_ProcessingStatus>(),
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Domain.DOC_FuelKind>(),
Rel.Uses<DOC_VehicleRegistry>(),
};
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 Structure = $""""
## Структура
Виджет состоит из **двух плашек** — ровно столько, сколько групп в
{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_VehicleSummaryStatistics>()}. Разбивка
по статусам/видам топлива — не отдельная плашка на каждое значение, а компактный список
строк внутри одной плашки своей группы.
### Плашка 1 — «Состояние обработки»
Строка «Всего ТС» со значением `TotalCount`, далее по одной строке на каждое из семи
значений {SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_ProcessingStatus>()} — цвет
полосы слева от строки совпадает с цветом бейджа статуса в
{SdaidAnchors.RefTo<DOC_VehicleRegistry>()} (серый, красный, жёлтый, зелёный). Строка
выводится всегда, в том числе при нулевом количестве.
### Плашка 2 — «Потребление автотоплива ТС»
Для каждого вида топлива, встретившегося в выборке, — заголовочная строка (вид топлива,
количество ТС с успешным расчётом) и под ней, с отступом, по отдельной строке на каждый
агрегат нормативного расхода, л: «Суммарный расход», «Максимальный расход», «Минимальный
расход», «Средний расход» — вертикально, не в одну строку через точку. Группы видов
топлива не объединяются и не складываются между собой. Строка «Фактический расход» не
выводится — поле зарезервировано, источник данных не определён.
### Поведение
- Виджет только отображает агрегаты; переход к карточкам ТС или фильтрация реестра по
клику на строку в этой версии не предусмотрены.
- При встраивании на главную страницу модуля фильтр по организационному объекту не
задаётся — статистика по всему реестру ТС.
- При встраивании на вкладку «Сведения» организационного объекта фильтр задаётся этим
объектом, с учётом подчинённых объектов (ТС числятся за МЭС и ПМЭС).
- Пустая выборка (нет ТС) — плашка 1 показывает «Всего ТС: 0» и нулевые строки по всем
статусам, плашка 2 не выводится (нет видов топлива для показа).
- Непустая выборка, но ни одно ТС ещё не прошло успешный расчёт — плашка 1 показывает
реальные количества (не нули), плашка 2 остаётся на экране, но вместо строк по видам
топлива показывает одну строку-заглушку «Нет ТС с успешным расчётом»: считать агрегаты
ещё не по чему, но это не то же самое, что «плашка не выводится» (пустая выборка) —
виджет остаётся на месте, просто без данных второй группы.
- Плашка 2 считает только ТС с успешным расчётом, поэтому сумма количеств по видам
топлива может быть меньше `TotalCount`. Чтобы расхождение не выглядело как потерянные
ТС, под строками плашки 2 явно показывается строка «Без успешного расчёта: N ТС — не
входят в агрегаты по топливу» — только когда такой остаток не нулевой.
- Размещение на вкладке «Сведения»: виджет — отдельный блок **после** полей сведений об
организационном объекте (Наименование, Вышестоящее подразделение и т. д.), не между ними
и не до них — сведения об объекте остаются на экране единым блоком сверху.
- Разрез по виду топлива — бензин/дизельное топливо, не по полному составу справочника
{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Domain.DOC_FuelKind>()}: методика сама различает
только эти два вида (например, секции `fuel.h_transport`/`fuel.h_trailer` — норма 2 л/100
т·км для бензина, 1,3 для дизельного топлива, другие виды не предусмотрены расчётом), и
виджет наследует то же ограничение, не вводит собственное.
"""";
}
}