diff --git a/Medical/MedicalDatabaseContracts/Models/AbstractModel.cs b/Medical/MedicalDatabaseContracts/Models/AbstractModel.cs index a645689..007e051 100644 --- a/Medical/MedicalDatabaseContracts/Models/AbstractModel.cs +++ b/Medical/MedicalDatabaseContracts/Models/AbstractModel.cs @@ -1,4 +1,5 @@ using System.ComponentModel; +using System.ComponentModel.DataAnnotations; namespace MedicalDatabaseContracts.Models { diff --git a/Medical/MedicalPostgresqlDatabase/Storages/DiagnosesStorage.cs b/Medical/MedicalPostgresqlDatabase/Storages/DiagnoseStorage.cs similarity index 77% rename from Medical/MedicalPostgresqlDatabase/Storages/DiagnosesStorage.cs rename to Medical/MedicalPostgresqlDatabase/Storages/DiagnoseStorage.cs index 1dd3691..9eb1361 100644 --- a/Medical/MedicalPostgresqlDatabase/Storages/DiagnosesStorage.cs +++ b/Medical/MedicalPostgresqlDatabase/Storages/DiagnoseStorage.cs @@ -2,13 +2,12 @@ using Microsoft.Extensions.Logging; using Npgsql; using System.Data; -using System.Diagnostics; namespace MedicalPostgresqlDatabase.Storages { - public class DiagnosesStorage : AbstractPostgresqlStorage + public class DiagnoseStorage : AbstractPostgresqlStorage { - public DiagnosesStorage(ILogger logger) : base(logger, "diagnoses", "diagnose_id", "diagnoses_id_seq") { } + public DiagnoseStorage(ILogger logger) : base(logger, "diagnoses", "diagnose_id", "diagnoses_id_seq") { } protected override Diagnose CreateEntityFromReader(NpgsqlDataReader reader) { diff --git a/Medical/MedicalPostgresqlDatabase/Storages/DoctorsStorage.cs b/Medical/MedicalPostgresqlDatabase/Storages/DoctorStorage.cs similarity index 86% rename from Medical/MedicalPostgresqlDatabase/Storages/DoctorsStorage.cs rename to Medical/MedicalPostgresqlDatabase/Storages/DoctorStorage.cs index f3ce877..991916e 100644 --- a/Medical/MedicalPostgresqlDatabase/Storages/DoctorsStorage.cs +++ b/Medical/MedicalPostgresqlDatabase/Storages/DoctorStorage.cs @@ -5,9 +5,9 @@ using System.Data; namespace MedicalPostgresqlDatabase.Storages { - public class DoctorsStorage : AbstractPostgresqlStorage + public class DoctorStorage : AbstractPostgresqlStorage { - public DoctorsStorage(ILogger logger) : base(logger, "doctors", "doctor_id", "doctors_id_seq") { } + public DoctorStorage(ILogger logger) : base(logger, "doctors", "doctor_id", "doctors_id_seq") { } protected override Doctor CreateEntityFromReader(NpgsqlDataReader reader) { @@ -18,7 +18,7 @@ namespace MedicalPostgresqlDatabase.Storages Surname = Convert.ToString(reader.GetValue("surname")), Patronymic = Convert.ToString(reader.GetValue("patronymic")), PhoneNumber = Convert.ToString(reader.GetValue("phone_number")), - SpecializationId = Convert.ToInt32(reader.GetValue("specializaton_id")) + SpecializationId = Convert.ToInt32(reader.GetValue("specialization_id")) }; } diff --git a/Medical/MedicalPostgresqlDatabase/VisitStorage.cs b/Medical/MedicalPostgresqlDatabase/Storages/VisitStorage.cs similarity index 96% rename from Medical/MedicalPostgresqlDatabase/VisitStorage.cs rename to Medical/MedicalPostgresqlDatabase/Storages/VisitStorage.cs index 8b9b168..5cb0c50 100644 --- a/Medical/MedicalPostgresqlDatabase/VisitStorage.cs +++ b/Medical/MedicalPostgresqlDatabase/Storages/VisitStorage.cs @@ -4,7 +4,7 @@ using Microsoft.Extensions.Logging; using Npgsql; using System.Data; -namespace MedicalPostgresqlDatabase +namespace MedicalPostgresqlDatabase.Storages { public class VisitStorage : AbstractPostgresqlStorage { diff --git a/Medical/MedicalView/Diagnoses/FormDiagnoses.cs b/Medical/MedicalView/Diagnoses/FormDiagnoses.cs index d32c5e1..914d6f9 100644 --- a/Medical/MedicalView/Diagnoses/FormDiagnoses.cs +++ b/Medical/MedicalView/Diagnoses/FormDiagnoses.cs @@ -2,54 +2,13 @@ using MedicalDatabaseContracts.Models; using Microsoft.Extensions.Logging; -namespace MedicalView +namespace MedicalView.Diagnoses { - public partial class FormDiagnoses : Form + public class FormDiagnoses : FormAbstractList { - private ILogger _logger; - private IStorage _diagnosesStorage; - public FormDiagnoses(ILogger logger, IStorage diagnosesStorage) + public FormDiagnoses(ILogger> logger, IStorage storage) : base(logger, storage) { - InitializeComponent(); - _logger = logger; - _diagnosesStorage = diagnosesStorage; - } - - private void FormDiagnoses_Load(object sender, EventArgs e) - { - LoadData(); - } - - private void RefreshToolStripMenuItem_Click(object sender, EventArgs e) - { - LoadData(); - } - - private void LoadData() - { - SetStatusStripText("Загрузка диагнозов..."); - try - { - long elapsed; - var items = _diagnosesStorage.GetAll(out elapsed); - - dataGridView.DataSource = items; - dataGridView.Columns["Id"].Visible = false; - - _logger.LogInformation("Список диагнозов загружен успешно"); - SetStatusStripText($"Готово. Загружено записей: {items.Count}, время загрузки {elapsed} мск"); - } - catch (Exception ex) - { - string errorMessage = "Ошибка загрузки списка диагнозов"; - _logger.LogError(string.Join(", ", errorMessage, $"\"{ex.Message}\"")); - MessageBox.Show(string.Join("\n\n", errorMessage, $"{ex.Message}"), "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); - SetStatusStripText($"Ошибка загрузки"); - } - } - private void SetStatusStripText(string text) - { - toolStripStatusLabel.Text = text; + Text = "Список диагнозов"; } } } diff --git a/Medical/MedicalView/Doctors/FormDoctors.cs b/Medical/MedicalView/Doctors/FormDoctors.cs new file mode 100644 index 0000000..47f19dd --- /dev/null +++ b/Medical/MedicalView/Doctors/FormDoctors.cs @@ -0,0 +1,14 @@ +using MedicalDatabaseContracts; +using MedicalDatabaseContracts.Models; +using Microsoft.Extensions.Logging; + +namespace MedicalView.Doctors +{ + public class FormDoctors : FormAbstractList + { + public FormDoctors(ILogger> logger, IStorage storage) : base(logger, storage) + { + Text = "Список врачей"; + } + } +} diff --git a/Medical/MedicalView/Doctors/FormDoctors.resx b/Medical/MedicalView/Doctors/FormDoctors.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Medical/MedicalView/Doctors/FormDoctors.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Medical/MedicalView/Diagnoses/FormDiagnoses.Designer.cs b/Medical/MedicalView/FormAbstractList.Designer.cs similarity index 89% rename from Medical/MedicalView/Diagnoses/FormDiagnoses.Designer.cs rename to Medical/MedicalView/FormAbstractList.Designer.cs index e4e3192..809c3d1 100644 --- a/Medical/MedicalView/Diagnoses/FormDiagnoses.Designer.cs +++ b/Medical/MedicalView/FormAbstractList.Designer.cs @@ -1,6 +1,6 @@ namespace MedicalView { - partial class FormDiagnoses + partial class FormAbstractList { /// /// Required designer variable. @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - dataGridView = new DataGridView(); menuStrip = new MenuStrip(); обновитьToolStripMenuItem = new ToolStripMenuItem(); добавитьToolStripMenuItem = new ToolStripMenuItem(); @@ -36,11 +35,65 @@ удалитьToolStripMenuItem = new ToolStripMenuItem(); statusStrip = new StatusStrip(); toolStripStatusLabel = new ToolStripStatusLabel(); - ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + dataGridView = new DataGridView(); menuStrip.SuspendLayout(); statusStrip.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); SuspendLayout(); // + // menuStrip + // + menuStrip.ImageScalingSize = new Size(20, 20); + menuStrip.Items.AddRange(new ToolStripItem[] { обновитьToolStripMenuItem, добавитьToolStripMenuItem, изменитьToolStripMenuItem, удалитьToolStripMenuItem }); + menuStrip.Location = new Point(0, 0); + menuStrip.Name = "menuStrip"; + menuStrip.Size = new Size(800, 28); + menuStrip.TabIndex = 0; + menuStrip.Text = "menuStrip1"; + // + // обновитьToolStripMenuItem + // + обновитьToolStripMenuItem.Name = "обновитьToolStripMenuItem"; + обновитьToolStripMenuItem.Size = new Size(92, 24); + обновитьToolStripMenuItem.Text = "Обновить"; + обновитьToolStripMenuItem.Click += RefreshItemsToolStripMenuItem_Click; + // + // добавитьToolStripMenuItem + // + добавитьToolStripMenuItem.Name = "добавитьToolStripMenuItem"; + добавитьToolStripMenuItem.Size = new Size(90, 24); + добавитьToolStripMenuItem.Text = "Добавить"; + добавитьToolStripMenuItem.Click += AddItemToolStripMenuItem_Click; + // + // изменитьToolStripMenuItem + // + изменитьToolStripMenuItem.Name = "изменитьToolStripMenuItem"; + изменитьToolStripMenuItem.Size = new Size(92, 24); + изменитьToolStripMenuItem.Text = "Изменить"; + изменитьToolStripMenuItem.Click += EsitItemToolStripMenuItem_Click; + // + // удалитьToolStripMenuItem + // + удалитьToolStripMenuItem.Name = "удалитьToolStripMenuItem"; + удалитьToolStripMenuItem.Size = new Size(79, 24); + удалитьToolStripMenuItem.Text = "Удалить"; + удалитьToolStripMenuItem.Click += DeleteItemToolStripMenuItem_Click; + // + // statusStrip + // + statusStrip.ImageScalingSize = new Size(20, 20); + statusStrip.Items.AddRange(new ToolStripItem[] { toolStripStatusLabel }); + statusStrip.Location = new Point(0, 428); + statusStrip.Name = "statusStrip"; + statusStrip.Size = new Size(800, 22); + statusStrip.TabIndex = 1; + statusStrip.Text = "statusStrip1"; + // + // toolStripStatusLabel + // + toolStripStatusLabel.Name = "toolStripStatusLabel"; + toolStripStatusLabel.Size = new Size(0, 16); + // // dataGridView // dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; @@ -53,88 +106,39 @@ dataGridView.RowHeadersWidth = 51; dataGridView.RowTemplate.Height = 29; dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; - dataGridView.Size = new Size(800, 422); - dataGridView.TabIndex = 3; + dataGridView.Size = new Size(800, 400); + dataGridView.TabIndex = 2; // - // menuStrip - // - menuStrip.ImageScalingSize = new Size(20, 20); - menuStrip.Items.AddRange(new ToolStripItem[] { обновитьToolStripMenuItem, добавитьToolStripMenuItem, изменитьToolStripMenuItem, удалитьToolStripMenuItem }); - menuStrip.Location = new Point(0, 0); - menuStrip.Name = "menuStrip"; - menuStrip.Size = new Size(800, 28); - menuStrip.TabIndex = 4; - menuStrip.Text = "menuStrip1"; - // - // обновитьToolStripMenuItem - // - обновитьToolStripMenuItem.Name = "обновитьToolStripMenuItem"; - обновитьToolStripMenuItem.Size = new Size(92, 24); - обновитьToolStripMenuItem.Text = "Обновить"; - обновитьToolStripMenuItem.Click += RefreshToolStripMenuItem_Click; - // - // добавитьToolStripMenuItem - // - добавитьToolStripMenuItem.Name = "добавитьToolStripMenuItem"; - добавитьToolStripMenuItem.Size = new Size(90, 24); - добавитьToolStripMenuItem.Text = "Добавить"; - // - // изменитьToolStripMenuItem - // - изменитьToolStripMenuItem.Name = "изменитьToolStripMenuItem"; - изменитьToolStripMenuItem.Size = new Size(92, 24); - изменитьToolStripMenuItem.Text = "Изменить"; - // - // удалитьToolStripMenuItem - // - удалитьToolStripMenuItem.Name = "удалитьToolStripMenuItem"; - удалитьToolStripMenuItem.Size = new Size(79, 24); - удалитьToolStripMenuItem.Text = "Удалить"; - // - // statusStrip - // - statusStrip.ImageScalingSize = new Size(20, 20); - statusStrip.Items.AddRange(new ToolStripItem[] { toolStripStatusLabel }); - statusStrip.Location = new Point(0, 428); - statusStrip.Name = "statusStrip"; - statusStrip.Size = new Size(800, 22); - statusStrip.TabIndex = 5; - statusStrip.Text = "statusStrip1"; - // - // toolStripStatusLabel - // - toolStripStatusLabel.Name = "toolStripStatusLabel"; - toolStripStatusLabel.Size = new Size(0, 16); - // - // FormDiagnoses + // FormAbstractList // AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(800, 450); - Controls.Add(statusStrip); Controls.Add(dataGridView); + Controls.Add(statusStrip); Controls.Add(menuStrip); MainMenuStrip = menuStrip; - Name = "FormDiagnoses"; - Text = "Диагнозы"; - Load += FormDiagnoses_Load; - ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + Name = "FormAbstractList"; + Text = "FormAbstractList"; + Load += FormAbstractList_Load; menuStrip.ResumeLayout(false); menuStrip.PerformLayout(); statusStrip.ResumeLayout(false); statusStrip.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); ResumeLayout(false); PerformLayout(); } #endregion - private DataGridView dataGridView; + private MenuStrip menuStrip; + private StatusStrip statusStrip; private ToolStripMenuItem обновитьToolStripMenuItem; private ToolStripMenuItem добавитьToolStripMenuItem; private ToolStripMenuItem изменитьToolStripMenuItem; private ToolStripMenuItem удалитьToolStripMenuItem; - private StatusStrip statusStrip; private ToolStripStatusLabel toolStripStatusLabel; + private DataGridView dataGridView; } } \ No newline at end of file diff --git a/Medical/MedicalView/FormAbstractList.cs b/Medical/MedicalView/FormAbstractList.cs new file mode 100644 index 0000000..d9dd7f9 --- /dev/null +++ b/Medical/MedicalView/FormAbstractList.cs @@ -0,0 +1,77 @@ +using MedicalDatabaseContracts; +using MedicalDatabaseContracts.Models; +using Microsoft.Extensions.Logging; + +namespace MedicalView +{ + public partial class FormAbstractList : Form where T : AbstractModel + { + protected ILogger _logger; + protected IStorage _storage; + public FormAbstractList(ILogger> logger, IStorage storage) + { + InitializeComponent(); + _logger = logger; + _storage = storage; + } + + private void FormAbstractList_Load(object sender, EventArgs e) + { + LoadData(); + } + + private void RefreshItemsToolStripMenuItem_Click(object sender, EventArgs e) + { + LoadData(); + } + + private void AddItemToolStripMenuItem_Click(object sender, EventArgs e) + { + // code + } + + private void EsitItemToolStripMenuItem_Click(object sender, EventArgs e) + { + // code + } + + private void DeleteItemToolStripMenuItem_Click(object sender, EventArgs e) + { + // code + } + + protected virtual void LoadData() + { + SetStatusStripText("Загрузка списка..."); + try + { + long elapsed; + var items = _storage.GetAll(out elapsed); + + dataGridView.DataSource = items; + foreach (DataGridViewTextBoxColumn column in dataGridView.Columns) + { + if (column.Name.Contains("Id")) + { + column.Visible = false; + } + } + dataGridView.ReadOnly = true; + + _logger.LogInformation("Список загружен успешно"); + SetStatusStripText($"Готово. Загружено записей: {items.Count}, время загрузки {elapsed} мск"); + } + catch (Exception ex) + { + string errorMessage = "Ошибка загрузки списка"; + _logger.LogError(string.Join(", ", errorMessage, $"\"{ex.Message}\"")); + MessageBox.Show(string.Join("\n\n", errorMessage, $"{ex.Message}"), "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + SetStatusStripText($"Ошибка загрузки"); + } + } + protected virtual void SetStatusStripText(string text) + { + toolStripStatusLabel.Text = text; + } + } +} diff --git a/Medical/MedicalView/Diagnoses/FormDiagnoses.resx b/Medical/MedicalView/FormAbstractList.resx similarity index 99% rename from Medical/MedicalView/Diagnoses/FormDiagnoses.resx rename to Medical/MedicalView/FormAbstractList.resx index 3478fc5..e64711a 100644 --- a/Medical/MedicalView/Diagnoses/FormDiagnoses.resx +++ b/Medical/MedicalView/FormAbstractList.resx @@ -121,6 +121,6 @@ 17, 17 - 145, 17 + 153, 17 \ No newline at end of file diff --git a/Medical/MedicalView/FormMain.Designer.cs b/Medical/MedicalView/FormMain.Designer.cs index 17e4d93..34c3c03 100644 --- a/Medical/MedicalView/FormMain.Designer.cs +++ b/Medical/MedicalView/FormMain.Designer.cs @@ -41,9 +41,12 @@ buttonAdd = new Button(); dateTimePicker1 = new DateTimePicker(); comboBoxDoctor = new ComboBox(); + statusStrip = new StatusStrip(); + toolStripStatusLabel = new ToolStripStatusLabel(); menuStrip.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); panel.SuspendLayout(); + statusStrip.SuspendLayout(); SuspendLayout(); // // menuStrip @@ -67,39 +70,46 @@ // специализацииToolStripMenuItem // специализацииToolStripMenuItem.Name = "специализацииToolStripMenuItem"; - специализацииToolStripMenuItem.Size = new Size(224, 26); + специализацииToolStripMenuItem.Size = new Size(203, 26); специализацииToolStripMenuItem.Text = "Специализации"; + специализацииToolStripMenuItem.Click += SpecializationsToolStripMenuItem_Click; // // диагнозыToolStripMenuItem // диагнозыToolStripMenuItem.Name = "диагнозыToolStripMenuItem"; - диагнозыToolStripMenuItem.Size = new Size(224, 26); + диагнозыToolStripMenuItem.Size = new Size(203, 26); диагнозыToolStripMenuItem.Text = "Диагнозы"; диагнозыToolStripMenuItem.Click += DiagnosesToolStripMenuItem_Click; // // врачиToolStripMenuItem // врачиToolStripMenuItem.Name = "врачиToolStripMenuItem"; - врачиToolStripMenuItem.Size = new Size(224, 26); + врачиToolStripMenuItem.Size = new Size(203, 26); врачиToolStripMenuItem.Text = "Врачи"; + врачиToolStripMenuItem.Click += DoctorsToolStripMenuItem_Click; // // пациентыToolStripMenuItem1 // пациентыToolStripMenuItem1.Name = "пациентыToolStripMenuItem1"; пациентыToolStripMenuItem1.Size = new Size(94, 24); пациентыToolStripMenuItem1.Text = "Пациенты"; + пациентыToolStripMenuItem1.Click += PatientsToolStripMenuItem1_Click; // // dataGridView // + dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; - dataGridView.Dock = DockStyle.Fill; - dataGridView.Location = new Point(0, 30); + dataGridView.Location = new Point(0, 70); dataGridView.Margin = new Padding(3, 4, 3, 4); + dataGridView.MultiSelect = false; dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; dataGridView.RowHeadersWidth = 51; dataGridView.RowTemplate.Height = 25; dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; - dataGridView.Size = new Size(863, 371); + dataGridView.Size = new Size(863, 331); dataGridView.TabIndex = 1; // // panel @@ -169,11 +179,27 @@ comboBoxDoctor.Size = new Size(196, 28); comboBoxDoctor.TabIndex = 0; // + // statusStrip + // + statusStrip.ImageScalingSize = new Size(20, 20); + statusStrip.Items.AddRange(new ToolStripItem[] { toolStripStatusLabel }); + statusStrip.Location = new Point(0, 379); + statusStrip.Name = "statusStrip"; + statusStrip.Size = new Size(863, 22); + statusStrip.TabIndex = 3; + statusStrip.Text = "statusStrip1"; + // + // toolStripStatusLabel + // + toolStripStatusLabel.Name = "toolStripStatusLabel"; + toolStripStatusLabel.Size = new Size(0, 16); + // // FormMain // AutoScaleDimensions = new SizeF(8F, 20F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(863, 401); + Controls.Add(statusStrip); Controls.Add(panel); Controls.Add(dataGridView); Controls.Add(menuStrip); @@ -187,6 +213,8 @@ menuStrip.PerformLayout(); ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); panel.ResumeLayout(false); + statusStrip.ResumeLayout(false); + statusStrip.PerformLayout(); ResumeLayout(false); PerformLayout(); } @@ -206,5 +234,7 @@ private Button buttonDelete; private Button buttonAdd; private Button buttonEdit; + private StatusStrip statusStrip; + private ToolStripStatusLabel toolStripStatusLabel; } } \ No newline at end of file diff --git a/Medical/MedicalView/FormMain.cs b/Medical/MedicalView/FormMain.cs index 19fbf1f..a438dcc 100644 --- a/Medical/MedicalView/FormMain.cs +++ b/Medical/MedicalView/FormMain.cs @@ -1,15 +1,28 @@ -namespace MedicalView.Visits +using MedicalView.Doctors; +using MedicalView.Specializations; +using MedicalView.Diagnoses; +using MedicalView.Patients; +using Microsoft.Extensions.Logging; +using MedicalDatabaseContracts; +using MedicalDatabaseContracts.Models; +using System.Windows.Forms; + +namespace MedicalView.Visits { public partial class FormMain : Form { - public FormMain() + private ILogger _logger; + private IStorage _visitStorage; + public FormMain(ILogger logger, IStorage visitStorage) { InitializeComponent(); + _logger = logger; + _visitStorage = visitStorage; } private void FormMain_Load(object sender, EventArgs e) { - + LoadData(); } private void DiagnosesToolStripMenuItem_Click(object sender, EventArgs e) @@ -20,5 +33,66 @@ form.ShowDialog(); } } + + private void SpecializationsToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormSpecializations)); + if (service is FormSpecializations form) + { + form.ShowDialog(); + } + } + + private void DoctorsToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormDoctors)); + if (service is FormDoctors form) + { + form.ShowDialog(); + } + } + + private void PatientsToolStripMenuItem1_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormPatients)); + if (service is FormPatients form) + { + form.ShowDialog(); + } + } + + protected virtual void LoadData() + { + SetStatusStripText("Загрузка списка..."); + try + { + long elapsed; + var items = _visitStorage.GetAll(out elapsed); + + dataGridView.DataSource = items; + foreach (DataGridViewTextBoxColumn column in dataGridView.Columns) + { + if (column.Name.Contains("Id")) + { + column.Visible = false; + } + } + dataGridView.ReadOnly = true; + + _logger.LogInformation("Список загружен успешно"); + SetStatusStripText($"Готово. Загружено записей: {items.Count}, время загрузки {elapsed} мск"); + } + catch (Exception ex) + { + string errorMessage = "Ошибка загрузки списка"; + _logger.LogError(string.Join(", ", errorMessage, $"\"{ex.Message}\"")); + MessageBox.Show(string.Join("\n\n", errorMessage, $"{ex.Message}"), "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + SetStatusStripText($"Ошибка загрузки"); + } + } + protected virtual void SetStatusStripText(string text) + { + toolStripStatusLabel.Text = text; + } } } diff --git a/Medical/MedicalView/FormMain.resx b/Medical/MedicalView/FormMain.resx index 6c82d08..3478fc5 100644 --- a/Medical/MedicalView/FormMain.resx +++ b/Medical/MedicalView/FormMain.resx @@ -120,4 +120,7 @@ 17, 17 + + 145, 17 + \ No newline at end of file diff --git a/Medical/MedicalView/Patients/FormPatients.cs b/Medical/MedicalView/Patients/FormPatients.cs new file mode 100644 index 0000000..88c83ce --- /dev/null +++ b/Medical/MedicalView/Patients/FormPatients.cs @@ -0,0 +1,14 @@ +using MedicalDatabaseContracts; +using MedicalDatabaseContracts.Models; +using Microsoft.Extensions.Logging; + +namespace MedicalView.Patients +{ + public class FormPatients : FormAbstractList + { + public FormPatients(ILogger> logger, IStorage storage) : base(logger, storage) + { + Text = "Список пациентов"; + } + } +} diff --git a/Medical/MedicalView/Program.cs b/Medical/MedicalView/Program.cs index d2c0cd8..5f32a3f 100644 --- a/Medical/MedicalView/Program.cs +++ b/Medical/MedicalView/Program.cs @@ -1,6 +1,10 @@ using MedicalDatabaseContracts; using MedicalDatabaseContracts.Models; using MedicalPostgresqlDatabase.Storages; +using MedicalView.Diagnoses; +using MedicalView.Doctors; +using MedicalView.Patients; +using MedicalView.Specializations; using MedicalView.Visits; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; @@ -35,10 +39,18 @@ namespace MedicalView option.SetMinimumLevel(LogLevel.Information); option.AddNLog("nlog.config"); }); - services.AddTransient, DiagnosesStorage>(); + services.AddTransient, DiagnoseStorage>(); + services.AddTransient, DoctorStorage>(); + services.AddTransient, PatientStorage>(); + services.AddTransient, SpecializationStorage>(); + services.AddTransient, VisitStorage>(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); } } } \ No newline at end of file diff --git a/Medical/MedicalView/Specializations/FormSpecializations.cs b/Medical/MedicalView/Specializations/FormSpecializations.cs new file mode 100644 index 0000000..9a823d1 --- /dev/null +++ b/Medical/MedicalView/Specializations/FormSpecializations.cs @@ -0,0 +1,14 @@ +using MedicalDatabaseContracts; +using MedicalDatabaseContracts.Models; +using Microsoft.Extensions.Logging; + +namespace MedicalView.Specializations +{ + public class FormSpecializations : FormAbstractList + { + public FormSpecializations(ILogger> logger, IStorage storage) : base(logger, storage) + { + Text = "Список специализаций"; + } + } +} diff --git a/Medical/MedicalView/Visits/FormVisits.cs b/Medical/MedicalView/Visits/FormVisits.cs new file mode 100644 index 0000000..2dad624 --- /dev/null +++ b/Medical/MedicalView/Visits/FormVisits.cs @@ -0,0 +1,11 @@ +using MedicalDatabaseContracts; +using MedicalDatabaseContracts.Models; +using Microsoft.Extensions.Logging; + +namespace MedicalView.Visits +{ + public class FormVisits : FormAbstractList + { + public FormVisits(ILogger> logger, IStorage storage) : base(logger, storage) { } + } +}