using Microsoft.EntityFrameworkCore;
using PARR.DAL.Context;
using PARR.DAL.Models.Base;
using PARR.DAL.Models.Schedule;
using PARR.DAL.Models.Unit;
using PARR.DAL.Settings;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace PARR.DAL.Models.Job
{
[Table("Groups", Schema = DataContextSettings.Job)]
[Comment("Таблица описания групп работ, для реализации зонтиков")]
public class JobGroup : IBase
{
[Key]
public Guid Id { get; set; }
public DateTimeOffset DateCreated { get; set; }
public DateTimeOffset? DateModified { get; set; }
///
/// Наименование работ для интерфеса в ПАРР
///
public required string GroupName { get; set; }
/////
///// Связана ли работа с групповыми ЭК(зонтами)
/////
//public bool? IsUmbrella { get; set; }
///
/// Поле Короткое описания шаблона АСУ ЕСПП
///
public required string ShortDescription { get; set; }
///
/// Поле Подробное описания шаблона АСУ ЕСПП
///
private string _fullDescription = string.Empty;
public required string FullDescription
{
get
{
//В полное описание подставляем префикс, для дальнейшего поиска наряда
return $"{_fullDescription}\r\n{PrefixSettings.PrefixWithoutVariable}";
}
set
{
//удаляем префикс, если он есть
//_fullDescription = value.Replace($"\r\n{PrefixSettings.PrefixWithoutVariable}", string.Empty);
_fullDescription = value.Replace($"{PrefixSettings.PrefixWithoutVariable}", string.Empty).TrimEnd();
}
}
//public required string FullDescription { get; set; }
///
/// Поле Решение описания шаблона АСУ ЕСПП
///
public required string Solution { get; set; }
///
/// Поле Длительность описания шаблона АСУ ЕСПП
///
public required string TemplateDuration { get; set; }
///
/// TemplateDuration в формате TimeSpan
///
public TimeSpan? TemplateDurationTimeSpan
{
get
{
try
{
//ЕСПП кривоногие, они почему-то таймспан пишут так "7 00:00:00", а правильно так: "7:00:00:00"
var durationWithTimeSpanFormat = TemplateDuration.Replace(" ", ":");
return TimeSpan.Parse(durationWithTimeSpanFormat);
}
catch
{
return null;
}
}
}
///
/// Дата начала работ или дата для отсчёта периода следующего выполнения
///
public DateTimeOffset ReferenceDate { get; set; }
///
/// Включить автораспределение
///
public bool IsAutoDistributionEnabled { get; set; }
///
/// Выполняет агент
///
public bool IsAgent { get; set; }
///
/// Какое-то имя которое мы передаем агенту, пока непонятно что это такое.
///
public string? AgentName { get; set; }
///
/// Сколько времени ожидать выполнение скрипта агентом (секунд)
///
public int? AgentTimeOutSec { get; set; }
///
/// Скрипт для автоматического выполнения
///
public string? AgentScript { get; set; }
///
/// Тип группы
///
public Guid GroupTypeId { get; set; }
///
/// Если тип группы - "Сгруппированный", то это поле обязательно, по нему будем группировать
/// TODO: !!!! Связь с иаблице UnitField не создавалась! Нужно это переделать и унести в отдельную таблицу
///
public Guid? GroupingUnitFieldId { get; set; }
///
/// Расписание регламентной работы - Тип исключения
///
public Guid ScheduleExcludeTypeId { get; set; }
///
/// Расписание регламентной работы, исключение - Календарь
///
public Guid? ScheduleExcludeTypeCalendarId { get; set; }
///
/// Поле по которому группируется (!!!отключено каскадное удаление!!!)
///
[ForeignKey(nameof(GroupingUnitFieldId))]
public UnitField? GroupingUnitField { get; set; }
[ForeignKey(nameof(GroupTypeId))]
public JobGroupType? GroupType { get; set; }
public ICollection Jobs { get; set; } = new HashSet();
public ICollection EsppSchValues { get; set; } = new HashSet();
[ForeignKey(nameof(ScheduleExcludeTypeId))]
public ScheduleExcludeType? ScheduleExcludeType { get; set; }
[ForeignKey(nameof(ScheduleExcludeTypeCalendarId))]
public ScheduleExcludeTypeCalendar? ScheduleExcludeTypeCalendar { get; set; }
}
}