From 34f93c712a3d04cc8d3dece192429d9bd92c6642 Mon Sep 17 00:00:00 2001 From: antoc0der <1@DESKTOP-K1L8ND3> Date: Fri, 3 May 2024 00:39:48 +0400 Subject: [PATCH 1/2] =?UTF-8?q?=D0=B2=D1=81=D1=8F=D0=BA=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=BA=D0=BE=D0=BB=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StorageContracts/IMedicationStorage.cs | 3 ++- .../Implements/MedicationStorage.cs | 18 +++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/VeterinaryView/VeterinaryContracts/StorageContracts/IMedicationStorage.cs b/VeterinaryView/VeterinaryContracts/StorageContracts/IMedicationStorage.cs index 65bae8e..dafe501 100644 --- a/VeterinaryView/VeterinaryContracts/StorageContracts/IMedicationStorage.cs +++ b/VeterinaryView/VeterinaryContracts/StorageContracts/IMedicationStorage.cs @@ -13,10 +13,11 @@ namespace VeterinaryContracts.StorageContracts { List GetFullList(); List GetFilteredList(MedicationSearchModel model); - List>>>> GetReportInfo(ListPurchasesSearchModel model); MedicationViewModel? GetElement(MedicationSearchModel model); MedicationViewModel? Insert(MedicationBindingModel model); MedicationViewModel? Update(MedicationBindingModel model); MedicationViewModel? Delete(MedicationBindingModel model); + List GetReportMedicationPurchasesList(ListPurchasesSearchModel model); + } } diff --git a/VeterinaryView/VeterinaryDatabaseImplement/Implements/MedicationStorage.cs b/VeterinaryView/VeterinaryDatabaseImplement/Implements/MedicationStorage.cs index ecb62af..464841d 100644 --- a/VeterinaryView/VeterinaryDatabaseImplement/Implements/MedicationStorage.cs +++ b/VeterinaryView/VeterinaryDatabaseImplement/Implements/MedicationStorage.cs @@ -83,7 +83,7 @@ namespace VeterinaryDatabaseImplement.Implements return null; } - public List>>>> GetReportInfo(ListPurchasesSearchModel model) + public List GetReportMedicationPurchasesList(ListPurchasesSearchModel model) { if (model.medicationsIds == null) { @@ -91,14 +91,14 @@ namespace VeterinaryDatabaseImplement.Implements } using var context = new VeterinaryDatabase(); return context.Medications - .Where(pet => model.medicationsIds.Contains(pet.Id)) - .Select(pet => new Tuple>>>(pet.GetViewModel, - context.VisitPets.Include(visit => visit.Visit) - .Include(visit => visit.Pet).Where(visit => pet.Id == visit.PetId). - Select(visit => new Tuple>(visit.Visit.GetViewModel, - context.Services.Include(x => x.Visits).Where(x => x.MedicineId == visit.Medicine.Id). - Select(x => x.Animal.GetViewModel).ToList())).ToList())).ToList(); - + .Where(medication => model.medicationsIds == null || model.medicationsIds.Contains(medication.Id)) + .Select(medication => new ReportPurchaseMedicationViewModel() + { + MedicationName = medication.MedicationName, + Purchases = context.Purchases.Include(purchase => purchase.Drug).ThenInclude(drug => drug.Medications) + .Where(purchase => purchase.Drug != null && purchase.Drug.Medications.Select(x => x.MedicationId).ToList().Contains(medication.Id)) + .Select(purchase => purchase.GetViewModel).ToList() + }).ToList(); } } } From 71e4bc5d345c963327e12bb68ab0a8cb081c2afd Mon Sep 17 00:00:00 2001 From: antoc0der <1@DESKTOP-K1L8ND3> Date: Fri, 3 May 2024 01:26:19 +0400 Subject: [PATCH 2/2] =?UTF-8?q?2=20=D0=AD=D0=A2=D0=90=D0=9F=20-=20=D0=92?= =?UTF-8?q?=20=D0=A1=20=D0=81=20!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessLogic/ReportLogicDoctor.cs | 49 ++++--------------- .../OfficePackage/HelperModels/PdfInfo.cs | 9 ++-- .../ReportDrugsVisitsBindingModel.cs | 16 ++++++ .../IReportLogicDoctor.cs | 5 +- .../ReportDrugsVisitsSearchModel.cs | 15 ++++++ .../StorageContracts/IMedicationStorage.cs | 2 + .../ViewModels/ReportDrugsVisitsViewModel.cs | 15 ++++++ .../ViewModels/ReportVisitsDrugsViewModel.cs | 6 +-- .../ViewModels/VisitViewModel.cs | 2 +- .../Implements/MedicationStorage.cs | 28 +++++++++++ .../Implements/PetStorage.cs | 25 ++++++++++ .../Controllers/HomeController.cs | 8 +++ .../Controllers/HomeController.cs | 10 +++- .../Views/Home/Report.cshtml | 5 -- 14 files changed, 141 insertions(+), 54 deletions(-) create mode 100644 VeterinaryView/VeterinaryContracts/BindingModels/ReportDrugsVisitsBindingModel.cs create mode 100644 VeterinaryView/VeterinaryContracts/SearchModels/ReportDrugsVisitsSearchModel.cs create mode 100644 VeterinaryView/VeterinaryContracts/ViewModels/ReportDrugsVisitsViewModel.cs diff --git a/VeterinaryView/VeterinaryBusinessLogic/BusinessLogic/ReportLogicDoctor.cs b/VeterinaryView/VeterinaryBusinessLogic/BusinessLogic/ReportLogicDoctor.cs index a8f75e1..4772aef 100644 --- a/VeterinaryView/VeterinaryBusinessLogic/BusinessLogic/ReportLogicDoctor.cs +++ b/VeterinaryView/VeterinaryBusinessLogic/BusinessLogic/ReportLogicDoctor.cs @@ -10,19 +10,18 @@ using VeterinaryContracts.StorageContracts; using VeterinaryContracts.ViewModels; using VeterinaryContracts.SearchModels; using VeterinaryBusinessLogic.OfficePackage; +using VeterinaryBusinessLogic.OfficePackage.HelperModels; namespace VeterinaryBusinessLogic.BusinessLogic { public class ReportLogicDoctor : IReportLogicDoctor { - private readonly IDrugStorage _drugStorage; private readonly IMedicationStorage _medicationStorage; private readonly AbstractSaveToExcelDoctor _saveToExcel; private readonly AbstractSaveToWordDoctor _saveToWord; - public ReportLogicDoctor(IPurchaseStorage purchaseStorage, IDrugStorage drugStorage, IMedicationStorage medicationStorage, + public ReportLogicDoctor( IMedicationStorage medicationStorage, AbstractSaveToExcelDoctor saveToExcel, AbstractSaveToWordDoctor saveToWord) { - _drugStorage = drugStorage; _medicationStorage = medicationStorage; _saveToExcel = saveToExcel; _saveToWord = saveToWord; @@ -33,7 +32,7 @@ namespace VeterinaryBusinessLogic.BusinessLogic { FileName = model.FileName, Title = "Список покупок по медикаментам", - PurchaseMedications = GetPurchaseMedications(model.Medications) + PurchaseMedications = GetPurchaseMedications(model) }); } @@ -43,45 +42,17 @@ namespace VeterinaryBusinessLogic.BusinessLogic { FileName = model.FileName, Title = "Список покупок по медикаментам", - PurchaseMedications = GetPurchaseMedications(model.Medications) + PurchaseMedications = GetPurchaseMedications(model) }); } - public List GetPurchaseMedications(List medications) + public List GetPurchaseMedications(ReportPurchaseMedicationBindingModel model) { - List servs = new(); - List>>>> response = - _medicationStorage.GetReportInfo(new ListPurchasesSearchModel { medicationsIds = medications }); - - foreach (var medication in response) - { - Dictionary counter = new(); - foreach (var drug in medication.Item2) - { - foreach (var purchase in drug.Item2) - { - if (!counter.ContainsKey(purchase.Id)) - counter.Add(purchase.Id, (purchase, 1)); - else - { - counter[purchase.Id] = (counter[purchase.Id].Item1, counter[purchase.Id].Item2 + 1); - } - } - } - List res = new(); - foreach (var cont in counter) - { - if (cont.Value.Item2 != medication.Item2.Count) - continue; - res.Add(cont.Value.Item1); - } - servs.Add(new ReportPurchaseMedicationViewModel - { - MedicationName = medication.Item1.MedicationName, - Purchases = res - }); - } - return servs; + return _medicationStorage.GetReportMedicationPurchasesList(new() { medicationsIds = model.Medications }); + } + public List GetVisitsDrugs(ReportDrugsVisitsBindingModel model) + { + return _medicationStorage.GetReportDrugsVisits(new() { DateFrom = model.DateFrom, DateTo = model.DateTo }); } } } diff --git a/VeterinaryView/VeterinaryBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs b/VeterinaryView/VeterinaryBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs index bd5e72a..befb5d4 100644 --- a/VeterinaryView/VeterinaryBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs +++ b/VeterinaryView/VeterinaryBusinessLogic/OfficePackage/HelperModels/PdfInfo.cs @@ -1,4 +1,7 @@ -namespace VeterinaryBusinessLogic.OfficePackage.HelperModels + +using VeterinaryContracts.ViewModels; + +namespace VeterinaryBusinessLogic.OfficePackage.HelperModels { public class PdfInfo { @@ -6,7 +9,7 @@ public string Title { get; set; } = string.Empty; public DateTime DateFrom { get; set; } public DateTime DateTo { get; set; } - public List ReportServices { get; set; } = new(); - public List ReportPurchases{ get; set; } = new(); + public List ReportDrugsVisits { get; set; } = new(); + public List ReportVisitsDrugs{ get; set; } = new(); } } diff --git a/VeterinaryView/VeterinaryContracts/BindingModels/ReportDrugsVisitsBindingModel.cs b/VeterinaryView/VeterinaryContracts/BindingModels/ReportDrugsVisitsBindingModel.cs new file mode 100644 index 0000000..bd80480 --- /dev/null +++ b/VeterinaryView/VeterinaryContracts/BindingModels/ReportDrugsVisitsBindingModel.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VeterinaryContracts.BindingModels +{ + public class ReportDrugsVisitsBindingModel + { + public string FileName { get; set; } = string.Empty; + public List Medications { get; set; } = new(); + public DateTime? DateFrom { get; set; } + public DateTime? DateTo { get; set; } + } +} diff --git a/VeterinaryView/VeterinaryContracts/BusinessLogicContracts/IReportLogicDoctor.cs b/VeterinaryView/VeterinaryContracts/BusinessLogicContracts/IReportLogicDoctor.cs index e7892d4..67aef9c 100644 --- a/VeterinaryView/VeterinaryContracts/BusinessLogicContracts/IReportLogicDoctor.cs +++ b/VeterinaryView/VeterinaryContracts/BusinessLogicContracts/IReportLogicDoctor.cs @@ -10,8 +10,9 @@ using VeterinaryContracts.ViewModels; namespace VeterinaryContracts.BusinessLogicContracts { public interface IReportLogicDoctor - {// will be done later - List GetPurchaseMedications(List medications); + { + List GetVisitsDrugs(ReportDrugsVisitsBindingModel model); + List GetPurchaseMedications(ReportPurchaseMedicationBindingModel model); void SavePurchasesToWordFile(ReportPurchaseMedicationBindingModel model); void SavePurchasesToExcelFile(ReportPurchaseMedicationBindingModel model); } diff --git a/VeterinaryView/VeterinaryContracts/SearchModels/ReportDrugsVisitsSearchModel.cs b/VeterinaryView/VeterinaryContracts/SearchModels/ReportDrugsVisitsSearchModel.cs new file mode 100644 index 0000000..0be04ec --- /dev/null +++ b/VeterinaryView/VeterinaryContracts/SearchModels/ReportDrugsVisitsSearchModel.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VeterinaryContracts.SearchModels +{ + public class ReportDrugsVisitsSearchModel + { + public List? medicationsIds { get; set; } + public DateTime? DateFrom { get; set; } + public DateTime? DateTo { get; set; } + } +} diff --git a/VeterinaryView/VeterinaryContracts/StorageContracts/IMedicationStorage.cs b/VeterinaryView/VeterinaryContracts/StorageContracts/IMedicationStorage.cs index dafe501..d510cad 100644 --- a/VeterinaryView/VeterinaryContracts/StorageContracts/IMedicationStorage.cs +++ b/VeterinaryView/VeterinaryContracts/StorageContracts/IMedicationStorage.cs @@ -18,6 +18,8 @@ namespace VeterinaryContracts.StorageContracts MedicationViewModel? Update(MedicationBindingModel model); MedicationViewModel? Delete(MedicationBindingModel model); List GetReportMedicationPurchasesList(ListPurchasesSearchModel model); + List GetReportDrugsVisits(ReportDrugsVisitsSearchModel model); + } } diff --git a/VeterinaryView/VeterinaryContracts/ViewModels/ReportDrugsVisitsViewModel.cs b/VeterinaryView/VeterinaryContracts/ViewModels/ReportDrugsVisitsViewModel.cs new file mode 100644 index 0000000..2b64cfc --- /dev/null +++ b/VeterinaryView/VeterinaryContracts/ViewModels/ReportDrugsVisitsViewModel.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VeterinaryContracts.ViewModels +{ + public class ReportDrugsVisitsViewModel + { + public string MedicationName { get; set; } = string.Empty; + public List Visits { get; set; } + public List Drugs { get; set; } + } +} diff --git a/VeterinaryView/VeterinaryContracts/ViewModels/ReportVisitsDrugsViewModel.cs b/VeterinaryView/VeterinaryContracts/ViewModels/ReportVisitsDrugsViewModel.cs index ddfdc72..52a6866 100644 --- a/VeterinaryView/VeterinaryContracts/ViewModels/ReportVisitsDrugsViewModel.cs +++ b/VeterinaryView/VeterinaryContracts/ViewModels/ReportVisitsDrugsViewModel.cs @@ -2,8 +2,8 @@ { public class ReportVisitsDrugsViewModel { - string PetName { get; set; } = string.Empty; - List Visits { get; set; } - List Drugs { get; set; } + public string PetName { get; set; } = string.Empty; + public List Visits { get; set; } + public List Drugs { get; set; } } } diff --git a/VeterinaryView/VeterinaryContracts/ViewModels/VisitViewModel.cs b/VeterinaryView/VeterinaryContracts/ViewModels/VisitViewModel.cs index aa74ce0..29ac009 100644 --- a/VeterinaryView/VeterinaryContracts/ViewModels/VisitViewModel.cs +++ b/VeterinaryView/VeterinaryContracts/ViewModels/VisitViewModel.cs @@ -9,7 +9,7 @@ namespace VeterinaryContracts.ViewModels [DisplayName("Хозяин")] public int OwnerId { get; set; } [DisplayName("Врач")] - public int? DoctorId { get; set; } = null; + public int DoctorId { get; set; } [DisplayName("Название визита")] public string VisitName { get; set; } = string.Empty; [DisplayName("Дата посещения")] diff --git a/VeterinaryView/VeterinaryDatabaseImplement/Implements/MedicationStorage.cs b/VeterinaryView/VeterinaryDatabaseImplement/Implements/MedicationStorage.cs index 464841d..7464fda 100644 --- a/VeterinaryView/VeterinaryDatabaseImplement/Implements/MedicationStorage.cs +++ b/VeterinaryView/VeterinaryDatabaseImplement/Implements/MedicationStorage.cs @@ -100,5 +100,33 @@ namespace VeterinaryDatabaseImplement.Implements .Select(purchase => purchase.GetViewModel).ToList() }).ToList(); } + + public List GetReportDrugsVisits(ReportDrugsVisitsSearchModel model) + { + using var context = new VeterinaryDatabase(); + + return context.Medications + .Select(pet => new ReportDrugsVisitsViewModel() + { + MedicationName = pet.MedicationName, + Drugs = context.Drugs + .Where(drug => drug.Medications + .Select(x => x.MedicationId) + .ToList() + .Contains(pet.Id)) + .Select(drug => drug.GetViewModel) + .ToList(), + Visits = context.Services + .Include(service => service.Visit) + .Where(service => service.Visit!=null&&service.Visit.DateVisit <= model.DateTo && + service.Visit.DateVisit >= model.DateFrom && service.Medications + .Select(x => x.MedicationId) + .ToList() + .Contains(pet.Id)) + .Select(service => service.Visit.GetViewModel) + .ToList(), + }) + .ToList(); + } } } diff --git a/VeterinaryView/VeterinaryDatabaseImplement/Implements/PetStorage.cs b/VeterinaryView/VeterinaryDatabaseImplement/Implements/PetStorage.cs index 5e7eb36..e78358c 100644 --- a/VeterinaryView/VeterinaryDatabaseImplement/Implements/PetStorage.cs +++ b/VeterinaryView/VeterinaryDatabaseImplement/Implements/PetStorage.cs @@ -1,4 +1,5 @@ using Microsoft.EntityFrameworkCore; +using System.ComponentModel; using VeterinaryContracts.BindingModels; using VeterinaryContracts.SearchModels; using VeterinaryContracts.StorageContracts; @@ -61,7 +62,31 @@ namespace VeterinaryDatabaseImplement.Implements } public List GetReportVisitsDrugs(ReportVisitsDrugsSearchModel model) { + using var context = new VeterinaryDatabase(); + return context.Pets + .Select(pet => new ReportVisitsDrugsViewModel() + { + PetName = pet.PetName, + Visits = context.Visits + .Where(visit => visit.DateVisit <= model.DateTo && + visit.DateVisit >= model.DateFrom && visit.Pets + .Select(x => x.PetId) + .ToList() + .Contains(pet.Id)) + .Select(visit => visit.GetViewModel) + .ToList(), + Drugs = context.Purchases + .Include(purchase => purchase.Drug) + .Where(purchase => purchase.DateCreate <= model.DateTo && + purchase.DateCreate >= model.DateFrom && purchase.Pets + .Select(x => x.PetId) + .ToList() + .Contains(pet.Id)) + .Select(purchase => purchase.Drug.GetViewModel) + .ToList(), + }) + .ToList(); } public PetViewModel? Insert(PetBindingModel model) { diff --git a/VeterinaryView/VeterinaryShowDoctorApp/Controllers/HomeController.cs b/VeterinaryView/VeterinaryShowDoctorApp/Controllers/HomeController.cs index 95641af..9c8cab7 100644 --- a/VeterinaryView/VeterinaryShowDoctorApp/Controllers/HomeController.cs +++ b/VeterinaryView/VeterinaryShowDoctorApp/Controllers/HomeController.cs @@ -454,12 +454,20 @@ namespace VeterinaryShowDoctorApp.Controllers [HttpGet] public IActionResult PurchaseMedicationReport() { + if (APIDoctor.Doctor == null) + { + return Redirect("~/Home/Enter"); + } ViewBag.Medications = APIDoctor.GetRequest>($"api/medication/getmedications?doctorid={APIDoctor.Doctor.Id}"); return View(); } [HttpGet] public IActionResult Report() { + if (APIDoctor.Doctor == null) + { + return Redirect("~/Home/Enter"); + } return View(); } } diff --git a/VeterinaryView/VeterinaryShowOwnerApp/Controllers/HomeController.cs b/VeterinaryView/VeterinaryShowOwnerApp/Controllers/HomeController.cs index faaa92c..14b04cc 100644 --- a/VeterinaryView/VeterinaryShowOwnerApp/Controllers/HomeController.cs +++ b/VeterinaryView/VeterinaryShowOwnerApp/Controllers/HomeController.cs @@ -388,12 +388,20 @@ namespace VeterinaryShowOwnerApp.Controllers [HttpGet] public IActionResult ServiceListReport() { - ViewBag.Services = APIOwner.GetRequest>($"api/pet/getpets?ownerid={APIOwner.Owner.Id}"); + if (APIOwner.Owner == null) + { + return Redirect("~/Home/Enter"); + } + ViewBag.Pets = APIOwner.GetRequest>($"api/pet/getpets?ownerid={APIOwner.Owner.Id}"); return View(); } [HttpGet] public IActionResult Report() { + if (APIOwner.Owner == null) + { + return Redirect("~/Home/Enter"); + } return View(); } } diff --git a/VeterinaryView/VeterinaryShowOwnerApp/Views/Home/Report.cshtml b/VeterinaryView/VeterinaryShowOwnerApp/Views/Home/Report.cshtml index fcebdeb..6f97fc3 100644 --- a/VeterinaryView/VeterinaryShowOwnerApp/Views/Home/Report.cshtml +++ b/VeterinaryView/VeterinaryShowOwnerApp/Views/Home/Report.cshtml @@ -6,11 +6,6 @@
@{ - if (Model == null) - { -

Авторизируйтесь

- return; - }
Начальная дата: