From e0e98a237ca73b92c446f1c77e8e82e337a8679f Mon Sep 17 00:00:00 2001 From: gg12 darfren Date: Sun, 5 May 2024 11:05:26 +0400 Subject: [PATCH 1/5] d --- .../APIAdmin.cs | 0 .../Controllers/HomeController.cs | 0 .../Models/ErrorViewModel.cs | 0 .../Program.cs | 0 .../Properties/launchSettings.json | 0 .../VetClinicAdminApp.csproj | 0 .../Views/Home/Create.cshtml | 0 .../Views/Home/CreateAnimal.cshtml | 0 .../Views/Home/CreateVaccination.cshtml | 0 .../Views/Home/Delete.cshtml | 0 .../Views/Home/DeleteAnimal.cshtml | 0 .../Views/Home/DeleteVaccination.cshtml | 0 .../Views/Home/Enter.cshtml | 0 .../Views/Home/Index.cshtml | 0 .../Views/Home/IndexAnimals.cshtml | 0 .../Views/Home/IndexVaccinations.cshtml | 0 .../Views/Home/Privacy.cshtml | 0 .../Views/Home/Register.cshtml | 0 .../Views/Home/Report.cshtml | 0 .../Views/Home/ServiceListReport.cshtml | 0 .../Views/Home/Update.cshtml | 0 .../Views/Home/UpdateAnimal.cshtml | 0 .../Views/Home/UpdateVaccination.cshtml | 0 .../Views/Home/VisitAnimals.cshtml | 0 .../Views/Shared/Error.cshtml | 0 .../Views/Shared/_Layout.cshtml | 0 .../Views/Shared/_Layout.cshtml.css | 0 .../Views/Shared/_ValidationScriptsPartial.cshtml | 0 .../Views/_ViewImports.cshtml | 0 .../Views/_ViewStart.cshtml | 0 .../appsettings.Development.json | 0 .../appsettings.json | 0 .../wwwroot/css/site.css | 0 .../wwwroot/favicon.ico | Bin .../wwwroot/js/site.js | 0 .../wwwroot/lib/bootstrap/LICENSE | 0 .../lib/bootstrap/dist/css/bootstrap-grid.css | 0 .../lib/bootstrap/dist/css/bootstrap-grid.css.map | 0 .../lib/bootstrap/dist/css/bootstrap-grid.min.css | 0 .../bootstrap/dist/css/bootstrap-grid.min.css.map | 0 .../lib/bootstrap/dist/css/bootstrap-grid.rtl.css | 0 .../bootstrap/dist/css/bootstrap-grid.rtl.css.map | 0 .../bootstrap/dist/css/bootstrap-grid.rtl.min.css | 0 .../dist/css/bootstrap-grid.rtl.min.css.map | 0 .../lib/bootstrap/dist/css/bootstrap-reboot.css | 0 .../lib/bootstrap/dist/css/bootstrap-reboot.css.map | 0 .../lib/bootstrap/dist/css/bootstrap-reboot.min.css | 0 .../bootstrap/dist/css/bootstrap-reboot.min.css.map | 0 .../lib/bootstrap/dist/css/bootstrap-reboot.rtl.css | 0 .../bootstrap/dist/css/bootstrap-reboot.rtl.css.map | 0 .../bootstrap/dist/css/bootstrap-reboot.rtl.min.css | 0 .../dist/css/bootstrap-reboot.rtl.min.css.map | 0 .../lib/bootstrap/dist/css/bootstrap-utilities.css | 0 .../bootstrap/dist/css/bootstrap-utilities.css.map | 0 .../bootstrap/dist/css/bootstrap-utilities.min.css | 0 .../dist/css/bootstrap-utilities.min.css.map | 0 .../bootstrap/dist/css/bootstrap-utilities.rtl.css | 0 .../dist/css/bootstrap-utilities.rtl.css.map | 0 .../dist/css/bootstrap-utilities.rtl.min.css | 0 .../dist/css/bootstrap-utilities.rtl.min.css.map | 0 .../wwwroot/lib/bootstrap/dist/css/bootstrap.css | 0 .../lib/bootstrap/dist/css/bootstrap.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.min.css | 0 .../lib/bootstrap/dist/css/bootstrap.min.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.rtl.css | 0 .../lib/bootstrap/dist/css/bootstrap.rtl.css.map | 0 .../lib/bootstrap/dist/css/bootstrap.rtl.min.css | 0 .../bootstrap/dist/css/bootstrap.rtl.min.css.map | 0 .../lib/bootstrap/dist/js/bootstrap.bundle.js | 0 .../lib/bootstrap/dist/js/bootstrap.bundle.js.map | 0 .../lib/bootstrap/dist/js/bootstrap.bundle.min.js | 0 .../bootstrap/dist/js/bootstrap.bundle.min.js.map | 0 .../wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js | 0 .../lib/bootstrap/dist/js/bootstrap.esm.js.map | 0 .../lib/bootstrap/dist/js/bootstrap.esm.min.js | 0 .../lib/bootstrap/dist/js/bootstrap.esm.min.js.map | 0 .../wwwroot/lib/bootstrap/dist/js/bootstrap.js | 0 .../wwwroot/lib/bootstrap/dist/js/bootstrap.js.map | 0 .../wwwroot/lib/bootstrap/dist/js/bootstrap.min.js | 0 .../lib/bootstrap/dist/js/bootstrap.min.js.map | 0 .../lib/jquery-validation-unobtrusive/LICENSE.txt | 0 .../jquery.validate.unobtrusive.js | 0 .../jquery.validate.unobtrusive.min.js | 0 .../wwwroot/lib/jquery-validation/LICENSE.md | 0 .../jquery-validation/dist/additional-methods.js | 0 .../dist/additional-methods.min.js | 0 .../lib/jquery-validation/dist/jquery.validate.js | 0 .../jquery-validation/dist/jquery.validate.min.js | 0 .../wwwroot/lib/jquery/LICENSE.txt | 0 .../wwwroot/lib/jquery/dist/jquery.js | 0 .../wwwroot/lib/jquery/dist/jquery.min.js | 0 .../wwwroot/lib/jquery/dist/jquery.min.map | 0 92 files changed, 0 insertions(+), 0 deletions(-) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/APIAdmin.cs (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Controllers/HomeController.cs (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Models/ErrorViewModel.cs (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Program.cs (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Properties/launchSettings.json (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/VetClinicAdminApp.csproj (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/Home/Create.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/Home/CreateAnimal.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/Home/CreateVaccination.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/Home/Delete.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/Home/DeleteAnimal.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/Home/DeleteVaccination.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/Home/Enter.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/Home/Index.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/Home/IndexAnimals.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/Home/IndexVaccinations.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/Home/Privacy.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/Home/Register.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/Home/Report.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/Home/ServiceListReport.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/Home/Update.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/Home/UpdateAnimal.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/Home/UpdateVaccination.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/Home/VisitAnimals.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/Shared/Error.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/Shared/_Layout.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/Shared/_Layout.cshtml.css (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/Shared/_ValidationScriptsPartial.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/_ViewImports.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/Views/_ViewStart.cshtml (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/appsettings.Development.json (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/appsettings.json (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/css/site.css (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/favicon.ico (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/js/site.js (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/LICENSE (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css.map (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css.map (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap.css (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css.map (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css.map (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js.map (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js.map (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/js/bootstrap.js (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/jquery-validation/LICENSE.md (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/jquery-validation/dist/additional-methods.js (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/jquery-validation/dist/additional-methods.min.js (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/jquery-validation/dist/jquery.validate.js (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/jquery/LICENSE.txt (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/jquery/dist/jquery.js (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/jquery/dist/jquery.min.js (100%) rename VetClinic/{VetClinicAdminApi => VetClinicAdminApp}/wwwroot/lib/jquery/dist/jquery.min.map (100%) diff --git a/VetClinic/VetClinicAdminApi/APIAdmin.cs b/VetClinic/VetClinicAdminApp/APIAdmin.cs similarity index 100% rename from VetClinic/VetClinicAdminApi/APIAdmin.cs rename to VetClinic/VetClinicAdminApp/APIAdmin.cs diff --git a/VetClinic/VetClinicAdminApi/Controllers/HomeController.cs b/VetClinic/VetClinicAdminApp/Controllers/HomeController.cs similarity index 100% rename from VetClinic/VetClinicAdminApi/Controllers/HomeController.cs rename to VetClinic/VetClinicAdminApp/Controllers/HomeController.cs diff --git a/VetClinic/VetClinicAdminApi/Models/ErrorViewModel.cs b/VetClinic/VetClinicAdminApp/Models/ErrorViewModel.cs similarity index 100% rename from VetClinic/VetClinicAdminApi/Models/ErrorViewModel.cs rename to VetClinic/VetClinicAdminApp/Models/ErrorViewModel.cs diff --git a/VetClinic/VetClinicAdminApi/Program.cs b/VetClinic/VetClinicAdminApp/Program.cs similarity index 100% rename from VetClinic/VetClinicAdminApi/Program.cs rename to VetClinic/VetClinicAdminApp/Program.cs diff --git a/VetClinic/VetClinicAdminApi/Properties/launchSettings.json b/VetClinic/VetClinicAdminApp/Properties/launchSettings.json similarity index 100% rename from VetClinic/VetClinicAdminApi/Properties/launchSettings.json rename to VetClinic/VetClinicAdminApp/Properties/launchSettings.json diff --git a/VetClinic/VetClinicAdminApi/VetClinicAdminApp.csproj b/VetClinic/VetClinicAdminApp/VetClinicAdminApp.csproj similarity index 100% rename from VetClinic/VetClinicAdminApi/VetClinicAdminApp.csproj rename to VetClinic/VetClinicAdminApp/VetClinicAdminApp.csproj diff --git a/VetClinic/VetClinicAdminApi/Views/Home/Create.cshtml b/VetClinic/VetClinicAdminApp/Views/Home/Create.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/Home/Create.cshtml rename to VetClinic/VetClinicAdminApp/Views/Home/Create.cshtml diff --git a/VetClinic/VetClinicAdminApi/Views/Home/CreateAnimal.cshtml b/VetClinic/VetClinicAdminApp/Views/Home/CreateAnimal.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/Home/CreateAnimal.cshtml rename to VetClinic/VetClinicAdminApp/Views/Home/CreateAnimal.cshtml diff --git a/VetClinic/VetClinicAdminApi/Views/Home/CreateVaccination.cshtml b/VetClinic/VetClinicAdminApp/Views/Home/CreateVaccination.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/Home/CreateVaccination.cshtml rename to VetClinic/VetClinicAdminApp/Views/Home/CreateVaccination.cshtml diff --git a/VetClinic/VetClinicAdminApi/Views/Home/Delete.cshtml b/VetClinic/VetClinicAdminApp/Views/Home/Delete.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/Home/Delete.cshtml rename to VetClinic/VetClinicAdminApp/Views/Home/Delete.cshtml diff --git a/VetClinic/VetClinicAdminApi/Views/Home/DeleteAnimal.cshtml b/VetClinic/VetClinicAdminApp/Views/Home/DeleteAnimal.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/Home/DeleteAnimal.cshtml rename to VetClinic/VetClinicAdminApp/Views/Home/DeleteAnimal.cshtml diff --git a/VetClinic/VetClinicAdminApi/Views/Home/DeleteVaccination.cshtml b/VetClinic/VetClinicAdminApp/Views/Home/DeleteVaccination.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/Home/DeleteVaccination.cshtml rename to VetClinic/VetClinicAdminApp/Views/Home/DeleteVaccination.cshtml diff --git a/VetClinic/VetClinicAdminApi/Views/Home/Enter.cshtml b/VetClinic/VetClinicAdminApp/Views/Home/Enter.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/Home/Enter.cshtml rename to VetClinic/VetClinicAdminApp/Views/Home/Enter.cshtml diff --git a/VetClinic/VetClinicAdminApi/Views/Home/Index.cshtml b/VetClinic/VetClinicAdminApp/Views/Home/Index.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/Home/Index.cshtml rename to VetClinic/VetClinicAdminApp/Views/Home/Index.cshtml diff --git a/VetClinic/VetClinicAdminApi/Views/Home/IndexAnimals.cshtml b/VetClinic/VetClinicAdminApp/Views/Home/IndexAnimals.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/Home/IndexAnimals.cshtml rename to VetClinic/VetClinicAdminApp/Views/Home/IndexAnimals.cshtml diff --git a/VetClinic/VetClinicAdminApi/Views/Home/IndexVaccinations.cshtml b/VetClinic/VetClinicAdminApp/Views/Home/IndexVaccinations.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/Home/IndexVaccinations.cshtml rename to VetClinic/VetClinicAdminApp/Views/Home/IndexVaccinations.cshtml diff --git a/VetClinic/VetClinicAdminApi/Views/Home/Privacy.cshtml b/VetClinic/VetClinicAdminApp/Views/Home/Privacy.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/Home/Privacy.cshtml rename to VetClinic/VetClinicAdminApp/Views/Home/Privacy.cshtml diff --git a/VetClinic/VetClinicAdminApi/Views/Home/Register.cshtml b/VetClinic/VetClinicAdminApp/Views/Home/Register.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/Home/Register.cshtml rename to VetClinic/VetClinicAdminApp/Views/Home/Register.cshtml diff --git a/VetClinic/VetClinicAdminApi/Views/Home/Report.cshtml b/VetClinic/VetClinicAdminApp/Views/Home/Report.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/Home/Report.cshtml rename to VetClinic/VetClinicAdminApp/Views/Home/Report.cshtml diff --git a/VetClinic/VetClinicAdminApi/Views/Home/ServiceListReport.cshtml b/VetClinic/VetClinicAdminApp/Views/Home/ServiceListReport.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/Home/ServiceListReport.cshtml rename to VetClinic/VetClinicAdminApp/Views/Home/ServiceListReport.cshtml diff --git a/VetClinic/VetClinicAdminApi/Views/Home/Update.cshtml b/VetClinic/VetClinicAdminApp/Views/Home/Update.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/Home/Update.cshtml rename to VetClinic/VetClinicAdminApp/Views/Home/Update.cshtml diff --git a/VetClinic/VetClinicAdminApi/Views/Home/UpdateAnimal.cshtml b/VetClinic/VetClinicAdminApp/Views/Home/UpdateAnimal.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/Home/UpdateAnimal.cshtml rename to VetClinic/VetClinicAdminApp/Views/Home/UpdateAnimal.cshtml diff --git a/VetClinic/VetClinicAdminApi/Views/Home/UpdateVaccination.cshtml b/VetClinic/VetClinicAdminApp/Views/Home/UpdateVaccination.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/Home/UpdateVaccination.cshtml rename to VetClinic/VetClinicAdminApp/Views/Home/UpdateVaccination.cshtml diff --git a/VetClinic/VetClinicAdminApi/Views/Home/VisitAnimals.cshtml b/VetClinic/VetClinicAdminApp/Views/Home/VisitAnimals.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/Home/VisitAnimals.cshtml rename to VetClinic/VetClinicAdminApp/Views/Home/VisitAnimals.cshtml diff --git a/VetClinic/VetClinicAdminApi/Views/Shared/Error.cshtml b/VetClinic/VetClinicAdminApp/Views/Shared/Error.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/Shared/Error.cshtml rename to VetClinic/VetClinicAdminApp/Views/Shared/Error.cshtml diff --git a/VetClinic/VetClinicAdminApi/Views/Shared/_Layout.cshtml b/VetClinic/VetClinicAdminApp/Views/Shared/_Layout.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/Shared/_Layout.cshtml rename to VetClinic/VetClinicAdminApp/Views/Shared/_Layout.cshtml diff --git a/VetClinic/VetClinicAdminApi/Views/Shared/_Layout.cshtml.css b/VetClinic/VetClinicAdminApp/Views/Shared/_Layout.cshtml.css similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/Shared/_Layout.cshtml.css rename to VetClinic/VetClinicAdminApp/Views/Shared/_Layout.cshtml.css diff --git a/VetClinic/VetClinicAdminApi/Views/Shared/_ValidationScriptsPartial.cshtml b/VetClinic/VetClinicAdminApp/Views/Shared/_ValidationScriptsPartial.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/Shared/_ValidationScriptsPartial.cshtml rename to VetClinic/VetClinicAdminApp/Views/Shared/_ValidationScriptsPartial.cshtml diff --git a/VetClinic/VetClinicAdminApi/Views/_ViewImports.cshtml b/VetClinic/VetClinicAdminApp/Views/_ViewImports.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/_ViewImports.cshtml rename to VetClinic/VetClinicAdminApp/Views/_ViewImports.cshtml diff --git a/VetClinic/VetClinicAdminApi/Views/_ViewStart.cshtml b/VetClinic/VetClinicAdminApp/Views/_ViewStart.cshtml similarity index 100% rename from VetClinic/VetClinicAdminApi/Views/_ViewStart.cshtml rename to VetClinic/VetClinicAdminApp/Views/_ViewStart.cshtml diff --git a/VetClinic/VetClinicAdminApi/appsettings.Development.json b/VetClinic/VetClinicAdminApp/appsettings.Development.json similarity index 100% rename from VetClinic/VetClinicAdminApi/appsettings.Development.json rename to VetClinic/VetClinicAdminApp/appsettings.Development.json diff --git a/VetClinic/VetClinicAdminApi/appsettings.json b/VetClinic/VetClinicAdminApp/appsettings.json similarity index 100% rename from VetClinic/VetClinicAdminApi/appsettings.json rename to VetClinic/VetClinicAdminApp/appsettings.json diff --git a/VetClinic/VetClinicAdminApi/wwwroot/css/site.css b/VetClinic/VetClinicAdminApp/wwwroot/css/site.css similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/css/site.css rename to VetClinic/VetClinicAdminApp/wwwroot/css/site.css diff --git a/VetClinic/VetClinicAdminApi/wwwroot/favicon.ico b/VetClinic/VetClinicAdminApp/wwwroot/favicon.ico similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/favicon.ico rename to VetClinic/VetClinicAdminApp/wwwroot/favicon.ico diff --git a/VetClinic/VetClinicAdminApi/wwwroot/js/site.js b/VetClinic/VetClinicAdminApp/wwwroot/js/site.js similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/js/site.js rename to VetClinic/VetClinicAdminApp/wwwroot/js/site.js diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/LICENSE b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/LICENSE similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/LICENSE rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/LICENSE diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css.map diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css.map diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap.css b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap.css similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap.css rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap.css diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css.map diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css.map diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js.map diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js.map diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.js b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.js similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.js rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.js diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt b/VetClinic/VetClinicAdminApp/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt rename to VetClinic/VetClinicAdminApp/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js b/VetClinic/VetClinicAdminApp/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js rename to VetClinic/VetClinicAdminApp/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js b/VetClinic/VetClinicAdminApp/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js rename to VetClinic/VetClinicAdminApp/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/jquery-validation/LICENSE.md b/VetClinic/VetClinicAdminApp/wwwroot/lib/jquery-validation/LICENSE.md similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/jquery-validation/LICENSE.md rename to VetClinic/VetClinicAdminApp/wwwroot/lib/jquery-validation/LICENSE.md diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/jquery-validation/dist/additional-methods.js b/VetClinic/VetClinicAdminApp/wwwroot/lib/jquery-validation/dist/additional-methods.js similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/jquery-validation/dist/additional-methods.js rename to VetClinic/VetClinicAdminApp/wwwroot/lib/jquery-validation/dist/additional-methods.js diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/jquery-validation/dist/additional-methods.min.js b/VetClinic/VetClinicAdminApp/wwwroot/lib/jquery-validation/dist/additional-methods.min.js similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/jquery-validation/dist/additional-methods.min.js rename to VetClinic/VetClinicAdminApp/wwwroot/lib/jquery-validation/dist/additional-methods.min.js diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/jquery-validation/dist/jquery.validate.js b/VetClinic/VetClinicAdminApp/wwwroot/lib/jquery-validation/dist/jquery.validate.js similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/jquery-validation/dist/jquery.validate.js rename to VetClinic/VetClinicAdminApp/wwwroot/lib/jquery-validation/dist/jquery.validate.js diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js b/VetClinic/VetClinicAdminApp/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js rename to VetClinic/VetClinicAdminApp/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/jquery/LICENSE.txt b/VetClinic/VetClinicAdminApp/wwwroot/lib/jquery/LICENSE.txt similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/jquery/LICENSE.txt rename to VetClinic/VetClinicAdminApp/wwwroot/lib/jquery/LICENSE.txt diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/jquery/dist/jquery.js b/VetClinic/VetClinicAdminApp/wwwroot/lib/jquery/dist/jquery.js similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/jquery/dist/jquery.js rename to VetClinic/VetClinicAdminApp/wwwroot/lib/jquery/dist/jquery.js diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/jquery/dist/jquery.min.js b/VetClinic/VetClinicAdminApp/wwwroot/lib/jquery/dist/jquery.min.js similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/jquery/dist/jquery.min.js rename to VetClinic/VetClinicAdminApp/wwwroot/lib/jquery/dist/jquery.min.js diff --git a/VetClinic/VetClinicAdminApi/wwwroot/lib/jquery/dist/jquery.min.map b/VetClinic/VetClinicAdminApp/wwwroot/lib/jquery/dist/jquery.min.map similarity index 100% rename from VetClinic/VetClinicAdminApi/wwwroot/lib/jquery/dist/jquery.min.map rename to VetClinic/VetClinicAdminApp/wwwroot/lib/jquery/dist/jquery.min.map From ae96bb65a2a78072c7faf71759e440398884b493 Mon Sep 17 00:00:00 2001 From: gg12 darfren Date: Tue, 21 May 2024 20:51:12 +0400 Subject: [PATCH 2/5] =?UTF-8?q?=D0=AF=20=D1=81=D0=BD=D0=BE=D0=B2=D0=B0=20?= =?UTF-8?q?=D0=B7=D0=B4=D0=B5=D1=81=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessLogics/ReportLogicPharmacist.cs | 38 +++++++ .../AbstractSaveToPdfPharmacist.cs | 105 +++++++++++++++++ .../HelperEnums/PdfParagraphAlignmentType.cs | 16 +++ .../OfficePackage/HelperModels/PdfInfo.cs | 18 +++ .../HelperModels/PdfParagraph.cs | 17 +++ .../HelperModels/PdfRowParameters.cs | 17 +++ .../Implements/SaveToPdfPharmacist.cs | 107 ++++++++++++++++++ .../VetClinicBusinessLogic.csproj | 1 + .../IReportLogicPharmacist.cs | 5 +- 9 files changed, 323 insertions(+), 1 deletion(-) create mode 100644 VetClinic/VetClinicBusinessLogic/OfficePackage/AbstractSaveToPdfPharmacist.cs create mode 100644 VetClinic/VetClinicBusinessLogic/OfficePackage/HelperEnums/PdfParagraphAlignmentType.cs create mode 100644 VetClinic/VetClinicBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs create mode 100644 VetClinic/VetClinicBusinessLogic/OfficePackage/HelperModels/PdfParagraph.cs create mode 100644 VetClinic/VetClinicBusinessLogic/OfficePackage/HelperModels/PdfRowParameters.cs create mode 100644 VetClinic/VetClinicBusinessLogic/OfficePackage/Implements/SaveToPdfPharmacist.cs diff --git a/VetClinic/VetClinicBusinessLogic/BusinessLogics/ReportLogicPharmacist.cs b/VetClinic/VetClinicBusinessLogic/BusinessLogics/ReportLogicPharmacist.cs index 407b670..68b3293 100644 --- a/VetClinic/VetClinicBusinessLogic/BusinessLogics/ReportLogicPharmacist.cs +++ b/VetClinic/VetClinicBusinessLogic/BusinessLogics/ReportLogicPharmacist.cs @@ -85,5 +85,43 @@ namespace VetClinicBusinessLogic.BusinessLogics ServicesAnimals = GetServiceAnimals(model.Services) }); } + + public List GetMedicineVisitsAndGuidances(List services) + { + + List ans = new(); + List>>>> response = + _serviceStorage.GetReportInfo(new ListAnimalsSearchModel { servicesIds = services }); + + foreach (var service in response) + { + Dictionary counter = new(); + foreach (var medicine in service.Item2) + { + foreach (var animal in medicine.Item2) + { + if (!counter.ContainsKey(animal.Id)) + counter.Add(animal.Id, (animal, 1)); + else + { + counter[animal.Id] = (counter[animal.Id].Item1, counter[animal.Id].Item2 + 1); + } + } + } + List res = new(); + foreach (var cnt in counter) + { + if (cnt.Value.Item2 != service.Item2.Count) + continue; + res.Add(cnt.Value.Item1); + } + ans.Add(new ListAnimalsViewModel + { + ServiceName = service.Item1.ServiceName, + Animals = res + }); + } + return ans; + } } } diff --git a/VetClinic/VetClinicBusinessLogic/OfficePackage/AbstractSaveToPdfPharmacist.cs b/VetClinic/VetClinicBusinessLogic/OfficePackage/AbstractSaveToPdfPharmacist.cs new file mode 100644 index 0000000..f739cd7 --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/OfficePackage/AbstractSaveToPdfPharmacist.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VetClinicBusinessLogic.OfficePackage.HelperEnums; +using VetClinicBusinessLogic.OfficePackage.HelperModels; +using VetClinicDataBaseImplement.Implements; + +namespace VetClinicBusinessLogic.OfficePackage +{ + public abstract class AbstractSaveToPdfPharmacist + { + public void CreateDoc(PdfInfo info) + { + CreatePdf(info); + CreateParagraph(new PdfParagraph + { + Text = info.Title, + Style = + "NormalTitle", + ParagraphAlignment = PdfParagraphAlignmentType.Center + }); + CreateParagraph(new PdfParagraph + { + Text = $"с { info.DateFrom.ToShortDateString() } по { info.DateTo.ToShortDateString() }", Style + = "Normal", + ParagraphAlignment = PdfParagraphAlignmentType.Center + }); + CreateTable(new List { "2cm", "3cm", "6cm", "3cm" }); + CreateRow(new PdfRowParameters + { + Texts = new List { "Номер", "Дата заказа", "Изделие", +"Сумма" }, + Style = "NormalTitle", + ParagraphAlignment = PdfParagraphAlignmentType.Center + }); + foreach (var medicine in info.Medicines) + { + CreateParagraph(new PdfParagraph + { + Text = medicine.MedicineName, + Style + = "NormalTitle", + ParagraphAlignment = PdfParagraphAlignmentType.Center + }); + + + CreateParagraph(new PdfParagraph + { + Text = "Визиты", + Style + = "NormalTitle", + ParagraphAlignment = PdfParagraphAlignmentType.Left + }); + CreateTable(new List { "4cm", "4cm", "6cm" }); + CreateRow(new PdfRowParameters + { + Texts = new List { "Номер", "Дата визита", "Навзание визита"}, + Style = "NormalTitle", + ParagraphAlignment = PdfParagraphAlignmentType.Center + }); + foreach(var visit in medicine.Visits) + { + CreateRow(new PdfRowParameters + { + Texts = new List { visit.Id.ToString(), visit.DateVisit.ToString(), visit.NameVisit}, + Style = "Normal", + ParagraphAlignment = PdfParagraphAlignmentType.Center + }); + } + + CreateParagraph(new PdfParagraph + { + Text = "Рекомендации", + Style + = "NormalTitle", + ParagraphAlignment = PdfParagraphAlignmentType.Center + }); + CreateTable(new List { "4cm", "4cm", "6cm" }); + CreateRow(new PdfRowParameters + { + Texts = new List { "Номер", "Дата рекомендации", "Название услуги" }, + Style = "NormalTitle", + ParagraphAlignment = PdfParagraphAlignmentType.Center + }); + foreach (var guidance in medicine.Guidances) + { + CreateRow(new PdfRowParameters + { + Texts = new List { guidance.Id.ToString(), guidance.Date.ToString(), guidance.ServiceName }, + Style = "Normal", + ParagraphAlignment = PdfParagraphAlignmentType.Center + }); + } + } + SavePdf(info); + } + protected abstract void CreatePdf(PdfInfo info); + protected abstract void CreateParagraph(PdfParagraph paragraph); + protected abstract void CreateTable(List columns); + protected abstract void CreateRow(PdfRowParameters rowParameters); + protected abstract void SavePdf(PdfInfo info); + } +} diff --git a/VetClinic/VetClinicBusinessLogic/OfficePackage/HelperEnums/PdfParagraphAlignmentType.cs b/VetClinic/VetClinicBusinessLogic/OfficePackage/HelperEnums/PdfParagraphAlignmentType.cs new file mode 100644 index 0000000..aa7a867 --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/OfficePackage/HelperEnums/PdfParagraphAlignmentType.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VetClinicBusinessLogic.OfficePackage.HelperEnums +{ + public enum PdfParagraphAlignmentType + { + Center, + Left, + Rigth + } + +} diff --git a/VetClinic/VetClinicBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs b/VetClinic/VetClinicBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs new file mode 100644 index 0000000..8e21977 --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VetClinicDataBaseImplement.Implements; + +namespace VetClinicBusinessLogic.OfficePackage.HelperModels +{ + public class PdfInfo + { + public string FileName { get; set; } = string.Empty; + public string Title { get; set; } = string.Empty; + public DateTime DateFrom { get; set; } + public DateTime DateTo { get; set; } + public List Medicines { get; set; } = new(); + } +} diff --git a/VetClinic/VetClinicBusinessLogic/OfficePackage/HelperModels/PdfParagraph.cs b/VetClinic/VetClinicBusinessLogic/OfficePackage/HelperModels/PdfParagraph.cs new file mode 100644 index 0000000..44d63f2 --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/OfficePackage/HelperModels/PdfParagraph.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VetClinicBusinessLogic.OfficePackage.HelperEnums; + +namespace VetClinicBusinessLogic.OfficePackage.HelperModels +{ + public class PdfParagraph + { + public string Text { get; set; } = string.Empty; + public string Style { get; set; } = string.Empty; + public PdfParagraphAlignmentType ParagraphAlignment { get; set; } + + } +} diff --git a/VetClinic/VetClinicBusinessLogic/OfficePackage/HelperModels/PdfRowParameters.cs b/VetClinic/VetClinicBusinessLogic/OfficePackage/HelperModels/PdfRowParameters.cs new file mode 100644 index 0000000..93fadaa --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/OfficePackage/HelperModels/PdfRowParameters.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VetClinicBusinessLogic.OfficePackage.HelperEnums; + +namespace VetClinicBusinessLogic.OfficePackage.HelperModels +{ + public class PdfRowParameters + { + public List Texts { get; set; } = new(); + public string Style { get; set; } = string.Empty; + public PdfParagraphAlignmentType ParagraphAlignment { get; set; } + + } +} diff --git a/VetClinic/VetClinicBusinessLogic/OfficePackage/Implements/SaveToPdfPharmacist.cs b/VetClinic/VetClinicBusinessLogic/OfficePackage/Implements/SaveToPdfPharmacist.cs new file mode 100644 index 0000000..7229c03 --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/OfficePackage/Implements/SaveToPdfPharmacist.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VetClinicBusinessLogic.OfficePackage.HelperEnums; +using VetClinicBusinessLogic.OfficePackage.HelperModels; +using MigraDoc.DocumentObjectModel; +using MigraDoc.DocumentObjectModel.Tables; +using MigraDoc.Rendering; + +namespace VetClinicBusinessLogic.OfficePackage.Implements +{ + public class SaveToPdfPharmacist : AbstractSaveToPdfPharmacist + { + private Document? _document; + private Section? _section; + private Table? _table; + private static ParagraphAlignment + GetParagraphAlignment(PdfParagraphAlignmentType type) + { + return type switch + { + PdfParagraphAlignmentType.Center => ParagraphAlignment.Center, + PdfParagraphAlignmentType.Left => ParagraphAlignment.Left, + PdfParagraphAlignmentType.Rigth => ParagraphAlignment.Right, + _ => ParagraphAlignment.Justify, + }; + } + /// + /// Создание стилей для документа + /// + /// + private static void DefineStyles(Document document) + { + var style = document.Styles["Normal"]; + style.Font.Name = "Times New Roman"; + style.Font.Size = 14; + style = document.Styles.AddStyle("NormalTitle", "Normal"); + style.Font.Bold = true; + } + protected override void CreatePdf(PdfInfo info) + { + _document = new Document(); + DefineStyles(_document); + _section = _document.AddSection(); + } + protected override void CreateParagraph(PdfParagraph pdfParagraph) + { + if (_section == null) + { + return; + } + var paragraph = _section.AddParagraph(pdfParagraph.Text); + paragraph.Format.SpaceAfter = "1cm"; + paragraph.Format.Alignment = + GetParagraphAlignment(pdfParagraph.ParagraphAlignment); + paragraph.Style = pdfParagraph.Style; + } + protected override void CreateTable(List columns) + { + if (_document == null) + { + return; + } + _table = _document.LastSection.AddTable(); + foreach (var elem in columns) + { + _table.AddColumn(elem); + } + } + protected override void CreateRow(PdfRowParameters rowParameters) + { + if (_table == null) + { + return; + } + var row = _table.AddRow(); + for (int i = 0; i < rowParameters.Texts.Count; ++i) + { + row.Cells[i].AddParagraph(rowParameters.Texts[i]); + if (!string.IsNullOrEmpty(rowParameters.Style)) + { + row.Cells[i].Style = rowParameters.Style; + } + Unit borderWidth = 0.5; + row.Cells[i].Borders.Left.Width = borderWidth; + row.Cells[i].Borders.Right.Width = borderWidth; + row.Cells[i].Borders.Top.Width = borderWidth; + row.Cells[i].Borders.Bottom.Width = borderWidth; + row.Cells[i].Format.Alignment = + GetParagraphAlignment(rowParameters.ParagraphAlignment); + row.Cells[i].VerticalAlignment = VerticalAlignment.Center; + } + } + protected override void SavePdf(PdfInfo info) + { + var renderer = new PdfDocumentRenderer(true) + { + Document = _document + }; + renderer.RenderDocument(); + renderer.PdfDocument.Save(info.FileName); + } + } + +} diff --git a/VetClinic/VetClinicBusinessLogic/VetClinicBusinessLogic.csproj b/VetClinic/VetClinicBusinessLogic/VetClinicBusinessLogic.csproj index 53d9c2b..237dc55 100644 --- a/VetClinic/VetClinicBusinessLogic/VetClinicBusinessLogic.csproj +++ b/VetClinic/VetClinicBusinessLogic/VetClinicBusinessLogic.csproj @@ -16,6 +16,7 @@ + diff --git a/VetClinic/VetClinicContracts/BusinessLogicsContracts/IReportLogicPharmacist.cs b/VetClinic/VetClinicContracts/BusinessLogicsContracts/IReportLogicPharmacist.cs index 46d6def..ae02b76 100644 --- a/VetClinic/VetClinicContracts/BusinessLogicsContracts/IReportLogicPharmacist.cs +++ b/VetClinic/VetClinicContracts/BusinessLogicsContracts/IReportLogicPharmacist.cs @@ -5,13 +5,16 @@ using System.Text; using System.Threading.Tasks; using VetClinicContracts.BindingModels; using VetClinicContracts.ViewModels; +using VetClinicDataBaseImplement.Implements; namespace VetClinicContracts.BusinessLogicsContracts { - public interface IReportLogicPharmacist //Будет дорабатываться + public interface IReportLogicPharmacist { List GetServiceAnimals(List services); void SaveAnimalsToWordFile(ListAnimalsBindingModel model); void SaveAnimalsToExcelFile(ListAnimalsBindingModel model); + List GetMedicineVisitsAndGuidances(List services); + void SaveMedicinesToPdfFile(VisitsGuidesBindingModel model); } } From 324781aa40a7f58735cdffe3cb646ca605cd3936 Mon Sep 17 00:00:00 2001 From: gg12 darfren Date: Wed, 22 May 2024 13:18:45 +0400 Subject: [PATCH 3/5] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D1=83=20=D1=81=D0=BF?= =?UTF-8?q?=D0=B8=D1=81=D0=BA=D0=B0=20=D0=B6=D0=B8=D0=B2=D0=BE=D1=82=D0=BD?= =?UTF-8?q?=D1=8B=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/HomeController.cs | 52 ++++++++++++++ .../Views/Home/AnimalListReport.cshtml | 17 +++-- .../BusinessLogics/ReportLogicPharmacist.cs | 71 ++++++++++++------- .../BindingModels/VisitsGuidesBindingModel.cs | 4 +- .../IReportLogicPharmacist.cs | 2 +- .../ViewModels/VisitsGuidesViewModel.cs | 2 - .../VetClinicDatabase .cs | 2 +- .../Controllers/ReportController.cs | 46 ++++++++++++ VetClinic/VetClinicRestApi/Program.cs | 6 ++ .../VetClinicRestApi/VetClinicRestApi.csproj | 6 +- 10 files changed, 171 insertions(+), 37 deletions(-) create mode 100644 VetClinic/VetClinicRestApi/Controllers/ReportController.cs diff --git a/VetClinic/PharmacistApp/Controllers/HomeController.cs b/VetClinic/PharmacistApp/Controllers/HomeController.cs index 8c73825..853f532 100644 --- a/VetClinic/PharmacistApp/Controllers/HomeController.cs +++ b/VetClinic/PharmacistApp/Controllers/HomeController.cs @@ -4,6 +4,7 @@ using PharmacistApp.Models; using System.Diagnostics; using System.Text; using VetClinicContracts.BindingModels; +using VetClinicContracts.BusinessLogicsContracts; using VetClinicContracts.SearchModels; using VetClinicContracts.ViewModels; using VetClinicDataBaseImplement.Models; @@ -592,6 +593,57 @@ View(res); ViewBag.Services = APIPharmacist.GetRequest>($"api/service/getservices?pharmacistid={APIPharmacist.Pharmacist.Id}"); return View(); } + + [HttpPost] + public void AnimalListReport(List services, string type) + { + if (APIPharmacist.Pharmacist == null) + { + throw new Exception("Вы как суда попали? Суда вход только авторизованным"); + } + + if (services.Count <= 0) + { + throw new Exception("Количество должно быть больше 0"); + } + + if (string.IsNullOrEmpty(type)) + { + throw new Exception("Неверный тип отчета"); + } + + + + if (type == "docx") + { + APIPharmacist.PostRequest("api/report/createanimallistwordfile", new ListAnimalsBindingModel + { + Services = services, + FileName = "C:\\ReportsCourseWork\\wordfile.docx" + }); + Response.Redirect("GetWordFile"); + } + else + { + APIPharmacist.PostRequest("api/report/createanimallistexcelfile", new ListAnimalsBindingModel + { + Services = services, + FileName = "C:\\ReportsCourseWork\\excelfile.xlsx" + }); + Response.Redirect("GetExcelFile"); + } + } + + [HttpGet] + public IActionResult GetWordFile() + { + return new PhysicalFileResult("C:\\ReportsCourseWork\\wordfile.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"); + } + + public IActionResult GetExcelFile() + { + return new PhysicalFileResult("C:\\ReportsCourseWork\\excelfile.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + } [HttpGet] public IActionResult Report() { diff --git a/VetClinic/PharmacistApp/Views/Home/AnimalListReport.cshtml b/VetClinic/PharmacistApp/Views/Home/AnimalListReport.cshtml index 2cec407..fc17311 100644 --- a/VetClinic/PharmacistApp/Views/Home/AnimalListReport.cshtml +++ b/VetClinic/PharmacistApp/Views/Home/AnimalListReport.cshtml @@ -19,9 +19,18 @@ -
-
-
-
+
+ +
+ + +
+
+ + +
+
+
+
diff --git a/VetClinic/VetClinicBusinessLogic/BusinessLogics/ReportLogicPharmacist.cs b/VetClinic/VetClinicBusinessLogic/BusinessLogics/ReportLogicPharmacist.cs index 68b3293..9e77022 100644 --- a/VetClinic/VetClinicBusinessLogic/BusinessLogics/ReportLogicPharmacist.cs +++ b/VetClinic/VetClinicBusinessLogic/BusinessLogics/ReportLogicPharmacist.cs @@ -10,6 +10,7 @@ using VetClinicContracts.BusinessLogicsContracts; using VetClinicContracts.SearchModels; using VetClinicContracts.StoragesContracts; using VetClinicContracts.ViewModels; +using VetClinicDataBaseImplement.Implements; namespace VetClinicBusinessLogic.BusinessLogics { @@ -19,13 +20,16 @@ namespace VetClinicBusinessLogic.BusinessLogics private readonly IMedicineStorage _medicineStorage; private readonly AbstractSaveToExcelPharmacist _saveToExcel; private readonly AbstractSaveToWordPharmacist _saveToWord; + private readonly AbstractSaveToPdfPharmacist _saveToPdf; public ReportLogicPharmacist(IServiceStorage serviceStorage, IMedicineStorage medicineStorage, - AbstractSaveToExcelPharmacist saveToExcel, AbstractSaveToWordPharmacist saveToWord) + AbstractSaveToExcelPharmacist saveToExcel, AbstractSaveToWordPharmacist saveToWord, + AbstractSaveToPdfPharmacist saveToPdf) { _serviceStorage = serviceStorage; _medicineStorage = medicineStorage; _saveToExcel = saveToExcel; _saveToWord = saveToWord; + _saveToPdf = saveToPdf; } public List GetServiceAnimals(List services) @@ -86,42 +90,57 @@ namespace VetClinicBusinessLogic.BusinessLogics }); } - public List GetMedicineVisitsAndGuidances(List services) + public List GetMedicineVisitsAndGuidances(VisitsGuidesBindingModel model) { + var medicines = model.Medicines; + List ans = new(); + List>>>> responseGuides = + _medicineStorage.GetGuidancesInfo(new VisitGuidesSearchModel { medicinesIds = medicines, DateFrom = model.DateFrom!, DateTo = model.DateTo!}); + List>>>> responseVisits = + _medicineStorage.GetVisitsInfo(new VisitGuidesSearchModel { medicinesIds = medicines, DateFrom = model.DateFrom!, DateTo = model.DateTo! }); + Dictionary dict = new(); - List ans = new(); - List>>>> response = - _serviceStorage.GetReportInfo(new ListAnimalsSearchModel { servicesIds = services }); - - foreach (var service in response) + foreach(var medicine in responseGuides) { - Dictionary counter = new(); - foreach (var medicine in service.Item2) + dict.Add(medicine.Item1.Id, new()); + dict[medicine.Item1.Id].MedicineName = medicine.Item1.MedicineName; + foreach(var service in medicine.Item2) { - foreach (var animal in medicine.Item2) + foreach(var guidance in service.Item2) { - if (!counter.ContainsKey(animal.Id)) - counter.Add(animal.Id, (animal, 1)); - else - { - counter[animal.Id] = (counter[animal.Id].Item1, counter[animal.Id].Item2 + 1); - } + dict[medicine.Item1.Id].Guidances.Add(guidance); } } - List res = new(); - foreach (var cnt in counter) + } + + foreach (var medicine in responseVisits) + { + HashSet used = new(); + foreach (var service in medicine.Item2) { - if (cnt.Value.Item2 != service.Item2.Count) - continue; - res.Add(cnt.Value.Item1); + foreach (var visit in service.Item2) + { + if (used.Contains(visit.Id)) + continue; + dict[medicine.Item1.Id].Visits.Add(visit); + } } - ans.Add(new ListAnimalsViewModel - { - ServiceName = service.Item1.ServiceName, - Animals = res - }); + ans.Add(dict[medicine.Item1.Id]); } return ans; } + + public void SaveMedicinesToPdfFile(VisitsGuidesBindingModel model) + { + _saveToPdf.CreateDoc(new PdfInfo + { + FileName = model.FileName, + Title = "Список медикаментов", + DateFrom = model.DateFrom!, + DateTo = model.DateTo!, + Medicines = GetMedicineVisitsAndGuidances(model) + }); + + } } } diff --git a/VetClinic/VetClinicContracts/BindingModels/VisitsGuidesBindingModel.cs b/VetClinic/VetClinicContracts/BindingModels/VisitsGuidesBindingModel.cs index 33d5ed9..53f1908 100644 --- a/VetClinic/VetClinicContracts/BindingModels/VisitsGuidesBindingModel.cs +++ b/VetClinic/VetClinicContracts/BindingModels/VisitsGuidesBindingModel.cs @@ -10,7 +10,7 @@ namespace VetClinicContracts.BindingModels { public string FileName { get; set; } = string.Empty; public List Medicines { get; set; } = new(); - DateTime DateFrom { get; set; } = DateTime.Now; - DateTime DateTo { get; set; } = DateTime.Now; + public DateTime DateFrom { get; set; } = DateTime.Now; + public DateTime DateTo { get; set; } = DateTime.Now; } } diff --git a/VetClinic/VetClinicContracts/BusinessLogicsContracts/IReportLogicPharmacist.cs b/VetClinic/VetClinicContracts/BusinessLogicsContracts/IReportLogicPharmacist.cs index ae02b76..f6611d8 100644 --- a/VetClinic/VetClinicContracts/BusinessLogicsContracts/IReportLogicPharmacist.cs +++ b/VetClinic/VetClinicContracts/BusinessLogicsContracts/IReportLogicPharmacist.cs @@ -14,7 +14,7 @@ namespace VetClinicContracts.BusinessLogicsContracts List GetServiceAnimals(List services); void SaveAnimalsToWordFile(ListAnimalsBindingModel model); void SaveAnimalsToExcelFile(ListAnimalsBindingModel model); - List GetMedicineVisitsAndGuidances(List services); + List GetMedicineVisitsAndGuidances(VisitsGuidesBindingModel services); void SaveMedicinesToPdfFile(VisitsGuidesBindingModel model); } } diff --git a/VetClinic/VetClinicContracts/ViewModels/VisitsGuidesViewModel.cs b/VetClinic/VetClinicContracts/ViewModels/VisitsGuidesViewModel.cs index f6235fb..230dbcb 100644 --- a/VetClinic/VetClinicContracts/ViewModels/VisitsGuidesViewModel.cs +++ b/VetClinic/VetClinicContracts/ViewModels/VisitsGuidesViewModel.cs @@ -12,7 +12,5 @@ namespace VetClinicDataBaseImplement.Implements public string MedicineName { get; set; } = string.Empty; public List Visits { get; set; } = new(); public List Guidances { get; set; } = new(); - public DateTime DateFrom { get; set; } = DateTime.Now; - public DateTime DateTo { get; set; } = DateTime.Now; } } diff --git a/VetClinic/VetClinicDataBaseImplement/VetClinicDatabase .cs b/VetClinic/VetClinicDataBaseImplement/VetClinicDatabase .cs index 1d9e6df..3aa2bb9 100644 --- a/VetClinic/VetClinicDataBaseImplement/VetClinicDatabase .cs +++ b/VetClinic/VetClinicDataBaseImplement/VetClinicDatabase .cs @@ -11,7 +11,7 @@ namespace VetClinicDataBaseImplement { if (optionsBuilder.IsConfigured == false) { - optionsBuilder.UseSqlServer(@"Data Source=localhost\SQLEXPRESS02;Initial Catalog=VetClinicDatabase;Integrated Security=True;MultipleActiveResultSets=True;;TrustServerCertificate=True"); + optionsBuilder.UseSqlServer(@"Data Source=localhost\SQLEXPRESS;Initial Catalog=VetClinicDatabase;Integrated Security=True;MultipleActiveResultSets=True;;TrustServerCertificate=True"); } base.OnConfiguring(optionsBuilder); } diff --git a/VetClinic/VetClinicRestApi/Controllers/ReportController.cs b/VetClinic/VetClinicRestApi/Controllers/ReportController.cs new file mode 100644 index 0000000..34ed130 --- /dev/null +++ b/VetClinic/VetClinicRestApi/Controllers/ReportController.cs @@ -0,0 +1,46 @@ +using Microsoft.AspNetCore.Mvc; +using VetClinicBusinessLogic.BusinessLogics; +using VetClinicContracts.BindingModels; +using VetClinicContracts.BusinessLogicsContracts; + +namespace VetClinicRestApi.Controllers +{ + [Route("api/[controller]/[action]")] + [ApiController] + public class ReportController : Controller + { + private readonly IReportLogicPharmacist _reportPharmacist; + public ReportController(ILogger logger, IReportLogicPharmacist reportPharmacist) + { + _reportPharmacist = reportPharmacist; + } + public IActionResult Index(ReportLogicPharmacist reportPharmacist) + { + return View(); + } + [HttpPost] + public void CreateAnimalListWordFile(ListAnimalsBindingModel model) + { + try + { + _reportPharmacist.SaveAnimalsToWordFile(model); + } + catch (Exception ex) + { + throw; + } + } + [HttpPost] + public void CreateAnimalListExcelFile(ListAnimalsBindingModel model) + { + try + { + _reportPharmacist.SaveAnimalsToExcelFile(model); + } + catch (Exception ex) + { + throw; + } + } + } +} diff --git a/VetClinic/VetClinicRestApi/Program.cs b/VetClinic/VetClinicRestApi/Program.cs index ac29eb0..0c7aa45 100644 --- a/VetClinic/VetClinicRestApi/Program.cs +++ b/VetClinic/VetClinicRestApi/Program.cs @@ -4,6 +4,8 @@ using VetClinicContracts.StoragesContracts; using VetClinicDataBaseImplement.Implements; using Microsoft.OpenApi.Models; using VetClinicBaseImplement.Implements; +using VetClinicBusinessLogic.OfficePackage; +using VetClinicBusinessLogic.OfficePackage.Implements; var builder = WebApplication.CreateBuilder(args); @@ -30,6 +32,10 @@ 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 diff --git a/VetClinic/VetClinicRestApi/VetClinicRestApi.csproj b/VetClinic/VetClinicRestApi/VetClinicRestApi.csproj index 51ac888..9c5ed23 100644 --- a/VetClinic/VetClinicRestApi/VetClinicRestApi.csproj +++ b/VetClinic/VetClinicRestApi/VetClinicRestApi.csproj @@ -1,4 +1,4 @@ - + net8.0 @@ -17,4 +17,8 @@ + + + + From bb68e9abcc98ce8d3720fd1627a2bdb152d4f6c8 Mon Sep 17 00:00:00 2001 From: gg12 darfren Date: Wed, 22 May 2024 16:31:10 +0400 Subject: [PATCH 4/5] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=BE=D1=82=D1=87=D0=B5=D1=82=20=D0=BD=D0=B0=20=D1=84=D0=BE?= =?UTF-8?q?=D1=80=D0=BC=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/HomeController.cs | 79 +++++++++++- .../PharmacistApp/Views/Home/Report.cshtml | 119 +++++++++--------- .../BusinessLogics/ReportLogicPharmacist.cs | 5 +- .../BindingModels/VisitsGuidesBindingModel.cs | 1 - .../Implements/MedicineStorage.cs | 10 -- .../Implements/VisitsGuidesViewModel.cs | 16 --- .../20240428120220_InitialCreate.Designer.cs | 2 +- .../VetClinicDatabaseModelSnapshot.cs | 2 +- .../Controllers/ReportController.cs | 18 +++ 9 files changed, 159 insertions(+), 93 deletions(-) delete mode 100644 VetClinic/VetClinicDataBaseImplement/Implements/VisitsGuidesViewModel.cs diff --git a/VetClinic/PharmacistApp/Controllers/HomeController.cs b/VetClinic/PharmacistApp/Controllers/HomeController.cs index 853f532..d7c6935 100644 --- a/VetClinic/PharmacistApp/Controllers/HomeController.cs +++ b/VetClinic/PharmacistApp/Controllers/HomeController.cs @@ -2,11 +2,13 @@ using NPOI.SS.UserModel; using PharmacistApp.Models; using System.Diagnostics; +using System.Globalization; using System.Text; using VetClinicContracts.BindingModels; using VetClinicContracts.BusinessLogicsContracts; using VetClinicContracts.SearchModels; using VetClinicContracts.ViewModels; +using VetClinicDataBaseImplement.Implements; using VetClinicDataBaseImplement.Models; using VetClinicDataModels.Models; @@ -28,8 +30,7 @@ namespace PharmacistApp.Controllers return Redirect("~/Home/Enter"); } return -View(APIPharmacist.GetRequest>($"api/medicine/getmedicines?pharmacistid={ - APIPharmacist.Pharmacist.Id}")); +View(APIPharmacist.GetRequest>($"api/medicine/getmedicines?pharmacistid={APIPharmacist.Pharmacist.Id}")); } @@ -144,7 +145,7 @@ View(APIPharmacist.GetRequest>($"api/medicine/getmedicin { _price = Convert.ToDouble(price); } - catch(Exception ex) + catch (Exception ex) { throw new Exception("Ошибка в введенных данных"); } @@ -158,7 +159,7 @@ View(APIPharmacist.GetRequest>($"api/medicine/getmedicin MedicineName = name, Price = Math.Round(_price, 2), PharmacistId = APIPharmacist.Pharmacist.Id - }) ; + }); Response.Redirect("Index"); } @@ -254,7 +255,7 @@ View(APIPharmacist.GetRequest>($"api/medicine/getmedicin throw new Exception("Вы как сюда попали? Сюда вход только авторизованным"); } StringBuilder st = new StringBuilder(price); - for(int i = 0; i < price.Length; i++) + for (int i = 0; i < price.Length; i++) { if (price[i] == '.') st[i] = ','; @@ -647,8 +648,76 @@ View(res); [HttpGet] public IActionResult Report() { + ViewBag.Report = new List(); return View(); } + + [HttpGet] + public string GetAnimalsReport(DateTime dateFrom, DateTime dateTo) + { + if (APIPharmacist.Pharmacist == null) + { + throw new Exception("Вы как суда попали? Суда вход только авторизованным"); + } + List result; + try + { + string dateFromS = dateFrom.ToString("s", CultureInfo.InvariantCulture); + string dateToS = dateTo.ToString("s", CultureInfo.InvariantCulture); + result = APIPharmacist.GetRequest> + ($"api/report/getvisitsguidesreport?datefrom={dateFromS}&dateto={dateToS}")!; + + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка создания отчета"); + throw; + } + string table = ""; + table += "

Предварительный отчет

"; + table += "
"; + table += ""; + table += ""; + table += ""; + table += ""; + table += ""; + table += ""; + table += ""; + table += ""; + table += ""; + foreach (var medicine in result) + { + table += ""; + table += ""; + table += $""; + table += $""; + table += $""; + table += $""; + table += ""; + foreach(var guidance in medicine.Guidances) + { + table += ""; + table += $""; + table += $""; + table += $""; + table += $""; + table += ""; + } + foreach (var visit in medicine.Visits) + { + table += ""; + table += $""; + table += $""; + table += $""; + table += $""; + table += ""; + } + table += ""; + } + table += "
ДатаНазвание медикаментаУслуга рекомендацииНазвание визита
{medicine.MedicineName}
{guidance.Date}{guidance.ServiceName}
{visit.DateVisit}{visit.NameVisit}
"; + table += "
"; + return table; + } } } diff --git a/VetClinic/PharmacistApp/Views/Home/Report.cshtml b/VetClinic/PharmacistApp/Views/Home/Report.cshtml index 3c90865..3ac7296 100644 --- a/VetClinic/PharmacistApp/Views/Home/Report.cshtml +++ b/VetClinic/PharmacistApp/Views/Home/Report.cshtml @@ -1,60 +1,67 @@  + @{ - ViewData["Title"] = "Report"; + ViewData["Title"] = "Report"; } -
-

Список медикаментов с расшифровкой по визитам и рекомендациям

+ +
+
+

Отчет по медикаментам за период

+
+ +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+ +
+
-
- @{ - // if (Model == null) - // { - //

Будь добр, дружок, зайди!

- // return; - // } -
-
Начальная дата:
-
- -
-
-
-
Конечная дата:
-
- -
-
- - - - - - - - - - - - будет заполняться вьюшками отчета - -
- Номер - - Дата - - Медикамент - - Визит - - Рекомендация -
-
-
-
-
-
-
-
-
- } -
\ No newline at end of file + +@section Scripts { + +} \ No newline at end of file diff --git a/VetClinic/VetClinicBusinessLogic/BusinessLogics/ReportLogicPharmacist.cs b/VetClinic/VetClinicBusinessLogic/BusinessLogics/ReportLogicPharmacist.cs index 9e77022..d449088 100644 --- a/VetClinic/VetClinicBusinessLogic/BusinessLogics/ReportLogicPharmacist.cs +++ b/VetClinic/VetClinicBusinessLogic/BusinessLogics/ReportLogicPharmacist.cs @@ -92,12 +92,11 @@ namespace VetClinicBusinessLogic.BusinessLogics public List GetMedicineVisitsAndGuidances(VisitsGuidesBindingModel model) { - var medicines = model.Medicines; List ans = new(); List>>>> responseGuides = - _medicineStorage.GetGuidancesInfo(new VisitGuidesSearchModel { medicinesIds = medicines, DateFrom = model.DateFrom!, DateTo = model.DateTo!}); + _medicineStorage.GetGuidancesInfo(new VisitGuidesSearchModel { DateFrom = model.DateFrom!, DateTo = model.DateTo!}); List>>>> responseVisits = - _medicineStorage.GetVisitsInfo(new VisitGuidesSearchModel { medicinesIds = medicines, DateFrom = model.DateFrom!, DateTo = model.DateTo! }); + _medicineStorage.GetVisitsInfo(new VisitGuidesSearchModel { DateFrom = model.DateFrom!, DateTo = model.DateTo! }); Dictionary dict = new(); foreach(var medicine in responseGuides) diff --git a/VetClinic/VetClinicContracts/BindingModels/VisitsGuidesBindingModel.cs b/VetClinic/VetClinicContracts/BindingModels/VisitsGuidesBindingModel.cs index 53f1908..c95a0ab 100644 --- a/VetClinic/VetClinicContracts/BindingModels/VisitsGuidesBindingModel.cs +++ b/VetClinic/VetClinicContracts/BindingModels/VisitsGuidesBindingModel.cs @@ -9,7 +9,6 @@ namespace VetClinicContracts.BindingModels public class VisitsGuidesBindingModel { public string FileName { get; set; } = string.Empty; - public List Medicines { get; set; } = new(); public DateTime DateFrom { get; set; } = DateTime.Now; public DateTime DateTo { get; set; } = DateTime.Now; } diff --git a/VetClinic/VetClinicDataBaseImplement/Implements/MedicineStorage.cs b/VetClinic/VetClinicDataBaseImplement/Implements/MedicineStorage.cs index e5932ab..2e17952 100644 --- a/VetClinic/VetClinicDataBaseImplement/Implements/MedicineStorage.cs +++ b/VetClinic/VetClinicDataBaseImplement/Implements/MedicineStorage.cs @@ -35,13 +35,8 @@ namespace VetClinicDataBaseImplement.Implements } public List>>>> GetGuidancesInfo(VisitGuidesSearchModel model) { - if (model.medicinesIds == null) - { - return new(); - } using var context = new VetClinicDatabase(); return context.Medicines - .Where(medicine => model.medicinesIds.Contains(medicine.Id)) .Select(medicine => new Tuple>>>(medicine.GetViewModel, context.ServiceMedicines.Include(service => service.Service) .Include(service => service.Medicine).Where(service => medicine.Id == service.MedicineId). @@ -52,13 +47,8 @@ namespace VetClinicDataBaseImplement.Implements } public List>>>> GetVisitsInfo(VisitGuidesSearchModel model) { - if (model.medicinesIds == null) - { - return new(); - } using var context = new VetClinicDatabase(); return context.Medicines - .Where(medicine => model.medicinesIds.Contains(medicine.Id)) .Select(medicine => new Tuple>>>(medicine.GetViewModel, context.ServiceMedicines.Include(service => service.Service) .Include(service => service.Medicine).Where(service => medicine.Id == service.MedicineId). diff --git a/VetClinic/VetClinicDataBaseImplement/Implements/VisitsGuidesViewModel.cs b/VetClinic/VetClinicDataBaseImplement/Implements/VisitsGuidesViewModel.cs deleted file mode 100644 index 549f058..0000000 --- a/VetClinic/VetClinicDataBaseImplement/Implements/VisitsGuidesViewModel.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using VetClinicContracts.ViewModels; - -namespace VetClinicDataBaseImplement.Implements -{ - public class VisitsGuidesViewModel - { - string MedicineName { get; set; } = string.Empty; - List Visits { get; set; } = new(); - List Guidances { get; set; } = new(); - } -} diff --git a/VetClinic/VetClinicDataBaseImplement/Migrations/20240428120220_InitialCreate.Designer.cs b/VetClinic/VetClinicDataBaseImplement/Migrations/20240428120220_InitialCreate.Designer.cs index 986e936..a80c663 100644 --- a/VetClinic/VetClinicDataBaseImplement/Migrations/20240428120220_InitialCreate.Designer.cs +++ b/VetClinic/VetClinicDataBaseImplement/Migrations/20240428120220_InitialCreate.Designer.cs @@ -5,7 +5,7 @@ using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using VetClinicDataBaseImplement; +using VetClinicContracts.ViewModels; #nullable disable diff --git a/VetClinic/VetClinicDataBaseImplement/Migrations/VetClinicDatabaseModelSnapshot.cs b/VetClinic/VetClinicDataBaseImplement/Migrations/VetClinicDatabaseModelSnapshot.cs index ce5bfb5..0dfdfde 100644 --- a/VetClinic/VetClinicDataBaseImplement/Migrations/VetClinicDatabaseModelSnapshot.cs +++ b/VetClinic/VetClinicDataBaseImplement/Migrations/VetClinicDatabaseModelSnapshot.cs @@ -4,7 +4,7 @@ using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using VetClinicDataBaseImplement; +using VetClinicContracts.ViewModels; #nullable disable diff --git a/VetClinic/VetClinicRestApi/Controllers/ReportController.cs b/VetClinic/VetClinicRestApi/Controllers/ReportController.cs index 34ed130..f2c227d 100644 --- a/VetClinic/VetClinicRestApi/Controllers/ReportController.cs +++ b/VetClinic/VetClinicRestApi/Controllers/ReportController.cs @@ -2,6 +2,7 @@ using VetClinicBusinessLogic.BusinessLogics; using VetClinicContracts.BindingModels; using VetClinicContracts.BusinessLogicsContracts; +using VetClinicDataBaseImplement.Implements; namespace VetClinicRestApi.Controllers { @@ -42,5 +43,22 @@ namespace VetClinicRestApi.Controllers throw; } } + [HttpGet] + public List GetVisitsGuidesReport(string dateFrom, string dateTo) + { + try + { + DateTime DateFrom = DateTime.Parse(dateFrom); + DateTime DateTo = DateTime.Parse(dateTo); + VisitsGuidesBindingModel model = new(); + model.DateFrom = DateFrom; + model.DateTo = DateTo; + return _reportPharmacist.GetMedicineVisitsAndGuidances(model); + } + catch (Exception ex) + { + throw; + } + } } } From 67b8f12ede1c8ccc2511af289792d14ddf72ee29 Mon Sep 17 00:00:00 2001 From: gg12 darfren Date: Wed, 22 May 2024 19:33:25 +0400 Subject: [PATCH 5/5] =?UTF-8?q?=D0=92=D0=B8=D0=B4=D0=B0=D1=82=D1=8C=20?= =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20(=D0=BF=D0=BE=20=D0=BB?= =?UTF-8?q?=D1=8E=D0=B1=D0=B0=D1=81=D1=83=20=D0=B5=D1=89=D0=B5=20=D1=87?= =?UTF-8?q?=D0=B5=D1=82=20=D0=B4=D0=BE=D0=BF=D0=B8=D0=BB=D0=B8=D0=B2=D0=B0?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BF=D1=80=D0=B8=D0=B4=D0=B5=D1=82=D1=81=D1=8F?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/HomeController.cs | 24 ++++++- .../BusinessLogics/ReportLogicPharmacist.cs | 4 +- .../MailWorker/AbstractMailWorker.cs | 64 ++++++++++++++++++ .../MailWorker/MailWorker.cs | 50 ++++++++++++++ .../AbstractSaveToPdfPharmacist.cs | 66 +++++-------------- .../BindingModels/MailConfigBindingModel.cs | 18 +++++ .../BindingModels/MailSendInfoBindingModel.cs | 15 +++++ .../BindingModels/VisitsGuidesBindingModel.cs | 2 + .../SearchModels/VisitGuidesSearchModel.cs | 1 + .../Implements/MedicineStorage.cs | 6 +- .../Controllers/ReportController.cs | 29 +++++++- VetClinic/VetClinicRestApi/Program.cs | 22 +++++++ VetClinic/VetClinicRestApi/appsettings.json | 8 ++- 13 files changed, 249 insertions(+), 60 deletions(-) create mode 100644 VetClinic/VetClinicBusinessLogic/MailWorker/AbstractMailWorker.cs create mode 100644 VetClinic/VetClinicBusinessLogic/MailWorker/MailWorker.cs create mode 100644 VetClinic/VetClinicContracts/BindingModels/MailConfigBindingModel.cs create mode 100644 VetClinic/VetClinicContracts/BindingModels/MailSendInfoBindingModel.cs diff --git a/VetClinic/PharmacistApp/Controllers/HomeController.cs b/VetClinic/PharmacistApp/Controllers/HomeController.cs index d7c6935..fb3c334 100644 --- a/VetClinic/PharmacistApp/Controllers/HomeController.cs +++ b/VetClinic/PharmacistApp/Controllers/HomeController.cs @@ -665,7 +665,7 @@ View(res); string dateFromS = dateFrom.ToString("s", CultureInfo.InvariantCulture); string dateToS = dateTo.ToString("s", CultureInfo.InvariantCulture); result = APIPharmacist.GetRequest> - ($"api/report/getvisitsguidesreport?datefrom={dateFromS}&dateto={dateToS}")!; + ($"api/report/getvisitsguidesreport?datefrom={dateFromS}&dateto={dateToS}&pharmacistid={APIPharmacist.Pharmacist.Id}")!; } catch (Exception ex) @@ -718,6 +718,26 @@ View(res); table += "
"; return table; } - } + + [HttpPost] + public void Report(DateTime dateFrom, DateTime dateTo) + { + if (APIPharmacist.Pharmacist == null) + { + throw new Exception("Вы как суда попали? Суда вход только авторизованным"); + } + APIPharmacist.PostRequest("api/report/sendvisitsguidesreporttoemail", new VisitsGuidesBindingModel + { + FileName = "C:\\ReportsCourseWork\\pdffile.pdf", + PharmacistId = APIPharmacist.Pharmacist.Id, + DateFrom = dateFrom, + DateTo = dateTo, + Email = APIPharmacist.Pharmacist.Email + + }); + Response.Redirect("Report"); + + } + } } diff --git a/VetClinic/VetClinicBusinessLogic/BusinessLogics/ReportLogicPharmacist.cs b/VetClinic/VetClinicBusinessLogic/BusinessLogics/ReportLogicPharmacist.cs index d449088..9ec9b53 100644 --- a/VetClinic/VetClinicBusinessLogic/BusinessLogics/ReportLogicPharmacist.cs +++ b/VetClinic/VetClinicBusinessLogic/BusinessLogics/ReportLogicPharmacist.cs @@ -94,9 +94,9 @@ namespace VetClinicBusinessLogic.BusinessLogics { List ans = new(); List>>>> responseGuides = - _medicineStorage.GetGuidancesInfo(new VisitGuidesSearchModel { DateFrom = model.DateFrom!, DateTo = model.DateTo!}); + _medicineStorage.GetGuidancesInfo(new VisitGuidesSearchModel { DateFrom = model.DateFrom!, DateTo = model.DateTo!, PharmacistId = model.PharmacistId!}); List>>>> responseVisits = - _medicineStorage.GetVisitsInfo(new VisitGuidesSearchModel { DateFrom = model.DateFrom!, DateTo = model.DateTo! }); + _medicineStorage.GetVisitsInfo(new VisitGuidesSearchModel { DateFrom = model.DateFrom!, DateTo = model.DateTo!, PharmacistId = model.PharmacistId! }); Dictionary dict = new(); foreach(var medicine in responseGuides) diff --git a/VetClinic/VetClinicBusinessLogic/MailWorker/AbstractMailWorker.cs b/VetClinic/VetClinicBusinessLogic/MailWorker/AbstractMailWorker.cs new file mode 100644 index 0000000..e484fa6 --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/MailWorker/AbstractMailWorker.cs @@ -0,0 +1,64 @@ +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VetClinicContracts.BindingModels; +using VetClinicContracts.BusinessLogicsContracts; + +namespace VetClinicBusinessLogic.MailWorker +{ + public abstract class AbstractMailWorker + { + protected string _mailLogin = string.Empty; + protected string _mailPassword = string.Empty; + protected string _smtpClientHost = string.Empty; + protected int _smtpClientPort; + protected string _popHost = string.Empty; + protected int _popPort; + private readonly IPharmacistLogic _pharmacistLogic; + private readonly ILogger _logger; + + public AbstractMailWorker(ILogger logger, IPharmacistLogic pharmacistLogic) + { + _logger = logger; + _pharmacistLogic = pharmacistLogic; + } + + public void MailConfig(MailConfigBindingModel config) + { + _mailLogin = config.MailLogin; + _mailPassword = config.MailPassword; + _smtpClientHost = config.SmtpClientHost; + _smtpClientPort = config.SmtpClientPort; + _popHost = config.PopHost; + _popPort = config.PopPort; + _logger.LogDebug("Config: {login}, {password}, {clientHost}, {clientPOrt}, {popHost}, {popPort}", _mailLogin, _mailPassword, _smtpClientHost, _smtpClientPort, _popHost, _popPort); + } + + public async void MailSendAsync(MailSendInfoBindingModel info) + { + if (string.IsNullOrEmpty(_mailLogin) || string.IsNullOrEmpty(_mailPassword)) + { + return; + } + + if (string.IsNullOrEmpty(_smtpClientHost) || _smtpClientPort == 0) + { + return; + } + + if (string.IsNullOrEmpty(info.MailAddress) || string.IsNullOrEmpty(info.Subject) || string.IsNullOrEmpty(info.Text)) + { + return; + } + + _logger.LogDebug("Send Mail: {To}, {Subject}", info.MailAddress, info.Subject); + + await SendMailAsync(info); + } + + protected abstract Task SendMailAsync(MailSendInfoBindingModel info); + } +} diff --git a/VetClinic/VetClinicBusinessLogic/MailWorker/MailWorker.cs b/VetClinic/VetClinicBusinessLogic/MailWorker/MailWorker.cs new file mode 100644 index 0000000..77f50f5 --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/MailWorker/MailWorker.cs @@ -0,0 +1,50 @@ +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Mail; +using System.Net.Mime; +using System.Net; +using System.Text; +using System.Threading.Tasks; +using VetClinicContracts.BindingModels; +using VetClinicContracts.BusinessLogicsContracts; + +namespace VetClinicBusinessLogic.MailWorker +{ + public class MailKitWorker : AbstractMailWorker + { + public MailKitWorker(ILogger logger, IPharmacistLogic pharmacistLogic) : base(logger, pharmacistLogic) { } + + protected override async Task SendMailAsync(MailSendInfoBindingModel info) + { + using var objMailMessage = new MailMessage(); + using var objSmtpClient = new SmtpClient(_smtpClientHost, _smtpClientPort); + + try + { + objMailMessage.From = new MailAddress(_mailLogin); + objMailMessage.To.Add(new MailAddress(info.MailAddress)); + objMailMessage.Subject = info.Subject; + objMailMessage.Body = info.Text; + objMailMessage.SubjectEncoding = Encoding.UTF8; + objMailMessage.BodyEncoding = Encoding.UTF8; + Attachment attachment = new Attachment("C:\\ReportsCourseWork\\pdffile.pdf", new ContentType(MediaTypeNames.Application.Pdf)); + objMailMessage.Attachments.Add(attachment); + + objSmtpClient.UseDefaultCredentials = false; + objSmtpClient.EnableSsl = true; + objSmtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; + objSmtpClient.Credentials = new NetworkCredential(_mailLogin, _mailPassword); + + await Task.Run(() => objSmtpClient.Send(objMailMessage)); + } + catch (Exception) + { + throw; + } + } + + + } +} diff --git a/VetClinic/VetClinicBusinessLogic/OfficePackage/AbstractSaveToPdfPharmacist.cs b/VetClinic/VetClinicBusinessLogic/OfficePackage/AbstractSaveToPdfPharmacist.cs index f739cd7..bb3dee7 100644 --- a/VetClinic/VetClinicBusinessLogic/OfficePackage/AbstractSaveToPdfPharmacist.cs +++ b/VetClinic/VetClinicBusinessLogic/OfficePackage/AbstractSaveToPdfPharmacist.cs @@ -27,68 +27,36 @@ namespace VetClinicBusinessLogic.OfficePackage = "Normal", ParagraphAlignment = PdfParagraphAlignmentType.Center }); - CreateTable(new List { "2cm", "3cm", "6cm", "3cm" }); + CreateTable(new List { "4cm", "4cm", "4cm", "4cm" }); CreateRow(new PdfRowParameters { - Texts = new List { "Номер", "Дата заказа", "Изделие", -"Сумма" }, + Texts = new List { "Дата", "Название медикамента", "Услуга рекомендации", +"Название визита" }, Style = "NormalTitle", ParagraphAlignment = PdfParagraphAlignmentType.Center }); foreach (var medicine in info.Medicines) { - CreateParagraph(new PdfParagraph - { - Text = medicine.MedicineName, - Style - = "NormalTitle", - ParagraphAlignment = PdfParagraphAlignmentType.Center - }); - - - CreateParagraph(new PdfParagraph - { - Text = "Визиты", - Style - = "NormalTitle", - ParagraphAlignment = PdfParagraphAlignmentType.Left - }); - CreateTable(new List { "4cm", "4cm", "6cm" }); - CreateRow(new PdfRowParameters - { - Texts = new List { "Номер", "Дата визита", "Навзание визита"}, - Style = "NormalTitle", - ParagraphAlignment = PdfParagraphAlignmentType.Center - }); + CreateRow(new PdfRowParameters + { + Texts = new List { "", medicine.MedicineName, "", "" }, + Style = "NormalTitle", + ParagraphAlignment = PdfParagraphAlignmentType.Center + }); foreach(var visit in medicine.Visits) { - CreateRow(new PdfRowParameters - { - Texts = new List { visit.Id.ToString(), visit.DateVisit.ToString(), visit.NameVisit}, - Style = "Normal", - ParagraphAlignment = PdfParagraphAlignmentType.Center - }); - } - - CreateParagraph(new PdfParagraph - { - Text = "Рекомендации", - Style - = "NormalTitle", - ParagraphAlignment = PdfParagraphAlignmentType.Center - }); - CreateTable(new List { "4cm", "4cm", "6cm" }); - CreateRow(new PdfRowParameters - { - Texts = new List { "Номер", "Дата рекомендации", "Название услуги" }, - Style = "NormalTitle", - ParagraphAlignment = PdfParagraphAlignmentType.Center - }); + CreateRow(new PdfRowParameters + { + Texts = new List { visit.DateVisit.ToString(), "", "", visit.NameVisit }, + Style = "Normal", + ParagraphAlignment = PdfParagraphAlignmentType.Center + }); + } foreach (var guidance in medicine.Guidances) { CreateRow(new PdfRowParameters { - Texts = new List { guidance.Id.ToString(), guidance.Date.ToString(), guidance.ServiceName }, + Texts = new List { guidance.Date.ToString(), "", guidance.ServiceName, "" }, Style = "Normal", ParagraphAlignment = PdfParagraphAlignmentType.Center }); diff --git a/VetClinic/VetClinicContracts/BindingModels/MailConfigBindingModel.cs b/VetClinic/VetClinicContracts/BindingModels/MailConfigBindingModel.cs new file mode 100644 index 0000000..b95217f --- /dev/null +++ b/VetClinic/VetClinicContracts/BindingModels/MailConfigBindingModel.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VetClinicContracts.BindingModels +{ + public class MailConfigBindingModel + { + public string MailLogin { get; set; } = string.Empty; + public string MailPassword { get; set; } = string.Empty; + public string SmtpClientHost { get; set; } = string.Empty; + public int SmtpClientPort { get; set; } + public string PopHost { get; set; } = string.Empty; + public int PopPort { get; set; } + } +} diff --git a/VetClinic/VetClinicContracts/BindingModels/MailSendInfoBindingModel.cs b/VetClinic/VetClinicContracts/BindingModels/MailSendInfoBindingModel.cs new file mode 100644 index 0000000..df45f6e --- /dev/null +++ b/VetClinic/VetClinicContracts/BindingModels/MailSendInfoBindingModel.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VetClinicContracts.BindingModels +{ + public class MailSendInfoBindingModel + { + public string MailAddress { get; set; } = string.Empty; + public string Subject { get; set; } = string.Empty; + public string Text { get; set; } = string.Empty; + } +} diff --git a/VetClinic/VetClinicContracts/BindingModels/VisitsGuidesBindingModel.cs b/VetClinic/VetClinicContracts/BindingModels/VisitsGuidesBindingModel.cs index c95a0ab..2a605d1 100644 --- a/VetClinic/VetClinicContracts/BindingModels/VisitsGuidesBindingModel.cs +++ b/VetClinic/VetClinicContracts/BindingModels/VisitsGuidesBindingModel.cs @@ -11,5 +11,7 @@ namespace VetClinicContracts.BindingModels public string FileName { get; set; } = string.Empty; public DateTime DateFrom { get; set; } = DateTime.Now; public DateTime DateTo { get; set; } = DateTime.Now; + public int? PharmacistId { get; set; } + public string? Email { get; set; } } } diff --git a/VetClinic/VetClinicContracts/SearchModels/VisitGuidesSearchModel.cs b/VetClinic/VetClinicContracts/SearchModels/VisitGuidesSearchModel.cs index c25ab26..d9e777d 100644 --- a/VetClinic/VetClinicContracts/SearchModels/VisitGuidesSearchModel.cs +++ b/VetClinic/VetClinicContracts/SearchModels/VisitGuidesSearchModel.cs @@ -11,5 +11,6 @@ namespace VetClinicContracts.SearchModels public List? medicinesIds { get; set; } public DateTime? DateFrom { get; set; } public DateTime? DateTo { get; set; } + public int? PharmacistId { get; set; } } } diff --git a/VetClinic/VetClinicDataBaseImplement/Implements/MedicineStorage.cs b/VetClinic/VetClinicDataBaseImplement/Implements/MedicineStorage.cs index 2e17952..25abd25 100644 --- a/VetClinic/VetClinicDataBaseImplement/Implements/MedicineStorage.cs +++ b/VetClinic/VetClinicDataBaseImplement/Implements/MedicineStorage.cs @@ -36,7 +36,7 @@ namespace VetClinicDataBaseImplement.Implements public List>>>> GetGuidancesInfo(VisitGuidesSearchModel model) { using var context = new VetClinicDatabase(); - return context.Medicines + return context.Medicines.Where(medicine => medicine.PharmacistId == model.PharmacistId) .Select(medicine => new Tuple>>>(medicine.GetViewModel, context.ServiceMedicines.Include(service => service.Service) .Include(service => service.Medicine).Where(service => medicine.Id == service.MedicineId). @@ -48,8 +48,8 @@ namespace VetClinicDataBaseImplement.Implements public List>>>> GetVisitsInfo(VisitGuidesSearchModel model) { using var context = new VetClinicDatabase(); - return context.Medicines - .Select(medicine => new Tuple>>>(medicine.GetViewModel, + return context.Medicines.Where(medicine => medicine.PharmacistId == model.PharmacistId) + .Select(medicine => new Tuple>>>(medicine.GetViewModel, context.ServiceMedicines.Include(service => service.Service) .Include(service => service.Medicine).Where(service => medicine.Id == service.MedicineId). Select(service => new Tuple>(service.Service.GetViewModel, diff --git a/VetClinic/VetClinicRestApi/Controllers/ReportController.cs b/VetClinic/VetClinicRestApi/Controllers/ReportController.cs index f2c227d..2ecffa6 100644 --- a/VetClinic/VetClinicRestApi/Controllers/ReportController.cs +++ b/VetClinic/VetClinicRestApi/Controllers/ReportController.cs @@ -1,5 +1,6 @@ using Microsoft.AspNetCore.Mvc; using VetClinicBusinessLogic.BusinessLogics; +using VetClinicBusinessLogic.MailWorker; using VetClinicContracts.BindingModels; using VetClinicContracts.BusinessLogicsContracts; using VetClinicDataBaseImplement.Implements; @@ -11,9 +12,11 @@ namespace VetClinicRestApi.Controllers public class ReportController : Controller { private readonly IReportLogicPharmacist _reportPharmacist; - public ReportController(ILogger logger, IReportLogicPharmacist reportPharmacist) + private readonly AbstractMailWorker _mailWorker; + public ReportController(ILogger logger, IReportLogicPharmacist reportPharmacist,AbstractMailWorker mailWorker) { _reportPharmacist = reportPharmacist; + _mailWorker = mailWorker; } public IActionResult Index(ReportLogicPharmacist reportPharmacist) { @@ -44,7 +47,7 @@ namespace VetClinicRestApi.Controllers } } [HttpGet] - public List GetVisitsGuidesReport(string dateFrom, string dateTo) + public List GetVisitsGuidesReport(string dateFrom, string dateTo, int pharmacistId) { try { @@ -53,6 +56,7 @@ namespace VetClinicRestApi.Controllers VisitsGuidesBindingModel model = new(); model.DateFrom = DateFrom; model.DateTo = DateTo; + model.PharmacistId = pharmacistId; return _reportPharmacist.GetMedicineVisitsAndGuidances(model); } catch (Exception ex) @@ -60,5 +64,24 @@ namespace VetClinicRestApi.Controllers throw; } } - } + + [HttpPost] + public void SendVisitsGuidesReportToEmail(VisitsGuidesBindingModel model) + { + try + { + _reportPharmacist.SaveMedicinesToPdfFile(model); + _mailWorker.MailSendAsync(new MailSendInfoBindingModel + { + MailAddress = model.Email!, + Subject = "Отчет по медикаментам", + Text = "Лови" + }); + } + catch (Exception ex) + { + throw; + } + } + } } diff --git a/VetClinic/VetClinicRestApi/Program.cs b/VetClinic/VetClinicRestApi/Program.cs index 0c7aa45..da7360b 100644 --- a/VetClinic/VetClinicRestApi/Program.cs +++ b/VetClinic/VetClinicRestApi/Program.cs @@ -6,6 +6,8 @@ using Microsoft.OpenApi.Models; using VetClinicBaseImplement.Implements; using VetClinicBusinessLogic.OfficePackage; using VetClinicBusinessLogic.OfficePackage.Implements; +using VetClinicBusinessLogic.MailWorker; +using VetClinicContracts.BindingModels; var builder = WebApplication.CreateBuilder(args); @@ -36,6 +38,8 @@ builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); +builder.Services.AddSingleton(); + builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle @@ -46,6 +50,24 @@ builder.Services.AddSwaggerGen(c => c.SwaggerDoc("v1", new OpenApiInfo { Title = "VetClinicRestApi", Version = "v1" }); }); var app = builder.Build(); +var mailSender = app.Services.GetService(); +mailSender?.MailConfig(new MailConfigBindingModel +{ + MailLogin = builder.Configuration?.GetSection("MailLogin")?.Value?.ToString() +?? string.Empty, + MailPassword = +builder.Configuration?.GetSection("MailPassword")?.Value?.ToString() ?? +string.Empty, + SmtpClientHost = +builder.Configuration?.GetSection("SmtpClientHost")?.Value?.ToString() ?? +string.Empty, + SmtpClientPort = +Convert.ToInt32(builder.Configuration?.GetSection("SmtpClientPort")?.Value?.ToString()), + PopHost = builder.Configuration?.GetSection("PopHost")?.Value?.ToString() ?? +string.Empty, + PopPort = Convert.ToInt32(builder.Configuration?.GetSection("PopPort")?.Value?.ToString()) +}); + // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) diff --git a/VetClinic/VetClinicRestApi/appsettings.json b/VetClinic/VetClinicRestApi/appsettings.json index 10f68b8..01ad592 100644 --- a/VetClinic/VetClinicRestApi/appsettings.json +++ b/VetClinic/VetClinicRestApi/appsettings.json @@ -5,5 +5,11 @@ "Microsoft.AspNetCore": "Warning" } }, - "AllowedHosts": "*" + "AllowedHosts": "*", + "SmtpClientHost": "smtp.gmail.com", + "SmtpClientPort": "587", + "PopHost": "pop.gmail.com", + "PopPort": "995", + "MailLogin": "sasda3183@gmail.com", + "MailPassword": "ozxp vjof uinv fcmj" }