using HospitalContracts.BindingModels; using HospitalContracts.ViewModels; using HospitalDataModels.Models; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; namespace HospitalDataBaseImplements.Models { public class Illness : IIllnessModel { public int Id { get; private set; } [Required] public string IllnessName { get; private set; } = string.Empty; [Required] public string Form { get; private set; } = string.Empty; private Dictionary? _illnessKurses = null; [NotMapped] public Dictionary IllnessKurse { get { if (_illnessKurses == null) { _illnessKurses = Kurses.ToDictionary(recPC => recPC.KurseId, recPC => (recPC.Kurse as IKurseModel)); } return _illnessKurses; } } [ForeignKey("IllnessId")] public virtual List Kurses { get; set; } = new(); private Dictionary? _illnessSymptomses = null; [NotMapped] public Dictionary IllnessSymptoms { get { if (_illnessSymptomses == null) { _illnessSymptomses = Symptomses.ToDictionary(recPC => recPC.SymptomsId, recPC => (recPC.Symptoms as ISymptomsModel)); } return _illnessSymptomses; } } [ForeignKey("IllnessId")] public virtual List Symptomses { get; set; } = new(); public static Illness Create(HospitalDatabase context,IllnessBindingModel model) { return new Illness() { Id = model.Id, IllnessName = model.IllnessName, Form = model.Form, Kurses = model.IllnessKurse.Select(x => new IllnessKurse { Kurse = context.Kurse.First(y => y.Id == x.Key), }).ToList(), Symptomses = model.IllnessSymptoms.Select(x => new IllnessSymptoms { Symptoms = context.Symptomses.First(y => y.Id == x.Key), }).ToList() }; } public static Illness? Create(XElement element) { if (element == null) { return null; } return new Illness() { //Surname = element.Element("Surname")!.Value, //Name = element.Element("Name")!.Value, //Patronymic = element.Element("Patronymic")?.Value, //BirthDate = DateTime.ParseExact(element.Element("BirthDate")!.Value, "dd.mm.yyyy", null), //TreatmentId = Convert.ToInt32(element.Element("TreatmentId")?.Value) }; } public void Update(IllnessBindingModel model) { IllnessName = model.IllnessName; Form = model.Form; } public IllnessViewModel GetViewModel => new() { Id = Id, IllnessName = IllnessName, Form = Form, IllnessKurse = IllnessKurse, IllnessSymptoms = IllnessSymptoms }; public void UpdateDrugCourses(HospitalDatabase context, IllnessBindingModel model) { var illnessKurses = context.IllnessKurse.Where(rec => rec.IllnessId == model.Id).ToList(); if (illnessKurses != null && illnessKurses.Count > 0) { // удалили те, которых нет в модели context.IllnessKurse.RemoveRange(illnessKurses.Where(rec => !model.IllnessKurse.ContainsKey(rec.KurseId))); context.SaveChanges(); } var illness = context.Illnesses.First(x => x.Id == Id); foreach (var pc in model.IllnessKurse) { context.IllnessKurse.Add(new IllnessKurse { Illness = illness, Kurse = context.Kurse.First(x => x.Id == pc.Key) }); context.SaveChanges(); } _illnessKurses = null; } public void UpdateSymptomses(HospitalDatabase context, IllnessBindingModel model) { var illnessSymptomses = context.IllnessSymptomses.Where(rec => rec.IllnessId == model.Id).ToList(); if (illnessSymptomses != null && illnessSymptomses.Count > 0) { // удалили те, которых нет в модели context.IllnessSymptomses.RemoveRange(illnessSymptomses.Where(rec => !model.IllnessSymptoms.ContainsKey(rec.SymptomsId))); context.SaveChanges(); } var illness = context.Illnesses.First(x => x.Id == Id); foreach (var pc in model.IllnessSymptoms) { context.IllnessSymptomses.Add(new IllnessSymptoms { Illness = illness, Symptoms = context.Symptomses.First(x => x.Id == pc.Key) }); context.SaveChanges(); } _illnessSymptomses = null; } } }