diff --git a/Hospital/Hospital/HospitalView.csproj b/Hospital/Hospital/HospitalView.csproj
index f97c885..2b28e74 100644
--- a/Hospital/Hospital/HospitalView.csproj
+++ b/Hospital/Hospital/HospitalView.csproj
@@ -8,6 +8,13 @@
enable
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
diff --git a/Hospital/HospitalContracts/ViewModels/PatientViewModel.cs b/Hospital/HospitalContracts/ViewModels/PatientViewModel.cs
index 073890c..c8f93be 100644
--- a/Hospital/HospitalContracts/ViewModels/PatientViewModel.cs
+++ b/Hospital/HospitalContracts/ViewModels/PatientViewModel.cs
@@ -13,13 +13,13 @@ namespace HospitalContracts.ViewModels
public int Id { get; set; }
[DisplayName("ФИО")]
- public string FIO { get; }
+ public string FIO { get; set; } = string.Empty;
[DisplayName("Дата рождения")]
- public DateOnly BirthDate { get; }
+ public DateOnly BirthDate { get; set; } = new DateOnly(Int32.Parse("2000"), Int32.Parse("01"), Int32.Parse("01"));
[DisplayName("Адрес")]
- public string Adress { get; }
+ public string Address { get; set; } = string.Empty;
public int DoctorId { get; set; }
diff --git a/Hospital/HospitalDataBaseImplement/HospitalDataBaseImplement.csproj b/Hospital/HospitalDataBaseImplement/HospitalDataBaseImplement.csproj
index 762fcc6..719a1d6 100644
--- a/Hospital/HospitalDataBaseImplement/HospitalDataBaseImplement.csproj
+++ b/Hospital/HospitalDataBaseImplement/HospitalDataBaseImplement.csproj
@@ -12,7 +12,16 @@
-
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
diff --git a/Hospital/HospitalDataBaseImplement/HospitalDatabase.cs b/Hospital/HospitalDataBaseImplement/HospitalDatabase.cs
index de1b89f..88efe75 100644
--- a/Hospital/HospitalDataBaseImplement/HospitalDatabase.cs
+++ b/Hospital/HospitalDataBaseImplement/HospitalDatabase.cs
@@ -1,4 +1,7 @@
-using System;
+using HospitalDatabaseImplement.Models;
+using HospitalDatabaseImplement.Modelss;
+using Microsoft.EntityFrameworkCore;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -7,8 +10,36 @@ using System.Threading.Tasks;
namespace HospitalDatabaseImplement
{
- public class HospitalDatabase
+ public class HospitalDatabase : DbContext
{
+ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
+ {
+ if (optionsBuilder.IsConfigured == false)
+ {
+ optionsBuilder.UseSqlServer(@"Data Source=localhost\SQLEXPRESS;Initial Catalog=HospitalDatabase;Integrated Security=True;MultipleActiveResultSets=True;;TrustServerCertificate=True");
+ }
+ base.OnConfiguring(optionsBuilder);
+ }
+ public virtual DbSet Doctors { set; get; }
+ public virtual DbSet Patients { set; get; }
+
+ public virtual DbSet Recipes { set; get; }
+
+ public virtual DbSet Diseases { set; get; }
+
+ public virtual DbSet Medicines { set; get; }
+
+ public virtual DbSet Procedures { set; get; }
+
+ public virtual DbSet PatientRecipes { set; get; }
+
+ public virtual DbSet PatientProcedures { set; get; }
+
+ public virtual DbSet RecipeMedicines { set; get; }
+
+ public virtual DbSet ProcedureMedicines { set; get; }
+
+ //TODO добавить сущности описание процедур и промежутучную сущость у фармацевта
}
}
diff --git a/Hospital/HospitalDatabaseImplement/Implementss/DiseaseStorage.cs b/Hospital/HospitalDatabaseImplement/Implementss/DiseaseStorage.cs
new file mode 100644
index 0000000..fb36a9a
--- /dev/null
+++ b/Hospital/HospitalDatabaseImplement/Implementss/DiseaseStorage.cs
@@ -0,0 +1,120 @@
+using HospitalContracts.BindingModels;
+using HospitalContracts.SearchModels;
+using HospitalContracts.StoragesContracts;
+using HospitalContracts.ViewModels;
+using HospitalDatabaseImplement.Models;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HospitalDatabaseImplement.Implementss
+{
+ public class DiseaseStorage : IDiseaseStorage
+ {
+ public DiseaseViewModel? GetElement(DiseaseSearchModel model)
+ {
+ if (string.IsNullOrEmpty(model.Name) && !model.Id.HasValue)
+ {
+ return null;
+ }
+ using var context = new HospitalDatabase();
+ return context.Diseases
+ .Include(x => x.Recipes)
+ .Include(x => x.Doctor)
+ .FirstOrDefault(x => (!string.IsNullOrEmpty(model.Name) && x.Name == model.Name) || (model.Id.HasValue && x.Id == model.Id))
+ ?.GetViewModel;
+ }
+
+ public List GetFilteredList(DiseaseSearchModel model)
+ {
+ using var context = new HospitalDatabase();
+ if (string.IsNullOrEmpty(model.Name) && !model.Id.HasValue)
+ {
+ return context.Diseases
+ .Include(x => x.Recipes)
+ .Include(x => x.Doctor)
+ .Where(x => x.Id == model.Id)
+ .Select(x => x.GetViewModel)
+ .ToList();
+ }
+ else if (model.DoctorId.HasValue)
+ {
+ return context.Diseases
+ .Include(x => x.Recipes)
+ .Include(x => x.Doctor)
+ .Where(x => x.DoctorId == model.DoctorId)
+ .Select(x => x.GetViewModel)
+ .ToList();
+ }
+ else
+ {
+ return new();
+ }
+ }
+
+ public List GetFullList()
+ {
+ using var context = new HospitalDatabase();
+ return context.Diseases
+ .Include(x => x.Recipes)
+ .Include(x => x.Doctor)
+ .Select(x => x.GetViewModel)
+ .ToList();
+ }
+
+ public DiseaseViewModel? Insert(DiseaseBindingModel model)
+ {
+ var newDisease = Disease.Create(model);
+ if (newDisease == null)
+ {
+ return null;
+ }
+ using var context = new HospitalDatabase();
+ context.Diseases.Add(newDisease);
+ context.SaveChanges();
+ return context.Diseases
+ .Include(x => x.Recipes)
+ .Include(x => x.Doctor)
+ .FirstOrDefault(x => x.Id == newDisease.Id)
+ ?.GetViewModel;
+ }
+
+ public DiseaseViewModel? Update(DiseaseBindingModel model)
+ {
+ using var context = new HospitalDatabase();
+ var disease = context.Diseases.FirstOrDefault(x => x.Id == model.Id);
+ if (disease == null)
+ {
+ return null;
+ }
+ disease.Update(model);
+ context.SaveChanges();
+ return context.Diseases
+ .Include(x => x.Recipes)
+ .Include(x => x.Doctor)
+ .FirstOrDefault(x => x.Id == model.Id)
+ ?.GetViewModel;
+ }
+
+ public DiseaseViewModel? Delete(DiseaseBindingModel model)
+ {
+ using var context = new HospitalDatabase();
+ var element = context.Diseases.FirstOrDefault(rec => rec.Id == model.Id);
+ if (element != null)
+ {
+ var deletedElement = context.Diseases
+ .Include(x => x.Recipes)
+ .Include(x => x.Doctor)
+ .FirstOrDefault(x => x.Id == model.Id)
+ ?.GetViewModel;
+ context.Diseases.Remove(element);
+ context.SaveChanges();
+ return deletedElement;
+ }
+ return null;
+ }
+ }
+}
diff --git a/Hospital/HospitalDatabaseImplement/Implementss/DoctorStorage.cs b/Hospital/HospitalDatabaseImplement/Implementss/DoctorStorage.cs
new file mode 100644
index 0000000..fb5018a
--- /dev/null
+++ b/Hospital/HospitalDatabaseImplement/Implementss/DoctorStorage.cs
@@ -0,0 +1,114 @@
+using HospitalContracts.BindingModels;
+using HospitalContracts.SearchModels;
+using HospitalContracts.StoragesContracts;
+using HospitalContracts.ViewModels;
+using HospitalDatabaseImplement.Models;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HospitalDatabaseImplement.Implementss
+{
+ public class DoctorStorage : IDoctorStorage
+ {
+ public DoctorViewModel? GetElement(DoctorSearchModel model)
+ {
+ if (!model.Id.HasValue)
+ {
+ return null;
+ }
+ using var context = new HospitalDatabase();
+ return context.Doctors
+ .Include(x => x.Recipes)
+ .Include(x => x.Diseases)
+ .Include(x => x.Patients)
+ .FirstOrDefault(x => model.Id.HasValue && x.Id == model.Id)
+ ?.GetViewModel;
+ }
+
+ public List GetFilteredList(DoctorSearchModel model)
+ {
+ using var context = new HospitalDatabase();
+ if (!string.IsNullOrEmpty(model.Login))
+ {
+ return context.Doctors
+ .Include(x => x.Recipes)
+ .Include(x => x.Diseases)
+ .Include(x => x.Patients)
+ .Where(x => x.Login.Contains(model.Login))
+ .Select(x => x.GetViewModel)
+ .ToList();
+ }
+ return new();
+ }
+
+ public List GetFullList()
+ {
+ using var context = new HospitalDatabase();
+ return context.Doctors
+ .Include(x => x.Recipes)
+ .Include(x => x.Diseases)
+ .Include(x => x.Patients)
+ .Select(x => x.GetViewModel)
+ .ToList();
+ }
+
+ public DoctorViewModel? Insert(DoctorBindingModel model)
+ {
+ var newDoctor = Doctor.Create(model);
+ if (newDoctor == null)
+ {
+ return null;
+ }
+ using var context = new HospitalDatabase();
+ context.Doctors.Add(newDoctor);
+ context.SaveChanges();
+ return context.Doctors
+ .Include(x => x.Recipes)
+ .Include(x => x.Diseases)
+ .Include(x => x.Patients)
+ .FirstOrDefault(x => x.Id == newDoctor.Id)
+ ?.GetViewModel;
+ }
+
+ public DoctorViewModel? Update(DoctorBindingModel model)
+ {
+ using var context = new HospitalDatabase();
+ var doctor = context.Doctors.FirstOrDefault(x => x.Id == model.Id);
+ if (doctor == null)
+ {
+ return null;
+ }
+ doctor.Update(model);
+ context.SaveChanges();
+ return context.Doctors
+ .Include(x => x.Recipes)
+ .Include(x => x.Diseases)
+ .Include(x => x.Patients)
+ .FirstOrDefault(x => x.Id == model.Id)
+ ?.GetViewModel;
+ }
+
+ public DoctorViewModel? Delete(DoctorBindingModel model)
+ {
+ using var context = new HospitalDatabase();
+ var element = context.Doctors.FirstOrDefault(rec => rec.Id == model.Id);
+ if (element != null)
+ {
+ var deletedElement = context.Doctors
+ .Include(x => x.Recipes)
+ .Include(x => x.Diseases)
+ .Include(x => x.Patients)
+ .FirstOrDefault(x => x.Id == model.Id)
+ ?.GetViewModel;
+ context.Doctors.Remove(element);
+ context.SaveChanges();
+ return deletedElement;
+ }
+ return null;
+ }
+ }
+}
diff --git a/Hospital/HospitalDatabaseImplement/Implementss/PatientStorage.cs b/Hospital/HospitalDatabaseImplement/Implementss/PatientStorage.cs
new file mode 100644
index 0000000..4f6fcb6
--- /dev/null
+++ b/Hospital/HospitalDatabaseImplement/Implementss/PatientStorage.cs
@@ -0,0 +1,122 @@
+using HospitalContracts.BindingModels;
+using HospitalContracts.SearchModels;
+using HospitalContracts.StoragesContracts;
+using HospitalContracts.ViewModels;
+using HospitalDatabaseImplement.Models;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HospitalDatabaseImplement.Implementss
+{
+ public class PatientStorage : IPatientStorage
+ {
+ public PatientViewModel? GetElement(PatientSearchModel model)
+ {
+ if (string.IsNullOrEmpty(model.FIO) && !model.Id.HasValue)
+ {
+ return null;
+ }
+ using var context = new HospitalDatabase();
+ return context.Patients
+ .Include(x => x.Doctor)
+ .Include(x => x.Recipes)
+ .ThenInclude(x => x.Recipe)
+ .FirstOrDefault(x => ((!string.IsNullOrEmpty(model.FIO) && x.FIO == model.FIO)
+ || (model.Id.HasValue && x.Id == model.Id)))?.GetViewModel;
+ }
+
+ public List GetFilteredList(PatientSearchModel model)
+ {
+ using var context = new HospitalDatabase();
+ if (!string.IsNullOrEmpty(model.FIO) )
+ {
+ return context.Patients
+ .Include(x => x.Doctor)
+ .Include(x => x.Recipes)
+ .ThenInclude(x => x.Recipe)
+ .Where(x => (x.Id == model.Id)).ToList()
+ .Select(x => x.GetViewModel).ToList();
+ }
+ else if (model.DoctorId.HasValue)
+ {
+ return context.Patients
+ .Include(x => x.Doctor)
+ .Include(x => x.Recipes)
+ .ThenInclude(x => x.Recipe)
+ .Where(x => x.DoctorId == model.DoctorId)
+ .Select(x => x.GetViewModel).ToList();
+ }
+ else
+ {
+ return new();
+ }
+ }
+
+ public List GetFullList()
+ {
+ using var context = new HospitalDatabase();
+ return context.Patients
+ .Include(x => x.Doctor)
+ .Include(x => x.Recipes)
+ .ThenInclude(x => x.Recipe).ToList()
+ .Select(x => x.GetViewModel).ToList();
+ }
+
+ public PatientViewModel? Insert(PatientBindingModel model)
+ {
+ using var context = new HospitalDatabase();
+ var newPatient = Patient.Create(context, model);
+ if (newPatient == null)
+ {
+ return null;
+ }
+ context.Patients.Add(newPatient);
+ context.SaveChanges();
+ return newPatient.GetViewModel;
+ }
+
+ public PatientViewModel? Update(PatientBindingModel model)
+ {
+ using var context = new HospitalDatabase();
+ using var transaction = context.Database.BeginTransaction();
+ try
+ {
+ var patient = context.Patients.FirstOrDefault(rec => rec.Id == model.Id);
+ if (patient == null)
+ {
+ return null;
+ }
+ patient.Update(model);
+ context.SaveChanges();
+ patient.UpdateRecipes(context, model);
+ transaction.Commit();
+ return patient.GetViewModel;
+ }
+ catch
+ {
+ transaction.Rollback();
+ throw;
+ }
+ }
+
+ public PatientViewModel? Delete(PatientBindingModel model)
+ {
+ using var context = new HospitalDatabase();
+ var element = context.Patients
+ .Include(x => x.Doctor)
+ .Include(x => x.Recipes)
+ .FirstOrDefault(rec => rec.Id == model.Id);
+ if (element != null)
+ {
+ context.Patients.Remove(element);
+ context.SaveChanges();
+ return element.GetViewModel;
+ }
+ return null;
+ }
+ }
+}
diff --git a/Hospital/HospitalDatabaseImplement/Implementss/ProcedureStorage.cs b/Hospital/HospitalDatabaseImplement/Implementss/ProcedureStorage.cs
new file mode 100644
index 0000000..2094aaf
--- /dev/null
+++ b/Hospital/HospitalDatabaseImplement/Implementss/ProcedureStorage.cs
@@ -0,0 +1,108 @@
+using HospitalContracts.BindingModels;
+using HospitalContracts.SearchModels;
+using HospitalContracts.StoragesContracts;
+using HospitalContracts.ViewModels;
+using HospitalDatabaseImplement.Modelss;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HospitalDatabaseImplement.Implementss
+{
+ public class ProcedureStorage : IProcedureStorage
+ {
+ public List GetFullList()
+ {
+ using var context = new HospitalDatabase();
+ return context.Procedures
+ .Include(x => x.Medicines)
+ .Select(x => x.GetViewModel)
+ .ToList();
+ }
+
+ public List GetFilteredList(ProcedureSearchModel model)
+ {
+ using var context = new HospitalDatabase();
+ if (string.IsNullOrEmpty(model.Name) && !model.Id.HasValue)
+ {
+ return context.Procedures
+ .Include(x => x.Medicines)
+ .Where(x => x.Name.Contains(model.Name))
+ .Select(x => x.GetViewModel).ToList();
+ }
+ else
+ {
+ return new();
+ }
+ }
+
+ public ProcedureViewModel? GetElement(ProcedureSearchModel model)
+ {
+ if (string.IsNullOrEmpty(model.Name) && !model.Id.HasValue)
+ {
+ return null;
+ }
+ using var context = new HospitalDatabase();
+ return context.Procedures
+ .Include(x => x.Medicines)
+ .FirstOrDefault(x => (!string.IsNullOrEmpty(model.Name) && x.Name == model.Name) || (model.Id.HasValue && x.Id == model.Id))
+ ?.GetViewModel;
+ }
+
+ public ProcedureViewModel? Insert(ProcedureBindingModel model)
+ {
+ using var context = new HospitalDatabase();
+ var newProcedure = Procedure.Create(context, model);
+ if (newProcedure == null)
+ {
+ return null;
+ }
+ context.Procedures.Add(newProcedure);
+ context.SaveChanges();
+ return newProcedure.GetViewModel;
+ }
+
+ public ProcedureViewModel? Update(ProcedureBindingModel model)
+ {
+ using var context = new HospitalDatabase();
+ using var transaction = context.Database.BeginTransaction();
+ try
+ {
+ var procedure = context.Procedures
+ .FirstOrDefault(rec => rec.Id == model.Id);
+ if (procedure == null)
+ {
+ return null;
+ }
+ procedure.Update(model);
+ context.SaveChanges();
+ procedure.UpdateMedicines(context, model);
+ transaction.Commit();
+ return procedure.GetViewModel;
+ }
+ catch
+ {
+ transaction.Rollback();
+ throw;
+ }
+ }
+
+ public ProcedureViewModel? Delete(ProcedureBindingModel model)
+ {
+ using var context = new HospitalDatabase();
+ var element = context.Procedures
+ .Include(x => x.Medicines)
+ .FirstOrDefault(rec => rec.Id == model.Id);
+ if (element != null)
+ {
+ context.Procedures.Remove(element);
+ context.SaveChanges();
+ return element.GetViewModel;
+ }
+ return null;
+ }
+ }
+}
diff --git a/Hospital/HospitalDatabaseImplement/Implementss/RecipeStorage.cs b/Hospital/HospitalDatabaseImplement/Implementss/RecipeStorage.cs
new file mode 100644
index 0000000..3e79556
--- /dev/null
+++ b/Hospital/HospitalDatabaseImplement/Implementss/RecipeStorage.cs
@@ -0,0 +1,123 @@
+using HospitalContracts.BindingModels;
+using HospitalContracts.SearchModels;
+using HospitalContracts.StoragesContracts;
+using HospitalContracts.ViewModels;
+using HospitalDatabaseImplement.Modelss;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HospitalDatabaseImplement.Implementss
+{
+ public class RecipeStorage : IRecipeStorage
+ {
+ public List GetFullList()
+ {
+ using var context = new HospitalDatabase();
+ return context.Recipes
+ .Include(x => x.Doctor)
+ .Include(x => x.DiseaseId)
+ .Select(x => x.GetViewModel).ToList();
+ }
+
+ public List GetFilteredList(RecipeSearchModel model)
+ {
+ using var context = new HospitalDatabase();
+ if (!model.Id.HasValue)
+ {
+ return context.Recipes
+ .Include(x => x.Doctor)
+ .Include(x => x.Medicines)
+ .ThenInclude(x => x.Medicine)
+ .Where(x => x.Id == model.Id).ToList()
+ .Select(x => x.GetViewModel).ToList();
+ }
+ else if (model.DoctorId.HasValue)
+ {
+ return context.Recipes
+ .Include(x => x.Doctor)
+ .Include(x => x.Medicines)
+ .ThenInclude(x => x.Medicine)
+ .Where(x => x.DoctorId == model.DoctorId)
+ .Select(x => x.GetViewModel).ToList();
+ }
+ else
+ {
+ return new();
+ }
+ }
+
+ public RecipeViewModel? GetElement(RecipeSearchModel model)
+ {
+ if (!model.Id.HasValue)
+ {
+ return null;
+ }
+ using var context = new HospitalDatabase();
+ return context.Recipes
+ .Include(x => x.Doctor)
+ .Include(x => x.Medicines)
+ .ThenInclude(x => x.Medicine)
+ .FirstOrDefault(x => model.Id.HasValue && x.Id == model.Id)
+ ?.GetViewModel;
+ }
+
+
+ public RecipeViewModel? Insert(RecipeBindingModel model)
+ {
+ using var context = new HospitalDatabase();
+ var newRecipe = Recipe.Create(context, model);
+ if (newRecipe == null)
+ {
+ return null;
+ }
+ context.Recipes.Add(newRecipe);
+ context.SaveChanges();
+ return newRecipe.GetViewModel;
+ }
+
+ public RecipeViewModel? Update(RecipeBindingModel model)
+ {
+ using var context = new HospitalDatabase();
+ using var transaction = context.Database.BeginTransaction();
+ try
+ {
+ var recipe = context.Recipes
+ .Include(x => x.Doctor)
+ .FirstOrDefault(rec => rec.Id == model.Id);
+ if (recipe == null)
+ {
+ return null;
+ }
+ recipe.Update(model);
+ context.SaveChanges();
+ recipe.UpdateMedicines(context, model);
+ transaction.Commit();
+ return recipe.GetViewModel;
+ }
+ catch
+ {
+ transaction.Rollback();
+ throw;
+ }
+ }
+ public RecipeViewModel? Delete(RecipeBindingModel model)
+ {
+ using var context = new HospitalDatabase();
+ var element = context.Recipes
+ .Include(x => x.Doctor)
+ .Include(x => x.Medicines)
+ .FirstOrDefault(rec => rec.Id == model.Id);
+ if (element != null)
+ {
+ context.Recipes.Remove(element);
+ context.SaveChanges();
+ return element.GetViewModel;
+ }
+ return null;
+ }
+ }
+}
diff --git a/Hospital/HospitalDatabaseImplement/Models/Medicine.cs b/Hospital/HospitalDatabaseImplement/Models/Medicine.cs
index cbeb203..b5de1e2 100644
--- a/Hospital/HospitalDatabaseImplement/Models/Medicine.cs
+++ b/Hospital/HospitalDatabaseImplement/Models/Medicine.cs
@@ -8,6 +8,7 @@ using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using HospitalDatabaseImplement.Models;
namespace HospitalDatabaseImplement.Modelss
{
@@ -23,7 +24,7 @@ namespace HospitalDatabaseImplement.Modelss
public int PharmacistId { get; set; }
[ForeignKey("MedicineId")]
- public virtual List RecipeMedicines { get; set; } = new();
+ public virtual List RecipeMedicines { get; set; } = new();
public static Medicine? Create(MedicineBindingModel model)
{
diff --git a/Hospital/HospitalDatabaseImplement/Models/MedicineRecipes.cs b/Hospital/HospitalDatabaseImplement/Models/MedicineRecipes.cs
deleted file mode 100644
index 65104e8..0000000
--- a/Hospital/HospitalDatabaseImplement/Models/MedicineRecipes.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace HospitalDatabaseImplement.Modelss
-{
- public class MedicineRecipes
- {
- }
-}
diff --git a/Hospital/HospitalDatabaseImplement/Models/PatientProcedure.cs b/Hospital/HospitalDatabaseImplement/Models/PatientProcedure.cs
new file mode 100644
index 0000000..87f6313
--- /dev/null
+++ b/Hospital/HospitalDatabaseImplement/Models/PatientProcedure.cs
@@ -0,0 +1,25 @@
+using HospitalDatabaseImplement.Modelss;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HospitalDatabaseImplement.Models
+{
+ public class PatientProcedure
+ {
+ public int Id { get; set; }
+
+ [Required]
+ public int PatientId { get; set; }
+
+ [Required]
+ public int ProcedureId { get; set; }
+
+ public virtual Patient Patient { get; set; } = new();
+
+ public virtual Procedure Procedure { get; set; } = new();
+ }
+}
diff --git a/Hospital/HospitalDatabaseImplement/Models/PatientRecipe.cs b/Hospital/HospitalDatabaseImplement/Models/PatientRecipe.cs
new file mode 100644
index 0000000..a4464ba
--- /dev/null
+++ b/Hospital/HospitalDatabaseImplement/Models/PatientRecipe.cs
@@ -0,0 +1,26 @@
+using HospitalDatabaseImplement.Modelss;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HospitalDatabaseImplement.Models
+{
+ public class PatientRecipe
+ {
+ public int Id { get; set; }
+
+ [Required]
+ public int PatientId { get; set; }
+
+ [Required]
+ public int RecipeId { get; set; }
+
+ public virtual Patient Patient { get; set; } = new();
+
+ public virtual Recipe Recipe { get; set; } = new();
+
+ }
+}
diff --git a/Hospital/HospitalDatabaseImplement/Models/Procedure.cs b/Hospital/HospitalDatabaseImplement/Models/Procedure.cs
index aab8a53..24ecd34 100644
--- a/Hospital/HospitalDatabaseImplement/Models/Procedure.cs
+++ b/Hospital/HospitalDatabaseImplement/Models/Procedure.cs
@@ -1,12 +1,98 @@
-using System;
+using HospitalContracts.BindingModels;
+using HospitalContracts.ViewModels;
+using HospitalDatabaseImplement.Models;
+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;
namespace HospitalDatabaseImplement.Modelss
{
- public class Procedure
+ // TODO переделать под все необходимые атрибуты фармацевту
+ public class Procedure : IProcedureModel
{
+ public int Id { get; set; }
+
+ [Required]
+ [MaxLength(50)]
+ public string Name { get; set; } = string.Empty;
+
+ [ForeignKey("ProcedureId")]
+ public virtual List PatientProcedures { get; set; } = new();
+
+ private Dictionary? _procedureMedicines = null;
+
+ [NotMapped]
+ public Dictionary ProcedureMedicines
+ {
+ get
+ {
+ if (_procedureMedicines == null)
+ {
+ _procedureMedicines = Medicines.ToDictionary(recPM => recPM.MedicineId, recPM => (recPM.Medicine as IMedicineModel));
+ }
+ return _procedureMedicines;
+ }
+ }
+
+ [ForeignKey("ProcedureId")]
+ public virtual List Medicines { get; set; } = new();
+
+ public static Procedure Create(HospitalDatabase context, ProcedureBindingModel model)
+ {
+ return new Procedure()
+ {
+ Id = model.Id,
+ Name = model.Name,
+ Medicines = model.ProcedureMedicines.Select(x => new ProcedureMedicine
+ {
+ Medicine = context.Medicines.First(y => y.Id == x.Key)
+ }).ToList()
+ };
+ }
+
+ public void Update(ProcedureBindingModel model)
+ {
+ Name = model.Name;
+ }
+
+ public ProcedureViewModel GetViewModel => new()
+ {
+ Id = Id,
+ Name = Name,
+ ProcedureMedicines = ProcedureMedicines
+ };
+
+ public DateTime Date => throw new NotImplementedException();
+
+ public int DescriptionOfTheProcedureId => throw new NotImplementedException();
+
+ public int PharmacistId => throw new NotImplementedException();
+
+ public void UpdateMedicines(HospitalDatabase context, ProcedureBindingModel model)
+ {
+ var procedureMedicines = context.ProcedureMedicines.Where(rec => rec.ProcedureId == model.Id).ToList();
+ if (procedureMedicines != null)
+ { // удалили те, которых нет в модели
+ context.ProcedureMedicines.RemoveRange(procedureMedicines.Where(rec => !model.ProcedureMedicines.ContainsKey(rec.MedicineId)));
+ context.SaveChanges();
+ }
+ var procedure = context.Procedures.First(x => x.Id == Id);
+ foreach (var pm in model.ProcedureMedicines)
+ {
+ context.ProcedureMedicines.Add(new ProcedureMedicine
+ {
+ Procedure = procedure,
+ Medicine = context.Medicines.First(x => x.Id == pm.Key)
+ });
+ context.SaveChanges();
+ }
+ _procedureMedicines = null;
+ }
+
}
}
diff --git a/Hospital/HospitalDatabaseImplement/Models/ProcedureMedicine.cs b/Hospital/HospitalDatabaseImplement/Models/ProcedureMedicine.cs
index b3a93a7..7f275a2 100644
--- a/Hospital/HospitalDatabaseImplement/Models/ProcedureMedicine.cs
+++ b/Hospital/HospitalDatabaseImplement/Models/ProcedureMedicine.cs
@@ -12,12 +12,12 @@ namespace HospitalDatabaseImplement.Modelss
public int Id { get; set; }
[Required]
- public int RecipeId { get; set; }
+ public int ProcedureId { get; set; }
[Required]
public int MedicineId { get; set; }
- public virtual Recipe Recipe { get; set; } = new();
+ public virtual Procedure Procedure { get; set; } = new();
public virtual Medicine Medicine { get; set; } = new();
}
diff --git a/Hospital/HospitalDatabaseImplement/Models/Recipe.cs b/Hospital/HospitalDatabaseImplement/Models/Recipe.cs
index 5e2b569..aa1d074 100644
--- a/Hospital/HospitalDatabaseImplement/Models/Recipe.cs
+++ b/Hospital/HospitalDatabaseImplement/Models/Recipe.cs
@@ -1,12 +1,102 @@
-using System;
+using HospitalContracts.BindingModels;
+using HospitalContracts.ViewModels;
+using HospitalDatabaseImplement.Models;
+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;
namespace HospitalDatabaseImplement.Modelss
{
- public class Recipe
+ public class Recipe : IRecipeModel
{
+ public int Id { get; set; }
+
+ public int DoctorId { get; private set; }
+
+ public virtual Doctor Doctor { get; set; }
+
+ public int DiseaseId { get; private set; }
+
+ public virtual Disease Disease { get; set; }
+
+ [Required]
+ public DateTime IssueDate { get; private set; } = DateTime.Now;
+
+ [Required]
+ public string Description { get; private set; } = string.Empty;
+
+ private Dictionary? _recipeMedicines = null;
+
+ [NotMapped]
+ public Dictionary RecipeMedicines
+ {
+ get
+ {
+ if (_recipeMedicines == null)
+ {
+ _recipeMedicines = Medicines.ToDictionary(recRM => recRM.MedicineId, recRM => (recRM.Medicine as IMedicineModel));
+ }
+ return _recipeMedicines;
+ }
+ }
+
+ [ForeignKey("RecipeId")]
+ public virtual List Medicines { get; set; } = new();
+
+ public static Recipe Create(HospitalDatabase context, RecipeBindingModel model)
+ {
+ return new Recipe()
+ {
+ Id = model.Id,
+ IssueDate = model.IssueDate,
+ Description = model.Description,
+ DiseaseId = model.DiseaseId,
+ DoctorId = model.DoctorId,
+ Doctor = context.Doctors.First(x => x.Id == model.DoctorId),
+ Medicines = model.RecipeMedicines.Select(x => new RecipeMedicine
+ {
+ Medicine = context.Medicines.First(y => y.Id == x.Key),
+ }).ToList()
+ };
+ }
+
+ public void Update(RecipeBindingModel model)
+ {
+ IssueDate = model.IssueDate;
+ Description = model.Description;
+ }
+
+ public RecipeViewModel GetViewModel => new()
+ {
+ Id = Id,
+ IssueDate = IssueDate,
+ RecipeMedicines = RecipeMedicines
+ };
+
+ public void UpdateMedicines(HospitalDatabase context, RecipeBindingModel model)
+ {
+ var recipeMedicines = context.RecipeMedicines.Where(rec => rec.RecipeId == model.Id).ToList();
+ if (recipeMedicines != null)
+ { // удалили те, которых нет в модели
+ context.RecipeMedicines.RemoveRange(recipeMedicines.Where(rec => !model.RecipeMedicines.ContainsKey(rec.MedicineId)));
+ context.SaveChanges();
+ }
+ var recipe = context.Recipes.First(x => x.Id == Id);
+ foreach (var pr in model.RecipeMedicines)
+ {
+ context.RecipeMedicines.Add(new RecipeMedicine
+ {
+ Recipe = recipe,
+ Medicine = context.Medicines.First(x => x.Id == pr.Key),
+ });
+ context.SaveChanges();
+ }
+ _recipeMedicines = null;
+ }
}
}
diff --git a/Hospital/HospitalDatabaseImplement/Models/RecipeMedicine.cs b/Hospital/HospitalDatabaseImplement/Models/RecipeMedicine.cs
new file mode 100644
index 0000000..d7344c8
--- /dev/null
+++ b/Hospital/HospitalDatabaseImplement/Models/RecipeMedicine.cs
@@ -0,0 +1,25 @@
+using HospitalDatabaseImplement.Modelss;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HospitalDatabaseImplement.Models
+{
+ public class RecipeMedicine
+ {
+ public int Id { get; set; }
+
+ [Required]
+ public int RecipeId { get; set; }
+
+ [Required]
+ public int MedicineId { get; set; }
+
+ public virtual Recipe Recipe { get; set; } = new();
+
+ public virtual Medicine Medicine { get; set; } = new();
+ }
+}