using CarCenterContracts.BindingModels; using CarCenterContracts.ViewModels; using CarCenterDataModels.Models; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Text.Json.Serialization; namespace CarCenterDataBaseImplement.Models { public class PreSaleWork : IPreSaleWorkModel { [Required] public string PreSaleWorkType { get; set; } = string.Empty; [Required] public double PreSaleWorkPrice { get; set; } public int ManagerId { get; private set; } public int Id { get; private set; } public virtual Manager Manager { get; set; } private Dictionary _PreSaleWorkSale = null; [NotMapped] public Dictionary PreSaleWorkSale { get { if (_PreSaleWorkSale == null) { using var context = new CarCenterDataBase(); _PreSaleWorkSale = Sale .ToDictionary(x => x.SaleId, x => (context.Sale .FirstOrDefault(y => y.Id == x.SaleId)! as ISaleModel)); } return _PreSaleWorkSale; } } [ForeignKey("PreSaleWorkId")] public virtual List Cars { get; set; } = new(); [ForeignKey("PreSaleWorkId")] public virtual List Sale { get; set; } = new(); public static PreSaleWork Create(CarCenterDataBase context, PreSaleWorkBindingModel model) { return new PreSaleWork() { Id = model.Id, PreSaleWorkType = model.PreSaleWorkType, PreSaleWorkPrice = model.PreSaleWorkPrice, ManagerId = model.ManagerId, Sale = model.PreSaleWorkSale.Select(x => new PreSaleWorkSale { Sale = context.Sale.First(y => y.Id == x.Key), }).ToList() }; } public void Update(PreSaleWorkBindingModel model) { PreSaleWorkType = model.PreSaleWorkType; PreSaleWorkPrice = model.PreSaleWorkPrice; ManagerId = model.ManagerId; } public PreSaleWorkViewModel GetViewModel => new() { Id = Id, PreSaleWorkType = PreSaleWorkType, PreSaleWorkPrice = PreSaleWorkPrice, ManagerId=ManagerId, PreSaleWorkSale = PreSaleWorkSale }; public void UpdateSale(CarCenterDataBase context, PreSaleWorkBindingModel model) { var PreSaleWorkSale = context.PreSaleWorkSale.Where(rec => rec.PreSaleWorkId == model.Id).ToList(); if (PreSaleWorkSale != null && PreSaleWorkSale.Any()) { context.PreSaleWorkSale.RemoveRange(PreSaleWorkSale.Where(rec => !model.PreSaleWorkSale.ContainsKey(rec.SaleId))); context.SaveChanges(); foreach (var updateSale in PreSaleWorkSale) { model.PreSaleWorkSale.Remove(updateSale.SaleId); } context.SaveChanges(); } var PreSaleWork = context.PreSaleWorks.First(x => x.Id == Id); foreach (var cm in model.PreSaleWorkSale) { context.PreSaleWorkSale.Add(new PreSaleWorkSale { PreSaleWork = PreSaleWork, Sale = context.Sale.First(x => x.Id == cm.Key) }); context.SaveChanges(); } _PreSaleWorkSale = null; } } }