⟨/⟩ Nts/50_Domain/Navs/NavEntity.cs

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

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