using Microsoft.Extensions.Logging; using RouteGuideBusinessLogics.BusinessLogics; using RouteGuideContracts.BindingModels; using RouteGuideContracts.BusinessLogicsContracts; using RouteGuideContracts.SearchModels; using RouteGuideDataModels.Enums; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace RouteGuideView { /// /// Форма для создания/редактирования транспорта /// public partial class FormTransport : Form { /// /// Логгер /// private readonly ILogger _logger; /// /// Бизнес-логика для транспорта /// private readonly ITransportLogic _transportLogic; /// /// Бизнес-логика для водителей /// private readonly IDriverLogic _driverLogic; /// /// Идентификатор /// private int? _id; /// /// Идентификатор /// public int Id { set { _id = value; } } /// /// Конструктор /// /// /// /// public FormTransport(ILogger logger, ITransportLogic transportLogic, IDriverLogic driverLogic) { InitializeComponent(); _logger = logger; _transportLogic = transportLogic; _driverLogic = driverLogic; } /// /// Загрузка данных /// /// /// private void FormTransport_Load(object sender, EventArgs e) { // Загрузка типов транспорта для ComboBoxType foreach (TransportType type in Enum.GetValues(typeof(TransportType))) { comboBoxType.Items.Add(type); } try { // Загрузка водителей для ComboBoxDriver _logger.LogInformation("Загрузка списка водителей"); var list = _driverLogic.ReadList(null); if (list != null) { comboBoxDriver.DisplayMember = "FullName"; comboBoxDriver.ValueMember = "Id"; comboBoxDriver.DataSource = list; comboBoxDriver.SelectedItem = null; } } catch (Exception ex) { _logger.LogError(ex, "Ошибка загрузки списка водителей"); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } if (!_id.HasValue) { return; } try { // Заполнение полей _logger.LogInformation("Получение сущности 'Транспорт'"); var view = _transportLogic.ReadElement(new TransportSearchModel { Id = _id.Value }); if (view != null) { textBoxLicense.Text = view.License; textBoxCapacity.Text = view.Capacity.ToString(); comboBoxDriver.SelectedValue = view.DriverId; comboBoxType.SelectedItem = view.Type; } } catch (Exception ex1) { _logger.LogError(ex1, "Ошибка получения сущности 'Водитель'"); MessageBox.Show(ex1.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } /// /// Кнопка "Сохранить" /// /// /// private void buttonSave_Click(object sender, EventArgs e) { if (comboBoxType.SelectedIndex == -1) { MessageBox.Show("Выберите тип транспорта", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (comboBoxDriver.SelectedValue == null) { MessageBox.Show("Выберите водителя", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (string.IsNullOrEmpty(textBoxLicense.Text)) { MessageBox.Show("Заполните номер транспорта", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (string.IsNullOrEmpty(textBoxCapacity.Text)) { MessageBox.Show("Заполните вместимость", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } _logger.LogInformation("Сохранение сущности 'Транспорт'"); try { var model = new TransportBindingModel { Id = _id ?? 0, License = textBoxLicense.Text, Type = (TransportType)comboBoxType.SelectedItem, Capacity = int.TryParse(textBoxCapacity.Text, out var capacity) ? capacity : 1, DriverId = Convert.ToInt32(comboBoxDriver.SelectedValue) }; var operationResult = _id.HasValue ? _transportLogic.Update(model) : _transportLogic.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 buttonCancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); } } }