using FactoryContracts.BindingModels; using FactoryContracts.ViewModels; using FactoryDataModels.Models; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FactoryDatabaseImplement.Models { public class Plan : IPlanModel { public int Id { get; set; } [Required] public string PlanName { get; set; } = String.Empty; [Required] public DateTime date { get; set; } [Required] private Dictionary<int, ILatheModel>? _planLathes { get; set; } = null; [NotMapped] public Dictionary<int, ILatheModel> PlanLathes { get { if (_planLathes == null) { _planLathes = Lathes.ToDictionary(recPL => recPL.LatheId, recPL => recPL.Lathe as ILatheModel); } return _planLathes; } } [ForeignKey("PlanId")] public virtual List<PlanLathe> Lathes { get; set; } = new(); [Required] private Dictionary<int, IComponentModel> _planComponents { get; set; } = null; [NotMapped] public Dictionary<int, IComponentModel> PlanComponents { get { if (_planComponents == null) { _planComponents = Components.ToDictionary(recPL => recPL.ComponentId, recPL => recPL.Component as IComponentModel); } return _planComponents; } } [ForeignKey("PlanId")] public virtual List<PlanComponents> Components { get; set; } = new(); public static Plan Create(FactoryDatabase context, PlanBindingModel model) { return new Plan() { Id = model.Id, PlanName = model.PlanName, }; } [ForeignKey("PlanId")] public virtual List<Stage> Stages { get; set; } = new(); public void Update(PlanBindingModel model) { PlanName = model.PlanName; } public PlanViewModel GetViewModel => new() { Id = Id, PlanName = PlanName, }; public void UpdateLathes(FactoryDatabase context, PlanBindingModel model) { var PlanLathes = context.PlanLathes.Where(rec => rec.PlanId == model.Id).ToList(); if (PlanLathes != null && PlanLathes.Count > 0) { context.SaveChanges(); foreach (var updateComponent in PlanLathes) { model.PlanLathes.Remove(updateComponent.LatheId); } context.SaveChanges(); } var Plans = context.Plans.First(x => x.Id == Id); foreach (var pc in model.PlanLathes) { context.PlanLathes.Add(new PlanLathe { Plan = Plans, Lathe = context.Lathes.First(x => x.Id == pc.Key) }); context.SaveChanges(); } _planLathes = null; } public void UpdateComponents(FactoryDatabase context, PlanBindingModel model) { var PlanComponents = context.PlanComponents.Where(rec => rec.PlanId == model.Id).ToList(); if (PlanComponents != null && PlanComponents.Count > 0) { context.SaveChanges(); PlanComponents = context.PlanComponents.Where(rec => rec.PlanId == model.Id).ToList(); foreach (var updateComponent in PlanComponents) { model.PlanComponents.Remove(updateComponent.ComponentId); } context.SaveChanges(); } var Plans = context.Plans.First(x => x.Id == Id); foreach (var pc in model.PlanComponents) { context.PlanComponents.Add(new PlanComponents { Plan = Plans, Component = context.Components.First(x => x.Id == pc.Key), }); context.SaveChanges(); } _planComponents = null; } } }