113 lines
3.9 KiB
C#

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<int, IProceduresModel>? _recipeProcedures = null;
[NotMapped]
public Dictionary<int, IProceduresModel> RecipeProcedures
{
get
{
if (_recipeProcedures == null)
{
_recipeProcedures = Procedures.ToDictionary(recPC => recPC.ProcedureId, recPC =>
recPC.Procedure as IProceduresModel);
}
return _recipeProcedures;
}
}
[ForeignKey("RecipesId")]
public virtual List<RecipesProcedures> 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;
}
}
}