diff --git a/Bar/Bar/BarView.csproj b/Bar/Bar/BarView.csproj index 8aa7ae5..72862fe 100644 --- a/Bar/Bar/BarView.csproj +++ b/Bar/Bar/BarView.csproj @@ -9,6 +9,10 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/Bar/Bar/DataGridViewExtension.cs b/Bar/Bar/DataGridViewExtension.cs new file mode 100644 index 0000000..460a2b3 --- /dev/null +++ b/Bar/Bar/DataGridViewExtension.cs @@ -0,0 +1,44 @@ +using BarContracts.Attrubites; + +namespace BarView +{ + public static class DataGridViewExtension + { + public static void FillAndConfigGrid(this DataGridView Grid, List? Data) + { + if (Data == null) + return; + + Grid.DataSource = Data; + + var Type = typeof(T); + var Properties = Type.GetProperties(); + + foreach (DataGridViewColumn Column in Grid.Columns) + { + var Property = Properties.FirstOrDefault(x => x.Name == Column.Name); + if (Property == null) + throw new InvalidOperationException($"В типе {Type.Name} не найдено свойство с именем {Column.Name}"); + + var Attribute = Property.GetCustomAttributes(typeof(ColumnAttribute), true)?.SingleOrDefault(); + if (Attribute == null) + throw new InvalidOperationException($"Не найден атрибут типа ColumnAttribute для свойства {Property.Name}"); + + if (Attribute is ColumnAttribute СolumnAttr) + { + Column.HeaderText = СolumnAttr.Title; + Column.Visible = СolumnAttr.Visible; + + if (СolumnAttr.IsUseAutoSize) + { + Column.AutoSizeMode = (DataGridViewAutoSizeColumnMode)Enum.Parse(typeof(DataGridViewAutoSizeColumnMode), СolumnAttr.GridViewAutoSize.ToString()); + } + else + { + Column.Width = СolumnAttr.Width; + } + } + } + } + } +} diff --git a/Bar/Bar/FormMain.Designer.cs b/Bar/Bar/FormMain.Designer.cs index 5d963a1..909c994 100644 --- a/Bar/Bar/FormMain.Designer.cs +++ b/Bar/Bar/FormMain.Designer.cs @@ -44,7 +44,7 @@ this.списокКомпонентовToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.компонентыПоИзделиямToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.списокЗаказовToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.запускРаботToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.StartWorkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.MailToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ((System.ComponentModel.ISupportInitialize)(this.DataGridView)).BeginInit(); this.menuStrip1.SuspendLayout(); @@ -116,7 +116,7 @@ this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.ToolStripMenu, this.отчётыToolStripMenuItem, - this.запускРаботToolStripMenuItem, + this.StartWorkToolStripMenuItem, this.MailToolStripMenuItem}); this.menuStrip1.Location = new System.Drawing.Point(0, 0); this.menuStrip1.Name = "menuStrip1"; @@ -138,28 +138,28 @@ // ComponentsStripMenuItem // this.ComponentsStripMenuItem.Name = "ComponentsStripMenuItem"; - this.ComponentsStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.ComponentsStripMenuItem.Size = new System.Drawing.Size(185, 26); this.ComponentsStripMenuItem.Text = "Компоненты"; this.ComponentsStripMenuItem.Click += new System.EventHandler(this.ComponentsStripMenuItem_Click); // // CocktailStripMenuItem // this.CocktailStripMenuItem.Name = "CocktailStripMenuItem"; - this.CocktailStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.CocktailStripMenuItem.Size = new System.Drawing.Size(185, 26); this.CocktailStripMenuItem.Text = "Коктейль"; this.CocktailStripMenuItem.Click += new System.EventHandler(this.CocktailsStripMenuItem_Click); // // ClientsToolStripMenuItem // this.ClientsToolStripMenuItem.Name = "ClientsToolStripMenuItem"; - this.ClientsToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.ClientsToolStripMenuItem.Size = new System.Drawing.Size(185, 26); this.ClientsToolStripMenuItem.Text = "Клиенты"; this.ClientsToolStripMenuItem.Click += new System.EventHandler(this.ClientsToolStripMenuItem_Click); // // EmployersToolStripMenuItem // this.EmployersToolStripMenuItem.Name = "EmployersToolStripMenuItem"; - this.EmployersToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.EmployersToolStripMenuItem.Size = new System.Drawing.Size(185, 26); this.EmployersToolStripMenuItem.Text = "Исполнители"; this.EmployersToolStripMenuItem.Click += new System.EventHandler(this.EmployersToolStripMenuItem_Click); // @@ -194,12 +194,12 @@ this.списокЗаказовToolStripMenuItem.Text = "Список заказов"; this.списокЗаказовToolStripMenuItem.Click += new System.EventHandler(this.OrdersToolStripMenuItem_Click); // - // запускРаботToolStripMenuItem + // StartWorkToolStripMenuItem // - this.запускРаботToolStripMenuItem.Name = "запускРаботToolStripMenuItem"; - this.запускРаботToolStripMenuItem.Size = new System.Drawing.Size(114, 24); - this.запускРаботToolStripMenuItem.Text = "Запуск работ"; - this.запускРаботToolStripMenuItem.Click += new System.EventHandler(this.запускРаботToolStripMenuItem_Click); + this.StartWorkToolStripMenuItem.Name = "StartWorkToolStripMenuItem"; + this.StartWorkToolStripMenuItem.Size = new System.Drawing.Size(114, 24); + this.StartWorkToolStripMenuItem.Text = "Запуск работ"; + this.StartWorkToolStripMenuItem.Click += new System.EventHandler(this.запускРаботToolStripMenuItem_Click); // // MailToolStripMenuItem // @@ -248,7 +248,7 @@ private ToolStripMenuItem компонентыПоИзделиямToolStripMenuItem; private ToolStripMenuItem списокЗаказовToolStripMenuItem; private ToolStripMenuItem ClientsToolStripMenuItem; - private ToolStripMenuItem запускРаботToolStripMenuItem; + private ToolStripMenuItem StartWorkToolStripMenuItem; private ToolStripMenuItem EmployersToolStripMenuItem; private ToolStripMenuItem MailToolStripMenuItem; } diff --git a/Bar/Bar/FormMain.cs b/Bar/Bar/FormMain.cs index ad33bcd..a544192 100644 --- a/Bar/Bar/FormMain.cs +++ b/Bar/Bar/FormMain.cs @@ -1,245 +1,267 @@ using BarContracts.BindingModels; using BarContracts.BusinessLogicContracts; using BarContracts.BusinessLogicsContracts; +using BarContracts.DI; using BarView.Forms; using Microsoft.Extensions.Logging; namespace BarView { - public partial class FormMain : Form - { - private readonly ILogger _logger; - private readonly IOrderLogic _orderLogic; - private readonly IReportLogic _reportLogic; - private readonly IWorkProcess _workProcess; - public FormMain(ILogger Logger, IOrderLogic OrderLogic, IReportLogic ReportLogic, IWorkProcess WorkProcess) - { - InitializeComponent(); + public partial class FormMain : Form + { + private readonly ILogger _logger; + private readonly IOrderLogic _orderLogic; + private readonly IReportLogic _reportLogic; + private readonly IWorkProcess _workProcess; + private readonly IBackUpLogic _backUpLogic; - _logger = Logger; - _orderLogic = OrderLogic; - _reportLogic = ReportLogic; - _workProcess = WorkProcess; - } - private void FormMain_Load(object sender, EventArgs e) - { - LoadData(); - } + public FormMain(ILogger Logger, IOrderLogic OrderLogic, IReportLogic ReportLogic, IWorkProcess WorkProcess, IBackUpLogic backUpLogic) + { + InitializeComponent(); - private void LoadData() - { - _logger.LogInformation("Загрузка заказов"); + _logger = Logger; + _orderLogic = OrderLogic; + _reportLogic = ReportLogic; + _workProcess = WorkProcess; + _backUpLogic = backUpLogic; + } - try - { - var List = _orderLogic.ReadList(null); + private void FormMain_Load(object sender, EventArgs e) + { + LoadData(); + } - if (List != null) - { - DataGridView.DataSource = List; - DataGridView.Columns["CocktailId"].Visible = false; - DataGridView.Columns["ClientEmail"].Visible = false; - DataGridView.Columns["ClientId"].Visible = false; - DataGridView.Columns["ClientEmail"].Visible = false; - DataGridView.Columns["ImplementerId"].Visible = false; - DataGridView.Columns["CocktailName"].Visible = false; - } + private void LoadData() + { + _logger.LogInformation("Загрузка заказов"); - _logger.LogInformation("Загрузка заказов"); - } - catch (Exception ex) - { - _logger.LogError(ex, "Ошибка загрузки заказов"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } + try + { + DataGridView.FillAndConfigGrid(_orderLogic.ReadList(null)); + _logger.LogInformation("Загрузка заказов"); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка загрузки заказов"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } - private void ComponentsStripMenuItem_Click(object sender, EventArgs e) - { - var Service = Program.ServiceProvider?.GetService(typeof(FormComponents)); + private void ComponentsStripMenuItem_Click(object sender, EventArgs e) + { + var Service = DependencyManager.Instance.Resolve(); - if (Service is FormComponents Form) - { - Form.ShowDialog(); - } - } + if (Service is FormComponents Form) + { + Form.ShowDialog(); + } + } - private void CocktailsStripMenuItem_Click(object sender, EventArgs e) - { - var Service = Program.ServiceProvider?.GetService(typeof(FormCocktails)); + private void CocktailsStripMenuItem_Click(object sender, EventArgs e) + { + var Service = DependencyManager.Instance.Resolve(); - if (Service is FormCocktails Form) - { - Form.ShowDialog(); - } - } + if (Service is FormCocktails Form) + { + Form.ShowDialog(); + } + } - private void CreateOrderButton_Click(object sender, EventArgs e) - { - var Service = Program.ServiceProvider?.GetService(typeof(FormCreateOrder)); + private void CreateOrderButton_Click(object sender, EventArgs e) + { + var Service = DependencyManager.Instance.Resolve(); - if (Service is FormCreateOrder Form) - { - Form.ShowDialog(); - LoadData(); - } - } + if (Service is FormCreateOrder Form) + { + Form.ShowDialog(); + LoadData(); + } + } - private void TakeOrderInWorkButton_Click(object sender, EventArgs e) - { - if (DataGridView.SelectedRows.Count == 1) - { - int id = Convert.ToInt32(DataGridView.SelectedRows[0].Cells["Id"].Value); + private void TakeOrderInWorkButton_Click(object sender, EventArgs e) + { + if (DataGridView.SelectedRows.Count == 1) + { + int id = Convert.ToInt32(DataGridView.SelectedRows[0].Cells["Id"].Value); - _logger.LogInformation("Заказ №{id}. Меняется статус на 'В работе'", id); + _logger.LogInformation("Заказ №{id}. Меняется статус на 'В работе'", id); - try - { - var OperationResult = _orderLogic.TakeOrderInWork(new OrderBindingModel { Id = id }); + try + { + var OperationResult = _orderLogic.TakeOrderInWork(new OrderBindingModel { Id = id }); - if (!OperationResult) - { - throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); - } + if (!OperationResult) + { + throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); + } - LoadData(); - } - catch (Exception ex) - { - _logger.LogError(ex, "Ошибка передачи заказа в работу"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } + LoadData(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка передачи заказа в работу"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } - } + } - private void OrderReadyButton_Click(object sender, EventArgs e) - { - if (DataGridView.SelectedRows.Count == 1) - { - int id = Convert.ToInt32(DataGridView.SelectedRows[0].Cells["Id"].Value); + private void OrderReadyButton_Click(object sender, EventArgs e) + { + if (DataGridView.SelectedRows.Count == 1) + { + int id = Convert.ToInt32(DataGridView.SelectedRows[0].Cells["Id"].Value); - _logger.LogInformation("Заказ №{id}. Меняется статус на 'Готов'", id); + _logger.LogInformation("Заказ №{id}. Меняется статус на 'Готов'", id); - try - { - var OperationResult = _orderLogic.FinishOrder(new OrderBindingModel { Id = id }); + try + { + var OperationResult = _orderLogic.FinishOrder(new OrderBindingModel { Id = id }); - if (!OperationResult) - { - throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); - } + if (!OperationResult) + { + throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); + } - LoadData(); - } - catch (Exception ex) - { - _logger.LogError(ex, "Ошибка отметки о готовности заказа"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - } + LoadData(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка отметки о готовности заказа"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } - private void OrderDeliveredButton_Click(object sender, EventArgs e) - { - if (DataGridView.SelectedRows.Count == 1) - { - int id = Convert.ToInt32(DataGridView.SelectedRows[0].Cells["Id"].Value); + private void OrderDeliveredButton_Click(object sender, EventArgs e) + { + if (DataGridView.SelectedRows.Count == 1) + { + int id = Convert.ToInt32(DataGridView.SelectedRows[0].Cells["Id"].Value); - _logger.LogInformation("Заказ №{id}. Меняется статус на 'Выдан'", id); + _logger.LogInformation("Заказ №{id}. Меняется статус на 'Выдан'", id); - try - { - var OperationResult = _orderLogic.DeliveryOrder(new OrderBindingModel { Id = id }); + try + { + var OperationResult = _orderLogic.DeliveryOrder(new OrderBindingModel { Id = id }); - if (!OperationResult) - { - throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); - } + if (!OperationResult) + { + throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); + } - _logger.LogInformation("Заказ №{id} выдан", id); - LoadData(); - } - catch (Exception ex) - { - _logger.LogError(ex, "Ошибка отметки о выдачи заказа"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - } + _logger.LogInformation("Заказ №{id} выдан", id); + LoadData(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка отметки о выдачи заказа"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } - private void RefreshButton_Click(object sender, EventArgs e) - { - LoadData(); - } - private void ComponentsToolStripMenuItem_Click(object sender, EventArgs e) - { - using var Dialog = new SaveFileDialog { Filter = "docx|*.docx" }; + private void RefreshButton_Click(object sender, EventArgs e) + { + LoadData(); + } - if (Dialog.ShowDialog() == DialogResult.OK) - { - _reportLogic.SaveComponentsToWordFile(new ReportBindingModel { FileName = Dialog.FileName }); - MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - } + private void ComponentsToolStripMenuItem_Click(object sender, EventArgs e) + { + using var Dialog = new SaveFileDialog { Filter = "docx|*.docx" }; - private void ComponentCocktailToolStripMenuItem_Click(object sender, EventArgs e) - { - var Service = Program.ServiceProvider?.GetService(typeof(FormReportCocktailComponents)); + if (Dialog.ShowDialog() == DialogResult.OK) + { + _reportLogic.SaveComponentsToWordFile(new ReportBindingModel { FileName = Dialog.FileName }); + MessageBox.Show("Выполнено", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } - if (Service is FormReportCocktailComponents Form) - { - Form.ShowDialog(); - } - } + private void ComponentCocktailToolStripMenuItem_Click(object sender, EventArgs e) + { + var Service = DependencyManager.Instance.Resolve(); - private void OrdersToolStripMenuItem_Click(object sender, EventArgs e) - { - var Service = Program.ServiceProvider?.GetService(typeof(FormReportOrders)); + if (Service is FormReportCocktailComponents Form) + { + Form.ShowDialog(); + } + } - if (Service is FormReportOrders Form) - { - Form.ShowDialog(); - } - } + private void OrdersToolStripMenuItem_Click(object sender, EventArgs e) + { + var Service = DependencyManager.Instance.Resolve(); - private void ClientsToolStripMenuItem_Click(object sender, EventArgs e) - { - var Service = Program.ServiceProvider?.GetService(typeof(FormClients)); + if (Service is FormReportOrders Form) + { + Form.ShowDialog(); + } + } - if (Service is FormClients Form) - { - Form.ShowDialog(); - } - } + private void ClientsToolStripMenuItem_Click(object sender, EventArgs e) + { + var Service = DependencyManager.Instance.Resolve(); - private void запускРаботToolStripMenuItem_Click(object sender, EventArgs e) - { - var ImplementerLogic = Program.ServiceProvider?.GetService(typeof(IImplementerLogic)); - _workProcess.DoWork((ImplementerLogic as IImplementerLogic)!, _orderLogic); + if (Service is FormClients Form) + { + Form.ShowDialog(); + } + } - MessageBox.Show("Процесс обработки запущен", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); - } + private void EmployersToolStripMenuItem_Click(object sender, EventArgs e) + { + var Service = DependencyManager.Instance.Resolve(); - private void EmployersToolStripMenuItem_Click(object sender, EventArgs e) - { - var Service = Program.ServiceProvider?.GetService(typeof(FormImplementers)); + if (Service is FormImplementers Form) + { + Form.ShowDialog(); + } + } - if (Service is FormImplementers Form) - { - Form.ShowDialog(); - } - } + private void запускРаботToolStripMenuItem_Click(object sender, EventArgs e) + { + var ImplementerLogic = DependencyManager.Instance.Resolve(); + _workProcess.DoWork(ImplementerLogic, _orderLogic); - private void MailToolStripMenuItem_Click(object sender, EventArgs e) - { - var Service = Program.ServiceProvider?.GetService(typeof(FormMail)); + MessageBox.Show("Процесс обработки запущен", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); + } - if (Service is FormMail Form) - { - Form.ShowDialog(); - } - } - } + private void MailToolStripMenuItem_Click(object sender, EventArgs e) + { + var Service = DependencyManager.Instance.Resolve(); + + if (Service is FormMail Form) + { + Form.ShowDialog(); + } + } + + private void CreateBackupToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + if (_backUpLogic != null) + { + var FolderBrowser = new FolderBrowserDialog(); + if (FolderBrowser.ShowDialog() == DialogResult.OK) + { + _backUpLogic.CreateBackUp(new BackUpSaveBindingModel + { + FolderName = FolderBrowser.SelectedPath + }); + MessageBox.Show("Бекап создан", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка создания бэкапа", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void CreateBackupToolStripMenuItem_Click_1(object sender, EventArgs e) + { + + } + } } diff --git a/Bar/Bar/Forms/FormCocktail.Designer.cs b/Bar/Bar/Forms/FormCocktail.Designer.cs index 89ac175..bba82e5 100644 --- a/Bar/Bar/Forms/FormCocktail.Designer.cs +++ b/Bar/Bar/Forms/FormCocktail.Designer.cs @@ -153,7 +153,7 @@ this.DataGridView.RowTemplate.Height = 29; this.DataGridView.Size = new System.Drawing.Size(391, 213); this.DataGridView.TabIndex = 13; - this.DataGridView.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.DataGridView_CellContentClick); + //this.DataGridView.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.DataGridView_CellContentClick); // // IdColumn // diff --git a/Bar/Bar/Forms/FormCocktail.cs b/Bar/Bar/Forms/FormCocktail.cs index 851cba4..6bae574 100644 --- a/Bar/Bar/Forms/FormCocktail.cs +++ b/Bar/Bar/Forms/FormCocktail.cs @@ -1,5 +1,6 @@ using BarContracts.BindingModels; using BarContracts.BusinessLogicContracts; +using BarContracts.DI; using BarContracts.SearchModels; using BarDataModels.Models; using Microsoft.Extensions.Logging; @@ -10,27 +11,27 @@ namespace BarView.Forms { private readonly ILogger _logger; - private readonly ICocktailLogic _logic; + private readonly ICocktailLogic _logic; private int? _id; - private Dictionary _CocktailComponents; + private Dictionary _cocktailComponents; public int Id { set { _id = value; } } - public FormCocktail(ILogger Logger, ICocktailLogic Logic) + public FormCocktail(ILogger Logger, ICocktailLogic Logic) { InitializeComponent(); _logger = Logger; _logic = Logic; - _CocktailComponents = new Dictionary(); + _cocktailComponents = new Dictionary(); } private void FormCocktail_Load(object sender, EventArgs e) { if (_id.HasValue) { - _logger.LogInformation("Загрузка коктеля"); + _logger.LogInformation("Загрузка коктейльа"); try { @@ -44,13 +45,13 @@ namespace BarView.Forms NameTextBox.Text = View.CocktailName; PriceTextBox.Text = View.Price.ToString(); - _CocktailComponents = View.CocktailComponents ?? new Dictionary(); + _cocktailComponents = View.CocktailComponents ?? new Dictionary(); LoadData(); } } catch (Exception ex) { - _logger.LogError(ex, "Ошибка загрузки коктеля"); + _logger.LogError(ex, "Ошибка загрузки коктейльа"); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } @@ -58,14 +59,14 @@ namespace BarView.Forms private void LoadData() { - _logger.LogInformation("Загрузка компонентов коктеля"); + _logger.LogInformation("Загрузка компонентов коктейльа"); try { - if (_CocktailComponents != null) + if (_cocktailComponents != null) { DataGridView.Rows.Clear(); - foreach (var Comp in _CocktailComponents) + foreach (var Comp in _cocktailComponents) { DataGridView.Rows.Add(new object[] { Comp.Key, Comp.Value.Item1.ComponentName, Comp.Value.Item2 }); } @@ -75,14 +76,14 @@ namespace BarView.Forms } catch (Exception ex) { - _logger.LogError(ex, "Ошибка загрузки компонентов коктеля"); + _logger.LogError(ex, "Ошибка загрузки компонентов коктейльа"); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void AddButton_Click(object sender, EventArgs e) { - var Service = Program.ServiceProvider?.GetService(typeof(FormCocktailComponent)); + var Service = DependencyManager.Instance.Resolve(); if (Service is FormCocktailComponent Form) { @@ -95,13 +96,13 @@ namespace BarView.Forms _logger.LogInformation("Добавление нового компонента: {ComponentName} - {Count}", Form.ComponentModel.ComponentName, Form.Count); - if (_CocktailComponents.ContainsKey(Form.Id)) + if (_cocktailComponents.ContainsKey(Form.Id)) { - _CocktailComponents[Form.Id] = (Form.ComponentModel, Form.Count); + _cocktailComponents[Form.Id] = (Form.ComponentModel, Form.Count); } else { - _CocktailComponents.Add(Form.Id, (Form.ComponentModel, Form.Count)); + _cocktailComponents.Add(Form.Id, (Form.ComponentModel, Form.Count)); } LoadData(); @@ -113,12 +114,12 @@ namespace BarView.Forms { if (DataGridView.SelectedRows.Count == 1) { - var service = Program.ServiceProvider?.GetService(typeof(FormCocktailComponent)); + var service = DependencyManager.Instance.Resolve(); if (service is FormCocktailComponent Form) { int id = Convert.ToInt32(DataGridView.SelectedRows[0].Cells[0].Value); Form.Id = id; - Form.Count = _CocktailComponents[id].Item2; + Form.Count = _cocktailComponents[id].Item2; if (Form.ShowDialog() == DialogResult.OK) { @@ -128,7 +129,7 @@ namespace BarView.Forms } _logger.LogInformation("Изменение компонента: {ComponentName} - {Count}", Form.ComponentModel.ComponentName, Form.Count); - _CocktailComponents[Form.Id] = (Form.ComponentModel, Form.Count); + _cocktailComponents[Form.Id] = (Form.ComponentModel, Form.Count); LoadData(); } @@ -147,7 +148,7 @@ namespace BarView.Forms _logger.LogInformation("Удаление компонента: {ComponentName} - {Count}", DataGridView.SelectedRows[0].Cells[1].Value, DataGridView.SelectedRows[0].Cells[2].Value); - _CocktailComponents?.Remove(Convert.ToInt32(DataGridView.SelectedRows[0].Cells[0].Value)); + _cocktailComponents?.Remove(Convert.ToInt32(DataGridView.SelectedRows[0].Cells[0].Value)); } catch (Exception ex) { @@ -179,13 +180,13 @@ namespace BarView.Forms return; } - if (_CocktailComponents == null || _CocktailComponents.Count == 0) + if (_cocktailComponents == null || _cocktailComponents.Count == 0) { MessageBox.Show("Заполните компоненты", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } - _logger.LogInformation("Сохранение коктеля"); + _logger.LogInformation("Сохранение коктейльа"); try { @@ -194,7 +195,7 @@ namespace BarView.Forms Id = _id ?? 0, CocktailName = NameTextBox.Text, Price = Convert.ToDouble(PriceTextBox.Text), - CocktailComponents = _CocktailComponents + CocktailComponents = _cocktailComponents }; var OperationResult = _id.HasValue ? _logic.Update(Мodel) : _logic.Create(Мodel); @@ -210,7 +211,7 @@ namespace BarView.Forms } catch (Exception ex) { - _logger.LogError(ex, "Ошибка сохранения коктеля"); + _logger.LogError(ex, "Ошибка сохранения коктейльа"); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } @@ -225,17 +226,12 @@ namespace BarView.Forms { double Price = 0; - foreach (var Elem in _CocktailComponents) + foreach (var Elem in _cocktailComponents) { Price += ((Elem.Value.Item1?.Cost ?? 0) * Elem.Value.Item2); } - return Math.Round(Price * 1, 2); - } - - private void DataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e) - { - + return Math.Round(Price * 1.1, 2); } } } diff --git a/Bar/Bar/Forms/FormCocktails.Designer.cs b/Bar/Bar/Forms/FormCocktails.Designer.cs index 0571449..b997c89 100644 --- a/Bar/Bar/Forms/FormCocktails.Designer.cs +++ b/Bar/Bar/Forms/FormCocktails.Designer.cs @@ -85,7 +85,7 @@ this.DataGridView.RowTemplate.Height = 29; this.DataGridView.Size = new System.Drawing.Size(542, 385); this.DataGridView.TabIndex = 5; - this.DataGridView.SelectionChanged += new System.EventHandler(this.DataGridView_SelectionChanged); + //this.DataGridView.SelectionChanged += new System.EventHandler(this.DataGridView_SelectionChanged); // // FormCocktails // diff --git a/Bar/Bar/Forms/FormCocktails.cs b/Bar/Bar/Forms/FormCocktails.cs index 9046550..53a0c67 100644 --- a/Bar/Bar/Forms/FormCocktails.cs +++ b/Bar/Bar/Forms/FormCocktails.cs @@ -1,10 +1,11 @@ using BarContracts.BindingModels; using BarContracts.BusinessLogicContracts; +using BarContracts.DI; using Microsoft.Extensions.Logging; namespace BarView.Forms { - public partial class FormCocktails : Form + public partial class FormCocktails : Form { private readonly ILogger _logger; private readonly ICocktailLogic _logic; @@ -26,28 +27,19 @@ namespace BarView.Forms { try { - var List = _logic.ReadList(null); - - if (List != null) - { - DataGridView.DataSource = List; - DataGridView.Columns["Id"].Visible = false; - DataGridView.Columns["CocktailName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - DataGridView.Columns["CocktailComponents"].Visible = false; - } - - _logger.LogInformation("Загрузка коктеля"); + DataGridView.FillAndConfigGrid(_logic.ReadList(null)); + _logger.LogInformation("Загрузка коктейльа"); } catch (Exception ex) { - _logger.LogError(ex, "Ошибка загрузки коктеля"); + _logger.LogError(ex, "Ошибка загрузки коктейльа"); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void AddButton_Click(object sender, EventArgs e) { - var Service = Program.ServiceProvider?.GetService(typeof(FormCocktail)); + var Service = DependencyManager.Instance.Resolve(); if (Service is FormCocktail Form) { @@ -62,7 +54,7 @@ namespace BarView.Forms { if (DataGridView.SelectedRows.Count == 1) { - var Service = Program.ServiceProvider?.GetService(typeof(FormCocktail)); + var Service = DependencyManager.Instance.Resolve(); if (Service is FormCocktail Form) { @@ -84,7 +76,7 @@ namespace BarView.Forms if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { int id = Convert.ToInt32(DataGridView.SelectedRows[0].Cells["Id"].Value); - _logger.LogInformation("Удаление коктеля"); + _logger.LogInformation("Удаление коктейльа"); try { if (!_logic.Delete(new CocktailBindingModel @@ -99,7 +91,7 @@ namespace BarView.Forms } catch (Exception ex) { - _logger.LogError(ex, "Ошибка удаления коктеля"); + _logger.LogError(ex, "Ошибка удаления коктейльа"); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } @@ -110,9 +102,5 @@ namespace BarView.Forms { LoadData(); } - - private void DataGridView_SelectionChanged(object sender, EventArgs e) - { - } } } diff --git a/Bar/Bar/Forms/FormComponents.cs b/Bar/Bar/Forms/FormComponents.cs index 8a886cb..f6805ee 100644 --- a/Bar/Bar/Forms/FormComponents.cs +++ b/Bar/Bar/Forms/FormComponents.cs @@ -1,5 +1,6 @@ using BarContracts.BindingModels; using BarContracts.BusinessLogicContracts; +using BarContracts.DI; using Microsoft.Extensions.Logging; namespace BarView.Forms @@ -25,15 +26,7 @@ namespace BarView.Forms { try { - var List = _logic.ReadList(null); - - if (List != null) - { - DataGridView.DataSource = List; - DataGridView.Columns["Id"].Visible = false; - DataGridView.Columns["ComponentName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - } - + DataGridView.FillAndConfigGrid(_logic.ReadList(null)); _logger.LogInformation("Загрузка компонентов"); } catch (Exception ex) @@ -45,7 +38,7 @@ namespace BarView.Forms private void AddButton_Click(object sender, EventArgs e) { - var Service = Program.ServiceProvider?.GetService(typeof(FormComponent)); + var Service = DependencyManager.Instance.Resolve(); if (Service is FormComponent Form) { @@ -60,7 +53,7 @@ namespace BarView.Forms { if (DataGridView.SelectedRows.Count == 1) { - var Service = Program.ServiceProvider?.GetService(typeof(FormComponent)); + var Service = DependencyManager.Instance.Resolve(); if (Service is FormComponent Form) { Form.Id = Convert.ToInt32(DataGridView.SelectedRows[0].Cells["Id"].Value); @@ -108,7 +101,5 @@ namespace BarView.Forms { LoadData(); } - - } } diff --git a/Bar/Bar/Forms/FormImplementers.cs b/Bar/Bar/Forms/FormImplementers.cs index ecb8f33..4b56d0d 100644 --- a/Bar/Bar/Forms/FormImplementers.cs +++ b/Bar/Bar/Forms/FormImplementers.cs @@ -1,5 +1,6 @@ using BarContracts.BindingModels; using BarContracts.BusinessLogicsContracts; +using BarContracts.DI; using Microsoft.Extensions.Logging; namespace BarView.Forms @@ -12,7 +13,7 @@ namespace BarView.Forms public FormImplementers(ILogger Logger, IImplementerLogic ImplementerLogic) { InitializeComponent(); - + _logger = Logger; _implementerLogic = ImplementerLogic; } @@ -21,15 +22,7 @@ namespace BarView.Forms { try { - var List = _implementerLogic.ReadList(null); - - if (List != null) - { - DataGridView.DataSource = List; - DataGridView.Columns["Id"].Visible = false; - DataGridView.Columns["ImplementerFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - } - + DataGridView.FillAndConfigGrid(_implementerLogic.ReadList(null)); _logger.LogInformation("Загрузка исполнителей"); } catch (Exception ex) @@ -46,8 +39,8 @@ namespace BarView.Forms private void AddButton_Click(object sender, EventArgs e) { - var Service = Program.ServiceProvider?.GetService(typeof(FormImplementer)); - + var Service = DependencyManager.Instance.Resolve(); + if (Service is FormImplementer Form) { if (Form.ShowDialog() == DialogResult.OK) @@ -61,7 +54,7 @@ namespace BarView.Forms { if (DataGridView.SelectedRows.Count == 1) { - var service = Program.ServiceProvider?.GetService(typeof(FormImplementer)); + var service = DependencyManager.Instance.Resolve(); if (service is FormImplementer Form) { Form.Id = Convert.ToInt32(DataGridView.SelectedRows[0].Cells["Id"].Value); @@ -81,7 +74,7 @@ namespace BarView.Forms { int Id = Convert.ToInt32(DataGridView.SelectedRows[0].Cells["Id"].Value); _logger.LogInformation("Удаление исполнителя"); - + try { if (!_implementerLogic.Delete(new ImplementerBindingModel @@ -91,7 +84,7 @@ namespace BarView.Forms { throw new Exception("Ошибка при удалении. Дополнительная информация в логах."); } - + LoadData(); } catch (Exception ex) @@ -102,7 +95,7 @@ namespace BarView.Forms } } } - + private void RefreshButton_Click(object sender, EventArgs e) { LoadData(); diff --git a/Bar/Bar/Program.cs b/Bar/Bar/Program.cs index 594d444..8bac3b3 100644 --- a/Bar/Bar/Program.cs +++ b/Bar/Bar/Program.cs @@ -2,101 +2,87 @@ using BarBusinessLogic.BusinessLogics; using BarBusinessLogic.OfficePackage.Implements; using BarBusinessLogic.OfficePackage; using BarContracts.BusinessLogicContracts; -using BarContracts.StoragesContracts; -using BarDatabaseImplement.Implements; using BarView.Forms; -using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using NLog.Extensions.Logging; using BarContracts.BusinessLogicsContracts; using BarBusinessLogic.MailWorker; using BarContracts.BindingModels; +using BarContracts.DI; namespace BarView { - internal static class Program - { - private static ServiceProvider? _serviceProvider; - public static ServiceProvider? ServiceProvider => _serviceProvider; + internal static class Program + { + [STAThread] + static void Main() + { + ApplicationConfiguration.Initialize(); + InitDependency(); - [STAThread] - static void Main() - { - ApplicationConfiguration.Initialize(); + try + { + var MailSender = DependencyManager.Instance.Resolve(); + MailSender?.MailConfig(new MailConfigBindingModel + { + MailLogin = System.Configuration.ConfigurationManager.AppSettings["MailLogin"] ?? string.Empty, + MailPassword = System.Configuration.ConfigurationManager.AppSettings["MailPassword"] ?? string.Empty, + SmtpClientHost = System.Configuration.ConfigurationManager.AppSettings["SmtpClientHost"] ?? string.Empty, + SmtpClientPort = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["SmtpClientPort"]), + PopHost = System.Configuration.ConfigurationManager.AppSettings["PopHost"] ?? string.Empty, + PopPort = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["PopPort"]) + }); - var Services = new ServiceCollection(); - ConfigureServices(Services); + var Timer = new System.Threading.Timer(new TimerCallback(MailCheck!), null, 0, 100000); + } + catch (Exception ex) + { + var Logger = DependencyManager.Instance.Resolve(); + Logger?.LogError(ex, " "); + } - _serviceProvider = Services.BuildServiceProvider(); + Application.Run(DependencyManager.Instance.Resolve()); + } - try - { - var MailSender = _serviceProvider.GetService(); - MailSender?.MailConfig(new MailConfigBindingModel - { - MailLogin = System.Configuration.ConfigurationManager.AppSettings["MailLogin"] ?? string.Empty, - MailPassword = System.Configuration.ConfigurationManager.AppSettings["MailPassword"] ?? string.Empty, - SmtpClientHost = System.Configuration.ConfigurationManager.AppSettings["SmtpClientHost"] ?? string.Empty, - SmtpClientPort = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["SmtpClientPort"]), - PopHost = System.Configuration.ConfigurationManager.AppSettings["PopHost"] ?? string.Empty, - PopPort = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["PopPort"]) - }); + private static void MailCheck(object obj) => DependencyManager.Instance.Resolve()?.CheckMailAsync(); - var Timer = new System.Threading.Timer(new TimerCallback(MailCheck!), null, 0, 5000); - } - catch (Exception ex) - { - var Logger = _serviceProvider.GetService(); - Logger?.LogError(ex, " "); - } + private static void InitDependency() + { + DependencyManager.InitDependency(); + DependencyManager.Instance.AddLogging(Option => + { + Option.SetMinimumLevel(LogLevel.Information); + Option.AddNLog("nlog.config"); + }); - Application.Run(_serviceProvider.GetRequiredService()); - } + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); - private static void MailCheck(object obj) => ServiceProvider?.GetService()?.CheckMailAsync(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(true); - private static void ConfigureServices(ServiceCollection Services) - { - Services.AddLogging(option => - { - option.SetMinimumLevel(LogLevel.Information); - option.AddNLog("nlog.config"); - }); - - Services.AddTransient(); - Services.AddTransient(); - Services.AddTransient(); - Services.AddTransient(); - Services.AddTransient(); - Services.AddTransient(); - - Services.AddTransient(); - Services.AddTransient(); - Services.AddTransient(); - Services.AddTransient(); - Services.AddTransient(); - Services.AddTransient(); - Services.AddTransient(); - Services.AddTransient(); - - Services.AddTransient(); - Services.AddTransient(); - Services.AddTransient(); - Services.AddSingleton(); - - Services.AddTransient(); - Services.AddTransient(); - Services.AddTransient(); - Services.AddTransient(); - Services.AddTransient(); - Services.AddTransient(); - Services.AddTransient(); - Services.AddTransient(); - Services.AddTransient(); - Services.AddTransient(); - Services.AddTransient(); - Services.AddTransient(); - Services.AddTransient(); - } - } + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + } + } } diff --git a/Bar/Bar/Program.resx b/Bar/Bar/Program.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Bar/Bar/Program.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/Bar/BarBusinessLogic/BarBusinessLogic/BusinessLogics/BackUpLogic.cs b/Bar/BarBusinessLogic/BarBusinessLogic/BusinessLogics/BackUpLogic.cs new file mode 100644 index 0000000..1140024 --- /dev/null +++ b/Bar/BarBusinessLogic/BarBusinessLogic/BusinessLogics/BackUpLogic.cs @@ -0,0 +1,100 @@ +using BarContracts.BindingModels; +using BarContracts.BusinessLogicContracts; +using BarContracts.StoragesContracts; +using BarDataModels.Models; +using Microsoft.Extensions.Logging; +using System.IO.Compression; +using System.Reflection; +using System.Runtime.Serialization.Json; + +namespace BarBusinessLogic.BusinessLogics +{ + public class BackUpLogic : IBackUpLogic + { + private readonly ILogger _logger; + private readonly IBackUpInfo _backUpInfo; + + public BackUpLogic(ILogger Logger, IBackUpInfo BackUpInfo) + { + _logger = Logger; + _backUpInfo = BackUpInfo; + } + + public void CreateBackUp(BackUpSaveBindingModel Model) + { + if (_backUpInfo == null) + return; + + try + { + _logger.LogDebug("Clear folder"); + var DirInfo = new DirectoryInfo(Model.FolderName); + if (DirInfo.Exists) + { + foreach (var File in DirInfo.GetFiles()) + { + File.Delete(); + } + } + + _logger.LogDebug("Delete archive"); + string FileName = $"{Model.FolderName}.zip"; + if (File.Exists(FileName)) + { + File.Delete(FileName); + } + + _logger.LogDebug("Get assembly"); + var TypeIId = typeof(IId); + var Assembly = TypeIId.Assembly; + if (Assembly == null) + { + throw new ArgumentNullException("Сборка не найдена", nameof(Assembly)); + } + + var Types = Assembly.GetTypes(); + var Method = GetType().GetMethod("SaveToFile", BindingFlags.NonPublic | BindingFlags.Instance); + + _logger.LogDebug("Found {count} types", Types.Length); + + foreach (var Type in Types) + { + if (Type.IsInterface && Type.GetInterface(TypeIId.Name) != null) + { + var ModelType = _backUpInfo.GetTypeByModelInterface(Type.Name); + if (ModelType == null) + { + throw new InvalidOperationException($"Не найден класс - модель для { Type.Name }"); + } + + _logger.LogDebug("Call SaveToFile method for {name} Type", Type.Name); + Method?.MakeGenericMethod(ModelType).Invoke(this, new object[] { Model.FolderName }); + } + } + + _logger.LogDebug("Create zip and remove folder"); + ZipFile.CreateFromDirectory(Model.FolderName, FileName); + DirInfo.Delete(true); + } + catch (Exception) + { + throw; + } + } + + private void SaveToFile(string FolderName) where T : class, new() + { + var Records = _backUpInfo.GetList(); + if (Records == null) + { + _logger.LogWarning("{type} type get null list", typeof(T).Name); + return; + } + + var JsonFormatter = new DataContractJsonSerializer(typeof(List)); + using var fs = new FileStream(string.Format("{0}/{1}.json", FolderName, typeof(T).Name), FileMode.OpenOrCreate); + + JsonFormatter.WriteObject(fs, Records); + } + } +} diff --git a/Bar/BarBusinessLogic/BarBusinessLogic/BusinessLogics/OrderLogic.cs b/Bar/BarBusinessLogic/BarBusinessLogic/BusinessLogics/OrderLogic.cs index a922251..181887a 100644 --- a/Bar/BarBusinessLogic/BarBusinessLogic/BusinessLogics/OrderLogic.cs +++ b/Bar/BarBusinessLogic/BarBusinessLogic/BusinessLogics/OrderLogic.cs @@ -112,7 +112,7 @@ namespace BarBusinessLogic.BusinessLogics { MailAddress = Order.ClientEmail, Subject = $"Изменение статуса заказа номер {Order.Id}", - Text = $"Ваш заказ номер {Order.Id} на ремонт {Order.CocktailName} от {Order.DateCreate} на сумму {Order.Sum}. Статус изменен на {NewStatus}. {DateInfo}" + Text = $"Ваш заказ номер {Order.Id} на коктейль {Order.CocktailName} от {Order.DateCreate} на сумму {Order.Sum}. Статус изменен на {NewStatus}. {DateInfo}" })); return true; @@ -145,7 +145,7 @@ namespace BarBusinessLogic.BusinessLogics return; if (Model.Count <= 0) - throw new ArgumentNullException("Количество ремонтов в заказе быть больше 0", nameof(Model.Count)); + throw new ArgumentNullException("Количество коктейльов в заказе быть больше 0", nameof(Model.Count)); if (Model.Sum <= 0) throw new ArgumentNullException("Стоимость заказа должна быть больше 0", nameof(Model.Sum)); diff --git a/Bar/BarClientApp/Views/Home/Create.cshtml b/Bar/BarClientApp/Views/Home/Create.cshtml index dc39b51..9322a2e 100644 --- a/Bar/BarClientApp/Views/Home/Create.cshtml +++ b/Bar/BarClientApp/Views/Home/Create.cshtml @@ -7,7 +7,7 @@
-
Ремонт:
+
Коктейль:
diff --git a/Bar/BarClientApp/Views/Home/Index.cshtml b/Bar/BarClientApp/Views/Home/Index.cshtml index a95d0de..dbc8c77 100644 --- a/Bar/BarClientApp/Views/Home/Index.cshtml +++ b/Bar/BarClientApp/Views/Home/Index.cshtml @@ -23,7 +23,7 @@ Номер - Ремонт + Коктейль Дата создания diff --git a/Bar/BarClientApp/Views/Shared/_Layout.cshtml b/Bar/BarClientApp/Views/Shared/_Layout.cshtml index 9833c54..0fe468f 100644 --- a/Bar/BarClientApp/Views/Shared/_Layout.cshtml +++ b/Bar/BarClientApp/Views/Shared/_Layout.cshtml @@ -13,7 +13,7 @@