Add project

Basic formatting applied. Unnecessary comments have been removed. Suspicious code is covered by TODO.
This commit is contained in:
2025-08-12 11:21:10 +09:00
parent bbcbe841a7
commit 33ab055b43
546 changed files with 176950 additions and 0 deletions

View File

@ -0,0 +1,35 @@
using System;
namespace Hcs.ClientApi.DataTypes
{
/// <summary>
/// Информация о зданиях и помещениях в зданиях (объектах жилого фонда),
/// которые связаны с договором (в договоре имеются Лицевые Счета в
/// указанных объектах)
/// </summary>
public class ГисАдресныйОбъект
{
public Guid ГуидДоговора;
public Guid ГуидВерсииДоговора;
public Guid ГуидЗданияФиас;
public Guid ГуидАдресногоОбъекта;
public class ИзвестныеТипыЗдания
{
public const string MKD = "MKD";
public const string ZHD = "ZHD";
public const string ZHDBlockZastroyki = "ZHDBlockZastroyki";
}
public string ТипЗдания;
public string НомерПомещения;
public string НомерКомнаты;
public bool СвязанСДоговором(ГисДоговор договор) => договор != null && договор.ГуидДоговора == ГуидДоговора;
public override string ToString()
{
return $"Тип=[{ТипЗдания}] ЗданиеФиас=[{ГуидЗданияФиас}] Объект[{ГуидАдресногоОбъекта}] Помещ[{НомерПомещения}] Комн[{НомерКомнаты}]";
}
}
}

View File

@ -0,0 +1,140 @@
using Newtonsoft.Json;
using System;
namespace Hcs.ClientApi.DataTypes
{
/// <summary>
/// Договор с ресурсоснабжающей организацией
/// </summary>
public class ГисДоговор
{
public Guid ГуидДоговора;
public Guid ГуидВерсииДоговора;
public string НомерВерсии;
public ГисСостояниеДоговора СостояниеДоговора;
public ГисСтатусВерсииДоговора СтатусВерсииДоговора;
public ГисТипДоговораРСО ТипДоговораРСО;
public string НомерДоговора;
public DateTime? ДатаЗаключения;
public DateTime? ДатаВступленияВСилу;
public bool НачисленияРазмещаетРСО;
public bool ПриборыРазмещаетРСО;
public ГисКонтрагент Контрагент;
public ГисПредметДоговора[] ПредметыДоговора;
public ГисПриложение[] ПриложенияДоговора;
[JsonIgnore]
public bool ЭтоДоговорИКУ => (ТипДоговораРСО == ГисТипДоговораРСО.НеПубличныйИлиНеНежилые);
[JsonIgnore]
public bool ЭтоДоговорНежилогоПомещения => (ТипДоговораРСО == ГисТипДоговораРСО.ПубличныйИлиНежилые);
[JsonIgnore]
public bool ЭтоПроектДоговора => (СтатусВерсииДоговора == ГисСтатусВерсииДоговора.Проект);
[JsonIgnore]
public bool Расторгнут => (СтатусВерсииДоговора == ГисСтатусВерсииДоговора.Расторгнут);
[JsonIgnore]
public bool ИмеетГуидДоговора => (ГуидДоговора != default);
[JsonIgnore]
public bool ПриниматьИзГисНаАнализ
{
get
{
return СтатусВерсииДоговора switch
{
// TODO: Проверить комментирование этой строчки
//ГисСтатусВерсииДоговора.Проект => false, // С 15.11.2024 принимаем проекты
ГисСтатусВерсииДоговора.Аннулирован => false,
ГисСтатусВерсииДоговора.Расторгнут => false,
_ => true
};
}
}
public override string ToString()
{
return $"Договор №{НомерДоговора} Тип={ТипДоговораРСО}" +
$" Статус={СтатусВерсииДоговора} Состояние={СостояниеДоговора}" +
$" Заключен={HcsUtil.FormatDate(ДатаЗаключения)}" +
$" №Версии={НомерВерсии} ГуидДог={ГуидДоговора}" +
$" ГуидВерсии={ГуидВерсииДоговора}";
}
}
public enum ГисТипДоговораРСО
{
/// <summary>
/// Договор не является публичным и/или присутствует заключенный на бумажном
/// носителе (электронной форме) и/или не заключен в отношении нежилых помещений
/// в многоквартирных домах (IsContract в терминах HCS)
/// </summary>
НеПубличныйИлиНеНежилые,
/// <summary>
/// Договор является публичным и/или отсутствует заключенный на бумажном носителе
/// (в электронной форме) и/или заключен в отношении нежилых помещений в
/// многоквартирных домах (IsNotContract в терминах HCS)
/// </summary>
ПубличныйИлиНежилые
}
public enum ГисСостояниеДоговора
{
НеВступилВСилу, // NotTakeEffect
Действующий, // Proceed
ИстекСрокДействия // Expired
}
public enum ГисСтатусВерсииДоговора
{
Размещен, // Posted
Расторгнут, // Terminated
Проект, // Draft
Аннулирован // Annul
}
public class ГисПредметДоговора
{
// Вид КУ. Ссылка на НСИ "Вид коммунальной услуги" (реестровый номер 3)
public string КодНсиУслуги;
public Guid ГуидНсиУслуги;
public string ИмяНсиУслуги;
// Коммунальный ресурс. Ссылка на НСИ "Тарифицируемый ресурс" (реестровый номер 239)
public string КодНсиРесурса;
public Guid ГуидНсиРесурса;
public string ИмяНсиРесурса;
}
public class ГисПриложение
{
/// <summary>
/// Имя файла приложения
/// </summary>
public string ИмяПриложения;
/// <summary>
/// Пояснение к файлу приложения
/// </summary>
public string ОписаниеПриложения;
/// <summary>
/// ГУИД файла приложения из ext-bus-file-store-service
/// </summary>
public Guid ГуидПриложения;
/// <summary>
/// Хэш файла приложения в устаревшем стандарте "ГОСТ Р 34.11-94" в Binhex
/// </summary>
public string ХэшПриложения;
}
}

