using System.ComponentModel.DataAnnotations; using TransportCompanyContracts.BindingModels; using TransportCompanyContracts.ViewModels; using TransportCompanyDataModels.Enums; using TransportCompanyDataModels.Models; namespace TransportCompanyDatabaseImplement.Models { public class Transportation : ITransportationModel { public int Id { get; private set; } [Required] public int DriverId { get; private set; } public virtual Driver Driver { get; set; } = new(); [Required] public int TransportId { get; private set; } public virtual Transport Transport { get; set; } = new(); [Required] public int CargoId { get; private set; } public virtual Cargo Cargo { get; set; } = new(); [Required] public int Count { get; private set; } [Required] public int PointToId { get; private set; } public virtual Point PointTo { get; set; } = new(); [Required] public int PointFromId { get; private set; } public virtual Point PointFrom { get; set; } = new(); [Required] public TransportationStatus Status { get; private set; } = TransportationStatus.Неизвестен; [Required] public DateTime DepartureDate { get; private set; } = DateTime.Now; public DateTime? ArrivalDate { get; private set; } public static Transportation? Create(TransportCompanyDatabase context, TransportationBindingModel model) { return new Transportation() { Id = model.Id, DriverId = model.DriverId, Driver = context.Drivers.First(x => x.Id == model.DriverId), TransportId = model.TransportId, Transport = context.Transports.First(x => x.Id == model.TransportId), CargoId = model.CargoId, Cargo = context.Cargos.First(x => x.Id == model.CargoId), Count = model.Count, PointToId = model.PointToId, PointTo = context.Points.First(x => x.Id == model.PointToId), PointFromId = model.PointFromId, PointFrom = context.Points.First(x => x.Id == model.PointFromId), Status = model.Status, DepartureDate = model.DepartureDate, ArrivalDate = model.ArrivalDate, }; } public void Update(TransportationBindingModel? model) { if (model == null) { return; } Status = model.Status; ArrivalDate = model.ArrivalDate; } public TransportationViewModel GetViewModel => new() { Id = Id, DriverId = DriverId, DriverFio = Driver.DriverFio, TransportId = TransportId, Model = Transport.Model, CargoId = CargoId, CargoName = Cargo.CargoName, Count = Count, PointToId = PointToId, PointNameTo = PointTo.PointName, PointFromId = PointFromId, PointNameFrom = PointFrom.PointName, Status = Status, DepartureDate = DepartureDate, ArrivalDate = ArrivalDate, }; } }