From c07422e0404c2236da65b30dc10bcdda5ba86934 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=BA=D0=B0=D1=82=D0=B5=D1=80=D0=B8=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=A0=D0=BE=D0=B3=D0=B0=D1=88=D0=BE=D0=B2=D0=B0?= Date: Tue, 20 Jun 2023 18:43:55 +0400 Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5?= =?UTF-8?q?=D1=82=20=D0=B2=D0=BE=D1=80=D0=B4=20=D0=B8=20=D1=8D=D0=BA=D1=81?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessLogics/ReportLogic.cs | 10 +- .../OfficePackage/AbstractSaveToExcel.cs | 4 +- .../OfficePackage/AbstractSaveToWord.cs | 3 +- .../OfficePackage/HelperModels/PdfInfo.cs | 2 +- Hospital/HospitalRestApi/Program.cs | 8 ++ .../BindingModels/KurseBindingModel.cs | 2 +- .../BusinessLogicsContracts/IReportLogic.cs | 2 +- .../ViewModels/KurseViewModel.cs | 6 +- ...ewModel.cs => ReportMedicinesViewModel.cs} | 2 +- .../Implements/KurseStorage.cs | 31 +++-- HospitalDataBaseImplements/LoaderFromXML.cs | 30 ++--- ... 20230620143135_InitialCreate.Designer.cs} | 56 ++++++--- ...ate.cs => 20230620143135_InitialCreate.cs} | 110 +++++++++++------- .../HospitalDatabaseModelSnapshot.cs | 54 ++++++--- HospitalDataBaseImplements/Models/Kurses.cs | 72 ++++++++---- .../Models/Medicines.cs | 3 + HospitalDataModels/Models/IKurseModel.cs | 2 +- 17 files changed, 266 insertions(+), 131 deletions(-) rename HospitalContracts/ViewModels/{ReportRecipeMedicineViewModel.cs => ReportMedicinesViewModel.cs} (87%) rename HospitalDataBaseImplements/Migrations/{20230525103233_InitialCreate.Designer.cs => 20230620143135_InitialCreate.Designer.cs} (92%) rename HospitalDataBaseImplements/Migrations/{20230525103233_InitialCreate.cs => 20230620143135_InitialCreate.cs} (91%) diff --git a/Hospital/HospitalBusinessLogic/BusinessLogics/ReportLogic.cs b/Hospital/HospitalBusinessLogic/BusinessLogics/ReportLogic.cs index 63928be..e190306 100644 --- a/Hospital/HospitalBusinessLogic/BusinessLogics/ReportLogic.cs +++ b/Hospital/HospitalBusinessLogic/BusinessLogics/ReportLogic.cs @@ -38,9 +38,9 @@ namespace HospitalBusinessLogic.BusinessLogics } var kurses = _kurseStorage.GetFullList(); List medicines = new List(); - foreach (var memId in Ids) + foreach (var mId in Ids) { - var res = _medicineStorage.GetElement(new MedicinesSearchModel { Id = memId }); + var res = _medicineStorage.GetElement(new MedicinesSearchModel { Id = mId }); if (res != null) { medicines.Add(res); @@ -56,7 +56,7 @@ namespace HospitalBusinessLogic.BusinessLogics }; foreach (var kurse in kurses) { - if (kurse.KurseMedicine.ContainsKey(medicine.Id)) + if (kurse.KurseMedicines.ContainsKey(medicine.Id)) { record.Kurses.Add(new Tuple(kurse.Id, kurse.Duration)); } @@ -111,7 +111,7 @@ namespace HospitalBusinessLogic.BusinessLogics // return listAll; //} - public List GetRecipeMedicine(ReportBindingModel model) + public List GetRecipeMedicine(ReportBindingModel model) { throw new NotImplementedException(); } @@ -131,7 +131,7 @@ namespace HospitalBusinessLogic.BusinessLogics _saveToWord.CreateDoc(new WordInfo { FileName = model.FileName, - Title = "Список конференций", + Title = "Список курсов", KurseMedicines = GetKurseMedicines(model.Ids) }); } diff --git a/Hospital/HospitalBusinessLogic/OfficePackage/AbstractSaveToExcel.cs b/Hospital/HospitalBusinessLogic/OfficePackage/AbstractSaveToExcel.cs index 3899cb5..7250185 100644 --- a/Hospital/HospitalBusinessLogic/OfficePackage/AbstractSaveToExcel.cs +++ b/Hospital/HospitalBusinessLogic/OfficePackage/AbstractSaveToExcel.cs @@ -49,17 +49,15 @@ namespace HospitalBusinessLogic.OfficePackage Text = kurse.Item1.ToString(), StyleInfo = ExcelStyleInfoType.TextWithBroder }); - rowIndex++; InsertCellInWorksheet(new ExcelCellParameters { - ColumnName = "B", + ColumnName = "C", RowIndex = rowIndex, Text = kurse.Item2, StyleInfo = ExcelStyleInfoType.TextWithBroder }); rowIndex++; } - rowIndex++; } SaveExcel(info); diff --git a/Hospital/HospitalBusinessLogic/OfficePackage/AbstractSaveToWord.cs b/Hospital/HospitalBusinessLogic/OfficePackage/AbstractSaveToWord.cs index 3b84185..09ff820 100644 --- a/Hospital/HospitalBusinessLogic/OfficePackage/AbstractSaveToWord.cs +++ b/Hospital/HospitalBusinessLogic/OfficePackage/AbstractSaveToWord.cs @@ -48,8 +48,9 @@ namespace HospitalBusinessLogic.OfficePackage } }); } - SaveWord(info); + } + SaveWord(info); } /// /// Создание doc-файла diff --git a/Hospital/HospitalBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs b/Hospital/HospitalBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs index fe4e4bc..34b4a77 100644 --- a/Hospital/HospitalBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs +++ b/Hospital/HospitalBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs @@ -13,6 +13,6 @@ namespace HospitalBusinessLogic.OfficePackage.HelperModels public string Title { get; set; } = string.Empty; public DateTime DateFrom { get; set; } public DateTime DateTo { get; set; } - public List RecipeMedicine { get; set; } = new(); + public List RecipeMedicine { get; set; } = new(); } } diff --git a/Hospital/HospitalRestApi/Program.cs b/Hospital/HospitalRestApi/Program.cs index 31d2001..fe63820 100644 --- a/Hospital/HospitalRestApi/Program.cs +++ b/Hospital/HospitalRestApi/Program.cs @@ -1,4 +1,6 @@ using HospitalBusinessLogic.BusinessLogics; +using HospitalBusinessLogic.OfficePackage; +using HospitalBusinessLogic.OfficePackage.Implements; using HospitalContracts.BusinessLogicsContracts; using HospitalContracts.StoragesContracts; using HospitalDataBaseImplements; @@ -27,6 +29,11 @@ builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); +builder.Services.AddTransient(); + +builder.Services.AddTransient(); +builder.Services.AddTransient(); +builder.Services.AddTransient(); builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle @@ -44,6 +51,7 @@ builder.Services.AddSwaggerGen(c => var app = builder.Build(); LoaderFromXML.LoadSymptoms(); +LoaderFromXML.LoadKurses(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) diff --git a/HospitalContracts/BindingModels/KurseBindingModel.cs b/HospitalContracts/BindingModels/KurseBindingModel.cs index c4669dc..d9bab46 100644 --- a/HospitalContracts/BindingModels/KurseBindingModel.cs +++ b/HospitalContracts/BindingModels/KurseBindingModel.cs @@ -12,7 +12,7 @@ namespace HospitalContracts.BindingModels public int Id { get; set; } public string Duration { get; set; } = string.Empty; public int CountInDay { get; set; } - public Dictionary KurseMedicine + public Dictionary KurseMedicines { get; set; diff --git a/HospitalContracts/BusinessLogicsContracts/IReportLogic.cs b/HospitalContracts/BusinessLogicsContracts/IReportLogic.cs index 979590e..f4c4781 100644 --- a/HospitalContracts/BusinessLogicsContracts/IReportLogic.cs +++ b/HospitalContracts/BusinessLogicsContracts/IReportLogic.cs @@ -20,7 +20,7 @@ namespace HospitalContracts.BusinessLogicsContracts /// /// /// - List GetRecipeMedicine(ReportBindingModel model); + List GetRecipeMedicine(ReportBindingModel model); /// /// Сохранение компонент в файл-Word /// diff --git a/HospitalContracts/ViewModels/KurseViewModel.cs b/HospitalContracts/ViewModels/KurseViewModel.cs index f7e338c..b6abb1e 100644 --- a/HospitalContracts/ViewModels/KurseViewModel.cs +++ b/HospitalContracts/ViewModels/KurseViewModel.cs @@ -16,7 +16,7 @@ namespace HospitalContracts.ViewModels public string Duration { get; set; } = string.Empty; [DisplayName("Срок приема")] public int CountInDay { get; set; } - public Dictionary KurseMedicine + public Dictionary KurseMedicines { get; set; @@ -24,9 +24,9 @@ namespace HospitalContracts.ViewModels public KurseViewModel() { } [JsonConstructor] - public KurseViewModel(Dictionary KurseMedicine) + public KurseViewModel(Dictionary KurseMedicines) { - this.KurseMedicine = KurseMedicine.ToDictionary(x => x.Key, x => x.Value as IMedicinesModel); + this.KurseMedicines = KurseMedicines.ToDictionary(x => x.Key, x => x.Value as IMedicinesModel); } } } diff --git a/HospitalContracts/ViewModels/ReportRecipeMedicineViewModel.cs b/HospitalContracts/ViewModels/ReportMedicinesViewModel.cs similarity index 87% rename from HospitalContracts/ViewModels/ReportRecipeMedicineViewModel.cs rename to HospitalContracts/ViewModels/ReportMedicinesViewModel.cs index dd80ad4..75c12fd 100644 --- a/HospitalContracts/ViewModels/ReportRecipeMedicineViewModel.cs +++ b/HospitalContracts/ViewModels/ReportMedicinesViewModel.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace HospitalContracts.ViewModels { - public class ReportRecipeMedicineViewModel + public class ReportMedicinesViewModel { public int Id { get; set; } public DateTime DateCreate { get; set; } diff --git a/HospitalDataBaseImplements/Implements/KurseStorage.cs b/HospitalDataBaseImplements/Implements/KurseStorage.cs index 948e74b..560d618 100644 --- a/HospitalDataBaseImplements/Implements/KurseStorage.cs +++ b/HospitalDataBaseImplements/Implements/KurseStorage.cs @@ -60,12 +60,13 @@ namespace HospitalDataBaseImplements.Implements public KurseViewModel? Insert(KurseBindingModel model) { - var newKurse = Kurses.Create(model); + using var context = new HospitalDatabase(); + var newKurse = Kurses.Create(context, model); if (newKurse == null) { return null; } - using var context = new HospitalDatabase(); + context.Kurse.Add(newKurse); context.SaveChanges(); return context.Kurse @@ -77,14 +78,28 @@ namespace HospitalDataBaseImplements.Implements public KurseViewModel? Update(KurseBindingModel model) { using var context = new HospitalDatabase(); - var kurse = context.Kurse.FirstOrDefault(x => x.Id == model.Id); - if (kurse == null) + using var transaction = context.Database.BeginTransaction(); + try { - return null; + var kurse = context.Kurse.FirstOrDefault(x => x.Id == model.Id); + if (kurse == null) + { + return null; + } + kurse.Update(model); + context.SaveChanges(); + if (model.KurseMedicines != null) + { + kurse.UpdateMedicines(context, model); + } + transaction.Commit(); + return kurse.GetViewModel; + } + catch + { + transaction.Rollback(); + throw; } - kurse.Update(model); - context.SaveChanges(); - return kurse.GetViewModel; } } } diff --git a/HospitalDataBaseImplements/LoaderFromXML.cs b/HospitalDataBaseImplements/LoaderFromXML.cs index 25aec0e..a57726e 100644 --- a/HospitalDataBaseImplements/LoaderFromXML.cs +++ b/HospitalDataBaseImplements/LoaderFromXML.cs @@ -12,7 +12,7 @@ namespace HospitalDataBaseImplements { // private static readonly string IllnessFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "XMLData\\Illness.xml"); private static readonly string SymptomsFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "XMLData\\Symptoms.xml"); - // private static readonly string KursesFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "XMLData\\Kurses.xml"); + private static readonly string KursesFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "XMLData\\Kurses.xml"); private static List? LoadData(string filename, string xmlNodeName, Func selectFunction) { @@ -40,23 +40,23 @@ namespace HospitalDataBaseImplements //} /// - /// Чтение лечений из XML-файла + /// Чтение курсов из XML-файла /// /// - //public static void LoadKurses() // (запуск после загрузки симптомов) - //{ - // using var context = new HospitalDatabase(); - // if (context.Kurse.ToList().Count > 0) - // return; - // //var list = LoadData(KursesFileName, "Kurses", x => Kurses.Create(context, x)!)!; - // //list.ForEach(x => - // //{ - // // context.Kurse.Add(x); - // //}); - // //context.SaveChanges(); - //} + public static void LoadKurses() // (запуск после загрузки симптомов) + { + using var context = new HospitalDatabase(); + if (context.Kurse.ToList().Count > 0) + return; + var list = LoadData(KursesFileName, "Kurses", x => Kurses.Create(context, x)!)!; + list.ForEach(x => + { + context.Kurse.Add(x); + }); + context.SaveChanges(); + } /// - /// Чтение поцедур из XML-файла + /// Чтение симптомов из XML-файла /// /// public static void LoadSymptoms()// (запуск после старта программы) diff --git a/HospitalDataBaseImplements/Migrations/20230525103233_InitialCreate.Designer.cs b/HospitalDataBaseImplements/Migrations/20230620143135_InitialCreate.Designer.cs similarity index 92% rename from HospitalDataBaseImplements/Migrations/20230525103233_InitialCreate.Designer.cs rename to HospitalDataBaseImplements/Migrations/20230620143135_InitialCreate.Designer.cs index d6556ce..592494e 100644 --- a/HospitalDataBaseImplements/Migrations/20230525103233_InitialCreate.Designer.cs +++ b/HospitalDataBaseImplements/Migrations/20230620143135_InitialCreate.Designer.cs @@ -12,7 +12,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace HospitalDataBaseImplements.Migrations { [DbContext(typeof(HospitalDatabase))] - [Migration("20230525103233_InitialCreate")] + [Migration("20230620143135_InitialCreate")] partial class InitialCreate { /// @@ -117,6 +117,29 @@ namespace HospitalDataBaseImplements.Migrations b.ToTable("IllnessSymptomses"); }); + modelBuilder.Entity("HospitalDataBaseImplements.Models.KurseMedicines", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("KurseId") + .HasColumnType("int"); + + b.Property("MedicineId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("KurseId"); + + b.HasIndex("MedicineId"); + + b.ToTable("KurseMedicines"); + }); + modelBuilder.Entity("HospitalDataBaseImplements.Models.Kurses", b => { b.Property("Id") @@ -132,17 +155,8 @@ namespace HospitalDataBaseImplements.Migrations .IsRequired() .HasColumnType("nvarchar(max)"); - b.Property("MedicinesId") - .HasColumnType("int"); - - b.Property("MedicinesName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - b.HasKey("Id"); - b.HasIndex("MedicinesId"); - b.ToTable("Kurse"); }); @@ -336,15 +350,23 @@ namespace HospitalDataBaseImplements.Migrations b.Navigation("Symptoms"); }); - modelBuilder.Entity("HospitalDataBaseImplements.Models.Kurses", b => + modelBuilder.Entity("HospitalDataBaseImplements.Models.KurseMedicines", b => { - b.HasOne("HospitalDataBaseImplements.Models.Medicines", "Medicines") - .WithMany() - .HasForeignKey("MedicinesId") + b.HasOne("HospitalDataBaseImplements.Models.Kurses", "Kurse") + .WithMany("Medicines") + .HasForeignKey("KurseId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - b.Navigation("Medicines"); + b.HasOne("HospitalDataBaseImplements.Models.Medicines", "Medicine") + .WithMany("KurseMedicines") + .HasForeignKey("MedicineId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Kurse"); + + b.Navigation("Medicine"); }); modelBuilder.Entity("HospitalDataBaseImplements.Models.Medicines", b => @@ -436,10 +458,14 @@ namespace HospitalDataBaseImplements.Migrations modelBuilder.Entity("HospitalDataBaseImplements.Models.Kurses", b => { b.Navigation("IllnessKurses"); + + b.Navigation("Medicines"); }); modelBuilder.Entity("HospitalDataBaseImplements.Models.Medicines", b => { + b.Navigation("KurseMedicines"); + b.Navigation("Procedures"); }); diff --git a/HospitalDataBaseImplements/Migrations/20230525103233_InitialCreate.cs b/HospitalDataBaseImplements/Migrations/20230620143135_InitialCreate.cs similarity index 91% rename from HospitalDataBaseImplements/Migrations/20230525103233_InitialCreate.cs rename to HospitalDataBaseImplements/Migrations/20230620143135_InitialCreate.cs index 024549c..4827fa5 100644 --- a/HospitalDataBaseImplements/Migrations/20230525103233_InitialCreate.cs +++ b/HospitalDataBaseImplements/Migrations/20230620143135_InitialCreate.cs @@ -40,6 +40,20 @@ namespace HospitalDataBaseImplements.Migrations table.PrimaryKey("PK_Illnesses", x => x.Id); }); + migrationBuilder.CreateTable( + name: "Kurse", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Duration = table.Column(type: "nvarchar(max)", nullable: false), + CountInDay = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Kurse", x => x.Id); + }); + migrationBuilder.CreateTable( name: "Symptomses", columns: table => new @@ -96,6 +110,32 @@ namespace HospitalDataBaseImplements.Migrations onDelete: ReferentialAction.Cascade); }); + migrationBuilder.CreateTable( + name: "IllnessKurse", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + IllnessId = table.Column(type: "int", nullable: false), + KurseId = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IllnessKurse", x => x.Id); + table.ForeignKey( + name: "FK_IllnessKurse_Illnesses_IllnessId", + column: x => x.IllnessId, + principalTable: "Illnesses", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_IllnessKurse_Kurse_KurseId", + column: x => x.KurseId, + principalTable: "Kurse", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + migrationBuilder.CreateTable( name: "IllnessSymptomses", columns: table => new @@ -152,22 +192,26 @@ namespace HospitalDataBaseImplements.Migrations }); migrationBuilder.CreateTable( - name: "Kurse", + name: "KurseMedicines", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), - MedicinesId = table.Column(type: "int", nullable: false), - MedicinesName = table.Column(type: "nvarchar(max)", nullable: false), - Duration = table.Column(type: "nvarchar(max)", nullable: false), - CountInDay = table.Column(type: "int", nullable: false) + MedicineId = table.Column(type: "int", nullable: false), + KurseId = table.Column(type: "int", nullable: false) }, constraints: table => { - table.PrimaryKey("PK_Kurse", x => x.Id); + table.PrimaryKey("PK_KurseMedicines", x => x.Id); table.ForeignKey( - name: "FK_Kurse_Medicines_MedicinesId", - column: x => x.MedicinesId, + name: "FK_KurseMedicines_Kurse_KurseId", + column: x => x.KurseId, + principalTable: "Kurse", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_KurseMedicines_Medicines_MedicineId", + column: x => x.MedicineId, principalTable: "Medicines", principalColumn: "Id", onDelete: ReferentialAction.Cascade); @@ -225,32 +269,6 @@ namespace HospitalDataBaseImplements.Migrations onDelete: ReferentialAction.Restrict); }); - migrationBuilder.CreateTable( - name: "IllnessKurse", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - IllnessId = table.Column(type: "int", nullable: false), - KurseId = table.Column(type: "int", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IllnessKurse", x => x.Id); - table.ForeignKey( - name: "FK_IllnessKurse_Illnesses_IllnessId", - column: x => x.IllnessId, - principalTable: "Illnesses", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_IllnessKurse_Kurse_KurseId", - column: x => x.KurseId, - principalTable: "Kurse", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - migrationBuilder.CreateIndex( name: "IX_IllnessKurse_IllnessId", table: "IllnessKurse", @@ -272,9 +290,14 @@ namespace HospitalDataBaseImplements.Migrations column: "SymptomsId"); migrationBuilder.CreateIndex( - name: "IX_Kurse_MedicinesId", - table: "Kurse", - column: "MedicinesId"); + name: "IX_KurseMedicines_KurseId", + table: "KurseMedicines", + column: "KurseId"); + + migrationBuilder.CreateIndex( + name: "IX_KurseMedicines_MedicineId", + table: "KurseMedicines", + column: "MedicineId"); migrationBuilder.CreateIndex( name: "IX_Medicines_ClientId", @@ -326,17 +349,23 @@ namespace HospitalDataBaseImplements.Migrations migrationBuilder.DropTable( name: "IllnessSymptomses"); + migrationBuilder.DropTable( + name: "KurseMedicines"); + migrationBuilder.DropTable( name: "ProcedureMedicine"); migrationBuilder.DropTable( name: "RecipesProcedures"); + migrationBuilder.DropTable( + name: "Illnesses"); + migrationBuilder.DropTable( name: "Kurse"); migrationBuilder.DropTable( - name: "Illnesses"); + name: "Medicines"); migrationBuilder.DropTable( name: "Procedures"); @@ -345,13 +374,10 @@ namespace HospitalDataBaseImplements.Migrations name: "Recipes"); migrationBuilder.DropTable( - name: "Medicines"); + name: "Clients"); migrationBuilder.DropTable( name: "Symptomses"); - - migrationBuilder.DropTable( - name: "Clients"); } } } diff --git a/HospitalDataBaseImplements/Migrations/HospitalDatabaseModelSnapshot.cs b/HospitalDataBaseImplements/Migrations/HospitalDatabaseModelSnapshot.cs index cf76154..bde9f27 100644 --- a/HospitalDataBaseImplements/Migrations/HospitalDatabaseModelSnapshot.cs +++ b/HospitalDataBaseImplements/Migrations/HospitalDatabaseModelSnapshot.cs @@ -114,6 +114,29 @@ namespace HospitalDataBaseImplements.Migrations b.ToTable("IllnessSymptomses"); }); + modelBuilder.Entity("HospitalDataBaseImplements.Models.KurseMedicines", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("KurseId") + .HasColumnType("int"); + + b.Property("MedicineId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("KurseId"); + + b.HasIndex("MedicineId"); + + b.ToTable("KurseMedicines"); + }); + modelBuilder.Entity("HospitalDataBaseImplements.Models.Kurses", b => { b.Property("Id") @@ -129,17 +152,8 @@ namespace HospitalDataBaseImplements.Migrations .IsRequired() .HasColumnType("nvarchar(max)"); - b.Property("MedicinesId") - .HasColumnType("int"); - - b.Property("MedicinesName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - b.HasKey("Id"); - b.HasIndex("MedicinesId"); - b.ToTable("Kurse"); }); @@ -333,15 +347,23 @@ namespace HospitalDataBaseImplements.Migrations b.Navigation("Symptoms"); }); - modelBuilder.Entity("HospitalDataBaseImplements.Models.Kurses", b => + modelBuilder.Entity("HospitalDataBaseImplements.Models.KurseMedicines", b => { - b.HasOne("HospitalDataBaseImplements.Models.Medicines", "Medicines") - .WithMany() - .HasForeignKey("MedicinesId") + b.HasOne("HospitalDataBaseImplements.Models.Kurses", "Kurse") + .WithMany("Medicines") + .HasForeignKey("KurseId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - b.Navigation("Medicines"); + b.HasOne("HospitalDataBaseImplements.Models.Medicines", "Medicine") + .WithMany("KurseMedicines") + .HasForeignKey("MedicineId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Kurse"); + + b.Navigation("Medicine"); }); modelBuilder.Entity("HospitalDataBaseImplements.Models.Medicines", b => @@ -433,10 +455,14 @@ namespace HospitalDataBaseImplements.Migrations modelBuilder.Entity("HospitalDataBaseImplements.Models.Kurses", b => { b.Navigation("IllnessKurses"); + + b.Navigation("Medicines"); }); modelBuilder.Entity("HospitalDataBaseImplements.Models.Medicines", b => { + b.Navigation("KurseMedicines"); + b.Navigation("Procedures"); }); diff --git a/HospitalDataBaseImplements/Models/Kurses.cs b/HospitalDataBaseImplements/Models/Kurses.cs index bf3caee..a846f18 100644 --- a/HospitalDataBaseImplements/Models/Kurses.cs +++ b/HospitalDataBaseImplements/Models/Kurses.cs @@ -8,12 +8,13 @@ using System.Threading.Tasks; using HospitalDataModels.Models; using HospitalContracts.BindingModels; using HospitalContracts.ViewModels; +using System.Xml.Linq; namespace HospitalDataBaseImplements.Models { public class Kurses : IKurseModel { - public int Id { get; private set; } + public int Id { get; private set; } [Required] public string Duration { get; private set; } = string.Empty; [Required] @@ -22,44 +23,52 @@ namespace HospitalDataBaseImplements.Models public virtual List IllnessKurses { get; set; } = new(); - private Dictionary? _kurseMedicine = null; + private Dictionary? _kurseMedicine = null; [NotMapped] - public Dictionary KurseMedicine + public Dictionary KurseMedicines { get { + using var context = new HospitalDatabase(); if (_kurseMedicine == null) { _kurseMedicine = Medicines - .ToDictionary(rec => rec.MedicineId, rec => - rec.Medicine as IMedicinesModel); + .ToDictionary(x => x.MedicineId, x => + (context.Medicines.FirstOrDefault(y => y.Id == x.MedicineId)! as IMedicinesModel)); } return _kurseMedicine; } } [ForeignKey("KurseId")] public virtual List Medicines { get; set; } = new(); - public static Kurses? Create(KurseBindingModel model) + public static Kurses? Create(HospitalDatabase context, XElement element) { - if (model == null) - { - return null; + if (element == null) + { + return null; + } + return new Kurses() + { + Duration = element.Element("Duration")!.Value, + CountInDay = Convert.ToInt32(element.Element("CountInDay")!.Value), + Medicines = element.Element("Medicines")!.Elements("MedicineId").Select(x => new KurseMedicines + { + Medicine = context.Medicines.First(y => y.Id == Convert.ToInt32(x.Value)) + }).ToList() + }; } - return new Kurses() - { - Id = model.Id, - Duration = model.Duration, - CountInDay = model.CountInDay - }; - } - public static Kurses Create(KurseViewModel model) + public static Kurses Create(HospitalDatabase context, KurseBindingModel model) { return new Kurses { Id = model.Id, Duration = model.Duration, - CountInDay = model.CountInDay + CountInDay = model.CountInDay, + Medicines = model.KurseMedicines.Select(x => new KurseMedicines + { + Medicine = context.Medicines.First(y => y.Id == x.Key) + }).ToList() }; } public void Update(KurseBindingModel model) @@ -75,7 +84,30 @@ namespace HospitalDataBaseImplements.Models { Id = Id, Duration = Duration, - CountInDay = CountInDay + CountInDay = CountInDay, + KurseMedicines = KurseMedicines }; -} + public void UpdateMedicines(HospitalDatabase context, KurseBindingModel model) + { + var kurseMedicine = context.KurseMedicines.Where(rec => rec.KurseId == model.Id).ToList(); + if (kurseMedicine != null && kurseMedicine.Count > 0) + { + context.KurseMedicines.RemoveRange(kurseMedicine.Where(rec + => !model.KurseMedicines.ContainsKey(rec.MedicineId))); + context.SaveChanges(); + } + var kurse = context.Kurse.First(x => x.Id == Id); + var existingMedicineIds = kurseMedicine?.Select(x => x.MedicineId).ToList(); + foreach (var rec in model.KurseMedicines) + { + context.KurseMedicines.Add(new KurseMedicines + { + Kurse = kurse, + Medicine = context.Medicines.First(x => x.Id == rec.Key), + }); + } + context.SaveChanges(); + _kurseMedicine = null; + } + } } diff --git a/HospitalDataBaseImplements/Models/Medicines.cs b/HospitalDataBaseImplements/Models/Medicines.cs index 0a1df44..bda68ed 100644 --- a/HospitalDataBaseImplements/Models/Medicines.cs +++ b/HospitalDataBaseImplements/Models/Medicines.cs @@ -23,6 +23,9 @@ namespace HospitalDataBaseImplements.Models public virtual Client Client { get; set; } [ForeignKey("MedicineId")] public virtual List Procedures { get; set; } = new(); + + [ForeignKey("MedicineId")] + public virtual List KurseMedicines { get; set; } = new(); public static Medicines? Create(MedicinesBindingModel model) { if (model == null) diff --git a/HospitalDataModels/Models/IKurseModel.cs b/HospitalDataModels/Models/IKurseModel.cs index 1186761..da16510 100644 --- a/HospitalDataModels/Models/IKurseModel.cs +++ b/HospitalDataModels/Models/IKurseModel.cs @@ -10,6 +10,6 @@ namespace HospitalDataModels.Models { string Duration { get; } int CountInDay { get; } - Dictionary KurseMedicine { get; } + Dictionary KurseMedicines { get; } } }