View File

@ -0,0 +1,197 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace Hcs.ClientApi.DataTypes
{
/// <summary>
/// Сборный класс для получения сразу всех договоров, их лицевых счетов
/// и приборов учета привязанных к лицевым счетам договоров
/// </summary>
public class ГисДоговорыИПриборы
{
public DateTime ДатаНачалаСборки;
public DateTime ДатаКонцаСборки;
/// <summary>
/// Договоры ресурсоснабжения
/// </summary>
public List<ГисДоговор> ДоговорыРСО = new List<ГисДоговор>();
public List<ГисАдресныйОбъект> АдресаОбъектов = new List<ГисАдресныйОбъект>();
public List<ГисЗдание> Здания = new List<ГисЗдание>();
public List<ГисЛицевойСчет> ЛицевыеСчета = new List<ГисЛицевойСчет>();
public List<ГисПриборУчета> ПриборыУчета = new List<ГисПриборУчета>();
public ГисДоговор НайтиДоговорПоНомеру(string номерДоговора)
=> ДоговорыРСО.FirstOrDefault(x => x.НомерДоговора == номерДоговора);
public bool ЭтотЛицевойСчетСвязанСДоговорами(ГисЛицевойСчет лс)
{
return ДоговорыРСО.Any(договор => лс.СвязанСДоговором(договор));
}
public ГисЗдание НайтиЗданиеПомещения(Guid гуидПомещения)
{
foreach (var здание in Здания)
{
foreach (var помещение in здание.Помещения)
{
if (помещение.ГуидПомещения == гуидПомещения) return здание;
}
}
return null;
}
public ГисЗдание НайтиЗданиеЛицевогоСчета(ГисЛицевойСчет лс)
{
if (лс.Размещения == null) return null;
foreach (var размещение in лс.Размещения)
{
if (размещение.ГуидПомещения == null) continue;
var здание = НайтиЗданиеПомещения((Guid)размещение.ГуидПомещения);
if (здание != null) return здание;
}
return null;
}
public void УдалитьЛицевыеСчетаЗдания(Guid гуидЗданияФиас)
{
var здание = Здания.FirstOrDefault(x => x.ГуидЗданияФиас == гуидЗданияФиас);
if (здание == null || здание.Помещения == null) return;
var лсДляУдаления = new List<ГисЛицевойСчет>();
var гуидыПомещенийЗдания = new HashSet<Guid>(здание.Помещения.Select(x => x.ГуидПомещения));
foreach (var лс in ЛицевыеСчета)
{
if (лс.Размещения == null) continue;
foreach (var размещениеЛС in лс.Размещения)
{
if (размещениеЛС.ГуидПомещения == null) continue;
if (гуидыПомещенийЗдания.Contains((Guid)размещениеЛС.ГуидПомещения))
{
лсДляУдаления.Add(лс);
break;
}
}
}
foreach (var лсУдалить in лсДляУдаления)
ЛицевыеСчета.Remove(лсУдалить);
}
public int ЗаменитьЛицевыеСчетаЗданияВЛокальномСнимке(
Guid гуидЗданияФиас, IEnumerable<ГисЛицевойСчет> лицевые)
{
УдалитьЛицевыеСчетаЗдания(гуидЗданияФиас);
var живые = лицевые.Where(лс => лс.ДействуетСейчас && ЭтотЛицевойСчетСвязанСДоговорами(лс));
ЛицевыеСчета.AddRange(живые);
return живые.Count();
}
public bool ЭтотПриборСвязанСЛицевымиСчетами(ГисПриборУчета прибор)
{
return ЛицевыеСчета.Any(лс => прибор.СвязанСЛицевымСчетом(лс));
}
public IEnumerable<ГисАдресныйОбъект> ДатьАдресаОбъектовДоговора(ГисДоговор договор)
{
return АдресаОбъектов.Where(x => x.СвязанСДоговором(договор));
}
public IEnumerable<ГисПриборУчета> ДатьПриборыУчетаДоговора(ГисДоговор договор)
{
var адресаДоговора = ДатьАдресаОбъектовДоговора(договор).ToArray();
var лицевыеДоговора = ЛицевыеСчета.Where(x => x.СвязанСДоговором(договор)).ToArray();
var приборы = new List<ГисПриборУчета>();
foreach (var прибор in ПриборыУчета)
{
if (прибор == null) continue;
if (договор.ЭтоДоговорИКУ)
{
foreach (var адрес in адресаДоговора)
{
if (прибор.СвязанСАдреснымОбъектом(адрес)) приборы.Add(прибор);
}
}
if (договор.ЭтоДоговорНежилогоПомещения)
{
foreach (var лицевой in лицевыеДоговора)
{
if (прибор.СвязанСЛицевымСчетом(лицевой)) приборы.Add(прибор);
}
}
}
return приборы;
}
public IEnumerable<ГисПомещение> ДатьПомещенияАдресногоОбъекта(ГисАдресныйОбъект адрес)
{
var здание = Здания.FirstOrDefault(x => x.ГуидЗданияФиас == адрес.ГуидЗданияФиас);
if (здание == null) return new List<ГисПомещение>();
return здание.Помещения;
}
public IEnumerable<ГисПриборУчета> ДатьПриборыУчетаЛицевогоСчета(ГисЛицевойСчет лс)
{
return ПриборыУчета.Where(x => x.СвязанСЛицевымСчетом(лс));
}
public ГисЗданиеПомещение НайтиПомещениеЛицевогоСчета(ГисЛицевойСчет лс)
{
foreach (var размещение in лс.Размещения)
{
foreach (var здание in Здания)
{
if (здание.Помещения == null) continue;
foreach (var помещение in здание.Помещения)
{
if (помещение.ГуидПомещения == размещение.ГуидПомещения)
{
return new ГисЗданиеПомещение(здание, помещение);
}
}
}
}
return new ГисЗданиеПомещение(null, null);
}
public static ГисДоговорыИПриборы ПрочитатьФайлJson(string jsonFileName)
{
using (StreamReader file = File.OpenText(jsonFileName))
{
JsonSerializer serializer = new JsonSerializer();
return (ГисДоговорыИПриборы)serializer.Deserialize(file, typeof(ГисДоговорыИПриборы));
}
}
public void ЗаписатьФайлJson(string jsonFileName)
{
using (StreamWriter file = File.CreateText(jsonFileName))
{
JsonSerializer serializer = new JsonSerializer();
serializer.Serialize(file, this);
}
}
public override string ToString()
{
return $"ДоговорыРСО={ДоговорыРСО.Count} Адреса={АдресаОбъектов.Count}" +
$" ЛС={ЛицевыеСчета.Count} ПУ={ПриборыУчета.Count}";
}
}
}

