From 415df9030bb0538c1de26106bcdaca82a9988ca3 Mon Sep 17 00:00:00 2001 From: Marselchi Date: Mon, 17 Jun 2024 21:08:40 +0400 Subject: [PATCH] =?UTF-8?q?=D0=B7=D0=B0=D0=BB=D0=B8=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessLogics/OrderLogic.cs | 26 +- .../BusinessLogics/ShopLogic.cs | 69 +++- .../BindingModels/ShopBindingModel.cs | 3 +- .../BusinessLogicsContracts/IShopLogic.cs | 4 +- .../StoragesContracts/IShopStorage.cs | 4 +- .../ViewModels/ShopViewModel.cs | 4 +- .../ShipyardDataModels/Models/IShopModel.cs | 3 +- .../DataFileSingleton.cs | 6 +- .../Implements/DetailStorage.cs | 18 +- .../Implements/ShipStorage.cs | 3 +- .../Implements/ShopStorage.cs | 119 ++++++ Shipyard/ShipyardFileImplement/Models/Shop.cs | 103 ++++++ .../Implements/ShopStorage.cs | 8 +- Shipyard/ShipyardListImplement/Models/Shop.cs | 3 +- Shipyard/ShipyardView/FormMain.Designer.cs | 345 +++++++++--------- Shipyard/ShipyardView/FormMain.cs | 11 +- .../ShipyardView/FormSellShips.Designer.cs | 120 ++++++ Shipyard/ShipyardView/FormSellShips.cs | 77 ++++ Shipyard/ShipyardView/FormSellShips.resx | 120 ++++++ Shipyard/ShipyardView/FormShop.Designer.cs | 328 +++++++++-------- Shipyard/ShipyardView/FormShop.cs | 13 +- Shipyard/ShipyardView/Program.cs | 3 +- 22 files changed, 1044 insertions(+), 346 deletions(-) create mode 100644 Shipyard/ShipyardFileImplement/Implements/ShopStorage.cs create mode 100644 Shipyard/ShipyardFileImplement/Models/Shop.cs create mode 100644 Shipyard/ShipyardView/FormSellShips.Designer.cs create mode 100644 Shipyard/ShipyardView/FormSellShips.cs create mode 100644 Shipyard/ShipyardView/FormSellShips.resx diff --git a/Shipyard/ShipyardBusinessLogic/BusinessLogics/OrderLogic.cs b/Shipyard/ShipyardBusinessLogic/BusinessLogics/OrderLogic.cs index 43f4908..c4b0f00 100644 --- a/Shipyard/ShipyardBusinessLogic/BusinessLogics/OrderLogic.cs +++ b/Shipyard/ShipyardBusinessLogic/BusinessLogics/OrderLogic.cs @@ -12,10 +12,14 @@ namespace ShipyardBusinessLogic.BusinessLogics { private readonly ILogger _logger; private readonly IOrderStorage _orderStorage; - public OrderLogic(ILogger logger, IOrderStorage orderStorage) + private readonly IShopLogic _shopLogic; + private readonly IShipStorage _shipStorage; + public OrderLogic(ILogger logger, IOrderStorage orderStorage, IShopLogic shopLogic, IShipStorage shipStorage) { _logger = logger; _orderStorage = orderStorage; + _shopLogic = shopLogic; + _shipStorage = shipStorage; } public List? ReadList(OrderSearchModel? model) { @@ -72,13 +76,29 @@ namespace ShipyardBusinessLogic.BusinessLogics public bool StatusUpdate(OrderBindingModel model, OrderStatus newStatus) { var viewModel = _orderStorage.GetElement(new OrderSearchModel { Id = model.Id }); + if (viewModel == null) + { + throw new ArgumentNullException(nameof(model)); + } if (viewModel.Status + 1 != newStatus) { _logger.LogWarning("Status update to " + newStatus.ToString() + " operation failed. Order status incorrect."); return false; } model.Status = newStatus; - if (model.Status == OrderStatus.Готов) model.DateImplement = DateTime.Now; + if (model.Status == OrderStatus.Готов) + { + model.DateImplement = DateTime.Now; + var ship = _shipStorage.GetElement(new() { Id = viewModel.ShipId }); + if (ship == null) + { + throw new ArgumentNullException(nameof(ship)); + } + if (!_shopLogic.AddShips(ship, viewModel.Count)) + { + throw new Exception($"AddShips operation failed"); + } + } else { model.DateImplement = viewModel.DateImplement; @@ -87,7 +107,7 @@ namespace ShipyardBusinessLogic.BusinessLogics if (_orderStorage.Update(model) == null) { model.Status--; - _logger.LogWarning("Update operation failed"); + _logger.LogWarning("Change status operation failed"); return false; } return true; diff --git a/Shipyard/ShipyardBusinessLogic/BusinessLogics/ShopLogic.cs b/Shipyard/ShipyardBusinessLogic/BusinessLogics/ShopLogic.cs index 9c226d1..e89a651 100644 --- a/Shipyard/ShipyardBusinessLogic/BusinessLogics/ShopLogic.cs +++ b/Shipyard/ShipyardBusinessLogic/BusinessLogics/ShopLogic.cs @@ -110,7 +110,8 @@ namespace ShipyardBusinessLogic.BusinessLogics } if (count <= 0) { - throw new ArgumentException("Количество кораблей должно быть больше 0", nameof(count)); + return false; + throw new ArgumentException("Количество кораблей должно быть больше 0", nameof(count)); } _logger.LogInformation("AddShip. ShopName:{ShopName}. Id:{Id}", model.ShopName, model.Id); var element = _shopStorage.GetElement(model); @@ -119,9 +120,12 @@ namespace ShipyardBusinessLogic.BusinessLogics _logger.LogWarning("AddShip element not found"); return false; } - _logger.LogInformation("AddShip find. Id:{Id}", element.Id); + if (element.Capacity - element.ShopShips.Select(x => x.Value.Item2).Sum() < count) + { + throw new ArgumentNullException("В магазине не хватает места", nameof(count)); + } - if (element.ShopShips.TryGetValue(ship.Id, out var pair)) + if (element.ShopShips.TryGetValue(ship.Id, out var pair)) { element.ShopShips[ship.Id] = (ship, count + pair.Item2); _logger.LogInformation("AddShip. Added {count} {ship} to '{ShopName}' shop", @@ -139,9 +143,64 @@ namespace ShipyardBusinessLogic.BusinessLogics Address = element.Address, ShopName = element.ShopName, DateOpen = element.DateOpen, - ShopShips = element.ShopShips + Capacity = element.Capacity, + ShopShips = element.ShopShips }); return true; } - } + public bool AddShips(IShipModel model, int count) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (count <= 0) + { + throw new ArgumentException("Количество кораблей должно быть больше 0", nameof(count)); + } + _logger.LogInformation("AddShips. ShopName:{ShopName}. Id:{Id}", model.ShipName, model.Id); + var allFreeQuantity = _shopStorage.GetFullList().Select(x => x.Capacity - x.ShopShips.Select(x => x.Value.Item2).Sum()).Sum(); + if (allFreeQuantity < count) + { + _logger.LogWarning("AddTravels operation failed."); + return false; + } + foreach (var shop in _shopStorage.GetFullList()) + { + int freeQuantity = shop.Capacity - shop.ShopShips.Select(x => x.Value.Item2).Sum(); + if (freeQuantity <= 0) + { + continue; + } + if (freeQuantity < count) + { + if (!AddShip(new() { Id = shop.Id }, model, freeQuantity)) + { + _logger.LogWarning("AddShips operation failed."); + return false; + } + count -= freeQuantity; + } + else + { + if (!AddShip(new() { Id = shop.Id }, model, count)) + { + _logger.LogWarning("AddShips operation failed."); + return false; + } + count = 0; + } + if (count == 0) + { + return true; + } + } + _logger.LogWarning("AddShips operation failed."); + return false; + } + public bool SellShips(IShipModel model, int count) + { + return _shopStorage.SellShips(model, count); + } + } } \ No newline at end of file diff --git a/Shipyard/ShipyardContracts/BindingModels/ShopBindingModel.cs b/Shipyard/ShipyardContracts/BindingModels/ShopBindingModel.cs index a4b2391..0161eb7 100644 --- a/Shipyard/ShipyardContracts/BindingModels/ShopBindingModel.cs +++ b/Shipyard/ShipyardContracts/BindingModels/ShopBindingModel.cs @@ -7,7 +7,8 @@ namespace ShipyardContracts.BindingModels public string ShopName { get; set; } = string.Empty; public string Address { get; set; } = string.Empty; public DateTime DateOpen { get; set; } = DateTime.Now; - public Dictionary ShopShips { get; set; } = new(); + public int Capacity { get; set; } + public Dictionary ShopShips { get; set; } = new(); public int Id { get; set; } } } \ No newline at end of file diff --git a/Shipyard/ShipyardContracts/BusinessLogicsContracts/IShopLogic.cs b/Shipyard/ShipyardContracts/BusinessLogicsContracts/IShopLogic.cs index a5b3dac..61eb416 100644 --- a/Shipyard/ShipyardContracts/BusinessLogicsContracts/IShopLogic.cs +++ b/Shipyard/ShipyardContracts/BusinessLogicsContracts/IShopLogic.cs @@ -13,5 +13,7 @@ namespace ShipyardContracts.BusinessLogicsContracts bool Update(ShopBindingModel model); bool Delete(ShopBindingModel model); bool AddShip(ShopSearchModel model, IShipModel ship, int count); - } + bool AddShips(IShipModel model, int count); + bool SellShips(IShipModel model, int count); + } } \ No newline at end of file diff --git a/Shipyard/ShipyardContracts/StoragesContracts/IShopStorage.cs b/Shipyard/ShipyardContracts/StoragesContracts/IShopStorage.cs index 37c809f..ce59fce 100644 --- a/Shipyard/ShipyardContracts/StoragesContracts/IShopStorage.cs +++ b/Shipyard/ShipyardContracts/StoragesContracts/IShopStorage.cs @@ -1,6 +1,7 @@ using ShipyardContracts.BindingModels; using ShipyardContracts.SearchModels; using ShipyardContracts.ViewModels; +using ShipyardDataModels.Models; namespace ShipyardContracts.StoragesContracts { @@ -12,5 +13,6 @@ namespace ShipyardContracts.StoragesContracts ShopViewModel? Insert(ShopBindingModel model); ShopViewModel? Update(ShopBindingModel model); ShopViewModel? Delete(ShopBindingModel model); - } + bool SellShips(IShipModel model, int count); + } } \ No newline at end of file diff --git a/Shipyard/ShipyardContracts/ViewModels/ShopViewModel.cs b/Shipyard/ShipyardContracts/ViewModels/ShopViewModel.cs index ffb1e46..edf8fe5 100644 --- a/Shipyard/ShipyardContracts/ViewModels/ShopViewModel.cs +++ b/Shipyard/ShipyardContracts/ViewModels/ShopViewModel.cs @@ -13,7 +13,9 @@ namespace ShipyardContracts.ViewModels [DisplayName("Дата открытия")] public DateTime DateOpen { get; set; } = DateTime.Now; - public Dictionary ShopShips { get; set; } = new(); + [DisplayName("Вместимость магазина")] + public int Capacity { get; set; } + public Dictionary ShopShips { get; set; } = new(); public int Id { get; set; } } } \ No newline at end of file diff --git a/Shipyard/ShipyardDataModels/Models/IShopModel.cs b/Shipyard/ShipyardDataModels/Models/IShopModel.cs index 8ae0c90..9fbd422 100644 --- a/Shipyard/ShipyardDataModels/Models/IShopModel.cs +++ b/Shipyard/ShipyardDataModels/Models/IShopModel.cs @@ -5,6 +5,7 @@ string ShopName { get; } string Address { get; } DateTime DateOpen { get; } - Dictionary ShopShips { get; } + public int Capacity { get; } + Dictionary ShopShips { get; } } } \ No newline at end of file diff --git a/Shipyard/ShipyardFileImplement/DataFileSingleton.cs b/Shipyard/ShipyardFileImplement/DataFileSingleton.cs index 6681836..8e35a16 100644 --- a/Shipyard/ShipyardFileImplement/DataFileSingleton.cs +++ b/Shipyard/ShipyardFileImplement/DataFileSingleton.cs @@ -3,15 +3,17 @@ using System.Xml.Linq; namespace ShipyardFileImplement { - internal class DataFileSingleton + public class DataFileSingleton { private static DataFileSingleton? instance; private readonly string DetailFileName = "Detail.xml"; private readonly string OrderFileName = "Order.xml"; private readonly string ShipFileName = "Ship.xml"; + private readonly string ShopFileName = "Shop.xml"; public List Details { get; private set; } public List Orders { get; private set; } public List Ships { get; private set; } + public List Shops { get; private set; } public static DataFileSingleton GetInstance() { if (instance == null) @@ -23,11 +25,13 @@ namespace ShipyardFileImplement public void SaveDetails() => SaveData(Details, DetailFileName, "Details", x => x.GetXElement); public void SaveShips() => SaveData(Ships, ShipFileName, "Ships", x => x.GetXElement); public void SaveOrders() => SaveData(Orders, OrderFileName, "Orders", x => x.GetXElement); + public void SaveShops() => SaveData(Shops, ShopFileName, "Shops", x => x.GetXElement); private DataFileSingleton() { Details = LoadData(DetailFileName, "Detail", x => Detail.Create(x)!)!; Ships = LoadData(ShipFileName, "Ship", x => Ship.Create(x)!)!; Orders = LoadData(OrderFileName, "Order", x => Order.Create(x)!)!; + Shops = LoadData(ShopFileName, "Shop", x => Shop.Create(x)!)!; } private static List? LoadData(string filename, string xmlNodeName, Func selectFunction) diff --git a/Shipyard/ShipyardFileImplement/Implements/DetailStorage.cs b/Shipyard/ShipyardFileImplement/Implements/DetailStorage.cs index 35e8ae3..e4a899e 100644 --- a/Shipyard/ShipyardFileImplement/Implements/DetailStorage.cs +++ b/Shipyard/ShipyardFileImplement/Implements/DetailStorage.cs @@ -24,7 +24,9 @@ namespace ShipyardFileImplement.Implements return new(); } return source.Details - .Where(x => x.DetailName.Contains(model.DetailName)).Select(x => x.GetViewModel).ToList(); + .Where(x => x.DetailName.Contains(model.DetailName)) + .Select(x => x.GetViewModel) + .ToList(); } public DetailViewModel? GetElement(DetailSearchModel model) { @@ -33,9 +35,11 @@ namespace ShipyardFileImplement.Implements return null; } return source.Details - .FirstOrDefault(x => (!string.IsNullOrEmpty(model.DetailName) - && x.DetailName == model.DetailName) - || (model.Id.HasValue && x.Id == model.Id))?.GetViewModel; + .FirstOrDefault(x => + (!string.IsNullOrEmpty(model.DetailName) && x.DetailName == + model.DetailName) || + (model.Id.HasValue && x.Id == model.Id)) + ?.GetViewModel; } public DetailViewModel? Insert(DetailBindingModel model) { @@ -51,7 +55,8 @@ namespace ShipyardFileImplement.Implements } public DetailViewModel? Update(DetailBindingModel model) { - var component = source.Details.FirstOrDefault(x => x.Id == model.Id); + var component = source.Details.FirstOrDefault(x => x.Id == + model.Id); if (component == null) { return null; @@ -62,7 +67,8 @@ namespace ShipyardFileImplement.Implements } public DetailViewModel? Delete(DetailBindingModel model) { - var element = source.Details.FirstOrDefault(x => x.Id == model.Id); + var element = source.Details.FirstOrDefault(x => x.Id == + model.Id); if (element != null) { source.Details.Remove(element); diff --git a/Shipyard/ShipyardFileImplement/Implements/ShipStorage.cs b/Shipyard/ShipyardFileImplement/Implements/ShipStorage.cs index 57c4b23..9f62374 100644 --- a/Shipyard/ShipyardFileImplement/Implements/ShipStorage.cs +++ b/Shipyard/ShipyardFileImplement/Implements/ShipStorage.cs @@ -23,7 +23,8 @@ namespace ShipyardFileImplement.Implements { return new(); } - return source.Ships.Where(x => x.ShipName.Contains(model.ShipName)).Select(x => x.GetViewModel).ToList(); + return source.Ships.Where(x => + x.ShipName.Contains(model.ShipName)).Select(x => x.GetViewModel).ToList(); } public ShipViewModel? GetElement(ShipSearchModel model) { diff --git a/Shipyard/ShipyardFileImplement/Implements/ShopStorage.cs b/Shipyard/ShipyardFileImplement/Implements/ShopStorage.cs new file mode 100644 index 0000000..b2306e1 --- /dev/null +++ b/Shipyard/ShipyardFileImplement/Implements/ShopStorage.cs @@ -0,0 +1,119 @@ +using ShipyardContracts.BindingModels; +using ShipyardContracts.SearchModels; +using ShipyardContracts.StoragesContracts; +using ShipyardContracts.ViewModels; +using ShipyardFileImplement.Models; +using ShipyardDataModels.Models; + +namespace ShipyardFileImplement.Implements +{ + public class ShopStorage : IShopStorage + { + private readonly DataFileSingleton source; + + public ShopStorage() + { + source = DataFileSingleton.GetInstance(); + } + + public ShopViewModel? GetElement(ShopSearchModel model) + { + if (string.IsNullOrEmpty(model.ShopName) && !model.Id.HasValue) + { + return null; + } + return source.Shops + .FirstOrDefault(x => (!string.IsNullOrEmpty(model.ShopName) && x.ShopName == model.ShopName) || (model.Id.HasValue && x.Id == model.Id))?.GetViewModel; + } + + public List GetFilteredList(ShopSearchModel model) + { + if (string.IsNullOrEmpty(model.ShopName)) + { + return new(); + } + return source.Shops + .Where(x => x.ShopName.Contains(model.ShopName)) + .Select(x => x.GetViewModel) + .ToList(); + } + + public List GetFullList() + { + return source.Shops.Select(x => x.GetViewModel).ToList(); + } + + public ShopViewModel? Insert(ShopBindingModel model) + { + model.Id = source.Shops.Count > 0 ? source.Shops.Max(x => x.Id) + 1 : 1; + var newShop = Shop.Create(model); + if (newShop == null) + { + return null; + } + source.Shops.Add(newShop); + source.SaveShops(); + return newShop.GetViewModel; + } + + public ShopViewModel? Update(ShopBindingModel model) + { + var shop = source.Shops.FirstOrDefault(x => x.Id == model.Id); + if (shop == null) + { + return null; + } + shop.Update(model); + source.SaveShops(); + return shop.GetViewModel; + } + public ShopViewModel? Delete(ShopBindingModel model) + { + var shop = source.Shops.FirstOrDefault(x => x.Id == model.Id); + if (shop != null) + { + source.Shops.Remove(shop); + source.SaveShops(); + return shop.GetViewModel; + } + return null; + } + public bool SellShips(IShipModel model, int count) + { + int availableQuantity = source.Shops.Select(x => x.ShopShips.FirstOrDefault(y => y.Key == model.Id).Value.Item2).Sum(); + if (availableQuantity < count) + { + return false; + } + var shops = source.Shops.Where(x => x.ShopShips.ContainsKey(model.Id)); + foreach (var shop in shops) + { + int countInCurrentShop = shop.ShopShips[model.Id].Item2; + if (countInCurrentShop <= count) + { + shop.ShopShips[model.Id] = (shop.ShopShips[model.Id].Item1, 0); + count -= countInCurrentShop; + } + else + { + shop.ShopShips[model.Id] = (shop.ShopShips[model.Id].Item1, countInCurrentShop - count); + count = 0; + } + Update(new ShopBindingModel + { + Id = shop.Id, + ShopName = shop.ShopName, + Address = shop.Address, + DateOpen = shop.DateOpen, + ShopShips = shop.ShopShips, + Capacity = shop.Capacity + }); + if (count == 0) + { + return true; + } + } + return false; + } + } +} \ No newline at end of file diff --git a/Shipyard/ShipyardFileImplement/Models/Shop.cs b/Shipyard/ShipyardFileImplement/Models/Shop.cs new file mode 100644 index 0000000..466933b --- /dev/null +++ b/Shipyard/ShipyardFileImplement/Models/Shop.cs @@ -0,0 +1,103 @@ +using ShipyardContracts.BindingModels; +using ShipyardContracts.ViewModels; +using ShipyardDataModels.Models; +using System.Xml.Linq; + +namespace ShipyardFileImplement.Models +{ + public class Shop : IShopModel + { + public int Id { get; private set; } + public string ShopName { get; private set; } = string.Empty; + public string Address { get; private set; } = string.Empty; + public DateTime DateOpen { get; private set; } + public int Capacity { get; private set; } + public Dictionary ShipsCount = new(); + public Dictionary? _ships = null; + public Dictionary ShopShips + { + get + { + if (_ships == null) + { + var source = DataFileSingleton.GetInstance(); + _ships = ShipsCount.ToDictionary( + x => x.Key, + y => ((source.Ships.FirstOrDefault(z => z.Id == y.Key) as IShipModel)!, + y.Value) + ); + } + return _ships; + } + } + public static Shop? Create(ShopBindingModel? model) + { + if (model == null) + { + return null; + } + return new Shop() + { + Id = model.Id, + ShopName = model.ShopName, + Address = model.Address, + DateOpen = model.DateOpen, + Capacity = model.Capacity, + ShipsCount = model.ShopShips.ToDictionary(x => x.Key, x => x.Value.Item2) + }; + } + public static Shop? Create(XElement element) + { + if (element == null) + { + return null; + } + return new Shop() + { + Id = Convert.ToInt32(element.Attribute("Id")!.Value), + ShopName = element.Element("ShopName")!.Value, + Address = element.Element("Address")!.Value, + DateOpen = Convert.ToDateTime(element.Element("DateOpening")!.Value), + Capacity = Convert.ToInt32(element.Element("Capacity")!.Value), + ShipsCount = element.Element("Ships")!.Elements("Ship") + .ToDictionary( + x => Convert.ToInt32(x.Element("Key")?.Value), + x => Convert.ToInt32(x.Element("Value")?.Value)) + }; + } + public void Update(ShopBindingModel? model) + { + if (model == null) + { + return; + } + ShopName = model.ShopName; + Address = model.Address; + DateOpen = model.DateOpen; + Capacity = model.Capacity; + ShipsCount = model.ShopShips.ToDictionary(x => x.Key, x => x.Value.Item2); + _ships = null; + + } + public ShopViewModel GetViewModel => new() + { + Id = Id, + ShopName = ShopName, + Address = Address, + DateOpen = DateOpen, + Capacity = Capacity, + ShopShips = ShopShips + }; + public XElement GetXElement => new("Shop", + new XAttribute("Id", Id), + new XElement("ShopName", ShopName), + new XElement("Address", Address), + new XElement("DateOpening", DateOpen.ToString()), + new XElement("Capacity", Capacity.ToString()), + new XElement("Ships", ShipsCount.Select(x => + new XElement("Ship", + new XElement("Key", x.Key), + new XElement("Value", x.Value))) + .ToArray())); + } +} \ No newline at end of file diff --git a/Shipyard/ShipyardListImplement/Implements/ShopStorage.cs b/Shipyard/ShipyardListImplement/Implements/ShopStorage.cs index b54f40b..2f90e97 100644 --- a/Shipyard/ShipyardListImplement/Implements/ShopStorage.cs +++ b/Shipyard/ShipyardListImplement/Implements/ShopStorage.cs @@ -2,6 +2,7 @@ using ShipyardContracts.SearchModels; using ShipyardContracts.StoragesContracts; using ShipyardContracts.ViewModels; +using ShipyardDataModels.Models; using ShipyardListImplement.Models; namespace ShipyardListImplement.Implements @@ -103,5 +104,10 @@ namespace ShipyardListImplement.Implements } return null; } - } + + public bool SellShips(IShipModel model, int count) + { + throw new NotImplementedException(); + } + } } \ No newline at end of file diff --git a/Shipyard/ShipyardListImplement/Models/Shop.cs b/Shipyard/ShipyardListImplement/Models/Shop.cs index 72c1590..6904cb9 100644 --- a/Shipyard/ShipyardListImplement/Models/Shop.cs +++ b/Shipyard/ShipyardListImplement/Models/Shop.cs @@ -11,7 +11,8 @@ namespace ShipyardListImplement.Models public string Address { get; set; } = string.Empty; public DateTime DateOpen { get; set; } - public int Id { get; set; } + public int Capacity { get; private set; } + public int Id { get; set; } public Dictionary ShopShips { get; private set; } = new Dictionary(); public static Shop? Create(ShopBindingModel? model) diff --git a/Shipyard/ShipyardView/FormMain.Designer.cs b/Shipyard/ShipyardView/FormMain.Designer.cs index 87ff023..5bd57f3 100644 --- a/Shipyard/ShipyardView/FormMain.Designer.cs +++ b/Shipyard/ShipyardView/FormMain.Designer.cs @@ -20,174 +20,186 @@ base.Dispose(disposing); } - #region Windows Form Designer generated code + #region Windows Form Designer generated code - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain)); - toolStrip = new ToolStrip(); - toolStripMenu = new ToolStripDropDownButton(); - деталиToolStripMenuItem = new ToolStripMenuItem(); - кораблиToolStripMenuItem = new ToolStripMenuItem(); - магазиныToolStripMenuItem = new ToolStripMenuItem(); - dataGridView = new DataGridView(); - buttonCreateOrder = new Button(); - buttonTakeInWork = new Button(); - buttonReady = new Button(); - buttonIssue = new Button(); - buttonRefresh = new Button(); - buttonAddShip = new Button(); - toolStrip.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); - SuspendLayout(); - // - // toolStrip - // - toolStrip.ImageScalingSize = new Size(20, 20); - toolStrip.Items.AddRange(new ToolStripItem[] { toolStripMenu }); - toolStrip.Location = new Point(0, 0); - toolStrip.Name = "toolStrip"; - toolStrip.Size = new Size(1251, 27); - toolStrip.TabIndex = 0; - toolStrip.Text = "Справочники"; - // - // toolStripMenu - // - toolStripMenu.DisplayStyle = ToolStripItemDisplayStyle.Text; - toolStripMenu.DropDownItems.AddRange(new ToolStripItem[] { деталиToolStripMenuItem, кораблиToolStripMenuItem, магазиныToolStripMenuItem }); - toolStripMenu.Image = (Image)resources.GetObject("toolStripMenu.Image"); - toolStripMenu.ImageTransparentColor = Color.Magenta; - toolStripMenu.Name = "toolStripMenu"; - toolStripMenu.Size = new Size(117, 24); - toolStripMenu.Text = "Справочники"; - // - // деталиToolStripMenuItem - // - деталиToolStripMenuItem.Name = "деталиToolStripMenuItem"; - деталиToolStripMenuItem.Size = new Size(163, 26); - деталиToolStripMenuItem.Text = "Детали"; - деталиToolStripMenuItem.Click += ДеталиToolStripMenuItem_Click; - // - // кораблиToolStripMenuItem - // - кораблиToolStripMenuItem.Name = "кораблиToolStripMenuItem"; - кораблиToolStripMenuItem.Size = new Size(163, 26); - кораблиToolStripMenuItem.Text = "Корабли"; - кораблиToolStripMenuItem.Click += КораблиToolStripMenuItem_Click; - // - // магазиныToolStripMenuItem - // - магазиныToolStripMenuItem.Name = "магазиныToolStripMenuItem"; - магазиныToolStripMenuItem.Size = new Size(163, 26); - магазиныToolStripMenuItem.Text = "Магазины"; - магазиныToolStripMenuItem.Click += МагазиныToolStripMenuItem_Click; - // - // dataGridView - // - dataGridView.AllowUserToAddRows = false; - dataGridView.AllowUserToDeleteRows = false; - dataGridView.AllowUserToResizeColumns = false; - dataGridView.AllowUserToResizeRows = false; - dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; - dataGridView.Location = new Point(0, 28); - dataGridView.Name = "dataGridView"; - dataGridView.RowHeadersVisible = false; - dataGridView.RowHeadersWidth = 51; - dataGridView.RowTemplate.Height = 29; - dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; - dataGridView.Size = new Size(984, 366); - dataGridView.TabIndex = 1; - // - // buttonCreateOrder - // - buttonCreateOrder.Location = new Point(1032, 51); - buttonCreateOrder.Name = "buttonCreateOrder"; - buttonCreateOrder.Size = new Size(178, 29); - buttonCreateOrder.TabIndex = 2; - buttonCreateOrder.Text = "Создать заказ"; - buttonCreateOrder.UseVisualStyleBackColor = true; - buttonCreateOrder.Click += ButtonCreateOrder_Click; - // - // buttonTakeInWork - // - buttonTakeInWork.Location = new Point(1032, 110); - buttonTakeInWork.Name = "buttonTakeInWork"; - buttonTakeInWork.Size = new Size(178, 29); - buttonTakeInWork.TabIndex = 3; - buttonTakeInWork.Text = "Отдать на выполнение"; - buttonTakeInWork.UseVisualStyleBackColor = true; - buttonTakeInWork.Click += ButtonTakeOrderInWork_Click; - // - // buttonReady - // - buttonReady.Location = new Point(1032, 171); - buttonReady.Name = "buttonReady"; - buttonReady.Size = new Size(178, 29); - buttonReady.TabIndex = 4; - buttonReady.Text = "Заказ готов"; - buttonReady.UseVisualStyleBackColor = true; - buttonReady.Click += ButtonOrderReady_Click; - // - // buttonIssue - // - buttonIssue.Location = new Point(1032, 236); - buttonIssue.Name = "buttonIssue"; - buttonIssue.Size = new Size(178, 29); - buttonIssue.TabIndex = 5; - buttonIssue.Text = "Заказ выдан"; - buttonIssue.UseVisualStyleBackColor = true; - buttonIssue.Click += ButtonIssuedOrder_Click; - // - // buttonRefresh - // - buttonRefresh.Location = new Point(1032, 350); - buttonRefresh.Name = "buttonRefresh"; - buttonRefresh.Size = new Size(178, 29); - buttonRefresh.TabIndex = 6; - buttonRefresh.Text = "Обновить список"; - buttonRefresh.UseVisualStyleBackColor = true; - buttonRefresh.Click += ButtonRef_Click; - // - // buttonAddShip - // - buttonAddShip.Location = new Point(1032, 293); - buttonAddShip.Name = "buttonAddShip"; - buttonAddShip.Size = new Size(178, 29); - buttonAddShip.TabIndex = 7; - buttonAddShip.Text = "Добавить корабль"; - buttonAddShip.UseVisualStyleBackColor = true; - buttonAddShip.Click += ButtonAddShip_Click; - // - // FormMain - // - AutoScaleDimensions = new SizeF(8F, 20F); - AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(1251, 391); - Controls.Add(buttonAddShip); - Controls.Add(buttonRefresh); - Controls.Add(buttonIssue); - Controls.Add(buttonReady); - Controls.Add(buttonTakeInWork); - Controls.Add(buttonCreateOrder); - Controls.Add(dataGridView); - Controls.Add(toolStrip); - Name = "FormMain"; - Text = "FormMain"; - Load += FormMain_Load; - toolStrip.ResumeLayout(false); - toolStrip.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); - ResumeLayout(false); - PerformLayout(); - } + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain)); + toolStrip = new ToolStrip(); + toolStripMenu = new ToolStripDropDownButton(); + деталиToolStripMenuItem = new ToolStripMenuItem(); + кораблиToolStripMenuItem = new ToolStripMenuItem(); + магазиныToolStripMenuItem = new ToolStripMenuItem(); + dataGridView = new DataGridView(); + buttonCreateOrder = new Button(); + buttonTakeInWork = new Button(); + buttonReady = new Button(); + buttonIssue = new Button(); + buttonRefresh = new Button(); + buttonAddShip = new Button(); + buttonSellShip = new Button(); + toolStrip.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // toolStrip + // + toolStrip.ImageScalingSize = new Size(20, 20); + toolStrip.Items.AddRange(new ToolStripItem[] { toolStripMenu }); + toolStrip.Location = new Point(0, 0); + toolStrip.Name = "toolStrip"; + toolStrip.Size = new Size(1251, 27); + toolStrip.TabIndex = 0; + toolStrip.Text = "Справочники"; + // + // toolStripMenu + // + toolStripMenu.DisplayStyle = ToolStripItemDisplayStyle.Text; + toolStripMenu.DropDownItems.AddRange(new ToolStripItem[] { деталиToolStripMenuItem, кораблиToolStripMenuItem, магазиныToolStripMenuItem }); + toolStripMenu.Image = (Image)resources.GetObject("toolStripMenu.Image"); + toolStripMenu.ImageTransparentColor = Color.Magenta; + toolStripMenu.Name = "toolStripMenu"; + toolStripMenu.Size = new Size(117, 24); + toolStripMenu.Text = "Справочники"; + // + // деталиToolStripMenuItem + // + деталиToolStripMenuItem.Name = "деталиToolStripMenuItem"; + деталиToolStripMenuItem.Size = new Size(224, 26); + деталиToolStripMenuItem.Text = "Детали"; + деталиToolStripMenuItem.Click += ДеталиToolStripMenuItem_Click; + // + // кораблиToolStripMenuItem + // + кораблиToolStripMenuItem.Name = "кораблиToolStripMenuItem"; + кораблиToolStripMenuItem.Size = new Size(224, 26); + кораблиToolStripMenuItem.Text = "Корабли"; + кораблиToolStripMenuItem.Click += КораблиToolStripMenuItem_Click; + // + // магазиныToolStripMenuItem + // + магазиныToolStripMenuItem.Name = "магазиныToolStripMenuItem"; + магазиныToolStripMenuItem.Size = new Size(224, 26); + магазиныToolStripMenuItem.Text = "Магазины"; + магазиныToolStripMenuItem.Click += МагазиныToolStripMenuItem_Click; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Location = new Point(0, 28); + dataGridView.Name = "dataGridView"; + dataGridView.RowHeadersVisible = false; + dataGridView.RowHeadersWidth = 51; + dataGridView.RowTemplate.Height = 29; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(984, 417); + dataGridView.TabIndex = 1; + // + // buttonCreateOrder + // + buttonCreateOrder.Location = new Point(1032, 51); + buttonCreateOrder.Name = "buttonCreateOrder"; + buttonCreateOrder.Size = new Size(178, 29); + buttonCreateOrder.TabIndex = 2; + buttonCreateOrder.Text = "Создать заказ"; + buttonCreateOrder.UseVisualStyleBackColor = true; + buttonCreateOrder.Click += ButtonCreateOrder_Click; + // + // buttonTakeInWork + // + buttonTakeInWork.Location = new Point(1032, 110); + buttonTakeInWork.Name = "buttonTakeInWork"; + buttonTakeInWork.Size = new Size(178, 29); + buttonTakeInWork.TabIndex = 3; + buttonTakeInWork.Text = "Отдать на выполнение"; + buttonTakeInWork.UseVisualStyleBackColor = true; + buttonTakeInWork.Click += ButtonTakeOrderInWork_Click; + // + // buttonReady + // + buttonReady.Location = new Point(1032, 171); + buttonReady.Name = "buttonReady"; + buttonReady.Size = new Size(178, 29); + buttonReady.TabIndex = 4; + buttonReady.Text = "Заказ готов"; + buttonReady.UseVisualStyleBackColor = true; + buttonReady.Click += ButtonOrderReady_Click; + // + // buttonIssue + // + buttonIssue.Location = new Point(1032, 236); + buttonIssue.Name = "buttonIssue"; + buttonIssue.Size = new Size(178, 29); + buttonIssue.TabIndex = 5; + buttonIssue.Text = "Заказ выдан"; + buttonIssue.UseVisualStyleBackColor = true; + buttonIssue.Click += ButtonIssuedOrder_Click; + // + // buttonRefresh + // + buttonRefresh.Location = new Point(1032, 350); + buttonRefresh.Name = "buttonRefresh"; + buttonRefresh.Size = new Size(178, 29); + buttonRefresh.TabIndex = 6; + buttonRefresh.Text = "Обновить список"; + buttonRefresh.UseVisualStyleBackColor = true; + buttonRefresh.Click += ButtonRef_Click; + // + // buttonAddShip + // + buttonAddShip.Location = new Point(1032, 293); + buttonAddShip.Name = "buttonAddShip"; + buttonAddShip.Size = new Size(178, 29); + buttonAddShip.TabIndex = 7; + buttonAddShip.Text = "Добавить корабль"; + buttonAddShip.UseVisualStyleBackColor = true; + buttonAddShip.Click += ButtonAddShip_Click; + // + // buttonSellShip + // + buttonSellShip.Location = new Point(1032, 396); + buttonSellShip.Name = "buttonSellShip"; + buttonSellShip.Size = new Size(178, 29); + buttonSellShip.TabIndex = 8; + buttonSellShip.Text = "Продать корабль"; + buttonSellShip.UseVisualStyleBackColor = true; + buttonSellShip.Click += ButtonSellShip_Click; + // + // FormMain + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(1251, 446); + Controls.Add(buttonSellShip); + Controls.Add(buttonAddShip); + Controls.Add(buttonRefresh); + Controls.Add(buttonIssue); + Controls.Add(buttonReady); + Controls.Add(buttonTakeInWork); + Controls.Add(buttonCreateOrder); + Controls.Add(dataGridView); + Controls.Add(toolStrip); + Name = "FormMain"; + Text = "FormMain"; + Load += FormMain_Load; + toolStrip.ResumeLayout(false); + toolStrip.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + PerformLayout(); + } - #endregion + #endregion - private ToolStrip toolStrip; + private ToolStrip toolStrip; private DataGridView dataGridView; private Button buttonCreateOrder; private Button buttonTakeInWork; @@ -199,5 +211,6 @@ private ToolStripMenuItem кораблиToolStripMenuItem; private ToolStripMenuItem магазиныToolStripMenuItem; private Button buttonAddShip; - } + private Button buttonSellShip; + } } \ No newline at end of file diff --git a/Shipyard/ShipyardView/FormMain.cs b/Shipyard/ShipyardView/FormMain.cs index c6d1b93..038c680 100644 --- a/Shipyard/ShipyardView/FormMain.cs +++ b/Shipyard/ShipyardView/FormMain.cs @@ -151,7 +151,16 @@ namespace ShipyardView LoadData(); } } - private void ButtonRef_Click(object sender, EventArgs e) + private void ButtonSellShip_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormSellShips)); + if (service is FormSellShips form) + { + form.ShowDialog(); + LoadData(); + } + } + private void ButtonRef_Click(object sender, EventArgs e) { LoadData(); } diff --git a/Shipyard/ShipyardView/FormSellShips.Designer.cs b/Shipyard/ShipyardView/FormSellShips.Designer.cs new file mode 100644 index 0000000..1a7770c --- /dev/null +++ b/Shipyard/ShipyardView/FormSellShips.Designer.cs @@ -0,0 +1,120 @@ +namespace ShipyardView +{ + partial class FormSellShips + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.ButtonCancel = new System.Windows.Forms.Button(); + this.comboBoxShips = new System.Windows.Forms.ComboBox(); + this.numericUpDownCount = new System.Windows.Forms.NumericUpDown(); + this.labelShip = new System.Windows.Forms.Label(); + this.labelCount = new System.Windows.Forms.Label(); + this.ButtonSave = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownCount)).BeginInit(); + this.SuspendLayout(); + // + // ButtonCancel + // + this.ButtonCancel.Location = new System.Drawing.Point(266, 153); + this.ButtonCancel.Name = "ButtonCancel"; + this.ButtonCancel.Size = new System.Drawing.Size(94, 29); + this.ButtonCancel.TabIndex = 1; + this.ButtonCancel.Text = "Отмена"; + this.ButtonCancel.UseVisualStyleBackColor = true; + this.ButtonCancel.Click += new System.EventHandler(this.ButtonCancel_Click); + // + // comboBoxShips + // + this.comboBoxShips.FormattingEnabled = true; + this.comboBoxShips.Location = new System.Drawing.Point(144, 38); + this.comboBoxShips.Name = "comboBoxShips"; + this.comboBoxShips.Size = new System.Drawing.Size(216, 28); + this.comboBoxShips.TabIndex = 2; + // + // numericUpDownCount + // + this.numericUpDownCount.Location = new System.Drawing.Point(144, 102); + this.numericUpDownCount.Name = "numericUpDownCount"; + this.numericUpDownCount.Size = new System.Drawing.Size(216, 27); + this.numericUpDownCount.TabIndex = 3; + // + // labelShip + // + this.labelShip.AutoSize = true; + this.labelShip.Location = new System.Drawing.Point(34, 38); + this.labelShip.Name = "labelShip"; + this.labelShip.Size = new System.Drawing.Size(69, 20); + this.labelShip.TabIndex = 4; + this.labelShip.Text = "Корабль"; + // + // labelCount + // + this.labelCount.AutoSize = true; + this.labelCount.Location = new System.Drawing.Point(34, 109); + this.labelCount.Name = "labelCount"; + this.labelCount.Size = new System.Drawing.Size(90, 20); + this.labelCount.TabIndex = 5; + this.labelCount.Text = "Количество"; + // + // ButtonSave + // + this.ButtonSave.Location = new System.Drawing.Point(144, 153); + this.ButtonSave.Name = "ButtonSave"; + this.ButtonSave.Size = new System.Drawing.Size(94, 29); + this.ButtonSave.TabIndex = 6; + this.ButtonSave.Text = "Сохранить"; + this.ButtonSave.UseVisualStyleBackColor = true; + this.ButtonSave.Click += new System.EventHandler(this.ButtonSave_Click); + // + // FormSellShips + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(373, 194); + this.Controls.Add(this.ButtonSave); + this.Controls.Add(this.labelCount); + this.Controls.Add(this.labelShip); + this.Controls.Add(this.numericUpDownCount); + this.Controls.Add(this.comboBoxShips); + this.Controls.Add(this.ButtonCancel); + this.Name = "FormSellShips"; + this.Text = "Продажа кораблей"; + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownCount)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private Button ButtonCancel; + private ComboBox comboBoxShips; + private NumericUpDown numericUpDownCount; + private Label labelShip; + private Label labelCount; + private Button ButtonSave; + } +} \ No newline at end of file diff --git a/Shipyard/ShipyardView/FormSellShips.cs b/Shipyard/ShipyardView/FormSellShips.cs new file mode 100644 index 0000000..3f13c91 --- /dev/null +++ b/Shipyard/ShipyardView/FormSellShips.cs @@ -0,0 +1,77 @@ +using Microsoft.Extensions.Logging; +using ShipyardContracts.BusinessLogicsContracts; +using ShipyardContracts.ViewModels; + +namespace ShipyardView +{ + public partial class FormSellShips : Form + { + private readonly ILogger _logger; + private readonly IShopLogic _shopLogic; + private readonly IShipLogic _shipLogic; + private readonly List? _listShip; + public FormSellShips(ILogger logger, IShopLogic shopLogic, IShipLogic shipLogic) + { + InitializeComponent(); + _logger = logger; + _shopLogic = shopLogic; + _shipLogic = shipLogic; + _listShip = shipLogic.ReadList(null); + if (_listShip != null) + { + comboBoxShips.DisplayMember = "ShipName"; + comboBoxShips.ValueMember = "Id"; + comboBoxShips.DataSource = _listShip; + comboBoxShips.SelectedItem = null; + } + } + + private void ButtonSave_Click(object sender, EventArgs e) + { + if (comboBoxShips.SelectedValue == null) + { + MessageBox.Show("Выберите корабль", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + if (string.IsNullOrEmpty(numericUpDownCount.Text)) + { + MessageBox.Show("Заполните количество", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + _logger.LogInformation("Продажа поездок"); + try + { + var ship = _shipLogic.ReadElement(new() + { + Id = (int)comboBoxShips.SelectedValue + }); + if (ship == null) + { + throw new Exception("Корабль не найден. Дополнительная информация в логах."); + } + var operationResult = _shopLogic.SellShips( + model: ship, + count: (int)numericUpDownCount.Value + ); + 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(); + } + } +} \ No newline at end of file diff --git a/Shipyard/ShipyardView/FormSellShips.resx b/Shipyard/ShipyardView/FormSellShips.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Shipyard/ShipyardView/FormSellShips.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/Shipyard/ShipyardView/FormShop.Designer.cs b/Shipyard/ShipyardView/FormShop.Designer.cs index 1196f00..c11d7dc 100644 --- a/Shipyard/ShipyardView/FormShop.Designer.cs +++ b/Shipyard/ShipyardView/FormShop.Designer.cs @@ -20,160 +20,182 @@ base.Dispose(disposing); } - #region Windows Form Designer generated code + #region Windows Form Designer generated code - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - labelShop = new Label(); - labelAddress = new Label(); - labelDate = new Label(); - textBoxName = new TextBox(); - textBoxAddress = new TextBox(); - dateTimePickerDateOpen = new DateTimePicker(); - dataGridView = new DataGridView(); - ButtonSave = new Button(); - ButtonCancel = new Button(); - ID = new DataGridViewTextBoxColumn(); - ShipName = new DataGridViewTextBoxColumn(); - Count = new DataGridViewTextBoxColumn(); - ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); - SuspendLayout(); - // - // labelShop - // - labelShop.AutoSize = true; - labelShop.Location = new Point(12, 21); - labelShop.Name = "labelShop"; - labelShop.Size = new Size(69, 20); - labelShop.TabIndex = 0; - labelShop.Text = "Магазин"; - // - // labelAddress - // - labelAddress.AutoSize = true; - labelAddress.Location = new Point(195, 21); - labelAddress.Name = "labelAddress"; - labelAddress.Size = new Size(51, 20); - labelAddress.TabIndex = 1; - labelAddress.Text = "Адрес"; - // - // labelDate - // - labelDate.AutoSize = true; - labelDate.Location = new Point(474, 21); - labelDate.Name = "labelDate"; - labelDate.Size = new Size(110, 20); - labelDate.TabIndex = 2; - labelDate.Text = "Дата открытия"; - // - // textBoxName - // - textBoxName.Location = new Point(12, 44); - textBoxName.Name = "textBoxName"; - textBoxName.Size = new Size(160, 27); - textBoxName.TabIndex = 3; - // - // textBoxAddress - // - textBoxAddress.Location = new Point(195, 44); - textBoxAddress.Name = "textBoxAddress"; - textBoxAddress.Size = new Size(246, 27); - textBoxAddress.TabIndex = 4; - // - // dateTimePickerDateOpen - // - dateTimePickerDateOpen.Location = new Point(474, 44); - dateTimePickerDateOpen.Name = "dateTimePickerDateOpen"; - dateTimePickerDateOpen.Size = new Size(250, 27); - dateTimePickerDateOpen.TabIndex = 5; - // - // dataGridView - // - dataGridView.AllowUserToAddRows = false; - dataGridView.AllowUserToDeleteRows = false; - dataGridView.AllowUserToResizeColumns = false; - dataGridView.AllowUserToResizeRows = false; - dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; - dataGridView.Columns.AddRange(new DataGridViewColumn[] { ID, ShipName, Count }); - dataGridView.Location = new Point(12, 77); - dataGridView.Name = "dataGridView"; - dataGridView.RowHeadersVisible = false; - dataGridView.RowHeadersWidth = 51; - dataGridView.RowTemplate.Height = 29; - dataGridView.Size = new Size(712, 330); - dataGridView.TabIndex = 6; - // - // ButtonSave - // - ButtonSave.Location = new Point(490, 413); - ButtonSave.Name = "ButtonSave"; - ButtonSave.Size = new Size(111, 29); - ButtonSave.TabIndex = 7; - ButtonSave.Text = "Сохранить"; - ButtonSave.UseVisualStyleBackColor = true; - ButtonSave.Click += ButtonSave_Click; - // - // ButtonCancel - // - ButtonCancel.Location = new Point(630, 413); - ButtonCancel.Name = "ButtonCancel"; - ButtonCancel.Size = new Size(94, 29); - ButtonCancel.TabIndex = 8; - ButtonCancel.Text = "Отмена"; - ButtonCancel.UseVisualStyleBackColor = true; - ButtonCancel.Click += ButtonCancel_Click; - // - // ID - // - ID.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - ID.HeaderText = "ID"; - ID.MinimumWidth = 6; - ID.Name = "ID"; - ID.Visible = false; - // - // ShipName - // - ShipName.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - ShipName.HeaderText = "Название корабля"; - ShipName.MinimumWidth = 6; - ShipName.Name = "ShipName"; - // - // Count - // - Count.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - Count.HeaderText = "Количество"; - Count.MinimumWidth = 6; - Count.Name = "Count"; - // - // FormShop - // - AutoScaleDimensions = new SizeF(8F, 20F); - AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(740, 450); - Controls.Add(ButtonCancel); - Controls.Add(ButtonSave); - Controls.Add(dataGridView); - Controls.Add(dateTimePickerDateOpen); - Controls.Add(textBoxAddress); - Controls.Add(textBoxName); - Controls.Add(labelDate); - Controls.Add(labelAddress); - Controls.Add(labelShop); - Name = "FormShop"; - Text = "Магазин"; - Load += FormShop_Load; - ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); - ResumeLayout(false); - PerformLayout(); - } + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + labelShop = new Label(); + labelAddress = new Label(); + labelDate = new Label(); + textBoxName = new TextBox(); + textBoxAddress = new TextBox(); + dateTimePickerDateOpen = new DateTimePicker(); + dataGridView = new DataGridView(); + ID = new DataGridViewTextBoxColumn(); + ShipName = new DataGridViewTextBoxColumn(); + Count = new DataGridViewTextBoxColumn(); + ButtonSave = new Button(); + ButtonCancel = new Button(); + numericUpDownCapacity = new NumericUpDown(); + labelCapacity = new Label(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownCapacity).BeginInit(); + SuspendLayout(); + // + // labelShop + // + labelShop.AutoSize = true; + labelShop.Location = new Point(12, 21); + labelShop.Name = "labelShop"; + labelShop.Size = new Size(69, 20); + labelShop.TabIndex = 0; + labelShop.Text = "Магазин"; + // + // labelAddress + // + labelAddress.AutoSize = true; + labelAddress.Location = new Point(195, 21); + labelAddress.Name = "labelAddress"; + labelAddress.Size = new Size(51, 20); + labelAddress.TabIndex = 1; + labelAddress.Text = "Адрес"; + // + // labelDate + // + labelDate.AutoSize = true; + labelDate.Location = new Point(474, 21); + labelDate.Name = "labelDate"; + labelDate.Size = new Size(110, 20); + labelDate.TabIndex = 2; + labelDate.Text = "Дата открытия"; + // + // textBoxName + // + textBoxName.Location = new Point(12, 44); + textBoxName.Name = "textBoxName"; + textBoxName.Size = new Size(160, 27); + textBoxName.TabIndex = 3; + // + // textBoxAddress + // + textBoxAddress.Location = new Point(195, 44); + textBoxAddress.Name = "textBoxAddress"; + textBoxAddress.Size = new Size(246, 27); + textBoxAddress.TabIndex = 4; + // + // dateTimePickerDateOpen + // + dateTimePickerDateOpen.Location = new Point(474, 44); + dateTimePickerDateOpen.Name = "dateTimePickerDateOpen"; + dateTimePickerDateOpen.Size = new Size(195, 27); + dateTimePickerDateOpen.TabIndex = 5; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.AllowUserToResizeColumns = false; + dataGridView.AllowUserToResizeRows = false; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Columns.AddRange(new DataGridViewColumn[] { ID, ShipName, Count }); + dataGridView.Location = new Point(12, 77); + dataGridView.Name = "dataGridView"; + dataGridView.RowHeadersVisible = false; + dataGridView.RowHeadersWidth = 51; + dataGridView.RowTemplate.Height = 29; + dataGridView.Size = new Size(870, 370); + dataGridView.TabIndex = 6; + // + // ID + // + ID.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + ID.HeaderText = "ID"; + ID.MinimumWidth = 6; + ID.Name = "ID"; + ID.Visible = false; + // + // ShipName + // + ShipName.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + ShipName.HeaderText = "Название корабля"; + ShipName.MinimumWidth = 6; + ShipName.Name = "ShipName"; + // + // Count + // + Count.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + Count.HeaderText = "Количество"; + Count.MinimumWidth = 6; + Count.Name = "Count"; + // + // ButtonSave + // + ButtonSave.Location = new Point(652, 453); + ButtonSave.Name = "ButtonSave"; + ButtonSave.Size = new Size(111, 29); + ButtonSave.TabIndex = 7; + ButtonSave.Text = "Сохранить"; + ButtonSave.UseVisualStyleBackColor = true; + ButtonSave.Click += ButtonSave_Click; + // + // ButtonCancel + // + ButtonCancel.Location = new Point(788, 453); + ButtonCancel.Name = "ButtonCancel"; + ButtonCancel.Size = new Size(94, 29); + ButtonCancel.TabIndex = 8; + ButtonCancel.Text = "Отмена"; + ButtonCancel.UseVisualStyleBackColor = true; + ButtonCancel.Click += ButtonCancel_Click; + // + // numericUpDownCapacity + // + numericUpDownCapacity.Location = new Point(701, 44); + numericUpDownCapacity.Name = "numericUpDownCapacity"; + numericUpDownCapacity.Size = new Size(181, 27); + numericUpDownCapacity.TabIndex = 9; + // + // labelCapacity + // + labelCapacity.AutoSize = true; + labelCapacity.Location = new Point(701, 21); + labelCapacity.Name = "labelCapacity"; + labelCapacity.Size = new Size(100, 20); + labelCapacity.TabIndex = 10; + labelCapacity.Text = "Вместимость"; + // + // FormShop + // + AutoScaleDimensions = new SizeF(8F, 20F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(906, 494); + Controls.Add(labelCapacity); + Controls.Add(numericUpDownCapacity); + Controls.Add(ButtonCancel); + Controls.Add(ButtonSave); + Controls.Add(dataGridView); + Controls.Add(dateTimePickerDateOpen); + Controls.Add(textBoxAddress); + Controls.Add(textBoxName); + Controls.Add(labelDate); + Controls.Add(labelAddress); + Controls.Add(labelShop); + Name = "FormShop"; + Text = "Магазин"; + Load += FormShop_Load; + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownCapacity).EndInit(); + ResumeLayout(false); + PerformLayout(); + } - #endregion + #endregion - private Label labelShop; + private Label labelShop; private Label labelAddress; private Label labelDate; private TextBox textBoxName; @@ -185,5 +207,7 @@ private DataGridViewTextBoxColumn ID; private DataGridViewTextBoxColumn ShipName; private DataGridViewTextBoxColumn Count; - } + private NumericUpDown numericUpDownCapacity; + private Label labelCapacity; + } } \ No newline at end of file diff --git a/Shipyard/ShipyardView/FormShop.cs b/Shipyard/ShipyardView/FormShop.cs index 6736b8a..f11d45d 100644 --- a/Shipyard/ShipyardView/FormShop.cs +++ b/Shipyard/ShipyardView/FormShop.cs @@ -37,7 +37,8 @@ namespace ShipyardView textBoxName.Text = view.ShopName; textBoxAddress.Text = view.Address.ToString(); dateTimePickerDateOpen.Text = view.DateOpen.ToString(); - _shopShips = view.ShopShips ?? new Dictionary(); + numericUpDownCapacity.Value = view.Capacity; + _shopShips = view.ShopShips ?? new Dictionary(); LoadData(); } } @@ -86,7 +87,12 @@ namespace ShipyardView MessageBox.Show("Заполните дату", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } - _logger.LogInformation("Сохранение магазина"); + if (numericUpDownCapacity.Value <= 0) + { + MessageBox.Show("Вместимость должна быть больше нуля", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + _logger.LogInformation("Сохранение магазина"); try { var model = new ShopBindingModel @@ -95,7 +101,8 @@ namespace ShipyardView ShopName = textBoxName.Text, Address = textBoxAddress.Text, DateOpen = DateTime.Parse(dateTimePickerDateOpen.Text), - ShopShips = _shopShips + Capacity = (int)numericUpDownCapacity.Value, + ShopShips = _shopShips }; var operationResult = _id.HasValue ? _logic.Update(model) : _logic.Create(model); if (!operationResult) diff --git a/Shipyard/ShipyardView/Program.cs b/Shipyard/ShipyardView/Program.cs index ed51abb..bd517df 100644 --- a/Shipyard/ShipyardView/Program.cs +++ b/Shipyard/ShipyardView/Program.cs @@ -47,7 +47,8 @@ namespace ShipyardView services.AddTransient(); services.AddTransient(); services.AddTransient(); - } + services.AddTransient(); + } }