using System;
using System.Collections.Generic;
using Rugrid.Sdaid.Notation.Documents;
namespace Rugrid.Sdaid.Epas.Nts.Domain
{
/// <summary>
/// Организационный объект (узел оргструктуры ЭНТС). Плоская навигационная запись: для каждого
/// объекта хранится тип, вышестоящий объект и ссылки на типизированную запись (компания/МЭС/
/// ПМЭС). Отличие ЭНТС от других модулей — область, город и субъект РФ.
/// </summary>
public class DOC_NavEntity : IDomainEntityDocument, IHasStructuralLinks, IFolder<NtsDomainFolder>
{
public SdaidLink[] Links => new[]
{
Rel.Uses<DOC_NavType>(),
Rel.Uses<DOC_NavCompany>(),
Rel.Uses<DOC_NavMes>(),
Rel.Uses<DOC_NavPmes>(),
Rel.Uses<DOC_Subject>(),
};
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(NavEntity);
}
/// <summary>Доменная сущность «Организационный объект».</summary>
[DomainEntity]
public class NavEntity
{
/// <summary>Идентификатор записи</summary>
[DomainField(Alias = "id", RequiredOnCreate = true, Range = "UUID", Immutable = true)]
public Guid Id { get; set; }
/// <summary>ИД объекта в АИС</summary>
[DomainField(Alias = "ais_id", Description = "ИД объекта в АИС ОИА ПЭО", Immutable = true)]
public Guid? AisId { get; set; }
/// <summary>Наименование</summary>
[DomainField(Alias = "name", RequiredOnCreate = true)]
public string? Name { get; set; }
/// <summary>Вышестоящий организационный объект</summary>
[DomainField(Alias = "parent_id", Description = "Ссылка на вышестоящий узел оргструктуры")]
public Guid? ParentId { get; set; }
/// <summary>Тип организационного объекта</summary>
[Relation]
[DomainField(Alias = "nav_type_id", RequiredOnCreate = true)]
public NavType? NavType { get; set; }
/// <summary>Дискриминатор типа организационного объекта</summary>
[DomainField(Alias = "nav_type_eid", RequiredOnCreate = true, Range = "{Company; Mes; Pmes}",
Description = "Значение типа организационного объекта; обозначение типа в АИС — `NavType.AisAlias`")]
public string? NavTypeEid { get; set; }
/// <summary>Компания</summary>
[Relation]
[DomainField(Alias = "company_id")]
public NavCompany? Company { get; set; }
/// <summary>МЭС</summary>
[Relation]
[DomainField(Alias = "mes_id")]
public NavMes? Mes { get; set; }
/// <summary>ПМЭС</summary>
[Relation]
[DomainField(Alias = "pmes_id")]
public NavPmes? Pmes { get; set; }
/// <summary>Область</summary>
[DomainField(Alias = "region", Description = "Загружается из АИС ОИА ПЭО")]
public string? Region { get; set; }
/// <summary>Город</summary>
[DomainField(Alias = "city", Description = "Загружается из АИС ОИА ПЭО")]
public string? City { get; set; }
/// <summary>Субъект Российской Федерации</summary>
[Relation]
[DomainField(Alias = "subject_id", Description = "Проставляется в модуле; может быть не задан")]
public Subject? Subject { get; set; }
}
}