View File

@ -0,0 +1,24 @@
using System;
using System.Linq;
namespace Hcs.ClientApi.DataTypes
{
/// <summary>
/// Дом ГИС ЖКХ
/// </summary>
public class ГисЗдание
{
public ГисТипДома ТипДома;
public Guid ГуидЗданияФиас;
public string НомерДомаГис;
public ГисПомещение[] Помещения;
public override string ToString()
{
return $"{ТипДома} дом №ГИС={НомерДомаГис} Помещения={Помещения.Count()}";
}
}
public enum ГисТипДома { Многоквартирный, Жилой };
}

View File

@ -0,0 +1,8 @@
namespace Hcs.ClientApi.DataTypes
{
public record struct ГисЗданиеПомещение(ГисЗдание Здание, ГисПомещение Помещение)
{
public bool Пустое => (Здание == null || Помещение == null);
public bool Заполнено => !Пустое;
}
}

View File

@ -0,0 +1,72 @@
using Newtonsoft.Json;
using System;
using System.Linq;
namespace Hcs.ClientApi.DataTypes
{
/// <summary>
/// Сведения о контрагенте договора РСО
/// </summary>
public class ГисКонтрагент
{
public ГисТипКонтрагента ТипКонтрагента;
/// <summary>
/// ГУИД из реестра организаций ГИС ЖКХ
/// </summary>
public Guid? ГуидОрганизации;
/// <summary>
/// ГУИД версии организации из реестра организаций ГИС ЖКХ необходим
/// для размещения Лицевого счета
/// </summary>
public Guid? ГуидВерсииОрганизации;
/// <summary>
/// Сведения об индивидуальном физическом лице
/// </summary>
public ГисИндивид Индивид;
}
public enum ГисТипКонтрагента
{
НеУказано,
ВладелецПомещения,
УправляющаяКомпания
}
public class ГисИндивид
{
public string Фамилия;
public string Имя;
public string Отчество;
public string СНИЛС;
public string НомерДокумента;
public string СерияДокумента;
public DateTime? ДатаДокумента;
[JsonIgnore]
public bool СНИЛСЗаполнен
=> !string.IsNullOrEmpty(СНИЛС);
[JsonIgnore]
public string СНИЛСТолькоЦифры
=> СНИЛСЗаполнен ? string.Concat(СНИЛС.Where(char.IsDigit)) : null;
[JsonIgnore]
public bool СНИЛСЗаполненВернойДлины
=> (СНИЛСЗаполнен && СНИЛСТолькоЦифры.Length == 11);
public void ПроверитьЗаполнениеСНИЛС()
{
if (!СНИЛСЗаполненВернойДлины)
throw new HcsException($"В СНИЛС контрагента ФЛ должно быть указано 11 цифр: {СНИЛС}");
}
public void ПроверитьЗаполнениеФИО()
{
if (string.IsNullOrEmpty(Фамилия)) throw new HcsException("Не заполнена Фамилия контрагента ФЛ");
if (string.IsNullOrEmpty(Имя)) throw new HcsException("Не заполнено Имя контрагента ФЛ");
}
}
}

