using BeautySalonContracts.BindingModels; using BeautySalonContracts.BusinessLogicsContracts; using BeautySalonContracts.SearchModels; using BeautySalonDataModels.Models; using Microsoft.Extensions.Logging; namespace BeautySalon { public partial class FormMaster : Form { private readonly ILogger _logger; private readonly IMasterLogic _logic; private int? _id; private Dictionary _masterServices; public int Id { set { _id = value; } } public FormMaster(ILogger logger, IMasterLogic logic) { InitializeComponent(); _logger = logger; _logic = logic; _masterServices = new Dictionary(); } private void LoadData() { _logger.LogInformation("Загрузка услуг мастера"); try { if (_masterServices != null) { dataGridView.Rows.Clear(); foreach (var ec in _masterServices) { dataGridView.Rows.Add(new object[] { ec.Key, ec.Value.Item1.ServiceName, ec.Value.Item2 }); } textBoxWage.Text = CalcWage().ToString(); } } catch (Exception ex) { _logger.LogError(ex, "Ошибка загрузки услуг мастера"); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void ButtonAdd_Click(object sender, EventArgs e) { var service = Program.ServiceProvider?.GetService(typeof(FormMasterService)); if (service is FormMasterService form) { if (form.ShowDialog() == DialogResult.OK) { if (form.ServiceModel == null) { return; } _logger.LogInformation("Добавление новой услуги: {ServiceName} - {Time}", form.ServiceModel.ServiceName, form.Time); if (_masterServices.ContainsKey(form.Id)) { _masterServices[form.Id] = (form.ServiceModel, form.Time); } else { _masterServices.Add(form.Id, (form.ServiceModel, form.Time)); } LoadData(); } } } private void ButtonUpd_Click(object sender, EventArgs e) { if (dataGridView.SelectedRows.Count == 1) { var service = Program.ServiceProvider?.GetService(typeof(FormMasterService)); if (service is FormMasterService form) { int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value); form.Id = id; form.Time = _masterServices[id].Item2; if (form.ShowDialog() == DialogResult.OK) { if (form.ServiceModel == null) { return; } _logger.LogInformation("Изменение услуги: { ServiceName} - { Time}", form.ServiceModel.ServiceName, form.Time); _masterServices[form.Id] = (form.ServiceModel, form.Time); LoadData(); } } } } private void ButtonDel_Click(object sender, EventArgs e) { if (dataGridView.SelectedRows.Count == 1) { if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { try { _logger.LogInformation("Удаление услуги: { ServiceName} - { Time}", dataGridView.SelectedRows[0].Cells[1].Value); _masterServices?.Remove(Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value)); } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } LoadData(); } } } private void ButtonRef_Click(object sender, EventArgs e) { LoadData(); } private void ButtonSave_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(textBoxName.Text)) { MessageBox.Show("Заполните ФИО", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (_masterServices == null || _masterServices.Count == 0) { MessageBox.Show("Заполните услуги", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (string.IsNullOrEmpty(textBoxWage.Text)) { MessageBox.Show("Заполните рабочее время", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } _logger.LogInformation("Сохранение мастера"); try { var model = new MasterBindingModel { Id = _id ?? 0, MasterFIO = textBoxName.Text, Wage = Convert.ToDouble(textBoxWage.Text), MasterServices = _masterServices }; var operationResult = _id.HasValue ? _logic.Update(model) : _logic.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(); } private void FormMaster_Load(object sender, EventArgs e) { if (_id.HasValue) { _logger.LogInformation("Загрузка мастера"); try { var view = _logic.ReadElement(new MasterSearchModel { Id = _id.Value }); if (view != null) { textBoxName.Text = view.MasterFIO; textBoxWage.Text = view.Wage.ToString(); _masterServices = view.MasterServices ?? new Dictionary(); LoadData(); } } catch (Exception ex) { _logger.LogError(ex, "Ошибка загрузки мастера"); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } private double CalcWage() { double price = 0; foreach (var elem in _masterServices) { price += ((elem.Value.Item1?.Cost ?? 0) * elem.Value.Item2); } return Math.Round(price * 1.1, 2); } } }