diff --git a/CarRepairShop/CarRepairShopBusinessLogic/BusinessLogics/OrderLogic.cs b/CarRepairShop/CarRepairShopBusinessLogic/BusinessLogics/OrderLogic.cs index 16875ac..5ede0f4 100644 --- a/CarRepairShop/CarRepairShopBusinessLogic/BusinessLogics/OrderLogic.cs +++ b/CarRepairShop/CarRepairShopBusinessLogic/BusinessLogics/OrderLogic.cs @@ -17,11 +17,14 @@ namespace CarRepairShopBusinessLogic.BusinessLogics { private readonly ILogger _logger; private readonly IOrderStorage _orderStorage; - - public OrderLogic(ILogger logger, IOrderStorage orderStorage) + private readonly IRepairStorage _repairStorage; + private readonly IShopLogic _slogic; + public OrderLogic(ILogger logger, IOrderStorage orderStorage, IRepairStorage repairStorage, IShopLogic shopLogic) { _logger = logger; _orderStorage = orderStorage; + _repairStorage = repairStorage; + _slogic = shopLogic; } public List? ReadList(OrderSearchModel? model) @@ -67,8 +70,9 @@ namespace CarRepairShopBusinessLogic.BusinessLogics private bool StatusUpdate(OrderBindingModel model, OrderStatus newStatus) { - - if(model.Status + 1 != newStatus) + var viewModel = _orderStorage.GetElement(new OrderSearchModel { Id = model.Id }); + if (viewModel == null) throw new ArgumentNullException(nameof(model)); + if (model.Status + 1 != newStatus) { _logger.LogInformation("Status update operation failed. Incorrect order status"); return false; @@ -78,6 +82,23 @@ namespace CarRepairShopBusinessLogic.BusinessLogics { model.DateImplement = DateTime.Now; } + + if(model.Status == OrderStatus.Готов) + { + model.DateImplement = DateTime.Now; + var repair = _repairStorage.GetElement(new() { Id = viewModel.RepairId }); + if(repair == null) throw new ArgumentNullException(nameof(repair)); + + if(!_slogic.AddRepairs(repair, viewModel.Count)) + { + throw new Exception($"Невозможно выдать изделия, магазины переполнены."); + } + } + else + { + model.DateImplement = viewModel.DateImplement; + } + if(_orderStorage.Update(model) == null) { model.Status--; diff --git a/CarRepairShop/CarRepairShopBusinessLogic/BusinessLogics/ShopLogic.cs b/CarRepairShop/CarRepairShopBusinessLogic/BusinessLogics/ShopLogic.cs new file mode 100644 index 0000000..3e81b94 --- /dev/null +++ b/CarRepairShop/CarRepairShopBusinessLogic/BusinessLogics/ShopLogic.cs @@ -0,0 +1,194 @@ +using CarRepairShopContracts.BindingModels; +using CarRepairShopContracts.BusinessLogicsContracts; +using CarRepairShopContracts.SearchModels; +using CarRepairShopContracts.StoragesContracts; +using CarRepairShopContracts.ViewModels; +using CarRepairShopDataModels.Models; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CarRepairShopBusinessLogic.BusinessLogics +{ + public class ShopLogic : IShopLogic + { + private readonly ILogger _logger; + private readonly IShopStorage _shopStorage; + + public ShopLogic(ILogger logger, IShopStorage shopStorage) + { + _logger = logger; + _shopStorage = shopStorage; + } + + public List? ReadList(ShopSearchModel model) + { + _logger.LogInformation("ReadList. Id:{Id}", model?.Id); + var list = model == null ? _shopStorage.GetFullList() : _shopStorage.GetFilteredList(model); + if(list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count:{Count}", list.Count); + return list; + } + + public ShopViewModel? ReadElement(ShopSearchModel model) + { + if(model == null) throw new ArgumentNullException(nameof(model)); + _logger.LogInformation("ReadElement. Id:{Id}", model.Id); + var element = _shopStorage.GetElement(model); + if(element == null) + { + _logger.LogWarning("ReadElement element not found"); + return null; + } + _logger.LogInformation("ReadElement find. Id:{Id}", element.Id); + return element; + } + + public bool Create(ShopBindingModel model) + { + CheckModel(model); + if(_shopStorage.Insert(model) == null) + { + _logger.LogWarning("Create operation failed"); + return false; + } + return true; + } + public bool Update(ShopBindingModel model) + { + CheckModel(model); + if(_shopStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + public bool Delete(ShopBindingModel model) + { + CheckModel(model, false); + if(_shopStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + + public bool AddRepair(ShopSearchModel model, IRepairModel repair, int count) + { + if(model == null) throw new ArgumentNullException(nameof(model)); + if(count <= 0) throw new ArgumentNullException("Количество добавляемых изделий должно быть больше 0", nameof(count)); + + _logger.LogInformation("AddRepair. ShopName:{ShopName}. Id: {Id}", model?.ShopName, model?.Id); + var shop = _shopStorage.GetElement(model); + + if (shop == null) return false; + + if(count > shop.MaxCountRepairs) throw new ArgumentNullException("Количество добавляемых изделий превышает максимум допустимых"); + + if (!shop.ShopRepairs.ContainsKey(repair.Id)) + { + shop.ShopRepairs[repair.Id] = (repair, count); + } + else + { + shop.ShopRepairs[repair.Id] = (repair, shop.ShopRepairs[repair.Id].Item2 + count); + } + + _shopStorage.Update(new ShopBindingModel() + { + ShopName = shop.ShopName, + ShopAddress = shop.ShopAddress, + DateOpen = shop.DateOpen, + MaxCountRepairs = shop.MaxCountRepairs, + ShopRepairs = shop.ShopRepairs + }); + return true; + } + + private void CheckModel(ShopBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (string.IsNullOrEmpty(model.ShopName)) + { + throw new ArgumentNullException("Нет названия магазина", nameof(model.ShopName)); + } + if (string.IsNullOrEmpty(model.ShopAddress)) + { + throw new ArgumentNullException("Нету адреса магазина", nameof(model.ShopAddress)); + } + _logger.LogInformation("Repair. ShopName:{ShopName}. ShopAddress:{ShopAddress}. Id:{Id}", model.ShopName, model.ShopAddress, model.Id); + var element = _shopStorage.GetElement(new ShopSearchModel + { + ShopName = model.ShopName + }); + if (element != null && element.Id != model.Id) + { + throw new InvalidOperationException("Магазин с таким названием уже есть"); + } + } + + public bool AddRepairs(IRepairModel model, int count) + { + if(count <= 0) + { + throw new ArgumentNullException("Количество должно быть больше 0", nameof(count)); + } + _logger.LogInformation("AddRepairs. Repair: {Repair}. Count: {Count}", model?.RepairName, count); + + var capacity = _shopStorage.GetFullList().Select(x => x.MaxCountRepairs - x.ShopRepairs.Select(x => x.Value.Item2).Sum()).Sum() - count; + + if(capacity < 0) + { + _logger.LogWarning("AddRepairs operation failed. Sell {count} Repairs ", capacity); + return false; + } + + foreach(var shop in _shopStorage.GetFullList()) + { + if(shop.MaxCountRepairs - shop.ShopRepairs.Select(x => x.Value.Item2).Sum() < count) + { + if(!AddRepair(new() { Id = shop.Id }, model, shop.MaxCountRepairs - shop.ShopRepairs.Select(x => x.Value.Item2).Sum())){ + _logger.LogWarning("AddRepairs operation failed."); + return false; + } + count -= shop.MaxCountRepairs - shop.ShopRepairs.Select(x => x.Value.Item2).Sum(); + } + else + { + if (!AddRepair(new() { Id = shop.Id}, model, count)) + { + _logger.LogWarning("AddRepairs operation failed."); + return false; + } + count -= count; + } + if (count == 0) + { + return true; + } + } + return true; + } + + public bool SellRepairs(IRepairModel model, int count) + { + return _shopStorage.SellRepairs(model, count); + } + } +} diff --git a/CarRepairShop/CarRepairShopContracts/BindingModels/OrderBindingModel.cs b/CarRepairShop/CarRepairShopContracts/BindingModels/OrderBindingModel.cs index 314d4ab..857b043 100644 --- a/CarRepairShop/CarRepairShopContracts/BindingModels/OrderBindingModel.cs +++ b/CarRepairShop/CarRepairShopContracts/BindingModels/OrderBindingModel.cs @@ -12,6 +12,7 @@ namespace CarRepairShopContracts.BindingModels { public int Id { get; set; } public int RepairId { get; set; } + public string RepairName { get; set; } = string.Empty; public int Count { get; set; } public double Sum { get; set; } public OrderStatus Status { get; set; } = OrderStatus.Неизвестен; diff --git a/CarRepairShop/CarRepairShopContracts/BindingModels/ShopBindingModel.cs b/CarRepairShop/CarRepairShopContracts/BindingModels/ShopBindingModel.cs new file mode 100644 index 0000000..12640b7 --- /dev/null +++ b/CarRepairShop/CarRepairShopContracts/BindingModels/ShopBindingModel.cs @@ -0,0 +1,19 @@ +using CarRepairShopDataModels.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CarRepairShopContracts.BindingModels +{ + public class ShopBindingModel : IShopModel + { + public int Id { get; set; } + public string ShopName { get; set; } = string.Empty; + public string ShopAddress { get; set; } = string.Empty; + public DateTime DateOpen { get; set; } = DateTime.Now; + public int MaxCountRepairs { get; set; } + public Dictionary ShopRepairs { get; set; } = new(); + } +} diff --git a/CarRepairShop/CarRepairShopContracts/BusinessLogicsContracts/IShopLogic.cs b/CarRepairShop/CarRepairShopContracts/BusinessLogicsContracts/IShopLogic.cs new file mode 100644 index 0000000..da55f9d --- /dev/null +++ b/CarRepairShop/CarRepairShopContracts/BusinessLogicsContracts/IShopLogic.cs @@ -0,0 +1,25 @@ +using CarRepairShopContracts.BindingModels; +using CarRepairShopContracts.SearchModels; +using CarRepairShopContracts.ViewModels; +using CarRepairShopDataModels.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CarRepairShopContracts.BusinessLogicsContracts +{ + public interface IShopLogic + { + List? ReadList(ShopSearchModel? model); + ShopViewModel? ReadElement(ShopSearchModel model); + + bool Create(ShopBindingModel model); + bool Update(ShopBindingModel model); + bool Delete(ShopBindingModel model); + bool AddRepair(ShopSearchModel model, IRepairModel repair, int count); + bool SellRepairs(IRepairModel model, int count); + bool AddRepairs(IRepairModel model, int count); + } +} diff --git a/CarRepairShop/CarRepairShopContracts/SearchModels/ShopSearchModel.cs b/CarRepairShop/CarRepairShopContracts/SearchModels/ShopSearchModel.cs new file mode 100644 index 0000000..2adbb70 --- /dev/null +++ b/CarRepairShop/CarRepairShopContracts/SearchModels/ShopSearchModel.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CarRepairShopContracts.SearchModels +{ + public class ShopSearchModel + { + public int? Id { get; set; } + public string ShopName { get; set; } = string.Empty; + } +} diff --git a/CarRepairShop/CarRepairShopContracts/StoragesContracts/IShopStorage.cs b/CarRepairShop/CarRepairShopContracts/StoragesContracts/IShopStorage.cs new file mode 100644 index 0000000..839a31b --- /dev/null +++ b/CarRepairShop/CarRepairShopContracts/StoragesContracts/IShopStorage.cs @@ -0,0 +1,25 @@ +using CarRepairShopContracts.BindingModels; +using CarRepairShopContracts.SearchModels; +using CarRepairShopContracts.ViewModels; +using CarRepairShopDataModels.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CarRepairShopContracts.StoragesContracts +{ + public interface IShopStorage + { + List GetFullList(); + List GetFilteredList(ShopSearchModel model); + + ShopViewModel? GetElement(ShopSearchModel model); + ShopViewModel? Insert(ShopBindingModel model); + ShopViewModel? Update(ShopBindingModel model); + ShopViewModel? Delete(ShopBindingModel model); + + bool SellRepairs(IRepairModel model, int count); + } +} diff --git a/CarRepairShop/CarRepairShopContracts/ViewModels/ShopViewModel.cs b/CarRepairShop/CarRepairShopContracts/ViewModels/ShopViewModel.cs new file mode 100644 index 0000000..7f3ad73 --- /dev/null +++ b/CarRepairShop/CarRepairShopContracts/ViewModels/ShopViewModel.cs @@ -0,0 +1,29 @@ +using CarRepairShopDataModels.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CarRepairShopContracts.ViewModels +{ + public class ShopViewModel : IShopModel + { + public int Id { get; set; } + + [DisplayName("Название магазина")] + public string ShopName { get; set; } = string.Empty; + + [DisplayName("Адрес магазина")] + public string ShopAddress { get; set; } = string.Empty; + + [DisplayName("Дата открытия")] + public DateTime DateOpen { get; set; } = DateTime.Now; + + [DisplayName("Вместимость магазина")] + public int MaxCountRepairs { get; set; } + + public Dictionary ShopRepairs { get; set; } = new(); + } +} diff --git a/CarRepairShop/CarRepairShopDataModels/Models/IShopModel.cs b/CarRepairShop/CarRepairShopDataModels/Models/IShopModel.cs new file mode 100644 index 0000000..838982a --- /dev/null +++ b/CarRepairShop/CarRepairShopDataModels/Models/IShopModel.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CarRepairShopDataModels.Models +{ + public interface IShopModel : IId + { + string ShopName { get; } + string ShopAddress { get; } + DateTime DateOpen { get; } + public int MaxCountRepairs { get; set; } + Dictionary ShopRepairs { get; } + } +} diff --git a/CarRepairShop/CarRepairShopFileImplement/DataFileSingleton.cs b/CarRepairShop/CarRepairShopFileImplement/DataFileSingleton.cs index eae3701..c2837c9 100644 --- a/CarRepairShop/CarRepairShopFileImplement/DataFileSingleton.cs +++ b/CarRepairShop/CarRepairShopFileImplement/DataFileSingleton.cs @@ -14,9 +14,11 @@ namespace CarRepairShopFileImplement private readonly string ComponentFileName = "Component.xml"; private readonly string OrderFileName = "Order.xml"; private readonly string RepairFileName = "Repair.xml"; + private readonly string ShopFileName = "Shop.xml"; public List Components { get; private set; } public List Orders { get; private set; } public List Repairs { get; private set; } + public List Shops { get; private set; } public static DataFileSingleton GetInstance() { if(instance == null) @@ -28,11 +30,13 @@ namespace CarRepairShopFileImplement public void SaveComponents() => SaveData(Components, ComponentFileName, "Components", x => x.GetXElement); public void SaveRepairs() => SaveData(Repairs, RepairFileName, "Repairs", 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() { Components = LoadData(ComponentFileName, "Component", x => Component.Create(x)!)!; Repairs = LoadData(RepairFileName, "Repair", x => Repair.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/CarRepairShop/CarRepairShopFileImplement/Implements/ShopStorage.cs b/CarRepairShop/CarRepairShopFileImplement/Implements/ShopStorage.cs new file mode 100644 index 0000000..5c4af0c --- /dev/null +++ b/CarRepairShop/CarRepairShopFileImplement/Implements/ShopStorage.cs @@ -0,0 +1,114 @@ +using CarRepairShopContracts.BindingModels; +using CarRepairShopContracts.SearchModels; +using CarRepairShopContracts.StoragesContracts; +using CarRepairShopContracts.ViewModels; +using CarRepairShopDataModels.Models; +using CarRepairShopFileImplement.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CarRepairShopFileImplement.Implements +{ + public class ShopStorage : IShopStorage + { + private readonly DataFileSingleton _source; + + public ShopStorage() + { + _source = DataFileSingleton.GetInstance(); + } + + public List GetFullList() + { + return _source.Shops.Select(x => x.GetViewModel).ToList(); + } + 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 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 && model.Id == x.Id))?.GetViewModel; + } + 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.ShopName.Contains(model.ShopName) || x.Id == model.Id); + + if(shop == null) return null; + + shop.Update(model); + _source.SaveShops(); + + return shop.GetViewModel; + } + public ShopViewModel? Delete(ShopBindingModel model) + { + var element = _source.Shops.FirstOrDefault(x => x.Id == model.Id); + + if(element != null) + { + _source.Shops.Remove(element); + _source.SaveShops(); + return element.GetViewModel; + } + return null; + } + + public bool SellRepairs(IRepairModel model, int count) + { + if(_source.Shops.Select(x => x.ShopRepairs.FirstOrDefault(x => x.Key == model.Id).Value.Item2).Sum() < count) + { + return false; + } + + var list = _source.Shops.Where(x => x.ShopRepairs.ContainsKey(model.Id)); + + foreach(var shop in list) + { + if (shop.ShopRepairs[model.Id].Item2 < count) + { + count -= shop.ShopRepairs[model.Id].Item2; + shop.ShopRepairs[model.Id] = (shop.ShopRepairs[model.Id].Item1, 0); + } + else + { + shop.ShopRepairs[model.Id] = (shop.ShopRepairs[model.Id].Item1, shop.ShopRepairs[model.Id].Item2 - count); + count -= count; + } + + Update(new() + { + ShopName = shop.ShopName, + ShopAddress = shop.ShopAddress, + DateOpen = shop.DateOpen, + MaxCountRepairs = shop.MaxCountRepairs, + ShopRepairs = shop.ShopRepairs, + }); + + if(count == 0) + { + return true; + } + } + return true; + } + } +} diff --git a/CarRepairShop/CarRepairShopFileImplement/Models/Shop.cs b/CarRepairShop/CarRepairShopFileImplement/Models/Shop.cs new file mode 100644 index 0000000..554e1b3 --- /dev/null +++ b/CarRepairShop/CarRepairShopFileImplement/Models/Shop.cs @@ -0,0 +1,101 @@ +using CarRepairShopContracts.BindingModels; +using CarRepairShopContracts.ViewModels; +using CarRepairShopDataModels.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; + +namespace CarRepairShopFileImplement.Models +{ + internal class Shop : IShopModel + { + public int Id { get; set; } + + public string ShopName { get; set; } = string.Empty; + + public string ShopAddress { get; set; } = string.Empty; + + public DateTime DateOpen { get; set; } + + public int MaxCountRepairs { get; set; } + + public Dictionary countRepair { get; private set; } = new(); + + public Dictionary _repairs = null; + + public Dictionary ShopRepairs + { + get + { + if(_repairs == null) + { + var source = DataFileSingleton.GetInstance(); + _repairs = countRepair.ToDictionary(x => x.Key, y => ((source.Repairs.FirstOrDefault(z => z.Id == y.Key) as IRepairModel)!, y.Value)); + } + return _repairs; + } + } + + public static Shop? Create(ShopBindingModel? model) + { + if (model == null) return null; + return new Shop() + { + Id = model.Id, + ShopName = model.ShopName, + ShopAddress = model.ShopAddress, + DateOpen = model.DateOpen, + MaxCountRepairs = model.MaxCountRepairs, + countRepair = model.ShopRepairs.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, + ShopAddress = element.Element("ShopAddress")!.Value, + DateOpen = Convert.ToDateTime(element.Element("DateOpen")!.Value), + MaxCountRepairs = Convert.ToInt32(element.Element("MaxCountRepairs")!.Value), + countRepair = element.Element("ShopRepairs")!.Elements("ShopRepairs").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; + ShopAddress = model.ShopAddress; + DateOpen = model.DateOpen; + MaxCountRepairs = model.MaxCountRepairs; + countRepair = model.ShopRepairs.ToDictionary(x => x.Key, x => x.Value.Item2); + _repairs = null; + } + + public ShopViewModel GetViewModel => new() + { + Id = Id, + ShopName = ShopName, + ShopAddress = ShopAddress, + DateOpen = DateOpen, + MaxCountRepairs = MaxCountRepairs, + ShopRepairs = ShopRepairs + }; + public XElement GetXElement => new("Shop", + new XAttribute("Id", Id), + new XElement("ShopName", ShopName), + new XElement("ShopAddress", ShopAddress), + new XElement("DateOpen", DateOpen.ToString()), + new XElement("MaxCountRepairs", MaxCountRepairs.ToString()), + new XElement("ShopRepairs", countRepair.Select(x => new XElement("ShopRepairs", + new XElement("Key", x.Key), + new XElement("Value", x.Value))).ToArray())); + } +} diff --git a/CarRepairShop/CarRepairShopListImplement/DataListSingleton.cs b/CarRepairShop/CarRepairShopListImplement/DataListSingleton.cs index 5e8c8c1..ad7d503 100644 --- a/CarRepairShop/CarRepairShopListImplement/DataListSingleton.cs +++ b/CarRepairShop/CarRepairShopListImplement/DataListSingleton.cs @@ -8,12 +8,14 @@ namespace CarRepairShopListImplement public List Components { get; set; } public List Repairs { get; set; } public List Orders { get; set; } + public List Shops { get; set; } private DataListSingleton() { Components = new List(); Repairs = new List(); Orders = new List(); + Shops = new List(); } public static DataListSingleton GetInstance() diff --git a/CarRepairShop/CarRepairShopListImplement/Implements/ShopStorage.cs b/CarRepairShop/CarRepairShopListImplement/Implements/ShopStorage.cs new file mode 100644 index 0000000..9cc4f05 --- /dev/null +++ b/CarRepairShop/CarRepairShopListImplement/Implements/ShopStorage.cs @@ -0,0 +1,112 @@ +using CarRepairShopContracts.BindingModels; +using CarRepairShopContracts.SearchModels; +using CarRepairShopContracts.StoragesContracts; +using CarRepairShopContracts.ViewModels; +using CarRepairShopDataModels.Models; +using CarRepairShopListImplement.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CarRepairShopListImplement.Implements +{ + public class ShopStorage : IShopStorage + { + private readonly DataListSingleton _source; + + public ShopStorage() + { + _source = DataListSingleton.GetInstance(); + } + + public List GetFullList() + { + var result = new List(); + foreach(var shop in _source.Shops) + { + result.Add(shop.GetViewModel); + } + return result; + } + + public List GetFilteredList(ShopSearchModel model) + { + var result = new List(); + if (string.IsNullOrEmpty(model.ShopName)) return result; + + foreach(var shop in _source.Shops) + { + if (shop.ShopName.Contains(model.ShopName)) + { + result.Add(shop.GetViewModel); + } + } + return result; + } + + public ShopViewModel? GetElement(ShopSearchModel model) + { + if(string.IsNullOrEmpty(model.ShopName) && !model.Id.HasValue) return null; + + foreach(var shop in _source.Shops) + { + if((model.ShopName == shop.ShopName) || (model.Id == shop.Id)) + { + return shop.GetViewModel; + } + } + return null; + } + + public ShopViewModel? Insert(ShopBindingModel model) + { + model.Id = 1; + foreach(var shop in _source.Shops) + { + if(model.Id <= shop.Id) + { + model.Id = shop.Id + 1; + } + } + var newShop = Shop.Create(model); + if (newShop == null) return null; + + _source.Shops.Add(newShop); + return newShop.GetViewModel; + } + + public ShopViewModel? Update(ShopBindingModel model) + { + foreach(var shop in _source.Shops) + { + if(shop.Id == model.Id) + { + shop.Update(model); + return shop.GetViewModel; + } + } + return null; + } + + public ShopViewModel? Delete(ShopBindingModel model) + { + for (int i = 0; i < _source.Shops.Count; i++) + { + if (_source.Shops[i].Id == model.Id) + { + var element = _source.Shops[i]; + _source.Shops.RemoveAt(i); + return element.GetViewModel; + } + } + return null; + } + + public bool SellRepairs(IRepairModel model, int count) + { + throw new NotImplementedException(); + } + } +} diff --git a/CarRepairShop/CarRepairShopListImplement/Models/Shop.cs b/CarRepairShop/CarRepairShopListImplement/Models/Shop.cs new file mode 100644 index 0000000..0888bba --- /dev/null +++ b/CarRepairShop/CarRepairShopListImplement/Models/Shop.cs @@ -0,0 +1,52 @@ +using CarRepairShopContracts.BindingModels; +using CarRepairShopContracts.ViewModels; +using CarRepairShopDataModels.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CarRepairShopListImplement.Models +{ + public class Shop : IShopModel + { + public int Id { get; private set; } + public string ShopName { get; private set; } = string.Empty; + public string ShopAddress { get; private set; } = string.Empty; + public DateTime DateOpen { get; private set; } = DateTime.Now; + public int MaxCountRepairs { get; set; } + public Dictionary ShopRepairs { get; private set; } = new Dictionary(); + + public static Shop? Create(ShopBindingModel? model) + { + if (model == null) return null; + return new Shop() + { + Id = model.Id, + ShopName = model.ShopName, + ShopAddress = model.ShopAddress, + DateOpen = model.DateOpen, + ShopRepairs = model.ShopRepairs + }; + } + + public void Update(ShopBindingModel? model) + { + if(model == null) return; + ShopName = model.ShopName; + ShopAddress = model.ShopAddress; + DateOpen = model.DateOpen; + } + + public ShopViewModel GetViewModel => new() + { + Id = Id, + ShopName = ShopName, + ShopAddress = ShopAddress, + DateOpen = DateOpen, + ShopRepairs = ShopRepairs + }; + + } +} diff --git a/CarRepairShop/CarRepairShopView/FormMain.Designer.cs b/CarRepairShop/CarRepairShopView/FormMain.Designer.cs index ec5b8c0..8595078 100644 --- a/CarRepairShop/CarRepairShopView/FormMain.Designer.cs +++ b/CarRepairShop/CarRepairShopView/FormMain.Designer.cs @@ -32,12 +32,15 @@ справочникиToolStripMenuItem = new ToolStripMenuItem(); компонентыToolStripMenuItem = new ToolStripMenuItem(); изделияToolStripMenuItem = new ToolStripMenuItem(); + ShopsToolStripMenuItem = new ToolStripMenuItem(); + FillShopToolStripMenuItem = new ToolStripMenuItem(); dataGridView = new DataGridView(); buttonCreateOrder = new Button(); buttonTakeOrderInWork = new Button(); buttonOrderReady = new Button(); buttonIssuedOrder = new Button(); buttonRef = new Button(); + buttonSellRepairs = new Button(); menuStrip1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); SuspendLayout(); @@ -53,7 +56,7 @@ // // справочникиToolStripMenuItem // - справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { компонентыToolStripMenuItem, изделияToolStripMenuItem }); + справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { компонентыToolStripMenuItem, изделияToolStripMenuItem, ShopsToolStripMenuItem, FillShopToolStripMenuItem }); справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem"; справочникиToolStripMenuItem.Size = new Size(94, 20); справочникиToolStripMenuItem.Text = "Справочники"; @@ -61,17 +64,31 @@ // компонентыToolStripMenuItem // компонентыToolStripMenuItem.Name = "компонентыToolStripMenuItem"; - компонентыToolStripMenuItem.Size = new Size(145, 22); + компонентыToolStripMenuItem.Size = new Size(198, 22); компонентыToolStripMenuItem.Text = "Компоненты"; компонентыToolStripMenuItem.Click += компонентыToolStripMenuItem_Click; // // изделияToolStripMenuItem // изделияToolStripMenuItem.Name = "изделияToolStripMenuItem"; - изделияToolStripMenuItem.Size = new Size(145, 22); + изделияToolStripMenuItem.Size = new Size(198, 22); изделияToolStripMenuItem.Text = "Ремонт"; изделияToolStripMenuItem.Click += ремонтToolStripMenuItem_Click; // + // ShopsToolStripMenuItem + // + ShopsToolStripMenuItem.Name = "ShopsToolStripMenuItem"; + ShopsToolStripMenuItem.Size = new Size(198, 22); + ShopsToolStripMenuItem.Text = "Магазины"; + ShopsToolStripMenuItem.Click += ShopsToolStripMenuItem_Click; + // + // FillShopToolStripMenuItem + // + FillShopToolStripMenuItem.Name = "FillShopToolStripMenuItem"; + FillShopToolStripMenuItem.Size = new Size(198, 22); + FillShopToolStripMenuItem.Text = "Пополнение магазина"; + FillShopToolStripMenuItem.Click += FillShopToolStripMenuItem_Click; + // // dataGridView // dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; @@ -142,11 +159,23 @@ buttonRef.UseVisualStyleBackColor = true; buttonRef.Click += buttonRef_Click; // + // buttonSellRepairs + // + buttonSellRepairs.Anchor = AnchorStyles.Top | AnchorStyles.Right; + buttonSellRepairs.Location = new Point(844, 323); + buttonSellRepairs.Name = "buttonSellRepairs"; + buttonSellRepairs.Size = new Size(198, 28); + buttonSellRepairs.TabIndex = 7; + buttonSellRepairs.Text = "Продать услуги"; + buttonSellRepairs.UseVisualStyleBackColor = true; + buttonSellRepairs.Click += buttonSellRepairs_Click; + // // FormMain // AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(1059, 377); + Controls.Add(buttonSellRepairs); Controls.Add(buttonRef); Controls.Add(buttonIssuedOrder); Controls.Add(buttonOrderReady); @@ -177,5 +206,8 @@ private Button buttonOrderReady; private Button buttonIssuedOrder; private Button buttonRef; + private ToolStripMenuItem ShopsToolStripMenuItem; + private ToolStripMenuItem FillShopToolStripMenuItem; + private Button buttonSellRepairs; } } \ No newline at end of file diff --git a/CarRepairShop/CarRepairShopView/FormMain.cs b/CarRepairShop/CarRepairShopView/FormMain.cs index f2c829a..8638e78 100644 --- a/CarRepairShop/CarRepairShopView/FormMain.cs +++ b/CarRepairShop/CarRepairShopView/FormMain.cs @@ -77,9 +77,15 @@ namespace CarRepairShopView _logger.LogInformation("Заказ №{id}. Меняется статус на 'В работе'", id); try { - var operationResult = _orderLogic.TakeOrderInWork(new OrderBindingModel { + var operationResult = _orderLogic.TakeOrderInWork(new OrderBindingModel + { Id = id, + RepairId = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["RepairId"].Value), + RepairName = dataGridView.SelectedRows[0].Cells["RepairName"].Value.ToString(), Status = Enum.Parse(dataGridView.SelectedRows[0].Cells["Status"].Value.ToString()), + Count = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Count"].Value), + Sum = double.Parse(dataGridView.SelectedRows[0].Cells["Sum"].Value.ToString()), + DateCreate = DateTime.Parse(dataGridView.SelectedRows[0].Cells["DateCreate"].Value.ToString()), }); if (!operationResult) { @@ -103,9 +109,15 @@ namespace CarRepairShopView _logger.LogInformation("Заказ №{id}. Меняется статус на 'Готов'", id); try { - var operationResult = _orderLogic.FinishOrder(new OrderBindingModel { + var operationResult = _orderLogic.FinishOrder(new OrderBindingModel + { Id = id, + RepairId = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["RepairId"].Value), + RepairName = dataGridView.SelectedRows[0].Cells["RepairName"].Value.ToString(), Status = Enum.Parse(dataGridView.SelectedRows[0].Cells["Status"].Value.ToString()), + Count = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Count"].Value), + Sum = double.Parse(dataGridView.SelectedRows[0].Cells["Sum"].Value.ToString()), + DateCreate = DateTime.Parse(dataGridView.SelectedRows[0].Cells["DateCreate"].Value.ToString()), }); if (!operationResult) { @@ -129,9 +141,15 @@ namespace CarRepairShopView _logger.LogInformation("Заказ №{id}. Меняется статус на 'Выдан'", id); try { - var operationResult = _orderLogic.DeliveryOrder(new OrderBindingModel { + var operationResult = _orderLogic.DeliveryOrder(new OrderBindingModel + { Id = id, + RepairId = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["RepairId"].Value), + RepairName = dataGridView.SelectedRows[0].Cells["RepairName"].Value.ToString(), Status = Enum.Parse(dataGridView.SelectedRows[0].Cells["Status"].Value.ToString()), + Count = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Count"].Value), + Sum = double.Parse(dataGridView.SelectedRows[0].Cells["Sum"].Value.ToString()), + DateCreate = DateTime.Parse(dataGridView.SelectedRows[0].Cells["DateCreate"].Value.ToString()), }); if (!operationResult) { @@ -151,5 +169,33 @@ namespace CarRepairShopView { LoadData(); } + + private void ShopsToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormShops)); + if (service is FormShops form) + { + form.ShowDialog(); + } + } + + private void FillShopToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormRepairShop)); + if (service is FormRepairShop form) + { + form.ShowDialog(); + } + } + + private void buttonSellRepairs_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormSellRepairs)); + if (service is FormSellRepairs form) + { + form.ShowDialog(); + LoadData(); + } + } } } diff --git a/CarRepairShop/CarRepairShopView/FormMain.resx b/CarRepairShop/CarRepairShopView/FormMain.resx index 5203d24..a0623c8 100644 --- a/CarRepairShop/CarRepairShopView/FormMain.resx +++ b/CarRepairShop/CarRepairShopView/FormMain.resx @@ -18,7 +18,7 @@ System.Resources.ResXResourceReader, System.Windows.Forms, ... System.Resources.ResXResourceWriter, System.Windows.Forms, ... this is my long stringthis is a comment - Blue + Blue [base64 mime encoded serialized .NET Framework object] diff --git a/CarRepairShop/CarRepairShopView/FormRepairShop.Designer.cs b/CarRepairShop/CarRepairShopView/FormRepairShop.Designer.cs new file mode 100644 index 0000000..c1cda4f --- /dev/null +++ b/CarRepairShop/CarRepairShopView/FormRepairShop.Designer.cs @@ -0,0 +1,143 @@ +namespace CarRepairShopView +{ + partial class FormRepairShop + { + /// + /// 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() + { + comboBoxShop = new ComboBox(); + label1 = new Label(); + label2 = new Label(); + comboBoxRepair = new ComboBox(); + label3 = new Label(); + textBoxCount = new TextBox(); + buttonSave = new Button(); + buttonCancel = new Button(); + SuspendLayout(); + // + // comboBoxShop + // + comboBoxShop.FormattingEnabled = true; + comboBoxShop.Location = new Point(89, 9); + comboBoxShop.Name = "comboBoxShop"; + comboBoxShop.Size = new Size(178, 23); + comboBoxShop.TabIndex = 0; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(12, 12); + label1.Name = "label1"; + label1.Size = new Size(57, 15); + label1.TabIndex = 1; + label1.Text = "Магазин:"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(12, 50); + label2.Name = "label2"; + label2.Size = new Size(51, 15); + label2.TabIndex = 2; + label2.Text = "Ремонт:"; + // + // comboBoxRepair + // + comboBoxRepair.FormattingEnabled = true; + comboBoxRepair.Location = new Point(89, 47); + comboBoxRepair.Name = "comboBoxRepair"; + comboBoxRepair.Size = new Size(178, 23); + comboBoxRepair.TabIndex = 3; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(12, 89); + label3.Name = "label3"; + label3.Size = new Size(49, 15); + label3.TabIndex = 5; + label3.Text = "Кол-во:"; + // + // textBoxCount + // + textBoxCount.Location = new Point(89, 86); + textBoxCount.Name = "textBoxCount"; + textBoxCount.Size = new Size(178, 23); + textBoxCount.TabIndex = 6; + // + // buttonSave + // + buttonSave.Location = new Point(195, 122); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(90, 32); + buttonSave.TabIndex = 7; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += buttonSave_Click; + // + // buttonCancel + // + buttonCancel.Location = new Point(60, 122); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(90, 32); + buttonCancel.TabIndex = 8; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += buttonCancel_Click; + // + // FormRepairShop + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(297, 166); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(textBoxCount); + Controls.Add(label3); + Controls.Add(comboBoxRepair); + Controls.Add(label2); + Controls.Add(label1); + Controls.Add(comboBoxShop); + FormBorderStyle = FormBorderStyle.FixedSingle; + Name = "FormRepairShop"; + Text = "Назначит ремонт магазину"; + Load += FormRepairShop_Load; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private ComboBox comboBoxShop; + private Label label1; + private Label label2; + private ComboBox comboBoxRepair; + private Label label3; + private TextBox textBoxCount; + private Button buttonSave; + private Button buttonCancel; + } +} \ No newline at end of file diff --git a/CarRepairShop/CarRepairShopView/FormRepairShop.cs b/CarRepairShop/CarRepairShopView/FormRepairShop.cs new file mode 100644 index 0000000..fb83216 --- /dev/null +++ b/CarRepairShop/CarRepairShopView/FormRepairShop.cs @@ -0,0 +1,125 @@ +using CarRepairShopContracts.BusinessLogicsContracts; +using CarRepairShopContracts.SearchModels; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CarRepairShopView +{ + public partial class FormRepairShop : Form + { + private readonly ILogger _logger; + private readonly IRepairLogic _logicR; + private readonly IShopLogic _logicS; + public FormRepairShop(ILogger logger, IRepairLogic logicR, IShopLogic logicS) + { + InitializeComponent(); + _logger = logger; + _logicR = logicR; + _logicS = logicS; + } + + private void FormRepairShop_Load(object sender, EventArgs e) + { + _logger.LogInformation("Загрузка магазинов"); + try + { + var list = _logicS.ReadList(null); + if (list != null) + { + comboBoxShop.DisplayMember = "ShopName"; + comboBoxShop.ValueMember = "Id"; + comboBoxShop.DataSource = list; + comboBoxShop.SelectedItem = null; + } + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка загрузки списка магазинов"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + _logger.LogInformation("Загрузка ремонтов"); + try + { + var list = _logicR.ReadList(null); + if (list != null) + { + comboBoxRepair.DisplayMember = "RepairName"; + comboBoxRepair.ValueMember = "Id"; + comboBoxRepair.DataSource = list; + comboBoxRepair.SelectedItem = null; + } + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка загрузки списка ремонтов"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonSave_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(comboBoxShop.Text)) + { + MessageBox.Show("Выберите магазин", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + if (string.IsNullOrEmpty(comboBoxRepair.Text)) + { + MessageBox.Show("Выберите ремонт", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + if (string.IsNullOrEmpty(textBoxCount.Text)) + { + MessageBox.Show("Заполните поле Количество", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + _logger.LogInformation("Пополнение магазина"); + + try + { + var operationResult = _logicS.AddRepair(new ShopSearchModel + { + Id = Convert.ToInt32(comboBoxShop.SelectedValue) + }, + + _logicR.ReadElement(new RepairSearchModel() + { + Id = Convert.ToInt32(comboBoxRepair.SelectedValue) + })!, + + Convert.ToInt32(textBoxCount.Text)); + + 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(); + } + + } +} diff --git a/CarRepairShop/CarRepairShopView/FormRepairShop.resx b/CarRepairShop/CarRepairShopView/FormRepairShop.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/CarRepairShop/CarRepairShopView/FormRepairShop.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/CarRepairShop/CarRepairShopView/FormSellRepairs.Designer.cs b/CarRepairShop/CarRepairShopView/FormSellRepairs.Designer.cs new file mode 100644 index 0000000..a107545 --- /dev/null +++ b/CarRepairShop/CarRepairShopView/FormSellRepairs.Designer.cs @@ -0,0 +1,119 @@ +namespace CarRepairShopView +{ + partial class FormSellRepairs + { + /// + /// 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() + { + label1 = new Label(); + label2 = new Label(); + comboBoxRepairs = new ComboBox(); + textBoxCount = new TextBox(); + buttonSell = new Button(); + buttonCancel = new Button(); + SuspendLayout(); + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(17, 17); + label1.Name = "label1"; + label1.Size = new Size(51, 15); + label1.TabIndex = 0; + label1.Text = "Ремонт:"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(19, 62); + label2.Name = "label2"; + label2.Size = new Size(49, 15); + label2.TabIndex = 1; + label2.Text = "Кол-во:"; + // + // comboBoxRepairs + // + comboBoxRepairs.FormattingEnabled = true; + comboBoxRepairs.Location = new Point(74, 12); + comboBoxRepairs.Name = "comboBoxRepairs"; + comboBoxRepairs.Size = new Size(149, 23); + comboBoxRepairs.TabIndex = 2; + // + // textBoxCount + // + textBoxCount.Location = new Point(74, 59); + textBoxCount.Name = "textBoxCount"; + textBoxCount.Size = new Size(149, 23); + textBoxCount.TabIndex = 3; + // + // buttonSell + // + buttonSell.Location = new Point(148, 92); + buttonSell.Name = "buttonSell"; + buttonSell.Size = new Size(75, 28); + buttonSell.TabIndex = 4; + buttonSell.Text = "Продать"; + buttonSell.UseVisualStyleBackColor = true; + buttonSell.Click += buttonSell_Click; + // + // buttonCancel + // + buttonCancel.Location = new Point(19, 92); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(75, 28); + buttonCancel.TabIndex = 5; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += buttonCancel_Click; + // + // FormSellRepairs + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(249, 125); + Controls.Add(buttonCancel); + Controls.Add(buttonSell); + Controls.Add(textBoxCount); + Controls.Add(comboBoxRepairs); + Controls.Add(label2); + Controls.Add(label1); + Name = "FormSellRepairs"; + Text = "Продать услуги"; + Load += FormSellRepairs_Load; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Label label1; + private Label label2; + private ComboBox comboBoxRepairs; + private TextBox textBoxCount; + private Button buttonSell; + private Button buttonCancel; + } +} \ No newline at end of file diff --git a/CarRepairShop/CarRepairShopView/FormSellRepairs.cs b/CarRepairShop/CarRepairShopView/FormSellRepairs.cs new file mode 100644 index 0000000..3a48887 --- /dev/null +++ b/CarRepairShop/CarRepairShopView/FormSellRepairs.cs @@ -0,0 +1,95 @@ +using CarRepairShopContracts.BusinessLogicsContracts; +using CarRepairShopContracts.SearchModels; +using CarRepairShopContracts.StoragesContracts; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CarRepairShopView +{ + public partial class FormSellRepairs : Form + { + private readonly IRepairLogic _rlogic; + private readonly IShopLogic _slogic; + private readonly ILogger _logger; + public FormSellRepairs(ILogger logger, IRepairLogic repairLogic, IShopLogic shopLogic) + { + InitializeComponent(); + _rlogic = repairLogic; + _slogic = shopLogic; + _logger = logger; + } + + private void FormSellRepairs_Load(object sender, EventArgs e) + { + try + { + var list = _rlogic.ReadList(null); + if (list != null) + { + comboBoxRepairs.DisplayMember = "RepairName"; + comboBoxRepairs.ValueMember = "Id"; + comboBoxRepairs.DataSource = list; + comboBoxRepairs.SelectedItem = null; + } + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка загрузки списка"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonSell_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(textBoxCount.Text)) + { + MessageBox.Show("Заполните поле Количество", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + if (comboBoxRepairs.SelectedValue == null) + { + MessageBox.Show("Выберите Ремонт", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + _logger.LogInformation("Продажа"); + + try + { + var operationResult = _slogic.SellRepairs(_rlogic.ReadElement(new RepairSearchModel() + { + Id = Convert.ToInt32(comboBoxRepairs.SelectedValue) + })!, Convert.ToInt32(textBoxCount.Text)); + + 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(); + } + } +} diff --git a/CarRepairShop/CarRepairShopView/FormSellRepairs.resx b/CarRepairShop/CarRepairShopView/FormSellRepairs.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/CarRepairShop/CarRepairShopView/FormSellRepairs.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/CarRepairShop/CarRepairShopView/FormShop.Designer.cs b/CarRepairShop/CarRepairShopView/FormShop.Designer.cs new file mode 100644 index 0000000..daec11c --- /dev/null +++ b/CarRepairShop/CarRepairShopView/FormShop.Designer.cs @@ -0,0 +1,225 @@ +namespace CarRepairShopView +{ + partial class FormShop + { + /// + /// 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() + { + textBoxName = new TextBox(); + label1 = new Label(); + label2 = new Label(); + textBoxAddress = new TextBox(); + label3 = new Label(); + dateTimePickerDateOpen = new DateTimePicker(); + groupBox = new GroupBox(); + dataGridView = new DataGridView(); + ColumnId = new DataGridViewTextBoxColumn(); + ColumnName = new DataGridViewTextBoxColumn(); + ColumnCount = new DataGridViewTextBoxColumn(); + buttonSave = new Button(); + buttonCancel = new Button(); + label4 = new Label(); + numericUpDownCount = new NumericUpDown(); + groupBox.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownCount).BeginInit(); + SuspendLayout(); + // + // textBoxName + // + textBoxName.Location = new Point(82, 13); + textBoxName.Name = "textBoxName"; + textBoxName.Size = new Size(100, 23); + textBoxName.TabIndex = 0; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new Point(17, 17); + label1.Name = "label1"; + label1.Size = new Size(62, 15); + label1.TabIndex = 1; + label1.Text = "Название:"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new Point(200, 17); + label2.Name = "label2"; + label2.Size = new Size(43, 15); + label2.TabIndex = 3; + label2.Text = "Адрес:"; + // + // textBoxAddress + // + textBoxAddress.Location = new Point(249, 13); + textBoxAddress.Name = "textBoxAddress"; + textBoxAddress.Size = new Size(100, 23); + textBoxAddress.TabIndex = 2; + // + // label3 + // + label3.AutoSize = true; + label3.Location = new Point(368, 18); + label3.Name = "label3"; + label3.Size = new Size(90, 15); + label3.TabIndex = 5; + label3.Text = "Дата открытия:"; + // + // dateTimePickerDateOpen + // + dateTimePickerDateOpen.Location = new Point(464, 13); + dateTimePickerDateOpen.Name = "dateTimePickerDateOpen"; + dateTimePickerDateOpen.Size = new Size(142, 23); + dateTimePickerDateOpen.TabIndex = 6; + // + // groupBox + // + groupBox.Controls.Add(dataGridView); + groupBox.Location = new Point(12, 94); + groupBox.Name = "groupBox"; + groupBox.Size = new Size(611, 274); + groupBox.TabIndex = 8; + groupBox.TabStop = false; + groupBox.Text = "Ремонты"; + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + dataGridView.BackgroundColor = Color.White; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Columns.AddRange(new DataGridViewColumn[] { ColumnId, ColumnName, ColumnCount }); + dataGridView.Location = new Point(5, 22); + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.RowTemplate.Height = 25; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.Size = new Size(600, 246); + dataGridView.TabIndex = 1; + // + // ColumnId + // + ColumnId.HeaderText = "Id"; + ColumnId.Name = "ColumnId"; + ColumnId.ReadOnly = true; + ColumnId.Visible = false; + // + // ColumnName + // + ColumnName.HeaderText = "Компонент"; + ColumnName.Name = "ColumnName"; + ColumnName.ReadOnly = true; + // + // ColumnCount + // + ColumnCount.FillWeight = 50F; + ColumnCount.HeaderText = "Количество"; + ColumnCount.Name = "ColumnCount"; + ColumnCount.ReadOnly = true; + // + // buttonSave + // + buttonSave.Location = new Point(530, 374); + buttonSave.Name = "buttonSave"; + buttonSave.Size = new Size(93, 32); + buttonSave.TabIndex = 9; + buttonSave.Text = "Сохранить"; + buttonSave.UseVisualStyleBackColor = true; + buttonSave.Click += buttonSave_Click; + // + // buttonCancel + // + buttonCancel.Location = new Point(431, 374); + buttonCancel.Name = "buttonCancel"; + buttonCancel.Size = new Size(93, 32); + buttonCancel.TabIndex = 10; + buttonCancel.Text = "Отмена"; + buttonCancel.UseVisualStyleBackColor = true; + buttonCancel.Click += buttonCancel_Click; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new Point(17, 55); + label4.Name = "label4"; + label4.Size = new Size(83, 15); + label4.TabIndex = 11; + label4.Text = "Вместимость:"; + // + // numericUpDownCount + // + numericUpDownCount.Location = new Point(106, 51); + numericUpDownCount.Name = "numericUpDownCount"; + numericUpDownCount.Size = new Size(120, 23); + numericUpDownCount.TabIndex = 13; + // + // FormShop + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(635, 418); + Controls.Add(numericUpDownCount); + Controls.Add(label4); + Controls.Add(buttonCancel); + Controls.Add(buttonSave); + Controls.Add(groupBox); + Controls.Add(dateTimePickerDateOpen); + Controls.Add(label3); + Controls.Add(label2); + Controls.Add(textBoxAddress); + Controls.Add(label1); + Controls.Add(textBoxName); + Name = "FormShop"; + Text = "Создание магазина"; + Load += FormShop_Load; + groupBox.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ((System.ComponentModel.ISupportInitialize)numericUpDownCount).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private TextBox textBoxName; + private Label label1; + private Label label2; + private TextBox textBoxAddress; + private Label label3; + private DateTimePicker dateTimePickerDateOpen; + private GroupBox groupBox; + private Button buttonSave; + private Button buttonCancel; + private DataGridView dataGridView; + private DataGridViewTextBoxColumn ColumnId; + private DataGridViewTextBoxColumn ColumnName; + private DataGridViewTextBoxColumn ColumnCount; + private Label label4; + private NumericUpDown numericUpDownCount; + } +} \ No newline at end of file diff --git a/CarRepairShop/CarRepairShopView/FormShop.cs b/CarRepairShop/CarRepairShopView/FormShop.cs new file mode 100644 index 0000000..e83716e --- /dev/null +++ b/CarRepairShop/CarRepairShopView/FormShop.cs @@ -0,0 +1,129 @@ +using CarRepairShopContracts.BindingModels; +using CarRepairShopContracts.BusinessLogicsContracts; +using CarRepairShopContracts.SearchModels; +using CarRepairShopDataModels.Models; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CarRepairShopView +{ + public partial class FormShop : Form + { + + private readonly ILogger _logger; + private readonly IShopLogic _logic; + private int? _id; + private Dictionary _shopRepairs; + public int Id { set { _id = value; } } + + public FormShop(ILogger logger, IShopLogic logic) + { + InitializeComponent(); + _logger = logger; + _logic = logic; + _shopRepairs = new Dictionary(); + } + + private void FormShop_Load(object sender, EventArgs e) + { + if (_id.HasValue) + { + _logger.LogInformation("Загрузка магазина"); + try + { + var view = _logic.ReadElement(new ShopSearchModel { Id = _id.Value }); + if (view != null) + { + textBoxName.Text = view.ShopName; + textBoxAddress.Text = view.ShopAddress; + dateTimePickerDateOpen.Value = view.DateOpen; + numericUpDownCount.Value = view.MaxCountRepairs; + _shopRepairs = view.ShopRepairs ?? new Dictionary(); + LoadData(); + } + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка загрузки магазина"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + private void LoadData() + { + _logger.LogInformation("Загрузка ремонтов магазина"); + try + { + if (_shopRepairs != null) + { + dataGridView.Rows.Clear(); + foreach (var sr in _shopRepairs) + { + dataGridView.Rows.Add(new object[] { sr.Key, sr.Value.Item1.RepairName, sr.Value.Item2 }); + } + } + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка загрузки ремонтов магазина"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.Cancel; + Close(); + } + + private void buttonSave_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(textBoxName.Text)) + { + MessageBox.Show("Заполните название", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + if (string.IsNullOrEmpty(textBoxAddress.Text)) + { + MessageBox.Show("Заполните адрес", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + _logger.LogInformation("Сохранение магазина"); + try + { + var model = new ShopBindingModel + { + Id = _id ?? 0, + ShopName = textBoxName.Text, + ShopAddress = textBoxAddress.Text, + DateOpen = dateTimePickerDateOpen.Value.Date, + MaxCountRepairs = (int)numericUpDownCount.Value, + ShopRepairs = _shopRepairs + }; + var operationResult = _id.HasValue ? _logic.Update(model) : _logic.Create(model); + if (!operationResult) + { + throw new Exception("Ошибка при сохранении. Доп информация в логах"); + } + MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); + DialogResult = DialogResult.OK; + Close(); + } + catch(Exception ex) + { + _logger.LogError(ex, "Ошибка сохранения магазина"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } +} diff --git a/CarRepairShop/CarRepairShopView/FormShop.resx b/CarRepairShop/CarRepairShopView/FormShop.resx new file mode 100644 index 0000000..fcacbcb --- /dev/null +++ b/CarRepairShop/CarRepairShopView/FormShop.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + True + + + True + + + True + + \ No newline at end of file diff --git a/CarRepairShop/CarRepairShopView/FormShops.Designer.cs b/CarRepairShop/CarRepairShopView/FormShops.Designer.cs new file mode 100644 index 0000000..de83585 --- /dev/null +++ b/CarRepairShop/CarRepairShopView/FormShops.Designer.cs @@ -0,0 +1,124 @@ +namespace CarRepairShopView +{ + partial class FormShops + { + /// + /// 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() + { + dataGridView = new DataGridView(); + buttonAddShop = new Button(); + buttonUpdShop = new Button(); + buttonDelShop = new Button(); + buttonRefShop = new Button(); + ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); + SuspendLayout(); + // + // dataGridView + // + dataGridView.AllowUserToAddRows = false; + dataGridView.AllowUserToDeleteRows = false; + dataGridView.BackgroundColor = Color.White; + dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; + dataGridView.Dock = DockStyle.Left; + dataGridView.Location = new Point(0, 0); + dataGridView.Name = "dataGridView"; + dataGridView.ReadOnly = true; + dataGridView.RowHeadersVisible = false; + dataGridView.RowTemplate.Height = 25; + dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + dataGridView.ShowCellErrors = false; + dataGridView.ShowCellToolTips = false; + dataGridView.ShowEditingIcon = false; + dataGridView.ShowRowErrors = false; + dataGridView.Size = new Size(611, 450); + dataGridView.TabIndex = 0; + // + // buttonAddShop + // + buttonAddShop.Location = new Point(638, 12); + buttonAddShop.Name = "buttonAddShop"; + buttonAddShop.Size = new Size(133, 45); + buttonAddShop.TabIndex = 1; + buttonAddShop.Text = "Добавить"; + buttonAddShop.UseVisualStyleBackColor = true; + buttonAddShop.Click += buttonAddShop_Click; + // + // buttonUpdShop + // + buttonUpdShop.Location = new Point(638, 73); + buttonUpdShop.Name = "buttonUpdShop"; + buttonUpdShop.Size = new Size(133, 45); + buttonUpdShop.TabIndex = 2; + buttonUpdShop.Text = "Редактировать"; + buttonUpdShop.UseVisualStyleBackColor = true; + buttonUpdShop.Click += buttonUpdShop_Click; + // + // buttonDelShop + // + buttonDelShop.Location = new Point(638, 137); + buttonDelShop.Name = "buttonDelShop"; + buttonDelShop.Size = new Size(133, 45); + buttonDelShop.TabIndex = 3; + buttonDelShop.Text = "Удалить"; + buttonDelShop.UseVisualStyleBackColor = true; + buttonDelShop.Click += buttonDelShop_Click; + // + // buttonRefShop + // + buttonRefShop.Location = new Point(638, 204); + buttonRefShop.Name = "buttonRefShop"; + buttonRefShop.Size = new Size(133, 45); + buttonRefShop.TabIndex = 4; + buttonRefShop.Text = "Обновить"; + buttonRefShop.UseVisualStyleBackColor = true; + buttonRefShop.Click += buttonRefShop_Click; + // + // FormShops + // + AutoScaleDimensions = new SizeF(7F, 15F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(800, 450); + Controls.Add(buttonRefShop); + Controls.Add(buttonDelShop); + Controls.Add(buttonUpdShop); + Controls.Add(buttonAddShop); + Controls.Add(dataGridView); + Name = "FormShops"; + Text = "Магазины"; + Load += FormShops_Load; + ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit(); + ResumeLayout(false); + } + + #endregion + + private DataGridView dataGridView; + private Button buttonAddShop; + private Button buttonUpdShop; + private Button buttonDelShop; + private Button buttonRefShop; + } +} \ No newline at end of file diff --git a/CarRepairShop/CarRepairShopView/FormShops.cs b/CarRepairShop/CarRepairShopView/FormShops.cs new file mode 100644 index 0000000..5db0459 --- /dev/null +++ b/CarRepairShop/CarRepairShopView/FormShops.cs @@ -0,0 +1,114 @@ +using CarRepairShopContracts.BindingModels; +using CarRepairShopContracts.BusinessLogicsContracts; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CarRepairShopView +{ + public partial class FormShops : Form + { + + private readonly ILogger _logger; + private readonly IShopLogic _logic; + + public FormShops(ILogger logger, IShopLogic logic) + { + InitializeComponent(); + _logic = logic; + _logger = logger; + } + + private void LoadData() + { + try + { + var list = _logic.ReadList(null); + if (list != null) + { + dataGridView.DataSource = list; + dataGridView.Columns["Id"].Visible = false; + dataGridView.Columns["ShopRepairs"].Visible = false; + dataGridView.Columns["ShopName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + } + _logger.LogInformation("Загрузка магазинов"); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка загрузки магазинов"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void buttonAddShop_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormShop)); + if (service is FormShop form) + { + if (form.ShowDialog() == DialogResult.OK) + { + LoadData(); + } + } + } + + private void FormShops_Load(object sender, EventArgs e) + { + LoadData(); + } + + private void buttonUpdShop_Click(object sender, EventArgs e) + { + if (dataGridView.SelectedRows.Count == 1) + { + var service = Program.ServiceProvider?.GetService(typeof(FormShop)); + if (service is FormShop form) + { + form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + if (form.ShowDialog() == DialogResult.OK) + { + LoadData(); + } + } + } + } + + private void buttonDelShop_Click(object sender, EventArgs e) + { + if (dataGridView.SelectedRows.Count == 1) + { + if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) + { + int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + _logger.LogInformation("Удаление магазина"); + try + { + if (!_logic.Delete(new ShopBindingModel { Id = id })) + { + throw new Exception("Ошибка при удалении. Доп информация в логах."); + } + LoadData(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка удаления ремонта"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + } + + private void buttonRefShop_Click(object sender, EventArgs e) + { + LoadData(); + } + } +} diff --git a/CarRepairShop/CarRepairShopView/FormShops.resx b/CarRepairShop/CarRepairShopView/FormShops.resx new file mode 100644 index 0000000..af32865 --- /dev/null +++ b/CarRepairShop/CarRepairShopView/FormShops.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/CarRepairShop/CarRepairShopView/Program.cs b/CarRepairShop/CarRepairShopView/Program.cs index 6d07e27..df705ad 100644 --- a/CarRepairShop/CarRepairShopView/Program.cs +++ b/CarRepairShop/CarRepairShopView/Program.cs @@ -40,9 +40,11 @@ namespace CarRepairShopView services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); @@ -50,6 +52,10 @@ namespace CarRepairShopView services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); } } } \ No newline at end of file