View File

@ -0,0 +1,112 @@
using Newtonsoft.Json;
using System;
using System.Linq;
using System.Text;
namespace Hcs.ClientApi.DataTypes
{
/// <summary>
/// Лицевой счет из ГИС ЖКХ имеет номер единого лицевого счета (ЕЛС)
/// и выдается на каждую точку поставки в жилом доме для договора
/// по нежилым помещениям
/// </summary>
public class ГисЛицевойСчет
{
public Guid ГуидЛицевогоСчета;
public string НомерЛицевогоСчета;
public string НомерЕЛС;
public DateTime? ДатаСоздания;
public DateTime? ДатаЗакрытия;
public string КодНсиПричиныЗакрытия;
public string ИмяПричиныЗакрытия;
public decimal? ПолнаяПлощадь;
public decimal? ЖилаяПлощадь;
public string КодЖКУ;
public ГисРазмещениеЛС[] Размещения;
public ГисОснованиеЛС[] Основания;
public bool СвязанСДоговором(ГисДоговор договор)
{
if (договор != null && Основания != null && Основания.Any(
основание => основание.ГуидДоговора == договор.ГуидВерсииДоговора ||
основание.ГуидДоговора == договор.ГуидДоговора ||
string.Compare(основание.НомерДоговора, договор.НомерДоговора) == 0)) return true;
return false;
}
[JsonIgnore]
public bool ДействуетСейчас => (ДатаЗакрытия == null);
[JsonIgnore]
public string ОписаниеРазмещений
{
get
{
var accomod = new StringBuilder();
foreach (var x in Размещения) accomod.Append($"[{x}]");
return accomod.ToString();
}
}
[JsonIgnore]
public string ОписаниеОснований
{
get
{
if (Основания == null) return null;
var reasons = new StringBuilder();
foreach (var x in Основания) reasons.Append($"[{x}]");
return reasons.ToString();
}
}
public override string ToString()
{
return $"ЛС №{НомерЛицевогоСчета} ЕЛС={НомерЕЛС}" +
$" Создан={HcsUtil.FormatDate(ДатаСоздания)}" +
$" Закрыт={HcsUtil.FormatDate(ДатаЗакрытия)}" +
$" Размещения={ОписаниеРазмещений}" +
$" Основания={ОписаниеОснований}";
}
}
/// <summary>
/// Лицевой счет может быть привязан к нескольким размещениям.
/// Каждое размещение может быть или в здании, или в жилой комнате или в помещении
/// </summary>
public class ГисРазмещениеЛС
{
public Guid? ГуидЗдания;
public Guid? ГуидПомещения;
public Guid? ГуидЖилойКомнаты;
public decimal? ПроцентДоли;
public override string ToString()
{
if (ГуидЗдания != null) return $"Здание={ГуидЗдания}";
if (ГуидПомещения != null) return $"Помещение={ГуидПомещения}";
if (ГуидЖилойКомнаты != null) return $"ЖилКомната={ГуидЖилойКомнаты}";
return "";
}
}
public enum ГисТипОснованияЛС { ДоговорРСО, Соцнайм, Договор }
/// <summary>
/// Основание создания лицевого счета (договор на основании которого открыт ЛС)
/// </summary>
public class ГисОснованиеЛС
{
public ГисТипОснованияЛС ТипОснованияЛС;
public Guid ГуидДоговора;
public string НомерДоговора;
public override string ToString()
{
return $"{ТипОснованияЛС}={ГуидДоговора}";
}
}
}

