diff --git a/ProjectPolyclinic/ProjectPolyclinic/Entities/TempMedicines_Visiting.cs b/ProjectPolyclinic/ProjectPolyclinic/Entities/TempMedicines_Visiting.cs new file mode 100644 index 0000000..e31f0ff --- /dev/null +++ b/ProjectPolyclinic/ProjectPolyclinic/Entities/TempMedicines_Visiting.cs @@ -0,0 +1,20 @@ +using ProjectPolyclinic.Entities.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectPolyclinic.Entities; + +public class TempMedicines_Visiting +{ + public int Id { get; private set; } + public int DoctorId { get; private set; } + public int PatientId { get; private set; } + public DiagnosisName DiagnosisName { get; private set; } + public DateTime VisitingTime { get; private set; } + public int VisitingId { get; private set; } + public int Count { get; private set; } + public int MedicinesId { get; private set; } +} diff --git a/ProjectPolyclinic/ProjectPolyclinic/Entities/Visiting.cs b/ProjectPolyclinic/ProjectPolyclinic/Entities/Visiting.cs index 60e9404..3d93b48 100644 --- a/ProjectPolyclinic/ProjectPolyclinic/Entities/Visiting.cs +++ b/ProjectPolyclinic/ProjectPolyclinic/Entities/Visiting.cs @@ -31,4 +31,16 @@ public class Visiting Medicines = medicines }; } + public static Visiting CreateOperation(TempMedicines_Visiting tempMedicines_Visiting, IEnumerable medicines) + { + return new Visiting + { + Id = tempMedicines_Visiting.Id, + DoctorId = tempMedicines_Visiting.DoctorId, + PatientId = tempMedicines_Visiting.PatientId, + DiagnosisName = tempMedicines_Visiting.DiagnosisName, + VisitingTime = tempMedicines_Visiting.VisitingTime, + Medicines = medicines + }; + } } diff --git a/ProjectPolyclinic/ProjectPolyclinic/Reports/ChartReport.cs b/ProjectPolyclinic/ProjectPolyclinic/Reports/ChartReport.cs index 218ff97..7dca6c5 100644 --- a/ProjectPolyclinic/ProjectPolyclinic/Reports/ChartReport.cs +++ b/ProjectPolyclinic/ProjectPolyclinic/Reports/ChartReport.cs @@ -30,7 +30,7 @@ internal class ChartReport { new PdfBuilder(filePath) .AddHeader("Повышение квалификации врачей") - .AddPieChart("Количество повышение квалификации врачей", GetData(dateTime)) + .AddPieChart("Количество повышений квалификации врачей", GetData(dateTime)) .Build(); return true; } diff --git a/ProjectPolyclinic/ProjectPolyclinic/Reports/TableReport.cs b/ProjectPolyclinic/ProjectPolyclinic/Reports/TableReport.cs index 676358d..a1606ef 100644 --- a/ProjectPolyclinic/ProjectPolyclinic/Reports/TableReport.cs +++ b/ProjectPolyclinic/ProjectPolyclinic/Reports/TableReport.cs @@ -13,12 +13,15 @@ internal class TableReport { private readonly IDoctorRepository _doctorRepository; private readonly IVisitingRepository _visitingRepository; + private readonly IMedicationRepository _medicationRepository; + private readonly ILogger _logger; - internal static readonly string[] item = ["Доктор", "Дата", "Количество визитов"]; - public TableReport(IDoctorRepository doctorRepository, IVisitingRepository visitingRepository, ILogger logger) + internal static readonly string[] item = ["Визит","Доктор", "Дата", "Количество визитов","Количество медикаментов"]; + public TableReport(IDoctorRepository doctorRepository, IVisitingRepository visitingRepository, IMedicationRepository medicationRepository, ILogger logger) { _doctorRepository = doctorRepository ?? throw new ArgumentNullException(nameof(doctorRepository)); _visitingRepository = visitingRepository ?? throw new ArgumentNullException(nameof(visitingRepository)); + _medicationRepository = medicationRepository ?? throw new ArgumentNullException(nameof(medicationRepository)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); } @@ -30,7 +33,7 @@ internal class TableReport new ExcelBuilder(filePath) .AddHeader("Сводка по движению визитов", 0, 2) .AddParagraph("за период", 0) - .AddTable([10, 15, 15], data) + .AddTable([10, 10,15, 15,15], data) .Build(); return true; } @@ -42,7 +45,7 @@ internal class TableReport } private List GetData(int doctorId, DateTime startDate, DateTime endDate) { - var visits = _visitingRepository.ReadVisiting() + /*var visits = _visitingRepository.ReadVisiting() .Where(x => x.VisitingTime >= startDate && x.VisitingTime <= endDate && x.DoctorId == doctorId) .Select(x => new { @@ -64,6 +67,27 @@ internal class TableReport .ToList(); - return result; + return result;*/ + var data = _visitingRepository + .ReadVisiting() + .Where(x => x.VisitingTime >= startDate && x.VisitingTime <= endDate && x.DoctorId == doctorId) + .Select(x => new + { + x.Id, + x.DoctorId, + Date = x.VisitingTime, + CountOfVisits = 1, + Medication = x.Medicines.Sum(m => m.Count) + }) + .OrderBy(x => x.Date); + return + new List() { item } + .Union( + data + .Select(x => new string[] { x.Id.ToString(), x.DoctorId.ToString(), x.Date.ToString(), x.CountOfVisits.ToString() ?? string.Empty, x.Medication.ToString() ?? string.Empty })) + .Union( + [["Всего ", "","", data.Sum(x => x.CountOfVisits).ToString(), data.Sum(x => x.Medication).ToString()]]) + + .ToList(); } } \ No newline at end of file diff --git a/ProjectPolyclinic/ProjectPolyclinic/Repositories/Implementations/VisitingRepository.cs b/ProjectPolyclinic/ProjectPolyclinic/Repositories/Implementations/VisitingRepository.cs index 2a8bab1..2e6c145 100644 --- a/ProjectPolyclinic/ProjectPolyclinic/Repositories/Implementations/VisitingRepository.cs +++ b/ProjectPolyclinic/ProjectPolyclinic/Repositories/Implementations/VisitingRepository.cs @@ -83,7 +83,7 @@ WHERE Id=@id"; public IEnumerable ReadVisiting(DateTime? dateForm = null, DateTime? dateTo = null, int? patientId = null, int? doctorId = null,int ? visitingId = null) { - _logger.LogInformation("Получение всех объектов"); + /*_logger.LogInformation("Получение всех объектов"); try { using var connection = new @@ -96,6 +96,27 @@ WHERE Id=@id"; return visitings; } catch (Exception ex) + { + _logger.LogError(ex, "Ошибка при чтении объектов"); + throw; + }*/ + _logger.LogInformation("Получение всех объектов"); + try + { + using var connection = new NpgsqlConnection(_connectionString.ConnectionString); + var querySelect = @"SELECT v.*, mv.MedicinesId, mv.Count + FROM Visitings v + LEFT JOIN Medicines_Visiting mv ON v.Id = mv.VisitingId"; + + var visitings = connection.Query(querySelect); + + _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(visitings)); + + return visitings.GroupBy(x => x.Id, y => y, + (key, value) => Visiting.CreateOperation(value.First(), + value.Select(z => Medicines_Visiting.CreateElement(z.MedicinesId, z.VisitingId, z.Count)))).ToList(); + } + catch (Exception ex) { _logger.LogError(ex, "Ошибка при чтении объектов"); throw;