using HospitalContracts.BindingModels; using HospitalContracts.ViewModels; using HospitalDataModels.Models; using Microsoft.EntityFrameworkCore.Query.Internal; using Microsoft.Identity.Client; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Dynamic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HospitalDataBaseImplements.Models { public class Recipes : IRecipesModel { public int Id { get; private set; } [Required] public string Dose { get; private set; } = string.Empty; [Required] public DateTime Date { get; private set; } = DateTime.Now; [Required] public int ClientId { get; set; } [Required] public string ModeOfApplication { get; private set; } = string.Empty; [Required] public int SymptomsId { get; private set; } private Dictionary? _recipeProcedures = null; [NotMapped] public Dictionary RecipeProcedures { get { if (_recipeProcedures == null) { _recipeProcedures = Procedures.ToDictionary(recPC => recPC.ProcedureId, recPC => recPC.Procedure as IProceduresModel); } return _recipeProcedures; } } [ForeignKey("RecipesId")] public virtual List Procedures { get; set; } = new(); public Client Client { get; set; } public Symptoms Symptoms { get; set; } public static Recipes? Create(RecipesBindingModel model) { if (model == null) { return null; } return new Recipes() { Id = model.Id, SymptomsId = model.SymptomsId, Dose = model.Dose, ClientId = model.ClientId, ModeOfApplication = model.ModeOfApplication }; } public static Recipes Create(RecipesViewModel model) { return new Recipes() { Id = model.Id, SymptomsId = model.SymptomsId, Dose = model.Dose, ClientId = model.ClientId, ModeOfApplication = model.ModeOfApplication }; } public void Update(RecipesBindingModel model) { Date = model.Date; Dose = model.Dose; ModeOfApplication = model.ModeOfApplication; } public RecipesViewModel GetViewModel => new() { Id = Id, Date = Date, ClientId = ClientId, ModeOfApplication = ModeOfApplication, Dose = Dose, SymptomsId = SymptomsId }; public void UpdateProcedures(HospitalDatabase context, RecipesBindingModel model) { var recipeProcedures = context.RecipesProcedures.Where(rec => rec.RecipesId == model.Id).ToList(); if (recipeProcedures != null && recipeProcedures.Count > 0) { // удалили те, которых нет в модели context.RecipesProcedures.RemoveRange(recipeProcedures.Where(rec => !model.RecipeProcedures.ContainsKey(rec.ProcedureId))); context.SaveChanges(); } var recipe = context.Recipes.First(x => x.Id == Id); foreach (var pc in model.RecipeProcedures) { context.RecipesProcedures.Add(new RecipesProcedures { Recipe = recipe, Procedure = context.Procedures.First(x => x.Id == pc.Key) }); context.SaveChanges(); } _recipeProcedures = null; } } }