View File

@ -0,0 +1,57 @@
using Newtonsoft.Json;
using System;
namespace Hcs.ClientApi.DataTypes
{
/// <summary>
/// Сведения из реестра оргнаизации ГИС ЖКХ
/// </summary>
public class ГисОрганизация
{
public Guid ГуидОрганизации;
public Guid ГуидВерсииОрганизации;
public ГисТипОрганизации ТипОрганизации;
public string КраткоеИмяОрганизации;
public string ПолноеИмяОрганизации;
public bool Действующая;
public string ИНН;
public string КПП;
public string ОГРН;
public string ОКОПФ;
public string Фамилия;
public string Имя;
public string Отчество;
public string ЮридическийАдрес;
public DateTime? ДатаЛиквидации;
[JsonIgnore]
public const int ДлинаОГРН = 13;
[JsonIgnore]
public const int ДлинаОГРНИП = 15;
public override string ToString()
{
string имя = ТипОрганизации == ГисТипОрганизации.ИП ?
$"ИП {Фамилия} {Имя} {Отчество}" : КраткоеИмяОрганизации;
return $"{ТипОрганизации}: [{имя}] ИНН={ИНН} КПП={КПП} Действующая={Действующая}" +
$" ГУИД={ГуидОрганизации} Версия={ГуидВерсииОрганизации}";
}
}
public enum ГисТипОрганизации { НетУказано, ЮЛ, ИП, Филиал, Иностранный }
}

