using System;
using Rugrid.Sdaid.Notation.Documents;
namespace Rugrid.Sdaid.Epas.Nts.Domain
{
/// <summary>
/// История запусков приёма данных ЭНТС из АИС ОИА ПЭО: один запуск — пакетный
/// (по организационному объекту) или по одному ТС. Начало запуска — дата создания записи,
/// инициатор — автор создания.
/// </summary>
public class DOC_NtsImportRun : IDomainEntityDocument, IHasStructuralLinks, IFolder<NtsDomainFolder>
{
public SdaidLink[] Links => new[]
{
Rel.Uses<Rugrid.Sdaid.Epas.Nts.Infrastructure.AisOiaPeo.DOC_NtsAisImport>(),
Rel.Uses<DOC_NavEntity>(),
Rel.Uses<DOC_Vehicle>(),
Rel.Uses<DOC_NtsImportRunStatus>(),
};
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 Type Entity => typeof(NtsImportRun);
public static string Purpose = $"""
## Назначение
Одна запись — один запуск приёма данных: либо пакетный (со страницы импорта,
{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_NtsAisImportPage>()}), либо по одному
ТС (иконка «Обновить из АИС» в карточке,
{SdaidAnchors.RefTo<Rugrid.Sdaid.Epas.Nts.Ui.DOC_VehicleCard>()}). Запуски обоих видов
пишутся в одну историю и различаются полем «Источник».
Начало запуска — техническая дата создания записи, инициатор — автор создания;
собственных полей для них у сущности нет. Запуск создаётся со статусом «Выполняется»
и завершается статусом «Успешно» или «С ошибками» с датой завершения.
""";
}
/// <summary>Доменная сущность «Запуск импорта из АИС».</summary>
[DomainEntity]
public class NtsImportRun
{
/// <summary>Идентификатор записи</summary>
[DomainField(Alias = "id", RequiredOnCreate = true, Range = "UUID", Immutable = true)]
public Guid Id { get; set; }
/// <summary>Источник запуска</summary>
[DomainField(Alias = "source", RequiredOnCreate = true, Range = "{batch; vehicle}",
Description = "Пакетный запуск по организационному объекту или обновление одного ТС из карточки")]
public string? SourceCode { get; set; }
/// <summary>Организационный объект, по которому выполняется приём</summary>
[Relation]
[DomainField(Alias = "nav_id", RequiredOnCreate = true, Immutable = true,
Description = "Пакетный запуск — корневая компания; обновление ТС — его владелец")]
public NavEntity? Nav { get; set; }
/// <summary>Транспортное средство</summary>
[Relation]
[DomainField(Alias = "vehicle_id",
Description = "Заполнено только для источника «vehicle»")]
public Vehicle? Vehicle { get; set; }
/// <summary>Статус запуска</summary>
[Relation]
[DomainField(Alias = "status_id", RequiredOnCreate = true, Default = "Выполняется",
Range = "{Выполняется; Успешно; С ошибками}")]
public NtsImportRunStatus? Status { get; set; }
/// <summary>Счётчики принятых записей по наборам</summary>
[DomainField(Alias = "result_json", RequiredOnCreate = true,
Description = "Количество принятых записей по наборам, JSON")]
public string? ResultJson { get; set; }
/// <summary>Ошибки запуска</summary>
[DomainField(Alias = "errors_json", RequiredOnCreate = true, Description = "Ошибки запуска, JSON")]
public string? ErrorsJson { get; set; }
/// <summary>Дата и время завершения запуска</summary>
[DomainField(Alias = "finished_date",
Description = "Пусто — запуск выполняется")]
public DateTime? FinishedDate { get; set; }
}
}