using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace AutoServiceApp.Models
{
/// <summary>
/// Перечисление статусов заявки
/// </summary>
public enum RequestStatus
{
[Display(Name = "Новая")]
New = 0,
[Display(Name = "Принята в работу")]
Accepted = 1,
[Display(Name = "В работе")]
InProgress = 2,
[Display(Name = "Ожидание запчастей")]
WaitingParts = 3,
[Display(Name = "Контроль качества")]
QualityControl = 4,
[Display(Name = "Готова к выдаче")]
Ready = 5,
[Display(Name = "Выдана клиенту")]
Issued = 6,
[Display(Name = "Закрыта")]
Closed = 7,
[Display(Name = "Отменена")]
Cancelled = 8
}
/// <summary>
/// Модель заявки на обслуживание
/// </summary>
public class ServiceRequest
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Display(Name = "Номер заявки")]
public string RequestNumber { get; set; } = string.Empty;
[Required(ErrorMessage = "Описание работ обязательно")]
[Display(Name = "Описание работ / неисправности")]
[StringLength(1000, MinimumLength = 10, ErrorMessage = "Описание должно содержать от 10 до 1000 символов")]
public string Description { get; set; } = string.Empty;
[Display(Name = "Дополнительная информация")]
[StringLength(2000, ErrorMessage = "Дополнительная информация не должна превышать 2000 символов")]
public string? AdditionalInfo { get; set; }
[Required(ErrorMessage = "Статус обязателен")]
[Display(Name = "Статус")]
public RequestStatus Status { get; set; } = RequestStatus.New;
[Display(Name = "Предварительная стоимость (₽)")]
[Range(0, 9999999.99, ErrorMessage = "Неверная стоимость")]
[Column(TypeName = "decimal(18, 2)")]
public decimal EstimatedCost { get; set; }
[Display(Name = "Фактическая стоимость (₽)")]
[Range(0, 9999999.99, ErrorMessage = "Неверная стоимость")]
[Column(TypeName = "decimal(18, 2)")]
public decimal? ActualCost { get; set; }
[Display(Name = "Дата создания")]
public DateTime CreatedAt { get; set; } = DateTime.Now;
[Display(Name = "Желаемая дата выполнения")]
public DateTime? DesiredDate { get; set; }
[Display(Name = "Дата начала работ")]
public DateTime? StartedAt { get; set; }
[Display(Name = "Дата завершения")]
public DateTime? CompletedAt { get; set; }
[Display(Name = "Примечания мастера")]
[StringLength(1000, ErrorMessage = "Примечания не должны превышать 1000 символов")]
public string? MasterNotes { get; set; }
// Внешние ключи
[Required(ErrorMessage = "Транспортное средство обязательно")]
[Display(Name = "Транспортное средство")]
public int VehicleId { get; set; }
[Display(Name = "Ответственный мастер")]
public int? AssignedMasterId { get; set; }
// Навигационные свойства
[ForeignKey("VehicleId")]
public virtual Vehicle? Vehicle { get; set; }
// Генерация номера заявки
public void GenerateRequestNumber()
{
RequestNumber = $"AS-{DateTime.Now:yyyyMMdd}-{Id:D4}";
}
}
}