View File

@ -0,0 +1,43 @@
using System;
using System.Text;
namespace Hcs.ClientApi.DataTypes
{
public class ГисПоказания
{
public DateTime ДатаСнятия;
public string ПоказанияТ1;
public string ПоказанияТ2;
public string ПоказанияТ3;
public override string ToString()
{
var buf = new StringBuilder();
if (!string.IsNullOrEmpty(ПоказанияТ1))
{
buf.AppendFormat("Т1={0}", ПоказанияТ1);
}
if (!string.IsNullOrEmpty(ПоказанияТ2))
{
if (buf.Length > 0) buf.Append(" ");
buf.AppendFormat("Т2={0}", ПоказанияТ2);
}
if (!string.IsNullOrEmpty(ПоказанияТ3))
{
if (buf.Length > 0) buf.Append(" ");
buf.AppendFormat("Т3={0}", ПоказанияТ3);
}
if (ДатаСнятия != default)
{
if (buf.Length > 0) buf.Append(" ");
buf.AppendFormat("на {0:d}", ДатаСнятия);
}
return buf.ToString();
}
}
}

View File

@ -0,0 +1,21 @@
using System;
namespace Hcs.ClientApi.DataTypes
{
/// <summary>
/// Жилое или нежилое момещение в доме ГИС ЖКХ
/// </summary>
public class ГисПомещение
{
public Guid ГуидПомещения;
public bool ЭтоЖилоеПомещение;
public string НомерПомещения;
public DateTime? ДатаПрекращения;
public string Аннулирование;
public override string ToString()
{
return $"ГисПомещение={НомерПомещения} Жилое={ЭтоЖилоеПомещение} Guid={ГуидПомещения} Прекращено={ДатаПрекращения} Аннул={Аннулирование}";
}
}
}

View File

