using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace AsbCloudApp.Data.WellOperation; /// <summary> /// Операция по скважине /// </summary> public class WellOperationBaseDto : ItemInfoDto, IId, IWellRelated, IValidatableObject { /// <inheritdoc/> [Required] public int Id { get; set; } /// <inheritdoc/> [Required] public int IdWell { get; set; } /// <summary> /// Id секции скважины /// </summary> public int IdWellSectionType { get; set; } /// <summary> /// 0 = план или 1 = факт или прогноз = 2 /// </summary> [Required] public int IdType { get; set; } /// <summary> /// id категории операции /// </summary> public int IdCategory { get; set; } /// <summary> /// Глубина на начало операции, м /// </summary> public double DepthStart { get; set; } /// <summary> /// Глубина после завершения операции, м /// </summary> [Required] [Range(0, 50_000)] public double DepthEnd { get; set; } /// <summary> /// Дата начала операции /// </summary> [Required] public DateTimeOffset DateStart { get; set; } /// <summary> /// Продолжительность, часы /// </summary> public double DurationHours { get; set; } /// <summary> /// Наименование секции /// </summary> public string? WellSectionTypeCaption { get; set; } /// <summary> /// Наименование категории /// </summary> public string? OperationCategoryName { get; set; } /// <summary> /// id плановой операции для сопоставления /// </summary> public int? IdPlan { get; set; } /// <summary> /// Ключ родителя у категории /// </summary> public int? IdParentCategory { get; set; } /// <summary> /// дополнительная информация по операции /// </summary> [StringLength(8192)] public string? CategoryInfo { get; set; } /// <summary> /// Полезный комментарий /// </summary> [StringLength(4096, ErrorMessage = "Комментарий не может быть длиннее 4096 символов")] public string? Comment { get; set; } /// <summary> /// ctor /// </summary> public WellOperationBaseDto() { } /// <summary> /// ctor /// </summary> public WellOperationBaseDto(WellOperationBaseDto wellOperation) { Id = wellOperation.Id ; IdWell = wellOperation.IdWell ; IdWellSectionType = wellOperation.IdWellSectionType ; IdType = wellOperation.IdType ; IdCategory = wellOperation.IdCategory ; DepthStart = wellOperation.DepthStart ; DepthEnd = wellOperation.DepthEnd ; DateStart = wellOperation.DateStart ; DurationHours = wellOperation.DurationHours ; WellSectionTypeCaption = wellOperation.WellSectionTypeCaption ; OperationCategoryName = wellOperation.OperationCategoryName ; IdPlan = wellOperation.IdPlan ; IdParentCategory = wellOperation.IdParentCategory ; CategoryInfo = wellOperation.CategoryInfo ; Comment = wellOperation.Comment; } /// <summary> /// Валидация даты /// </summary> /// <param name="validationContext"></param> /// <returns></returns> public IEnumerable<ValidationResult> 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) }); } }