using MedicalDatabaseContracts; using MedicalDatabaseContracts.Models; using MedicalDatabaseContracts.SearchModels; using MedicalDatabaseContracts.ViewModels; using Microsoft.Extensions.Logging; using System.Windows.Forms; namespace MedicalView.Visits { public partial class FormVisit : FormAbstractDetail { private readonly ILogger _logger; private readonly ILogic _visitLogic; private readonly ILogic _diagnoseLogic; private readonly ILogic _doctorLogic; private readonly ILogic _patientLogic; public FormVisit( ILogger logger, ILogic visitLogic, ILogic diagnoseLogic, ILogic doctorLogic, ILogic patientLogic) { InitializeComponent(); _logger = logger; _visitLogic = visitLogic; _diagnoseLogic = diagnoseLogic; _doctorLogic = doctorLogic; _patientLogic = patientLogic; } private void ApplyToolStripMenuItem_Click(object sender, EventArgs e) { if (comboBoxPatient.SelectedItem == null) { MessageBox.Show("Выберите пациента", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } else if (comboBoxDoctor.SelectedItem == null) { MessageBox.Show("Выберите врача", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } _logger.LogInformation("Сохранение модели приема"); try { var model = new Visit { Id = ModelId ?? 0, Comment = textBoxComment.Text, PatientId = (comboBoxPatient.SelectedItem as PatientViewModel).Id, DoctorId = (comboBoxDoctor.SelectedItem as DoctorViewModel).Id, DiagnoseId = comboBoxDiagnose.SelectedItem != null ? (comboBoxDiagnose.SelectedItem as DiagnoseViewModel).Id : null, Date = DateOnly.FromDateTime(datePicker.Value), Time = TimeOnly.FromDateTime(timePicker.Value) }; var operationResult = ModelId.HasValue ? _visitLogic.Update(model) : _visitLogic.Create(model); if (!operationResult) { throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); } MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); DialogResult = DialogResult.OK; Close(); } catch (Exception ex) { _logger.LogError(ex, "Ошибка сохранения модели приема"); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void CancelToolStripMenuItem_Click(object sender, EventArgs e) { Cancel(); } private void FormVisit_Load(object sender, EventArgs e) { var patients = _patientLogic.ReadList(); var doctors = _doctorLogic.ReadList(); var diagnoses = _diagnoseLogic.ReadList(); comboBoxPatient.DataSource = patients; comboBoxPatient.SelectedIndex = -1; comboBoxDoctor.DataSource = doctors; comboBoxDoctor.SelectedIndex = -1; comboBoxDiagnose.DataSource = diagnoses; comboBoxDiagnose.SelectedIndex = diagnoses.FindIndex(x => x.Name == "Первичный прием"); if (ModelId.HasValue) { try { _logger.LogInformation("Получение модели приема"); var view = _visitLogic.ReadElement(ModelId.Value); if (view != null) { textBoxComment.Text = view.Comment; datePicker.Value = view.Date.ToDateTime(view.Time); timePicker.Value = view.Date.ToDateTime(view.Time); if (view.DiagnoseId != null) { comboBoxDiagnose.SelectedIndex = diagnoses.FindIndex(x => x.Id == view.DiagnoseId); } comboBoxDoctor.SelectedIndex = doctors.FindIndex(x => x.Id == view.DoctorId); comboBoxPatient.SelectedIndex = patients.FindIndex(x => x.Id == view.PatientId); } } catch (Exception ex) { _logger.LogError(ex, "Ошибка получения модели приема"); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } } }