diff --git a/AsbCloudApp/Data/WellOperation/WellOperationBaseDto.cs b/AsbCloudApp/Data/WellOperation/WellOperationBaseDto.cs new file mode 100644 index 00000000..61625da8 --- /dev/null +++ b/AsbCloudApp/Data/WellOperation/WellOperationBaseDto.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; + +namespace AsbCloudApp.Data.WellOperation; + +/// +/// Операция по скважине +/// +public class WellOperationBaseDto : ItemInfoDto, + IId, + IWellRelated, + IValidatableObject +{ + /// + [Required] + public int Id { get; set; } + + /// + [Required] + public int IdWell { get; set; } + + /// + /// Id секции скважины + /// + public int IdWellSectionType { get; set; } + + /// + /// 0 = план или 1 = факт или прогноз = 2 + /// + [Required] + public int IdType { get; set; } + + /// + /// id категории операции + /// + public int IdCategory { get; set; } + + /// + /// Глубина на начало операции, м + /// + public double DepthStart { get; set; } + + /// + /// Глубина после завершения операции, м + /// + [Required] + [Range(0, 50_000)] + public double DepthEnd { get; set; } + + /// + /// Дата начала операции + /// + [Required] + public DateTimeOffset DateStart { get; set; } + + /// + /// Продолжительность, часы + /// + public double DurationHours { get; set; } + + /// + /// Наименование секции + /// + public string? WellSectionTypeCaption { get; set; } + + /// + /// Наименование категории + /// + public string? OperationCategoryName { get; set; } + + /// + /// id плановой операции для сопоставления + /// + public int? IdPlan { get; set; } + + /// + /// Ключ родителя у категории + /// + public int? IdParentCategory { get; set; } + + /// + /// дополнительная информация по операции + /// + [StringLength(8192)] + public string? CategoryInfo { get; set; } + + /// + /// Полезный комментарий + /// + [StringLength(4096, ErrorMessage = "Комментарий не может быть длиннее 4096 символов")] + public string? Comment { get; set; } + + /// + /// Валидация даты + /// + /// + /// + public IEnumerable Validate(ValidationContext validationContext) + { + var gtDate = new DateTimeOffset(2010, 1, 1, 0, 0, 0, TimeSpan.Zero); + if (DateStart <= gtDate) + yield return new ValidationResult( + $"{nameof(DateStart)}: DateStart не может быть меньше {gtDate}", + new[] { nameof(DateStart) }); + } +}