@ -0,0 +1,102 @@
using Newtonsoft.Json;
using System;
using System.Linq;
namespace Hcs.ClientApi.DataTypes
{
/// <summary>
/// Прибор учета из ГИС ЖКХ может быть привязан к списку зданий (ОДПУ)
/// или к списку Лицевых счетов (все виды кроме ОДПУ)
/// </summary>
public class ГисПриборУчета
{
public Guid ГуидПрибораУчета;
public Guid ГуидВерсииПрибора;
public string НомерПрибораУчетаГис;
public DateTime? ДатаРазмещенияВерсии;
public Guid ГуидВладельцаПрибора;
public ГисСтатусПрибораУчета СтатусПрибораУчета;
public ГисВидПрибораУчета ВидПрибораУчета;
public string ЗаводскойНомер;
public string МодельПрибораУчета;
[JsonIgnore]
public bool КоэффициентТрансформацииУказан => (КоэффициентТрансформации > 0);
public decimal КоэффициентТрансформации;
public string ПоказаниеТ1;
public string ПоказаниеТ2;
public string ПоказаниеТ3;
// TODO: Добавить эти комментарии как XML-комментарии
public DateTime? ДатаИзготовления; // Обязательно при импорте
public DateTime? ДатаУстановки;
public DateTime? ДатаВводаВЭксплуатацию; // Обязательно кроме ОДПУ
public DateTime? ДатаПоследнейПоверки; // Обязательно для ОДПУ
public bool РежимДистанционногоОпроса; // Признак наличия ИСУ
public string ОписаниеДистанционногоОпроса; // Наименование ИСУ
public Guid[] ГуидыЗданийФиас;
public Guid[] ГуидыЛицевыхСчетов;
public Guid[] ГуидыПомещений;
public Guid[] ГуидыЖилыхКомнат;
[JsonIgnore]
public bool ЭтоАктивный => (СтатусПрибораУчета == ГисСтатусПрибораУчета.Активный);
[JsonIgnore]
public bool ЭтоАрхивный => (СтатусПрибораУчета == ГисСтатусПрибораУчета.Архивный);
[JsonIgnore]
public bool ЭтоОДПУ => (ВидПрибораУчета == ГисВидПрибораУчета.ОДПУ);
[JsonIgnore]
public bool ЭтоНежилоеПомещение => (ВидПрибораУчета == ГисВидПрибораУчета.НежилоеПомещение);
[JsonIgnore]
public bool ЭтоПриборЮЛ => ЭтоОДПУ || ЭтоНежилоеПомещение;
public bool СвязанСЛицевымСчетом(ГисЛицевойСчет лс)
{
if (лс == null || ГуидыЛицевыхСчетов == null || ГуидыЛицевыхСчетов.Length == 0) return false;
if (ГуидыЛицевыхСчетов.Length == 1) return (ГуидыЛицевыхСчетов[0] == лс.ГуидЛицевогоСчета);
return ГуидыЛицевыхСчетов.Contains(лс.ГуидЛицевогоСчета);
}
public bool СвязанСАдреснымОбъектом(ГисАдресныйОбъект адрес)
{
// TODO: Для лицевых счетов здесь надо тестировать ГУИД помещения
if (адрес == null || ГуидыЗданийФиас == null || ГуидыЗданийФиас.Length == 0) return false;
if (ГуидыЗданийФиас.Length == 1) return ГуидыЗданийФиас[0] == адрес.ГуидЗданияФиас;
return ГуидыЗданийФиас.Contains(адрес.ГуидЗданияФиас);
}
public bool ЗаполненГуидЗданияФиас => (ГуидыЗданийФиас != null && ГуидыЗданийФиас.Length > 0);
public Guid? ОдинГуидЗданияФиас => (ЗаполненГуидЗданияФиас ? ГуидыЗданийФиас[0] : null);
public override string ToString()
{
int числоЛС = ГуидыЛицевыхСчетов != null ? ГуидыЛицевыхСчетов.Length : 0;
int числоДомов = ГуидыЗданийФиас != null ? ГуидыЗданийФиас.Length : 0;
return $"{ВидПрибораУчета} {СтатусПрибораУчета} №{ЗаводскойНомер} [{МодельПрибораУчета}]" +
$"Гуид={ГуидПрибораУчета} ЧислоЛС={числоЛС} ЧислоДомов={числоДомов}";
}
}
public enum ГисВидПрибораУчета
{
ЖилоеПомещение,
НежилоеПомещение,
ОДПУ,
ЖилойДом,
ЖилаяКомната,
КоммунальнаяКвартира
}
public enum ГисСтатусПрибораУчета { Активный, Архивный }
}