diff --git a/RegistrationOfPatients/RegistrationOfPatients/Entities/Reception.cs b/RegistrationOfPatients/RegistrationOfPatients/Entities/Reception.cs index 2d837f1..05dcc6b 100644 --- a/RegistrationOfPatients/RegistrationOfPatients/Entities/Reception.cs +++ b/RegistrationOfPatients/RegistrationOfPatients/Entities/Reception.cs @@ -24,4 +24,15 @@ public class Reception ReceptionMedicine = receptionMedicine }; } + + public static Reception CreateOperation(TempReceptionMedicine tempReceptionMedicine, IEnumerable receptionMedicine) + { + return new Reception + { + Id = tempReceptionMedicine.Id, + Date = tempReceptionMedicine.Date, + DoctorId = tempReceptionMedicine.DoctorId, + ReceptionMedicine = receptionMedicine + }; + } } diff --git a/RegistrationOfPatients/RegistrationOfPatients/Entities/TempReceptionMedicine.cs b/RegistrationOfPatients/RegistrationOfPatients/Entities/TempReceptionMedicine.cs new file mode 100644 index 0000000..4ee005c --- /dev/null +++ b/RegistrationOfPatients/RegistrationOfPatients/Entities/TempReceptionMedicine.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace RegistrationOfPatients.Entities; + +public class TempReceptionMedicine +{ + public int Id { get; private set; } + + public int DoctorId { get; private set; } + + public DateTime Date { get; private set; } + + public int MedicineId { get; private set; } + + public int Count { get; private set; } +} diff --git a/RegistrationOfPatients/RegistrationOfPatients/FormRegistration.Designer.cs b/RegistrationOfPatients/RegistrationOfPatients/FormRegistration.Designer.cs index d81685a..fe40dda 100644 --- a/RegistrationOfPatients/RegistrationOfPatients/FormRegistration.Designer.cs +++ b/RegistrationOfPatients/RegistrationOfPatients/FormRegistration.Designer.cs @@ -38,6 +38,7 @@ PaymentToolStripMenuItem = new ToolStripMenuItem(); отчетыToolStripMenuItem = new ToolStripMenuItem(); DirectoryReportToolStripMenuItem = new ToolStripMenuItem(); + MedicineReportToolStripMenuItem = new ToolStripMenuItem(); menuStrip.SuspendLayout(); SuspendLayout(); // @@ -102,7 +103,7 @@ // // отчетыToolStripMenuItem // - отчетыToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { DirectoryReportToolStripMenuItem }); + отчетыToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { DirectoryReportToolStripMenuItem, MedicineReportToolStripMenuItem }); отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem"; отчетыToolStripMenuItem.Size = new Size(73, 24); отчетыToolStripMenuItem.Text = "Отчеты"; @@ -115,6 +116,14 @@ DirectoryReportToolStripMenuItem.Text = "Документ со справочниками"; DirectoryReportToolStripMenuItem.Click += DirectoryReportToolStripMenuItem_Click; // + // MedicineReportToolStripMenuItem + // + MedicineReportToolStripMenuItem.Name = "MedicineReportToolStripMenuItem"; + MedicineReportToolStripMenuItem.ShortcutKeys = Keys.Control | Keys.E; + MedicineReportToolStripMenuItem.Size = new Size(350, 26); + MedicineReportToolStripMenuItem.Text = "Движение лекарств"; + MedicineReportToolStripMenuItem.Click += MedicineReportToolStripMenuItem_Click; + // // FormRegistration // AutoScaleDimensions = new SizeF(8F, 20F); @@ -145,5 +154,6 @@ private ToolStripMenuItem PaymentToolStripMenuItem; private ToolStripMenuItem MedicinesToolStripMenuItem; private ToolStripMenuItem DirectoryReportToolStripMenuItem; + private ToolStripMenuItem MedicineReportToolStripMenuItem; } } \ No newline at end of file diff --git a/RegistrationOfPatients/RegistrationOfPatients/FormRegistration.cs b/RegistrationOfPatients/RegistrationOfPatients/FormRegistration.cs index 9162bf1..fcbac4e 100644 --- a/RegistrationOfPatients/RegistrationOfPatients/FormRegistration.cs +++ b/RegistrationOfPatients/RegistrationOfPatients/FormRegistration.cs @@ -83,4 +83,16 @@ public partial class FormRegistration : Form MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error); } } + + private void MedicineReportToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + _container.Resolve().ShowDialog(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } } \ No newline at end of file diff --git a/RegistrationOfPatients/RegistrationOfPatients/Forms/FormReception.cs b/RegistrationOfPatients/RegistrationOfPatients/Forms/FormReception.cs index a9b935f..eea3946 100644 --- a/RegistrationOfPatients/RegistrationOfPatients/Forms/FormReception.cs +++ b/RegistrationOfPatients/RegistrationOfPatients/Forms/FormReception.cs @@ -71,6 +71,6 @@ public partial class FormReception : Form } list.Add(ReceptionMedicine.CreateElement(0, Convert.ToInt32(row.Cells["ColumnMedicine"].Value), Convert.ToInt32(row.Cells["ColumnCount"].Value))); } - return list; + return list.GroupBy(x => x.MedicineId, x => x.Count, (id, counts) => ReceptionMedicine.CreateElement(0, id, counts.Sum())).ToList(); } } diff --git a/RegistrationOfPatients/RegistrationOfPatients/Repositories/Implementations/ReceptionRepository.cs b/RegistrationOfPatients/RegistrationOfPatients/Repositories/Implementations/ReceptionRepository.cs index 2ac6ef0..61629c1 100644 --- a/RegistrationOfPatients/RegistrationOfPatients/Repositories/Implementations/ReceptionRepository.cs +++ b/RegistrationOfPatients/RegistrationOfPatients/Repositories/Implementations/ReceptionRepository.cs @@ -38,7 +38,7 @@ public class ReceptionRepository : IReceptionRepository var queryInsert = @" INSERT INTO Reception (Date, HealthStatus, Illness, PatientId, DoctorId) VALUES (@Date, @HealthStatus, @Illness, @PatientId, @DoctorId); SELECT MAX(Id) FROM Reception"; var receptionId = connection.QueryFirst(queryInsert, reception, transaction); - var querySubInsert = @" INSERT INTO ReceptionMedicine (MedicineId, Count) VALUES (@MedicineId, @Count)"; + var querySubInsert = @" INSERT INTO ReceptionMedicine (ReceptionID, MedicineId, Count) VALUES (@ReceptionId, @MedicineId, @Count)"; foreach (var elem in reception.ReceptionMedicine) { @@ -64,10 +64,12 @@ public class ReceptionRepository : IReceptionRepository try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); - var querySelect = @"SELECT * FROM Reception"; - var receptions = connection.Query(querySelect); + var querySelect = @"SELECT r.Id AS ReceptionId, r.DoctorId, r.Patient.Id, r.Date, rm.MedicineId, rm.Count FROM Reception r INNER JOIN ReceptionMedicine rm ON r.DoctorID = r.ID"; + var receptions = connection.Query(querySelect); _logger.LogDebug("Полученные объекты: {json}", JsonConvert.SerializeObject(receptions)); - return receptions; + return receptions.GroupBy(x => x.Id, y => y, + (key, value) => Reception.CreateOperation(value.First(), + value.Select(z => ReceptionMedicine.CreateElement(0, z.MedicineId, z.Count)))).ToList(); } catch (Exception ex) {