using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace AsbCloudApp.Data
{
///
/// Операции на скважине (заведенные пользователем)
///
public class WellOperationDto : ItemInfoDto, IId, IWellRelated, IValidatableObject
{
///
[Required]
public int Id { get; set; }
///
[Required]
public int IdWell { get; set; }
///
/// id секции скважины
///
[Required]
public int IdWellSectionType { get; set; }
///
/// название секции скважины
///
public string? WellSectionTypeName { get; set; }
///
/// id категории операции
///
[Required]
[Range(5000, int.MaxValue)]
public int IdCategory { get; set; }
///
/// id плановой операции для сопоставления
///
public int? IdPlan { get; set; }
///
/// название категории операции
///
public string? CategoryName { get; set; }
///
/// ключ родителя у категории
///
public int? IdParentCategory { get; set; }
///
/// дополнительная информация по операции
///
[StringLength(8192)]
public string? CategoryInfo { get; set; }
///
/// 0 = план или 1 = факт или прогноз = 2
///
[Required]
public int IdType { get; set; }
///
/// Глубина на начало операции, м
///
[Required]
[Range(0, 50_000)]
public double DepthStart { get; set; }
///
/// Глубина после завершения операции, м
///
[Required]
[Range(0, 50_000)]
public double DepthEnd { get; set; }
///
/// Кол-во дней от даты начала первой плановой (а если её нет, то фактической) операции
///
[Required]
public double Day { get; set; }
///
/// Кол-во часов НПВ от даты начала первой плановой (а если её нет, то фактической) операции
///
[Required]
public double NptHours { get; set; }
///
/// Дата начала операции
///
[Required]
public DateTimeOffset DateStart { get; set; }
///
/// Продолжительность, часы
///
[Required]
[Range(0, 50)]
public double DurationHours { get; set; }
///
/// Полезный комментарий
///
[StringLength(4096, ErrorMessage = "Комментарий не может быть длиннее 4096 символов")]
public string? Comment { get; set; }
///
/// Валидация даты
///
///
///
public IEnumerable Validate(ValidationContext validationContext)
{
if (!(DateStart is DateTimeOffset dateTimeOffset))
yield return new ValidationResult(
$"{nameof(DateStart)}: дата DateStart указана не в формате DateTimeOffset",
new[] { nameof(DateStart) });
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) });
}
}
}