From 581ec0d7db96e2a82ecb038e80f7b6ba2f0e14d7 Mon Sep 17 00:00:00 2001 From: Ino Date: Tue, 28 Mar 2023 16:53:40 +0400 Subject: [PATCH 01/17] =?UTF-8?q?=D0=BD=D0=B0=D1=87=D0=B0=D0=BB=D0=BE=206?= =?UTF-8?q?=20=D0=B1=D0=B0=D0=B7=D0=BE=D0=B2=D0=BE=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessLogics/ImplementerLogic.cs | 123 ++++++++++++++++++ IceCreamShop/IceCreamShop/Program.cs | 2 + .../BindingModels/ImplementerBindingModel.cs | 17 +++ .../BindingModels/OrderBindingModel.cs | 1 + .../IImplementerLogic.cs | 19 +++ .../BusinessLogicsContracts/IOrderLogic.cs | 1 + .../SearchModels/ImplementerSearchModel.cs | 11 ++ .../SearchModels/OrderSearchModel.cs | 5 +- .../StoragesContracts/IImplementerStorage.cs | 21 +++ .../ViewModels/ImplementerViewModel.cs | 22 ++++ .../ViewModels/OrderViewModel.cs | 4 + .../Models/IImplementerModel.cs | 13 ++ .../Models/IOrderModel.cs | 1 + .../IceCreamShopDatabase.cs | 3 + .../Implements/ImplementerStorage.cs | 90 +++++++++++++ .../Implements/OrderStorage.cs | 54 +++++--- .../Models/Implementer.cs | 60 +++++++++ .../Models/Order.cs | 7 +- .../DataFileSingleton.cs | 4 + .../Implements/ImplementerStorage.cs | 91 +++++++++++++ .../Implements/OrderStorage.cs | 85 ++++++------ .../Models/Implementer.cs | 80 ++++++++++++ .../IceCreamShopFileImplement/Models/Order.cs | 8 ++ .../DataListSingleton.cs | 10 +- .../Implements/ImplementerStorage.cs | 114 ++++++++++++++++ .../Implements/OrderStorage.cs | 62 ++++++--- .../Models/Implementer.cs | 55 ++++++++ .../IceCreamShopListImplement/Models/Order.cs | 5 + .../Controllers/ImplementerController.cs | 106 +++++++++++++++ IceCreamShop/IceCreamShopRestApi/Program.cs | 2 + 30 files changed, 985 insertions(+), 91 deletions(-) create mode 100644 IceCreamShop/IceCreamBusinessLogic/BusinessLogics/ImplementerLogic.cs create mode 100644 IceCreamShop/IceCreamShopContracts/BindingModels/ImplementerBindingModel.cs create mode 100644 IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IImplementerLogic.cs create mode 100644 IceCreamShop/IceCreamShopContracts/SearchModels/ImplementerSearchModel.cs create mode 100644 IceCreamShop/IceCreamShopContracts/StoragesContracts/IImplementerStorage.cs create mode 100644 IceCreamShop/IceCreamShopContracts/ViewModels/ImplementerViewModel.cs create mode 100644 IceCreamShop/IceCreamShopDataModels/Models/IImplementerModel.cs create mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Implements/ImplementerStorage.cs create mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Models/Implementer.cs create mode 100644 IceCreamShop/IceCreamShopFileImplement/Implements/ImplementerStorage.cs create mode 100644 IceCreamShop/IceCreamShopFileImplement/Models/Implementer.cs create mode 100644 IceCreamShop/IceCreamShopListImplement/Implements/ImplementerStorage.cs create mode 100644 IceCreamShop/IceCreamShopListImplement/Models/Implementer.cs create mode 100644 IceCreamShop/IceCreamShopRestApi/Controllers/ImplementerController.cs diff --git a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/ImplementerLogic.cs b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/ImplementerLogic.cs new file mode 100644 index 0000000..508d5b4 --- /dev/null +++ b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/ImplementerLogic.cs @@ -0,0 +1,123 @@ +using IceCreamShopContracts.BindingModels; +using IceCreamShopContracts.BusinessLogicsContracts; +using IceCreamShopContracts.SearchModels; +using IceCreamShopContracts.StoragesContracts; +using IceCreamShopContracts.ViewModels; +using Microsoft.Extensions.Logging; + +namespace IceCreamBusinessLogic.BusinessLogics +{ + public class ImplementerLogic : IImplementerLogic + { + private readonly ILogger _logger; + private readonly IImplementerStorage _implementerStorage; + public ImplementerLogic(ILogger logger, IImplementerStorage implementerStorage) + { + _logger = logger; + _implementerStorage = implementerStorage; + } + + public bool Create(ImplementerBindingModel model) + { + CheckModel(model); + if (_implementerStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + + public bool Delete(ImplementerBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_implementerStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + + public ImplementerViewModel? ReadElement(ImplementerSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. FIO:{FIO}.Id:{ Id}", + model.ImplementerFIO, model.Id); + var element = _implementerStorage.GetElement(model); + if (element == null) + { + _logger.LogWarning("ReadElement element not found"); + return null; + } + _logger.LogInformation("ReadElement find. Id:{Id}", element.Id); + return element; + } + + public List? ReadList(ImplementerSearchModel? model) + { + _logger.LogInformation("ReadList. FIO:{FIO}.Id:{ Id} ", model?.ImplementerFIO, model?.Id); + var list = (model == null) ? _implementerStorage.GetFullList() : + _implementerStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count:{Count}", list.Count); + return list; + } + + public bool Update(ImplementerBindingModel model) + { + CheckModel(model); + if (_implementerStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + + private void CheckModel(ImplementerBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (model.WorkExperience < 0) + { + throw new ArgumentException("Опыт работы не должен быть отрицательным", nameof(model.WorkExperience)); + } + if (model.Qualification < 0) + { + throw new ArgumentException("Квалификация не должна быть отрицательной", nameof(model.Qualification)); + } + if (string.IsNullOrEmpty(model.Password)) + { + throw new ArgumentNullException("Нет пароля исполнителя", nameof(model.ImplementerFIO)); + } + if (string.IsNullOrEmpty(model.ImplementerFIO)) + { + throw new ArgumentNullException("Нет фио исполнителя", nameof(model.ImplementerFIO)); + } + _logger.LogInformation("Implementer. Id: {Id}, FIO: {FIO}", model.Id, model.ImplementerFIO); + var element = _implementerStorage.GetElement(new ImplementerSearchModel + { + ImplementerFIO = model.ImplementerFIO, + }); + if (element != null && element.Id != model.Id) + { + throw new InvalidOperationException("Исполнитель с таким фио уже есть"); + } + } + } +} \ No newline at end of file diff --git a/IceCreamShop/IceCreamShop/Program.cs b/IceCreamShop/IceCreamShop/Program.cs index 8538410..a6b4ea8 100644 --- a/IceCreamShop/IceCreamShop/Program.cs +++ b/IceCreamShop/IceCreamShop/Program.cs @@ -40,10 +40,12 @@ namespace IceCreamShop }); services.AddTransient(); services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); diff --git a/IceCreamShop/IceCreamShopContracts/BindingModels/ImplementerBindingModel.cs b/IceCreamShop/IceCreamShopContracts/BindingModels/ImplementerBindingModel.cs new file mode 100644 index 0000000..648b327 --- /dev/null +++ b/IceCreamShop/IceCreamShopContracts/BindingModels/ImplementerBindingModel.cs @@ -0,0 +1,17 @@ +using AbstractIceCreamShopDataModels.Models; + +namespace IceCreamShopContracts.BindingModels +{ + public class ImplementerBindingModel : IImplementerModel + { + public int Id { get; set; } + + public string ImplementerFIO { get; set; } = string.Empty; + + public string Password { get; set; } = string.Empty; + + public int WorkExperience { get; set; } + + public int Qualification { get; set; } + } +} \ No newline at end of file diff --git a/IceCreamShop/IceCreamShopContracts/BindingModels/OrderBindingModel.cs b/IceCreamShop/IceCreamShopContracts/BindingModels/OrderBindingModel.cs index 35501ca..ed37073 100644 --- a/IceCreamShop/IceCreamShopContracts/BindingModels/OrderBindingModel.cs +++ b/IceCreamShop/IceCreamShopContracts/BindingModels/OrderBindingModel.cs @@ -13,6 +13,7 @@ namespace IceCreamShopContracts.BindingModels public int Id { get; set; } public int IceCreamId { get; set; } public int ClientId { get; set; } + public int? ImplementerId { get; set; } public int Count { get; set; } public double Sum { get; set; } public OrderStatus Status { get; set; } = OrderStatus.Неизвестен; diff --git a/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IImplementerLogic.cs b/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IImplementerLogic.cs new file mode 100644 index 0000000..0ecc633 --- /dev/null +++ b/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IImplementerLogic.cs @@ -0,0 +1,19 @@ +using IceCreamShopContracts.BindingModels; +using IceCreamShopContracts.SearchModels; +using IceCreamShopContracts.ViewModels; + +namespace IceCreamShopContracts.BusinessLogicsContracts +{ + public interface IImplementerLogic + { + List? ReadList(ImplementerSearchModel? model); + + ImplementerViewModel? ReadElement(ImplementerSearchModel model); + + bool Create(ImplementerBindingModel model); + + bool Update(ImplementerBindingModel model); + + bool Delete(ImplementerBindingModel model); + } +} \ No newline at end of file diff --git a/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IOrderLogic.cs b/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IOrderLogic.cs index 252130a..a523ba7 100644 --- a/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IOrderLogic.cs +++ b/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IOrderLogic.cs @@ -12,6 +12,7 @@ namespace IceCreamShopContracts.BusinessLogicsContracts public interface IOrderLogic { List? ReadList(OrderSearchModel? model); + OrderViewModel? ReadElement(OrderSearchModel model); bool CreateOrder(OrderBindingModel model); bool TakeOrderInWork(OrderBindingModel model); bool FinishOrder(OrderBindingModel model); diff --git a/IceCreamShop/IceCreamShopContracts/SearchModels/ImplementerSearchModel.cs b/IceCreamShop/IceCreamShopContracts/SearchModels/ImplementerSearchModel.cs new file mode 100644 index 0000000..cd8e924 --- /dev/null +++ b/IceCreamShop/IceCreamShopContracts/SearchModels/ImplementerSearchModel.cs @@ -0,0 +1,11 @@ +namespace IceCreamShopContracts.SearchModels +{ + public class ImplementerSearchModel + { + public int? Id { get; set; } + + public string? ImplementerFIO { get; set; } + + public string? Password { get; set; } + } +} \ No newline at end of file diff --git a/IceCreamShop/IceCreamShopContracts/SearchModels/OrderSearchModel.cs b/IceCreamShop/IceCreamShopContracts/SearchModels/OrderSearchModel.cs index 674dd15..e382769 100644 --- a/IceCreamShop/IceCreamShopContracts/SearchModels/OrderSearchModel.cs +++ b/IceCreamShop/IceCreamShopContracts/SearchModels/OrderSearchModel.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using AbstractIceCreamShopDataModels.Enums; namespace IceCreamShopContracts.SearchModels { @@ -10,9 +11,9 @@ namespace IceCreamShopContracts.SearchModels { public int? Id { get; set; } public int? ClientId { get; set; } - + public int? ImplementerId { get; set; } public DateTime? DateFrom { get; set; } - public DateTime? DateTo { get; set; } + public List? Statusses { get; set; } } } diff --git a/IceCreamShop/IceCreamShopContracts/StoragesContracts/IImplementerStorage.cs b/IceCreamShop/IceCreamShopContracts/StoragesContracts/IImplementerStorage.cs new file mode 100644 index 0000000..afa1594 --- /dev/null +++ b/IceCreamShop/IceCreamShopContracts/StoragesContracts/IImplementerStorage.cs @@ -0,0 +1,21 @@ +using IceCreamShopContracts.BindingModels; +using IceCreamShopContracts.SearchModels; +using IceCreamShopContracts.ViewModels; + +namespace IceCreamShopContracts.StoragesContracts +{ + public interface IImplementerStorage + { + List GetFullList(); + + List GetFilteredList(ImplementerSearchModel model); + + ImplementerViewModel? GetElement(ImplementerSearchModel model); + + ImplementerViewModel? Insert(ImplementerBindingModel model); + + ImplementerViewModel? Update(ImplementerBindingModel model); + + ImplementerViewModel? Delete(ImplementerBindingModel model); + } +} \ No newline at end of file diff --git a/IceCreamShop/IceCreamShopContracts/ViewModels/ImplementerViewModel.cs b/IceCreamShop/IceCreamShopContracts/ViewModels/ImplementerViewModel.cs new file mode 100644 index 0000000..8c1147b --- /dev/null +++ b/IceCreamShop/IceCreamShopContracts/ViewModels/ImplementerViewModel.cs @@ -0,0 +1,22 @@ +using AbstractIceCreamShopDataModels.Models; +using System.ComponentModel; + +namespace IceCreamShopContracts.ViewModels +{ + public class ImplementerViewModel : IImplementerModel + { + public int Id { get; set; } + + [DisplayName("ФИО исполнителя")] + public string ImplementerFIO { get; set; } = string.Empty; + + [DisplayName("Пароль")] + public string Password { get; set; } = string.Empty; + + [DisplayName("Стаж работы")] + public int WorkExperience { get; set; } + + [DisplayName("Квалификация")] + public int Qualification { get; set; } + } +} \ No newline at end of file diff --git a/IceCreamShop/IceCreamShopContracts/ViewModels/OrderViewModel.cs b/IceCreamShop/IceCreamShopContracts/ViewModels/OrderViewModel.cs index 9c17a08..b5d9404 100644 --- a/IceCreamShop/IceCreamShopContracts/ViewModels/OrderViewModel.cs +++ b/IceCreamShop/IceCreamShopContracts/ViewModels/OrderViewModel.cs @@ -24,6 +24,10 @@ namespace IceCreamShopContracts.ViewModels [DisplayName("ФИО клиента")] public string ClientFIO { get; set; } = string.Empty; + public int? ImplementerId { get; set; } + [DisplayName("Фамилия исполнителя")] + public string ImplementerFIO { get; set; } = string.Empty; + [DisplayName("Количество")] public int Count { get; set; } diff --git a/IceCreamShop/IceCreamShopDataModels/Models/IImplementerModel.cs b/IceCreamShop/IceCreamShopDataModels/Models/IImplementerModel.cs new file mode 100644 index 0000000..cf8e541 --- /dev/null +++ b/IceCreamShop/IceCreamShopDataModels/Models/IImplementerModel.cs @@ -0,0 +1,13 @@ +namespace AbstractIceCreamShopDataModels.Models +{ + public interface IImplementerModel : IId + { + string ImplementerFIO { get; } + + string Password { get; } + + int WorkExperience { get; } + + int Qualification { get; } + } +} \ No newline at end of file diff --git a/IceCreamShop/IceCreamShopDataModels/Models/IOrderModel.cs b/IceCreamShop/IceCreamShopDataModels/Models/IOrderModel.cs index 0e623f2..e6eb7fb 100644 --- a/IceCreamShop/IceCreamShopDataModels/Models/IOrderModel.cs +++ b/IceCreamShop/IceCreamShopDataModels/Models/IOrderModel.cs @@ -12,6 +12,7 @@ namespace AbstractIceCreamShopDataModels.Models int IceCreamId { get; } int ClientId { get; } int Count { get; } + int? ImplementerId { get; } double Sum { get; } OrderStatus Status { get; } DateTime DateCreate { get; } diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/IceCreamShopDatabase.cs b/IceCreamShop/IceCreamShopDatabaseImplement/IceCreamShopDatabase.cs index cb4b0e9..152e4dd 100644 --- a/IceCreamShop/IceCreamShopDatabaseImplement/IceCreamShopDatabase.cs +++ b/IceCreamShop/IceCreamShopDatabaseImplement/IceCreamShopDatabase.cs @@ -21,6 +21,9 @@ namespace IceCreamShopDatabaseImplement public virtual DbSet IceCreamComponents { set; get; } public virtual DbSet Orders { set; get; } + public virtual DbSet Clients { set; get; } + + public virtual DbSet Implementers { set; get; } } } diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Implements/ImplementerStorage.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Implements/ImplementerStorage.cs new file mode 100644 index 0000000..730260f --- /dev/null +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Implements/ImplementerStorage.cs @@ -0,0 +1,90 @@ +using IceCreamShopContracts.BindingModels; +using IceCreamShopContracts.SearchModels; +using IceCreamShopContracts.StoragesContracts; +using IceCreamShopContracts.ViewModels; +using IceCreamShopDatabaseImplement.Models; + +namespace IceCreamShopDatabaseImplement.Implements +{ + public class ImplementerStorage : IImplementerStorage + { + public ImplementerViewModel? Delete(ImplementerBindingModel model) + { + using var context = new IceCreamShopDatabase(); + var res = context.Implementers.FirstOrDefault(x => x.Id == model.Id); + if (res != null) + { + context.Implementers.Remove(res); + context.SaveChanges(); + } + return res?.GetViewModel; + } + + public ImplementerViewModel? GetElement(ImplementerSearchModel model) + { + using var context = new IceCreamShopDatabase(); + if (model.Id.HasValue) + return context.Implementers.FirstOrDefault(x => x.Id == model.Id)?.GetViewModel; + if (model.ImplementerFIO != null && model.Password != null) + return context.Implementers + .FirstOrDefault(x => x.ImplementerFIO.Equals(model.ImplementerFIO) + && x.Password.Equals(model.Password)) + ?.GetViewModel; + if (model.ImplementerFIO != null) + return context.Implementers.FirstOrDefault(x => x.ImplementerFIO.Equals(model.ImplementerFIO))?.GetViewModel; + return null; + } + + public List GetFilteredList(ImplementerSearchModel model) + { + if (model == null) + { + return new(); + } + if (model.Id.HasValue) + { + var res = GetElement(model); + return res != null ? new() { res } : new(); + } + if (model.ImplementerFIO != null) // На случай если фио не будет уникальным (по заданию оно уникально) + { + using var context = new IceCreamShopDatabase(); + return context.Implementers + .Where(x => x.ImplementerFIO.Equals(model.ImplementerFIO)) + .Select(x => x.GetViewModel) + .ToList(); + } + return new(); + } + + public List GetFullList() + { + using var context = new IceCreamShopDatabase(); + return context.Implementers.Select(x => x.GetViewModel).ToList(); + } + + public ImplementerViewModel? Insert(ImplementerBindingModel model) + { + using var context = new IceCreamShopDatabase(); + var res = Implementer.Create(model); + if (res != null) + { + context.Implementers.Add(res); + context.SaveChanges(); + } + return res?.GetViewModel; + } + + public ImplementerViewModel? Update(ImplementerBindingModel model) + { + using var context = new IceCreamShopDatabase(); + var res = context.Implementers.FirstOrDefault(x => x.Id == model.Id); + if (res != null) + { + res.Update(model); + context.SaveChanges(); + } + return res?.GetViewModel; + } + } +} \ No newline at end of file diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Implements/OrderStorage.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Implements/OrderStorage.cs index 60676fd..10ad604 100644 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Implements/OrderStorage.cs +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Implements/OrderStorage.cs @@ -12,9 +12,10 @@ namespace IceCreamShopDatabaseImplement.Implements public OrderViewModel? Delete(OrderBindingModel model) { using var context = new IceCreamShopDatabase(); - - var element = context.Orders.Include(x => x.Client).FirstOrDefault(x => x.Id == model.Id); - + var element = context.Orders + .Include(x => x.Client) + .Include(x => x.Implementer) + .FirstOrDefault(x => x.Id == model.Id); if (element != null) { context.Orders.Remove(element); @@ -28,16 +29,16 @@ namespace IceCreamShopDatabaseImplement.Implements public OrderViewModel? GetElement(OrderSearchModel model) { - if (!model.Id.HasValue) - { - return null; - } - using var context = new IceCreamShopDatabase(); return context.Orders - .Include(x => x.Client) - .FirstOrDefault(x => model.Id.HasValue && x.Id == model.Id) - ?.GetViewModel; + .Include(x => x.Client) + .Include(x => x.Implementer) + .FirstOrDefault(x => + (model.Statusses == null || model.Statusses != null && model.Statusses.Contains(x.Status)) && + model.ImplementerId.HasValue && x.ImplementerId == model.ImplementerId || + model.Id.HasValue && x.Id == model.Id + ) + ?.GetViewModel; } public List GetFilteredList(OrderSearchModel model) @@ -47,24 +48,33 @@ namespace IceCreamShopDatabaseImplement.Implements var result = GetElement(model); return result != null ? new() { result } : new(); } + using var context = new IceCreamShopDatabase(); + IQueryable? queryWhere = null; + if (model.DateFrom.HasValue && model.DateTo.HasValue) { - return context.Orders - .Where(x => model.DateFrom <= x.DateCreate.Date && x.DateCreate <= model.DateTo) - .Include(x => x.Client) - .Select(x => x.GetViewModel) - .ToList(); + queryWhere = context.Orders + .Where(x => model.DateFrom <= x.DateCreate.Date && + x.DateCreate.Date <= model.DateTo); } - if (model.ClientId.HasValue) + else if (model.Statusses != null) { - return context.Orders - .Where(x => x.Client.Id == model.ClientId) + queryWhere = context.Orders.Where(x => model.Statusses.Contains(x.Status)); + } + else if (model.ClientId.HasValue) + { + queryWhere = context.Orders.Where(x => x.ClientId == model.ClientId); + } + else + { + return new(); + } + return queryWhere .Include(x => x.Client) + .Include(x => x.Implementer) .Select(x => x.GetViewModel) .ToList(); - } - return new(); } public List GetFullList() @@ -72,6 +82,7 @@ namespace IceCreamShopDatabaseImplement.Implements using var context = new IceCreamShopDatabase(); return context.Orders .Include(x => x.Client) + .Include(x => x.Implementer) .Select(x => x.GetViewModel) .ToList(); } @@ -99,6 +110,7 @@ namespace IceCreamShopDatabaseImplement.Implements var order = context.Orders .Include(x => x.Client) + .Include(x => x.Implementer) .FirstOrDefault(x => x.Id == model.Id); if (order == null) diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Models/Implementer.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Models/Implementer.cs new file mode 100644 index 0000000..9881eb4 --- /dev/null +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Models/Implementer.cs @@ -0,0 +1,60 @@ +using AbstractIceCreamShopDataModels.Models; +using IceCreamShopContracts.BindingModels; +using IceCreamShopContracts.ViewModels; +using System.ComponentModel.DataAnnotations.Schema; + +namespace IceCreamShopDatabaseImplement.Models +{ + public class Implementer : IImplementerModel + { + public int Id { get; private set; } + + public string ImplementerFIO { get; private set; } = string.Empty; + + public string Password { get; private set; } = string.Empty; + + public int WorkExperience { get; private set; } + + public int Qualification { get; private set; } + + [ForeignKey("ImplementerId")] + public virtual List Orders { get; private set; } = new(); + + public static Implementer? Create(ImplementerBindingModel model) + { + if (model == null) + { + return null; + } + return new() + { + Id = model.Id, + Password = model.Password, + Qualification = model.Qualification, + ImplementerFIO = model.ImplementerFIO, + WorkExperience = model.WorkExperience, + }; + } + + public void Update(ImplementerBindingModel model) + { + if (model == null) + { + return; + } + Password = model.Password; + Qualification = model.Qualification; + ImplementerFIO = model.ImplementerFIO; + WorkExperience = model.WorkExperience; + } + + public ImplementerViewModel GetViewModel => new() + { + Id = Id, + Password = Password, + Qualification = Qualification, + ImplementerFIO = ImplementerFIO, + WorkExperience = WorkExperience, + }; + } +} diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Models/Order.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Models/Order.cs index 763453e..c28a550 100644 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Models/Order.cs +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Models/Order.cs @@ -13,6 +13,7 @@ namespace IceCreamShopDatabaseImplement.Models public int IceCreamId { get; set; } [Required] public int ClientId { get; private set; } + public int? ImplementerId { get; private set; } [Required] public int Count { get; set; } [Required] @@ -27,6 +28,7 @@ namespace IceCreamShopDatabaseImplement.Models public int Id { get; set; } public virtual IceCream IceCream{ get; set; } public virtual Client Client { get; set; } + public Implementer? Implementer { get; private set; } public static Order? Create(OrderBindingModel? model) { if (model == null) @@ -37,6 +39,7 @@ namespace IceCreamShopDatabaseImplement.Models { IceCreamId = model.IceCreamId, ClientId = model.ClientId, + ImplementerId = model.ImplementerId, Count = model.Count, Sum = model.Sum, Status = model.Status, @@ -66,13 +69,15 @@ namespace IceCreamShopDatabaseImplement.Models IceCreamId = IceCreamId, ClientId = ClientId, Count = Count, + ImplementerId = ImplementerId, Sum = Sum, Status = Status, DateCreate = DateCreate, DateImplement = DateImplement, Id = Id, IceCreamName = context.IceCreams.FirstOrDefault(x => x.Id == IceCreamId)?.IceCreamName ?? string.Empty, - ClientFIO = context.Clients.FirstOrDefault(x => x.Id == ClientId)?.ClientFIO ?? string.Empty + ImplementerFIO = Implementer?.ImplementerFIO ?? string.Empty, + ClientFIO = Client?.ClientFIO ?? string.Empty, }; } } diff --git a/IceCreamShop/IceCreamShopFileImplement/DataFileSingleton.cs b/IceCreamShop/IceCreamShopFileImplement/DataFileSingleton.cs index b39a3bf..2c9c08c 100644 --- a/IceCreamShop/IceCreamShopFileImplement/DataFileSingleton.cs +++ b/IceCreamShop/IceCreamShopFileImplement/DataFileSingleton.cs @@ -15,10 +15,12 @@ namespace IceCreamShopFileImplement private readonly string OrderFileName = "Order.xml"; private readonly string IceCreamFileName = "IceCream.xml"; private readonly string ClientFileName = "Client.xml"; + private readonly string ImplementerFileName = "Implementer.xml"; public List Components { get; private set; } public List Orders { get; private set; } public List IceCreams { get; private set; } public List Clients { get; private set; } + public List Implementers { get; private set; } public static DataFileSingleton GetInstance() { if (instance == null) @@ -31,12 +33,14 @@ namespace IceCreamShopFileImplement public void SaveIceCreams() => SaveData(IceCreams, IceCreamFileName, "IceCreams", x => x.GetXElement); public void SaveOrders() => SaveData(Orders, OrderFileName, "Orders", x => x.GetXElement); public void SaveClients() => SaveData(Clients, OrderFileName, "Clients", x => x.GetXElement); + public void SaveImplementers() => SaveData(Orders, ImplementerFileName, "Implementers", x => x.GetXElement); private DataFileSingleton() { Components = LoadData(ComponentFileName, "Component", x => Component.Create(x)!)!; IceCreams = LoadData(IceCreamFileName, "IceCream", x => IceCream.Create(x)!)!; Orders = LoadData(OrderFileName, "Order", x => Order.Create(x)!)!; Clients = LoadData(ClientFileName, "Client", x => Client.Create(x)!)!; + Implementers = LoadData(ImplementerFileName, "Implementer", x => Implementer.Create(x)!)!; } private static List? LoadData(string filename, string xmlNodeName, Func selectFunction) { diff --git a/IceCreamShop/IceCreamShopFileImplement/Implements/ImplementerStorage.cs b/IceCreamShop/IceCreamShopFileImplement/Implements/ImplementerStorage.cs new file mode 100644 index 0000000..3cd54f0 --- /dev/null +++ b/IceCreamShop/IceCreamShopFileImplement/Implements/ImplementerStorage.cs @@ -0,0 +1,91 @@ +using IceCreamShopContracts.BindingModels; +using IceCreamShopContracts.SearchModels; +using IceCreamShopContracts.StoragesContracts; +using IceCreamShopContracts.ViewModels; +using IceCreamShopFileImplement.Models; + +namespace IceCreamShopFileImplement.Implements +{ + public class ImplementerStorage : IImplementerStorage + { + private readonly DataFileSingleton _source; + public ImplementerStorage() + { + _source = DataFileSingleton.GetInstance(); + } + + public ImplementerViewModel? Delete(ImplementerBindingModel model) + { + var res = _source.Implementers.FirstOrDefault(x => x.Id == model.Id); + if (res != null) + { + _source.Implementers.Remove(res); + _source.SaveImplementers(); + } + return res?.GetViewModel; + } + + public ImplementerViewModel? GetElement(ImplementerSearchModel model) + { + if (model.Id.HasValue) + return _source.Implementers.FirstOrDefault(x => x.Id == model.Id)?.GetViewModel; + if (model.ImplementerFIO != null && model.Password != null) + return _source.Implementers + .FirstOrDefault(x => x.ImplementerFIO.Equals(model.ImplementerFIO) + && x.Password.Equals(model.Password)) + ?.GetViewModel; + if (model.ImplementerFIO != null) + return _source.Implementers.FirstOrDefault(x => x.ImplementerFIO.Equals(model.ImplementerFIO))?.GetViewModel; + return null; + } + + public List GetFilteredList(ImplementerSearchModel model) + { + if (model == null) + { + return new(); + } + if (model.Id.HasValue) + { + var res = GetElement(model); + return res != null ? new() { res } : new(); + } + if (model.ImplementerFIO != null) // На случай если фио не будет уникальным (по заданию оно уникально) + { + return _source.Implementers + .Where(x => x.ImplementerFIO.Equals(model.ImplementerFIO)) + .Select(x => x.GetViewModel) + .ToList(); + } + return new(); + } + + public List GetFullList() + { + return _source.Implementers.Select(x => x.GetViewModel).ToList(); + } + + public ImplementerViewModel? Insert(ImplementerBindingModel model) + { + model.Id = _source.Implementers.Count > 0 ? _source.Implementers.Max(x => x.Id) + 1 : 1; + var res = Implementer.Create(model); + if (res != null) + { + _source.Implementers.Add(res); + _source.SaveImplementers(); + } + return res?.GetViewModel; + } + + public ImplementerViewModel? Update(ImplementerBindingModel model) + { + var res = _source.Implementers.FirstOrDefault(x => x.Id == model.Id); + if (res != null) + { + res.Update(model); + _source.SaveImplementers(); + } + return res?.GetViewModel; + } + } +} diff --git a/IceCreamShop/IceCreamShopFileImplement/Implements/OrderStorage.cs b/IceCreamShop/IceCreamShopFileImplement/Implements/OrderStorage.cs index 4866523..ac35a9f 100644 --- a/IceCreamShop/IceCreamShopFileImplement/Implements/OrderStorage.cs +++ b/IceCreamShop/IceCreamShopFileImplement/Implements/OrderStorage.cs @@ -14,45 +14,75 @@ namespace IceCreamShopFileImplement.Implements public class OrderStorage : IOrderStorage { private readonly DataFileSingleton source; - public OrderStorage() { source = DataFileSingleton.GetInstance(); } + public OrderViewModel? Delete(OrderBindingModel model) + { + var element = source.Orders.FirstOrDefault(x => x.Id == model.Id); + if (element != null) + { + source.Orders.Remove(element); + source.SaveOrders(); + return element.GetViewModel; + } + return null; + } + public OrderViewModel? GetElement(OrderSearchModel model) { + if (model.ImplementerId.HasValue && model.Statusses != null) + { + return source.Orders + .FirstOrDefault(x => x.ImplementerId == model.ImplementerId && + model.Statusses.Contains(x.Status)) + ?.GetViewModel; + } + if (model.ImplementerId.HasValue) + { + return source.Orders.FirstOrDefault(x => x.ImplementerId == model.ImplementerId)?.GetViewModel; + } if (!model.Id.HasValue) { return null; } - return GetViewModel(source.Orders.FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id))); + return source.Orders.FirstOrDefault(x => model.Id.HasValue && x.Id == model.Id)?.GetViewModel; } public List GetFilteredList(OrderSearchModel model) { - if (!model.Id.HasValue && !model.DateFrom.HasValue && !model.DateTo.HasValue) + if (!model.Id.HasValue && model.DateFrom.HasValue && model.DateTo.HasValue) // если не ищем по айдишнику, значит ищем по диапазону дат { - return new(); + return source.Orders + .Where(x => model.DateFrom <= x.DateCreate.Date && x.DateCreate <= model.DateTo) + .Select(x => x.GetViewModel) + .ToList(); } - - if (model.ClientId.HasValue) + if (!model.Id.HasValue && model.ClientId.HasValue) { return source.Orders .Where(x => x.ClientId == model.ClientId) .Select(x => x.GetViewModel) .ToList(); } - - return source.Orders - .Where(x => x.Id == model.Id || model.DateFrom <= x.DateCreate && x.DateCreate <= model.DateTo) - .Select(x => x.GetViewModel) - .ToList(); + if (!model.Id.HasValue && model.Statusses != null) + { + return source.Orders + .Where(x => model.Statusses.Contains(x.Status)) + .Select(x => x.GetViewModel) + .ToList(); + } + var result = GetElement(model); + return result != null ? new() { result } : new(); } public List GetFullList() { - return source.Orders.Select(x => x.GetViewModel).ToList(); + return source.Orders + .Select(x => x.GetViewModel) + .ToList(); } public OrderViewModel? Insert(OrderBindingModel model) @@ -77,36 +107,7 @@ namespace IceCreamShopFileImplement.Implements } order.Update(model); source.SaveOrders(); - return GetViewModel(order); - } - public OrderViewModel? Delete(OrderBindingModel model) - { - var order = source.Orders.FirstOrDefault(x => x.Id == model.Id); - if (order == null) - { - return null; - } - order.Update(model); - source.SaveOrders(); - return GetViewModel(order); - } - - private OrderViewModel GetViewModel(Order order) - { - var viewModel = order.GetViewModel; - var icecream = source.IceCreams.FirstOrDefault(x => x.Id == order.IceCreamId); - if (icecream != null) - { - viewModel.IceCreamName = icecream.IceCreamName; - } - - var client = source.Clients.FirstOrDefault(x => x.Id == order.ClientId); - if (client != null) - { - viewModel.ClientFIO = client.ClientFIO; - } - - return viewModel; + return order.GetViewModel; } } } diff --git a/IceCreamShop/IceCreamShopFileImplement/Models/Implementer.cs b/IceCreamShop/IceCreamShopFileImplement/Models/Implementer.cs new file mode 100644 index 0000000..3d0fe22 --- /dev/null +++ b/IceCreamShop/IceCreamShopFileImplement/Models/Implementer.cs @@ -0,0 +1,80 @@ +using IceCreamShopContracts.BindingModels; +using IceCreamShopContracts.ViewModels; +using AbstractIceCreamShopDataModels.Models; +using System.Xml.Linq; + +namespace IceCreamShopFileImplement.Models +{ + public class Implementer : IImplementerModel + { + public int Id { get; private set; } + + public string ImplementerFIO { get; private set; } = string.Empty; + + public string Password { get; private set; } = string.Empty; + + public int WorkExperience { get; private set; } + + public int Qualification { get; private set; } + + public static Implementer? Create(XElement element) + { + if (element == null) + { + return null; + } + return new() + { + ImplementerFIO = element.Element("FIO")!.Value, + Password = element.Element("Password")!.Value, + Id = Convert.ToInt32(element.Attribute("Id")!.Value), + Qualification = Convert.ToInt32(element.Element("Qualification")!.Value), + WorkExperience = Convert.ToInt32(element.Element("WorkExperience")!.Value), + }; + } + + public static Implementer? Create(ImplementerBindingModel model) + { + if (model == null) + { + return null; + } + return new() + { + Id = model.Id, + Password = model.Password, + Qualification = model.Qualification, + ImplementerFIO = model.ImplementerFIO, + WorkExperience = model.WorkExperience, + }; + } + + public void Update(ImplementerBindingModel model) + { + if (model == null) + { + return; + } + Password = model.Password; + Qualification = model.Qualification; + ImplementerFIO = model.ImplementerFIO; + WorkExperience = model.WorkExperience; + } + + public ImplementerViewModel GetViewModel => new() + { + Id = Id, + Password = Password, + Qualification = Qualification, + ImplementerFIO = ImplementerFIO, + }; + + public XElement GetXElement => new("Client", + new XAttribute("Id", Id), + new XElement("Password", Password), + new XElement("FIO", ImplementerFIO), + new XElement("Qualification", Qualification), + new XElement("WorkExperience", WorkExperience) + ); + } +} diff --git a/IceCreamShop/IceCreamShopFileImplement/Models/Order.cs b/IceCreamShop/IceCreamShopFileImplement/Models/Order.cs index 691bc91..0f1aa02 100644 --- a/IceCreamShop/IceCreamShopFileImplement/Models/Order.cs +++ b/IceCreamShop/IceCreamShopFileImplement/Models/Order.cs @@ -18,6 +18,8 @@ namespace IceCreamShopFileImplement.Models public int IceCreamId { get; private set; } + public int? ImplementerId { get; set; } + public int ClientId { get; set; } public int Count { get; private set; } @@ -40,6 +42,7 @@ namespace IceCreamShopFileImplement.Models Id = model.Id, IceCreamId = model.IceCreamId, ClientId = model.ClientId, + ImplementerId = model.ImplementerId, Count = model.Count, Sum = model.Sum, Status = model.Status, @@ -58,6 +61,7 @@ namespace IceCreamShopFileImplement.Models Id = Convert.ToInt32(element.Attribute("Id")!.Value), IceCreamId = Convert.ToInt32(element.Element("IceCreamId")!.Value), ClientId = Convert.ToInt32(element.Element("ClientId")!.Value), + ImplementerId = Convert.ToInt32(element.Element("ImplementerId")!.Value), Sum = Convert.ToDouble(element.Element("Sum")!.Value), Count = Convert.ToInt32(element.Element("Count")!.Value), Status = (OrderStatus)Enum.Parse(typeof(OrderStatus), element.Element("Status")!.Value), @@ -76,6 +80,9 @@ namespace IceCreamShopFileImplement.Models } public OrderViewModel GetViewModel => new() { + ImplementerFIO = DataFileSingleton.GetInstance().Implementers.FirstOrDefault(x => x.Id == ImplementerId)?.ImplementerFIO ?? string.Empty, + IceCreamName = DataFileSingleton.GetInstance().IceCreams.FirstOrDefault(x => x.Id == IceCreamId)?.IceCreamName ?? string.Empty, + ClientFIO = DataFileSingleton.GetInstance().Clients.FirstOrDefault(x => x.Id == ClientId)?.ClientFIO ?? string.Empty, Id = Id, IceCreamId = IceCreamId, ClientId = ClientId, @@ -90,6 +97,7 @@ namespace IceCreamShopFileImplement.Models new XAttribute("Id", Id), new XElement("IceCreamId", IceCreamId.ToString()), new XElement("ClientId", ClientId), + new XElement("ImplementerId", ImplementerId), new XElement("Count", Count.ToString()), new XElement("Sum", Sum.ToString()), new XElement("Status", Status.ToString()), diff --git a/IceCreamShop/IceCreamShopListImplement/DataListSingleton.cs b/IceCreamShop/IceCreamShopListImplement/DataListSingleton.cs index a18cea7..f4e9cbd 100644 --- a/IceCreamShop/IceCreamShopListImplement/DataListSingleton.cs +++ b/IceCreamShop/IceCreamShopListImplement/DataListSingleton.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using IceCreamShopListImplement.Models; +using IceCreamShopListImplement.Models; namespace IceCreamShopListImplement { @@ -14,12 +9,15 @@ namespace IceCreamShopListImplement public List Orders { get; set; } public List iceCreams { get; set; } public List Clients { get; set; } + public List Implementers { get; set; } + private DataListSingleton() { Components = new List(); Orders = new List(); iceCreams = new List(); Clients = new List(); + Implementers = new List(); } public static DataListSingleton GetInstance() { diff --git a/IceCreamShop/IceCreamShopListImplement/Implements/ImplementerStorage.cs b/IceCreamShop/IceCreamShopListImplement/Implements/ImplementerStorage.cs new file mode 100644 index 0000000..8585093 --- /dev/null +++ b/IceCreamShop/IceCreamShopListImplement/Implements/ImplementerStorage.cs @@ -0,0 +1,114 @@ +using IceCreamShopContracts.BindingModels; +using IceCreamShopContracts.SearchModels; +using IceCreamShopContracts.StoragesContracts; +using IceCreamShopContracts.ViewModels; +using IceCreamShopListImplement.Models; + +namespace IceCreamShopListImplement.Implements +{ + public class ImplementerStorage : IImplementerStorage + { + private readonly DataListSingleton _source; + public ImplementerStorage() + { + _source = DataListSingleton.GetInstance(); + } + + public ImplementerViewModel? Delete(ImplementerBindingModel model) + { + for (int i = 0; i < _source.Implementers.Count; ++i) + { + if (_source.Implementers[i].Id == model.Id) + { + var element = _source.Implementers[i]; + _source.Implementers.RemoveAt(i); + return element.GetViewModel; + } + } + return null; + } + + public ImplementerViewModel? GetElement(ImplementerSearchModel model) + { + foreach (var x in _source.Implementers) + { + if (model.Id.HasValue && x.Id == model.Id) + return x.GetViewModel; + if (model.ImplementerFIO != null && model.Password != null && + x.ImplementerFIO.Equals(model.ImplementerFIO) && x.Password.Equals(model.Password)) + return x.GetViewModel; + if (model.ImplementerFIO != null && x.ImplementerFIO.Equals(model.ImplementerFIO)) + return x.GetViewModel; + } + return null; + } + + public List GetFilteredList(ImplementerSearchModel model) + { + if (model == null) + { + return new(); + } + if (model.Id.HasValue) + { + var res = GetElement(model); + return res != null ? new() { res } : new(); + } + // На случай если при расширении проекта фио не будет уникальным + // (по заданию оно уникально) + List result = new(); + if (model.ImplementerFIO != null) + { + foreach (var implementer in _source.Implementers) + { + if (implementer.ImplementerFIO.Equals(model.ImplementerFIO)) + { + result.Add(implementer.GetViewModel); + } + } + } + return result; + } + + public List GetFullList() + { + var result = new List(); + foreach (var implementer in _source.Implementers) + { + result.Add(implementer.GetViewModel); + } + return result; + } + + public ImplementerViewModel? Insert(ImplementerBindingModel model) + { + model.Id = 1; + foreach (var implementer in _source.Implementers) + { + if (model.Id <= implementer.Id) + { + model.Id = implementer.Id + 1; + } + } + var res = Implementer.Create(model); + if (res != null) + { + _source.Implementers.Add(res); + } + return res?.GetViewModel; + } + + public ImplementerViewModel? Update(ImplementerBindingModel model) + { + foreach (var implementer in _source.Implementers) + { + if (implementer.Id == model.Id) + { + implementer.Update(model); + return implementer.GetViewModel; + } + } + return null; + } + } +} diff --git a/IceCreamShop/IceCreamShopListImplement/Implements/OrderStorage.cs b/IceCreamShop/IceCreamShopListImplement/Implements/OrderStorage.cs index 1699f07..d472e64 100644 --- a/IceCreamShop/IceCreamShopListImplement/Implements/OrderStorage.cs +++ b/IceCreamShop/IceCreamShopListImplement/Implements/OrderStorage.cs @@ -27,7 +27,7 @@ namespace IceCreamShopListImplement.Implements { var element = _source.Orders[i]; _source.Orders.RemoveAt(i); - return GetViewModel(element); + return element.GetViewModel; } } return null; @@ -35,11 +35,27 @@ namespace IceCreamShopListImplement.Implements public OrderViewModel? GetElement(OrderSearchModel model) { - if (!model.Id.HasValue) return null; + if (!model.Id.HasValue) + { + return null; + } foreach (var order in _source.Orders) { - if (order.Id == model.Id) + if (model.Id.HasValue && order.Id == model.Id) + { return GetViewModel(order); + } + + else if (model.ImplementerId.HasValue && model.Statusses != null && + order.ImplementerId == model.ImplementerId && model.Statusses.Contains(order.Status)) + { + return GetViewModel(order); + } + + else if (model.ImplementerId.HasValue && model.ImplementerId == order.ImplementerId) + { + return GetViewModel(order); + } } return null; } @@ -47,24 +63,32 @@ namespace IceCreamShopListImplement.Implements public List GetFilteredList(OrderSearchModel model) { var result = new List(); - if (model.DateFrom.HasValue && model.DateTo.HasValue) + foreach (var order in _source.Orders) { - foreach (var order in _source.Orders) + if (order.Id == model.Id) { - if (order.Id == model.Id || model.DateFrom <= order.DateCreate && order.DateCreate <= model.DateTo) - { - result.Add(GetViewModel(order)); - } + return new() { GetViewModel(order) }; } - } - if (model.ClientId.HasValue) - { - foreach (var order in _source.Orders) + + else if (model.DateFrom.HasValue && model.DateTo.HasValue && + model.DateFrom <= order.DateCreate.Date && order.DateCreate.Date <= model.DateTo) { - if (order.ClientId == model.ClientId) - { - result.Add(GetViewModel(order)); - } + result.Add(GetViewModel(order)); + } + + else if (model.ClientId.HasValue && order.ClientId == model.ClientId) + { + result.Add(GetViewModel(order)); + } + + else if (model.ImplementerId.HasValue && order.ImplementerId == model.ImplementerId) + { + result.Add(GetViewModel(order)); + } + + else if (model.Statusses != null && model.Statusses.Contains(order.Status)) + { + result.Add(GetViewModel(order)); } } return result; @@ -96,7 +120,7 @@ namespace IceCreamShopListImplement.Implements return null; } _source.Orders.Add(newOrder); - return GetViewModel(newOrder); + return newOrder.GetViewModel; } public OrderViewModel? Update(OrderBindingModel model) @@ -106,7 +130,7 @@ namespace IceCreamShopListImplement.Implements if (order.Id == model.Id) { order.Update(model); - return GetViewModel(order); + return order.GetViewModel; } } return null; diff --git a/IceCreamShop/IceCreamShopListImplement/Models/Implementer.cs b/IceCreamShop/IceCreamShopListImplement/Models/Implementer.cs new file mode 100644 index 0000000..aa0ce17 --- /dev/null +++ b/IceCreamShop/IceCreamShopListImplement/Models/Implementer.cs @@ -0,0 +1,55 @@ +using IceCreamShopContracts.BindingModels; +using IceCreamShopContracts.ViewModels; +using AbstractIceCreamShopDataModels.Models; + +namespace IceCreamShopListImplement.Models +{ + public class Implementer : IImplementerModel + { + public int Id { get; private set; } + + public string ImplementerFIO { get; private set; } = string.Empty; + + public string Password { get; private set; } = string.Empty; + + public int WorkExperience { get; private set; } + + public int Qualification { get; private set; } + + public static Implementer? Create(ImplementerBindingModel model) + { + if (model == null) + { + return null; + } + return new() + { + Id = model.Id, + Password = model.Password, + Qualification = model.Qualification, + ImplementerFIO = model.ImplementerFIO, + WorkExperience = model.WorkExperience, + }; + } + + public void Update(ImplementerBindingModel model) + { + if (model == null) + { + return; + } + Password = model.Password; + Qualification = model.Qualification; + ImplementerFIO = model.ImplementerFIO; + WorkExperience = model.WorkExperience; + } + + public ImplementerViewModel GetViewModel => new() + { + Id = Id, + Password = Password, + Qualification = Qualification, + ImplementerFIO = ImplementerFIO, + }; + } +} diff --git a/IceCreamShop/IceCreamShopListImplement/Models/Order.cs b/IceCreamShop/IceCreamShopListImplement/Models/Order.cs index 4c455e4..f6c7f6e 100644 --- a/IceCreamShop/IceCreamShopListImplement/Models/Order.cs +++ b/IceCreamShop/IceCreamShopListImplement/Models/Order.cs @@ -20,6 +20,8 @@ namespace IceCreamShopListImplement.Models public int ClientId { get; private set; } + public int? ImplementerId { get; private set; } + public int Count { get; private set; } public double Sum { get; private set; } @@ -38,6 +40,7 @@ namespace IceCreamShopListImplement.Models Id = model.Id, IceCreamId = model.IceCreamId, ClientId = model.ClientId, + ImplementerId = model.ImplementerId, Count = model.Count, Sum = model.Sum, Status = model.Status, @@ -58,6 +61,8 @@ namespace IceCreamShopListImplement.Models Id = Id, IceCreamId = IceCreamId, ClientId = ClientId, + ImplementerId = ImplementerId, + ImplementerFIO = DataListSingleton.GetInstance().Implementers.FirstOrDefault(x => x.Id == ImplementerId)?.ImplementerFIO ?? string.Empty, Count = Count, Sum = Sum, Status = Status, diff --git a/IceCreamShop/IceCreamShopRestApi/Controllers/ImplementerController.cs b/IceCreamShop/IceCreamShopRestApi/Controllers/ImplementerController.cs new file mode 100644 index 0000000..adc91d8 --- /dev/null +++ b/IceCreamShop/IceCreamShopRestApi/Controllers/ImplementerController.cs @@ -0,0 +1,106 @@ +using IceCreamShopContracts.BindingModels; +using IceCreamShopContracts.BusinessLogicsContracts; +using IceCreamShopContracts.SearchModels; +using IceCreamShopContracts.ViewModels; +using Microsoft.AspNetCore.Mvc; + +namespace IceCreamShopRestApi.Controllers +{ + [Route("api/[controller]/[action]")] + [ApiController] + public class ImplementerController : Controller + { + private readonly ILogger _logger; + + private readonly IOrderLogic _order; + + private readonly IImplementerLogic _logic; + + public ImplementerController(IOrderLogic order, IImplementerLogic logic, ILogger logger) + { + _logger = logger; + _order = order; + _logic = logic; + } + + [HttpGet] + public ImplementerViewModel? Login(string login, string password) + { + try + { + return _logic.ReadElement(new ImplementerSearchModel + { + ImplementerFIO = login, + Password = password + }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка авторизации сотрудника"); + throw; + } + } + + [HttpGet] + public List? GetNewOrders() + { + try + { + return _order.ReadList(new OrderSearchModel + { + //Status = OrderStatus.Принят + }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка получения новых заказов"); + throw; + } + } + + [HttpGet] + public OrderViewModel? GetImplementerOrder(int implementerId) + { + try + { + return _order.ReadElement(new OrderSearchModel + { + //ImplementerId = implementerId + }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка получения текущего заказа исполнителя"); + throw; + } + } + + [HttpPost] + public void TakeOrderInWork(OrderBindingModel model) + { + try + { + _order.TakeOrderInWork(model); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка перевода заказа с №{Id} в работу", model.Id); + throw; + } + } + + [HttpPost] + public void FinishOrder(OrderBindingModel model) + { + try + { + _order.FinishOrder(model); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка отметки о готовности заказа с №{Id}", model.Id); + throw; + } + } + } +} \ No newline at end of file diff --git a/IceCreamShop/IceCreamShopRestApi/Program.cs b/IceCreamShop/IceCreamShopRestApi/Program.cs index f83f377..26af849 100644 --- a/IceCreamShop/IceCreamShopRestApi/Program.cs +++ b/IceCreamShop/IceCreamShopRestApi/Program.cs @@ -10,10 +10,12 @@ builder.Logging.SetMinimumLevel(LogLevel.Trace); builder.Logging.AddLog4Net("log4net.config"); // Add services to the container. +builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); +builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); -- 2.25.1 From 052d6a8ce2b9bbc36f55e161c17854d0e69f610b Mon Sep 17 00:00:00 2001 From: Inohara Date: Sat, 8 Apr 2023 18:30:16 +0400 Subject: [PATCH 02/17] =?UTF-8?q?=D0=BC=D0=B8=D0=B3=D1=80=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessLogics/OrderLogic.cs | 17 ++ .../BusinessLogics/WorkModeling.cs | 143 ++++++++++ IceCreamShop/IceCreamShop/Program.cs | 2 + .../BusinessLogicsContracts/IWorkProcess.cs | 10 + .../20230408135215_implementer.Designer.cs | 257 ++++++++++++++++++ .../Migrations/20230408135215_implementer.cs | 67 +++++ .../IceCreamShopDatabaseModelSnapshot.cs | 43 +++ .../Controllers/ImplementerController.cs | 7 +- 8 files changed, 543 insertions(+), 3 deletions(-) create mode 100644 IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs create mode 100644 IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IWorkProcess.cs create mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230408135215_implementer.Designer.cs create mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230408135215_implementer.cs diff --git a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs index 9d31ba3..f4f83be 100644 --- a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs +++ b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs @@ -134,5 +134,22 @@ namespace IceCreamBusinessLogic.BusinessLogics } return true; } + + public OrderViewModel? ReadElement(OrderSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. Id:{ Id}", model.Id); + var element = _orderStorage.GetElement(model); + if (element == null) + { + _logger.LogWarning("ReadElement element not found"); + return null; + } + _logger.LogInformation("ReadElement find. Id:{Id}", element.Id); + return element; + } } } diff --git a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs new file mode 100644 index 0000000..20f9fd0 --- /dev/null +++ b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs @@ -0,0 +1,143 @@ +using IceCreamShopContracts.BindingModels; +using IceCreamShopContracts.BusinessLogicsContracts; +using IceCreamShopContracts.SearchModels; +using IceCreamShopContracts.ViewModels; +using AbstractIceCreamShopDataModels.Enums; +using Microsoft.Extensions.Logging; + +namespace IceCreamBusinessLogic.BusinessLogic +{ + public class WorkModeling : IWorkProcess + { + private readonly ILogger _logger; + + private readonly Random _rnd; + + private IOrderLogic? _orderLogic; + + public WorkModeling(ILogger logger) + { + _logger = logger; + _rnd = new Random(1000); + } + + public void DoWork(IImplementerLogic implementerLogic, IOrderLogic orderLogic) + { + _orderLogic = orderLogic; + var implementers = implementerLogic.ReadList(null); + if (implementers == null) + { + _logger.LogWarning("DoWork. Implementers is null"); + return; + } + // Поскольку у нас могут быть заказы в работе мы не дожны заканчивать работы, если нет Принятых заказов + // Поэтому находим заказы в работе и продолжаем работу, если они есть + var orders = _orderLogic.ReadList(new OrderSearchModel { Statusses = new() { OrderStatus.Принят, OrderStatus.Выполняется } }); + if (orders == null || orders.Count == 0) + { + _logger.LogWarning("DoWork. Orders is null or empty"); + return; + } + _logger.LogDebug("DoWork for {Count} orders", orders.Count); + foreach (var implementer in implementers) + { + Task.Run(() => WorkerWorkAsync(implementer, orders)); + } + } + + /// + /// Иммитация работы исполнителя + /// + /// + /// + private async Task WorkerWorkAsync(ImplementerViewModel implementer, List orders) + { + if (_orderLogic == null || implementer == null) + { + return; + } + await RunOrderInWork(implementer, orders); + + await Task.Run(() => + { + foreach (var order in orders) + { + try + { + _logger.LogDebug("DoWork. Worker {Id} try get order {Order}", implementer.Id, order.Id); + // пытаемся назначить заказ на исполнителя + _orderLogic.TakeOrderInWork(new OrderBindingModel + { + Id = order.Id, + ImplementerId = implementer.Id + }); + // делаем работу + Thread.Sleep(implementer.WorkExperience * _rnd.Next(100, 1000) * order.Count); + _logger.LogDebug("DoWork. Worker {Id} finish order {Order}", implementer.Id, order.Id); + _orderLogic.FinishOrder(new OrderBindingModel + { + Id = order.Id + }); + // отдыхаем + Thread.Sleep(implementer.Qualification * _rnd.Next(10, 100)); + } + // кто-то мог уже перехватить заказ, игнорируем ошибку + catch (InvalidOperationException ex) + { + _logger.LogWarning(ex, "Error try get work"); + } + // заканчиваем выполнение имитации в случае иной ошибки + catch (Exception ex) + { + _logger.LogError(ex, "Error while do work"); + throw; + } + } + }); + } + + /// + /// Ищем заказ, которые уже в работе (вдруг исполнителя прервали) + /// + /// + /// + private async Task RunOrderInWork(ImplementerViewModel implementer, List allOrders) + { + if (_orderLogic == null || implementer == null || allOrders == null || allOrders.Count == 0) + { + return; + } + try + { + // Выбираем из всех заказов тот, который выполняется данным исполнителем + var runOrder = await Task.Run(() => allOrders.FirstOrDefault(x => x.ImplementerId == implementer.Id && x.Status == OrderStatus.Выполняется)); + if (runOrder == null) + { + return; + } + + _logger.LogDebug("DoWork. Worker {Id} back to order {Order}", implementer.Id, runOrder.Id); + // доделываем работу + Thread.Sleep(implementer.WorkExperience * _rnd.Next(100, 300) * runOrder.Count); + _logger.LogDebug("DoWork. Worker {Id} finish order {Order}", implementer.Id, runOrder.Id); + _orderLogic.FinishOrder(new OrderBindingModel + { + Id = runOrder.Id + }); + // отдыхаем + Thread.Sleep(implementer.Qualification * _rnd.Next(10, 100)); + } + // заказа может не быть, просто игнорируем ошибку + catch (InvalidOperationException ex) + { + _logger.LogWarning(ex, "Error try get work"); + } + // а может возникнуть иная ошибка, тогда просто заканчиваем выполнение имитации + catch (Exception ex) + { + _logger.LogError(ex, "Error while do work"); + throw; + } + } + } +} diff --git a/IceCreamShop/IceCreamShop/Program.cs b/IceCreamShop/IceCreamShop/Program.cs index a6b4ea8..f78aa62 100644 --- a/IceCreamShop/IceCreamShop/Program.cs +++ b/IceCreamShop/IceCreamShop/Program.cs @@ -8,6 +8,7 @@ using NLog.Extensions.Logging; using IceCreamBusinessLogic.OfficePackage.Implements; using IceCreamBusinessLogic.OfficePackage; using IceCreamShopDatabaseImplement.Implements; +using IceCreamBusinessLogic.BusinessLogic; namespace IceCreamShop { @@ -50,6 +51,7 @@ namespace IceCreamShop services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient(); diff --git a/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IWorkProcess.cs b/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IWorkProcess.cs new file mode 100644 index 0000000..8986976 --- /dev/null +++ b/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IWorkProcess.cs @@ -0,0 +1,10 @@ +namespace IceCreamShopContracts.BusinessLogicsContracts +{ + public interface IWorkProcess + { + /// + /// Запуск работ + /// + void DoWork(IImplementerLogic implementerLogic, IOrderLogic orderLogic); + } +} diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230408135215_implementer.Designer.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230408135215_implementer.Designer.cs new file mode 100644 index 0000000..8f06b20 --- /dev/null +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230408135215_implementer.Designer.cs @@ -0,0 +1,257 @@ +// +using System; +using IceCreamShopDatabaseImplement; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace IceCreamShopDatabaseImplement.Migrations +{ + [DbContext(typeof(IceCreamShopDatabase))] + [Migration("20230408135215_implementer")] + partial class implementer + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.3") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Client", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClientFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Password") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Clients"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Component", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ComponentName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Cost") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("Components"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCream", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("IceCreamName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Price") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("IceCreams"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCreamComponent", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ComponentId") + .HasColumnType("int"); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("IceCreamId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ComponentId"); + + b.HasIndex("IceCreamId"); + + b.ToTable("IceCreamComponents"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Implementer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ImplementerFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Password") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Qualification") + .HasColumnType("int"); + + b.Property("WorkExperience") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Implementers"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Order", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClientId") + .HasColumnType("int"); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("DateCreate") + .HasColumnType("datetime2"); + + b.Property("DateImplement") + .HasColumnType("datetime2"); + + b.Property("IceCreamId") + .HasColumnType("int"); + + b.Property("ImplementerId") + .HasColumnType("int"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("Sum") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.HasIndex("IceCreamId"); + + b.HasIndex("ImplementerId"); + + b.ToTable("Orders"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCreamComponent", b => + { + b.HasOne("IceCreamShopDatabaseImplement.Models.Component", "Component") + .WithMany("IceCreamComponents") + .HasForeignKey("ComponentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", "IceCream") + .WithMany("Components") + .HasForeignKey("IceCreamId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Component"); + + b.Navigation("IceCream"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Order", b => + { + b.HasOne("IceCreamShopDatabaseImplement.Models.Client", "Client") + .WithMany("Orders") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", "IceCream") + .WithMany("Orders") + .HasForeignKey("IceCreamId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IceCreamShopDatabaseImplement.Models.Implementer", "Implementer") + .WithMany("Orders") + .HasForeignKey("ImplementerId"); + + b.Navigation("Client"); + + b.Navigation("IceCream"); + + b.Navigation("Implementer"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Client", b => + { + b.Navigation("Orders"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Component", b => + { + b.Navigation("IceCreamComponents"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCream", b => + { + b.Navigation("Components"); + + b.Navigation("Orders"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Implementer", b => + { + b.Navigation("Orders"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230408135215_implementer.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230408135215_implementer.cs new file mode 100644 index 0000000..34ba28a --- /dev/null +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230408135215_implementer.cs @@ -0,0 +1,67 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace IceCreamShopDatabaseImplement.Migrations +{ + /// + public partial class implementer : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "ImplementerId", + table: "Orders", + type: "int", + nullable: true); + + migrationBuilder.CreateTable( + name: "Implementers", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + ImplementerFIO = table.Column(type: "nvarchar(max)", nullable: false), + Password = table.Column(type: "nvarchar(max)", nullable: false), + WorkExperience = table.Column(type: "int", nullable: false), + Qualification = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Implementers", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_Orders_ImplementerId", + table: "Orders", + column: "ImplementerId"); + + migrationBuilder.AddForeignKey( + name: "FK_Orders_Implementers_ImplementerId", + table: "Orders", + column: "ImplementerId", + principalTable: "Implementers", + principalColumn: "Id"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Orders_Implementers_ImplementerId", + table: "Orders"); + + migrationBuilder.DropTable( + name: "Implementers"); + + migrationBuilder.DropIndex( + name: "IX_Orders_ImplementerId", + table: "Orders"); + + migrationBuilder.DropColumn( + name: "ImplementerId", + table: "Orders"); + } + } +} diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs index 5535d99..e6fe34e 100644 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs @@ -113,6 +113,33 @@ namespace IceCreamShopDatabaseImplement.Migrations b.ToTable("IceCreamComponents"); }); + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Implementer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ImplementerFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Password") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Qualification") + .HasColumnType("int"); + + b.Property("WorkExperience") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Implementers"); + }); + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Order", b => { b.Property("Id") @@ -136,6 +163,9 @@ namespace IceCreamShopDatabaseImplement.Migrations b.Property("IceCreamId") .HasColumnType("int"); + b.Property("ImplementerId") + .HasColumnType("int"); + b.Property("Status") .HasColumnType("int"); @@ -148,6 +178,8 @@ namespace IceCreamShopDatabaseImplement.Migrations b.HasIndex("IceCreamId"); + b.HasIndex("ImplementerId"); + b.ToTable("Orders"); }); @@ -184,9 +216,15 @@ namespace IceCreamShopDatabaseImplement.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + b.HasOne("IceCreamShopDatabaseImplement.Models.Implementer", "Implementer") + .WithMany("Orders") + .HasForeignKey("ImplementerId"); + b.Navigation("Client"); b.Navigation("IceCream"); + + b.Navigation("Implementer"); }); modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Client", b => @@ -205,6 +243,11 @@ namespace IceCreamShopDatabaseImplement.Migrations b.Navigation("Orders"); }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Implementer", b => + { + b.Navigation("Orders"); + }); #pragma warning restore 612, 618 } } diff --git a/IceCreamShop/IceCreamShopRestApi/Controllers/ImplementerController.cs b/IceCreamShop/IceCreamShopRestApi/Controllers/ImplementerController.cs index adc91d8..82f8444 100644 --- a/IceCreamShop/IceCreamShopRestApi/Controllers/ImplementerController.cs +++ b/IceCreamShop/IceCreamShopRestApi/Controllers/ImplementerController.cs @@ -1,4 +1,5 @@ -using IceCreamShopContracts.BindingModels; +using AbstractIceCreamShopDataModels.Enums; +using IceCreamShopContracts.BindingModels; using IceCreamShopContracts.BusinessLogicsContracts; using IceCreamShopContracts.SearchModels; using IceCreamShopContracts.ViewModels; @@ -48,7 +49,7 @@ namespace IceCreamShopRestApi.Controllers { return _order.ReadList(new OrderSearchModel { - //Status = OrderStatus.Принят + Statusses = new() { OrderStatus.Принят } }); } catch (Exception ex) @@ -65,7 +66,7 @@ namespace IceCreamShopRestApi.Controllers { return _order.ReadElement(new OrderSearchModel { - //ImplementerId = implementerId + ImplementerId = implementerId }); } catch (Exception ex) -- 2.25.1 From 1d31c88b76e389a5348edecf733073a7213ed264 Mon Sep 17 00:00:00 2001 From: Inohara Date: Sun, 9 Apr 2023 14:49:06 +0400 Subject: [PATCH 03/17] =?UTF-8?q?=D0=BF=D0=BE=D1=87=D0=B5=D0=BC=D1=83=20?= =?UTF-8?q?=D1=82=D0=BE=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=D1=81=D1=8F=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=BE=D0=B4=D0=BD=D0=B8=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessLogics/OrderLogic.cs | 12 +- .../BusinessLogics/WorkModeling.cs | 7 +- .../IceCreamShop/FormImplementer.Designer.cs | 184 ++++++++++++++++++ IceCreamShop/IceCreamShop/FormImplementer.cs | 99 ++++++++++ .../IceCreamShop/FormImplementer.resx | 60 ++++++ .../IceCreamShop/FormImplementers.Designer.cs | 127 ++++++++++++ IceCreamShop/IceCreamShop/FormImplementers.cs | 109 +++++++++++ .../IceCreamShop/FormImplementers.resx | 60 ++++++ .../IceCreamShop/FormMain.Designer.cs | 78 ++++---- IceCreamShop/IceCreamShop/FormMain.cs | 22 ++- IceCreamShop/IceCreamShop/Program.cs | 4 +- .../Implements/OrderStorage.cs | 11 +- .../Models/Order.cs | 7 +- 13 files changed, 718 insertions(+), 62 deletions(-) create mode 100644 IceCreamShop/IceCreamShop/FormImplementer.Designer.cs create mode 100644 IceCreamShop/IceCreamShop/FormImplementer.cs create mode 100644 IceCreamShop/IceCreamShop/FormImplementer.resx create mode 100644 IceCreamShop/IceCreamShop/FormImplementers.Designer.cs create mode 100644 IceCreamShop/IceCreamShop/FormImplementers.cs create mode 100644 IceCreamShop/IceCreamShop/FormImplementers.resx diff --git a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs index f4f83be..ef9485d 100644 --- a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs +++ b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs @@ -95,11 +95,11 @@ namespace IceCreamBusinessLogic.BusinessLogics _logger.LogInformation("Order. OrderID:{Id}.Sum:{ Sum}. DocumentId: { DocumentId}", model.Id, model.Sum, model.IceCreamId); } - public bool SetNewStatus(OrderBindingModel orderModel, OrderStatus newStatus) + public bool SetNewStatus(OrderBindingModel rawModel, OrderStatus newStatus) { var viewModel = _orderStorage.GetElement(new OrderSearchModel { - Id = orderModel.Id + Id = rawModel.Id }); if (viewModel == null) @@ -118,6 +118,11 @@ namespace IceCreamBusinessLogic.BusinessLogics Count = viewModel.Count, Sum = viewModel.Sum }; + if (rawModel.ImplementerId.HasValue) + { + model.ImplementerId = rawModel.ImplementerId; + } + CheckModel(model); if (model.Status + 1 != newStatus) { @@ -126,7 +131,7 @@ namespace IceCreamBusinessLogic.BusinessLogics } model.Status = newStatus; if (model.Status == OrderStatus.Выдан) model.DateImplement = DateTime.Now; - if (_orderStorage.Update(model) == null) + if (_orderStorage. (model) == null) { model.Status--; _logger.LogWarning("Update operation failed"); @@ -134,6 +139,7 @@ namespace IceCreamBusinessLogic.BusinessLogics } return true; } + public OrderViewModel? ReadElement(OrderSearchModel model) { diff --git a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs index 20f9fd0..93109ed 100644 --- a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs +++ b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs @@ -74,10 +74,11 @@ namespace IceCreamBusinessLogic.BusinessLogic // делаем работу Thread.Sleep(implementer.WorkExperience * _rnd.Next(100, 1000) * order.Count); _logger.LogDebug("DoWork. Worker {Id} finish order {Order}", implementer.Id, order.Id); - _orderLogic.FinishOrder(new OrderBindingModel + _orderLogic.DeliveryOrder(new OrderBindingModel { - Id = order.Id - }); + Id = order.Id, + ImplementerId = implementer.Id + }); // отдыхаем Thread.Sleep(implementer.Qualification * _rnd.Next(10, 100)); } diff --git a/IceCreamShop/IceCreamShop/FormImplementer.Designer.cs b/IceCreamShop/IceCreamShop/FormImplementer.Designer.cs new file mode 100644 index 0000000..643b7eb --- /dev/null +++ b/IceCreamShop/IceCreamShop/FormImplementer.Designer.cs @@ -0,0 +1,184 @@ +namespace IceCreamShopView +{ + partial class FormImplementer + { + /// + /// 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.buttonSave = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.numericUpDownQualification = new System.Windows.Forms.NumericUpDown(); + this.numericUpDownWorkExperience = new System.Windows.Forms.NumericUpDown(); + this.textBoxPassword = new System.Windows.Forms.TextBox(); + this.textBoxFio = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownQualification)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownWorkExperience)).BeginInit(); + this.SuspendLayout(); + // + // buttonSave + // + this.buttonSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonSave.Location = new System.Drawing.Point(172, 148); + this.buttonSave.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.buttonSave.Name = "buttonSave"; + this.buttonSave.Size = new System.Drawing.Size(102, 44); + this.buttonSave.TabIndex = 19; + this.buttonSave.Text = "Сохранить"; + this.buttonSave.UseVisualStyleBackColor = true; + this.buttonSave.Click += new System.EventHandler(this.ButtonSave_Click); + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.Location = new System.Drawing.Point(291, 148); + this.buttonCancel.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(102, 44); + this.buttonCancel.TabIndex = 18; + this.buttonCancel.Text = "Отмена"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.ButtonCancel_Click); + // + // numericUpDownQualification + // + this.numericUpDownQualification.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.numericUpDownQualification.Location = new System.Drawing.Point(303, 94); + this.numericUpDownQualification.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.numericUpDownQualification.Name = "numericUpDownQualification"; + this.numericUpDownQualification.Size = new System.Drawing.Size(90, 27); + this.numericUpDownQualification.TabIndex = 17; + // + // numericUpDownWorkExperience + // + this.numericUpDownWorkExperience.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.numericUpDownWorkExperience.Location = new System.Drawing.Point(83, 92); + this.numericUpDownWorkExperience.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.numericUpDownWorkExperience.Name = "numericUpDownWorkExperience"; + this.numericUpDownWorkExperience.Size = new System.Drawing.Size(94, 27); + this.numericUpDownWorkExperience.TabIndex = 16; + // + // textBoxPassword + // + this.textBoxPassword.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxPassword.Location = new System.Drawing.Point(83, 51); + this.textBoxPassword.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.textBoxPassword.Name = "textBoxPassword"; + this.textBoxPassword.PasswordChar = '*'; + this.textBoxPassword.Size = new System.Drawing.Size(310, 27); + this.textBoxPassword.TabIndex = 15; + // + // textBoxFio + // + this.textBoxFio.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxFio.Location = new System.Drawing.Point(58, 6); + this.textBoxFio.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.textBoxFio.Name = "textBoxFio"; + this.textBoxFio.Size = new System.Drawing.Size(335, 27); + this.textBoxFio.TabIndex = 14; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(183, 94); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(114, 20); + this.label4.TabIndex = 13; + this.label4.Text = "Квалификация:"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(12, 90); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(46, 20); + this.label3.TabIndex = 12; + this.label3.Text = "Стаж:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(12, 51); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(65, 20); + this.label2.TabIndex = 11; + this.label2.Text = "Пароль:"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(45, 20); + this.label1.TabIndex = 10; + this.label1.Text = "ФИО:"; + // + // FormImplementer + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(405, 205); + this.Controls.Add(this.buttonSave); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.numericUpDownQualification); + this.Controls.Add(this.numericUpDownWorkExperience); + this.Controls.Add(this.textBoxPassword); + this.Controls.Add(this.textBoxFio); + this.Controls.Add(this.label4); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Name = "FormImplementer"; + this.Text = "Исполнитель"; + this.Load += new System.EventHandler(this.FormImplementer_Load); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownQualification)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownWorkExperience)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private Button buttonSave; + private Button buttonCancel; + private NumericUpDown numericUpDownQualification; + private NumericUpDown numericUpDownWorkExperience; + private TextBox textBoxPassword; + private TextBox textBoxFio; + private Label label4; + private Label label3; + private Label label2; + private Label label1; + } +} \ No newline at end of file diff --git a/IceCreamShop/IceCreamShop/FormImplementer.cs b/IceCreamShop/IceCreamShop/FormImplementer.cs new file mode 100644 index 0000000..e4cfb7e --- /dev/null +++ b/IceCreamShop/IceCreamShop/FormImplementer.cs @@ -0,0 +1,99 @@ +using IceCreamShopContracts.BindingModels; +using IceCreamShopContracts.BusinessLogicsContracts; +using IceCreamShopContracts.SearchModels; +using Microsoft.Extensions.Logging; + +namespace IceCreamShopView +{ + public partial class FormImplementer : Form + { + private readonly ILogger _logger; + private readonly IImplementerLogic _logic; + private int? _id; + public int Id { set { _id = value; } } + + public FormImplementer(ILogger logger, IImplementerLogic logic) + { + InitializeComponent(); + _logger = logger; + _logic = logic; + } + + private void FormImplementer_Load(object sender, EventArgs e) + { + if (_id.HasValue) + { + try + { + _logger.LogInformation("Получение исполнителя"); + var view = _logic.ReadElement(new ImplementerSearchModel + { + Id = _id.Value + }); + if (view != null) + { + textBoxFio.Text = view.ImplementerFIO; + textBoxPassword.Text = view.Password; + numericUpDownQualification.Value = view.Qualification; + numericUpDownWorkExperience.Value = view.WorkExperience; + } + } + 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(textBoxPassword.Text)) + { + MessageBox.Show("Заполните пароль", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + if (string.IsNullOrEmpty(textBoxFio.Text)) + { + MessageBox.Show("Заполните фио", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + _logger.LogInformation("Сохранение исполнителя"); + try + { + var model = new ImplementerBindingModel + { + Id = _id ?? 0, + ImplementerFIO = textBoxFio.Text, + Password = textBoxPassword.Text, + Qualification = (int)numericUpDownQualification.Value, + WorkExperience = (int)numericUpDownWorkExperience.Value, + }; + var operationResult = _id.HasValue ? _logic.Update(model) : _logic.Create(model); + if (!operationResult) + { + throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); + } + MessageBox.Show("Сохранение прошло успешно", "Сообщение", + MessageBoxButtons.OK, MessageBoxIcon.Information); + DialogResult = DialogResult.OK; + Close(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка сохранения исполнителя"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, + MessageBoxIcon.Error); + } + } + + private void ButtonCancel_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.Cancel; + Close(); + } + } +} diff --git a/IceCreamShop/IceCreamShop/FormImplementer.resx b/IceCreamShop/IceCreamShop/FormImplementer.resx new file mode 100644 index 0000000..f298a7b --- /dev/null +++ b/IceCreamShop/IceCreamShop/FormImplementer.resx @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/IceCreamShop/IceCreamShop/FormImplementers.Designer.cs b/IceCreamShop/IceCreamShop/FormImplementers.Designer.cs new file mode 100644 index 0000000..66d72d3 --- /dev/null +++ b/IceCreamShop/IceCreamShop/FormImplementers.Designer.cs @@ -0,0 +1,127 @@ +namespace IceCreamShopView +{ + partial class FormImplementers + { + /// + /// 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.buttonRef = new System.Windows.Forms.Button(); + this.buttonDel = new System.Windows.Forms.Button(); + this.buttonUpd = new System.Windows.Forms.Button(); + this.buttonAdd = new System.Windows.Forms.Button(); + this.dataGridView = new System.Windows.Forms.DataGridView(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit(); + this.SuspendLayout(); + // + // buttonRef + // + this.buttonRef.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonRef.Location = new System.Drawing.Point(688, 182); + this.buttonRef.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.buttonRef.Name = "buttonRef"; + this.buttonRef.Size = new System.Drawing.Size(103, 49); + this.buttonRef.TabIndex = 14; + this.buttonRef.Text = "Обновить"; + this.buttonRef.UseVisualStyleBackColor = true; + this.buttonRef.Click += new System.EventHandler(this.ButtonRef_Click); + // + // buttonDel + // + this.buttonDel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonDel.Location = new System.Drawing.Point(688, 130); + this.buttonDel.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.buttonDel.Name = "buttonDel"; + this.buttonDel.Size = new System.Drawing.Size(103, 44); + this.buttonDel.TabIndex = 13; + this.buttonDel.Text = "Удалить"; + this.buttonDel.UseVisualStyleBackColor = true; + this.buttonDel.Click += new System.EventHandler(this.ButtonDel_Click); + // + // buttonUpd + // + this.buttonUpd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonUpd.Location = new System.Drawing.Point(688, 77); + this.buttonUpd.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.buttonUpd.Name = "buttonUpd"; + this.buttonUpd.Size = new System.Drawing.Size(103, 45); + this.buttonUpd.TabIndex = 12; + this.buttonUpd.Text = "Изменить"; + this.buttonUpd.UseVisualStyleBackColor = true; + this.buttonUpd.Click += new System.EventHandler(this.ButtonUpd_Click); + // + // buttonAdd + // + this.buttonAdd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonAdd.Location = new System.Drawing.Point(688, 29); + this.buttonAdd.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.buttonAdd.Name = "buttonAdd"; + this.buttonAdd.Size = new System.Drawing.Size(103, 40); + this.buttonAdd.TabIndex = 11; + this.buttonAdd.Text = "Добавить"; + this.buttonAdd.UseVisualStyleBackColor = true; + this.buttonAdd.Click += new System.EventHandler(this.ButtonAdd_Click); + // + // dataGridView + // + this.dataGridView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView.Location = new System.Drawing.Point(12, 13); + this.dataGridView.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.dataGridView.Name = "dataGridView"; + this.dataGridView.RowHeadersWidth = 51; + this.dataGridView.RowTemplate.Height = 25; + this.dataGridView.Size = new System.Drawing.Size(670, 425); + this.dataGridView.TabIndex = 10; + // + // FormImplementers + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(803, 451); + this.Controls.Add(this.buttonRef); + this.Controls.Add(this.buttonDel); + this.Controls.Add(this.buttonUpd); + this.Controls.Add(this.buttonAdd); + this.Controls.Add(this.dataGridView); + this.Name = "FormImplementers"; + this.Text = "Исполнители"; + this.Load += new System.EventHandler(this.FormImplementers_Load); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private Button buttonRef; + private Button buttonDel; + private Button buttonUpd; + private Button buttonAdd; + private DataGridView dataGridView; + } +} \ No newline at end of file diff --git a/IceCreamShop/IceCreamShop/FormImplementers.cs b/IceCreamShop/IceCreamShop/FormImplementers.cs new file mode 100644 index 0000000..3f68360 --- /dev/null +++ b/IceCreamShop/IceCreamShop/FormImplementers.cs @@ -0,0 +1,109 @@ +using IceCreamShop; +using IceCreamShopContracts.BindingModels; +using IceCreamShopContracts.BusinessLogicsContracts; +using Microsoft.Extensions.Logging; + + +namespace IceCreamShopView +{ + public partial class FormImplementers : Form + { + private readonly ILogger _logger; + private readonly IImplementerLogic _logic; + public FormImplementers(ILogger logger, IImplementerLogic logic) + { + InitializeComponent(); + _logger = logger; + _logic = logic; + } + + private void FormImplementers_Load(object sender, EventArgs e) + { + LoadData(); + } + + private void LoadData() + { + try + { + var list = _logic.ReadList(null); + if (list != null) + { + dataGridView.DataSource = list; + dataGridView.Columns["Id"].Visible = false; + dataGridView.Columns["ImplementerFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; + } + _logger.LogInformation("Загрузка исполнителей"); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка загрузки исполнителей"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, + MessageBoxIcon.Error); + } + } + + private void ButtonAdd_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormImplementer)); + if (service is FormImplementer form) + { + if (form.ShowDialog() == DialogResult.OK) + { + LoadData(); + } + } + } + + private void ButtonUpd_Click(object sender, EventArgs e) + { + if (dataGridView.SelectedRows.Count == 1) + { + var service = Program.ServiceProvider?.GetService(typeof(FormImplementer)); + if (service is FormImplementer form) + { + form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + if (form.ShowDialog() == DialogResult.OK) + { + LoadData(); + } + } + } + } + + private void ButtonDel_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 ImplementerBindingModel + { + Id = id + })) + { + throw new Exception("Ошибка при удалении. Дополнительная информация в логах."); + } + LoadData(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка удаления исполнителя"); + MessageBox.Show(ex.Message, "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + } + private void ButtonRef_Click(object sender, EventArgs e) + { + LoadData(); + } + } +} diff --git a/IceCreamShop/IceCreamShop/FormImplementers.resx b/IceCreamShop/IceCreamShop/FormImplementers.resx new file mode 100644 index 0000000..f298a7b --- /dev/null +++ b/IceCreamShop/IceCreamShop/FormImplementers.resx @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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/IceCreamShop/IceCreamShop/FormMain.Designer.cs b/IceCreamShop/IceCreamShop/FormMain.Designer.cs index 3b2da95..9a72c3b 100644 --- a/IceCreamShop/IceCreamShop/FormMain.Designer.cs +++ b/IceCreamShop/IceCreamShop/FormMain.Designer.cs @@ -30,26 +30,26 @@ { this.buttonUpdate = new System.Windows.Forms.Button(); this.buttonSetToFinish = new System.Windows.Forms.Button(); - this.buttonSetToDone = new System.Windows.Forms.Button(); - this.buttonSetToWork = new System.Windows.Forms.Button(); this.buttonCreateOrder = new System.Windows.Forms.Button(); this.dataGridView = new System.Windows.Forms.DataGridView(); this.menuStrip = new System.Windows.Forms.MenuStrip(); this.справочникиToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.компонентыToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.мороженоеToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.клиентыToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ImplementersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.отчетыToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.iceCreamComponentsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.iceCreamToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.ordersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.клиентыToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.DoWorkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit(); this.menuStrip.SuspendLayout(); this.SuspendLayout(); // // buttonUpdate // - this.buttonUpdate.Location = new System.Drawing.Point(1067, 390); + this.buttonUpdate.Location = new System.Drawing.Point(1235, 149); this.buttonUpdate.Name = "buttonUpdate"; this.buttonUpdate.Size = new System.Drawing.Size(194, 49); this.buttonUpdate.TabIndex = 13; @@ -59,7 +59,7 @@ // // buttonSetToFinish // - this.buttonSetToFinish.Location = new System.Drawing.Point(1067, 298); + this.buttonSetToFinish.Location = new System.Drawing.Point(1235, 94); this.buttonSetToFinish.Name = "buttonSetToFinish"; this.buttonSetToFinish.Size = new System.Drawing.Size(194, 49); this.buttonSetToFinish.TabIndex = 12; @@ -67,29 +67,9 @@ this.buttonSetToFinish.UseVisualStyleBackColor = true; this.buttonSetToFinish.Click += new System.EventHandler(this.buttonSetToFinish_Click); // - // buttonSetToDone - // - this.buttonSetToDone.Location = new System.Drawing.Point(1067, 211); - this.buttonSetToDone.Name = "buttonSetToDone"; - this.buttonSetToDone.Size = new System.Drawing.Size(194, 49); - this.buttonSetToDone.TabIndex = 11; - this.buttonSetToDone.Text = "Заказ готов"; - this.buttonSetToDone.UseVisualStyleBackColor = true; - this.buttonSetToDone.Click += new System.EventHandler(this.buttonSetToDone_Click); - // - // buttonSetToWork - // - this.buttonSetToWork.Location = new System.Drawing.Point(1067, 122); - this.buttonSetToWork.Name = "buttonSetToWork"; - this.buttonSetToWork.Size = new System.Drawing.Size(194, 49); - this.buttonSetToWork.TabIndex = 10; - this.buttonSetToWork.Text = "Отдать на выполнение"; - this.buttonSetToWork.UseVisualStyleBackColor = true; - this.buttonSetToWork.Click += new System.EventHandler(this.buttonSetToWork_Click); - // // buttonCreateOrder // - this.buttonCreateOrder.Location = new System.Drawing.Point(1067, 33); + this.buttonCreateOrder.Location = new System.Drawing.Point(1235, 39); this.buttonCreateOrder.Name = "buttonCreateOrder"; this.buttonCreateOrder.Size = new System.Drawing.Size(194, 49); this.buttonCreateOrder.TabIndex = 9; @@ -104,7 +84,7 @@ this.dataGridView.Name = "dataGridView"; this.dataGridView.RowHeadersWidth = 51; this.dataGridView.RowTemplate.Height = 29; - this.dataGridView.Size = new System.Drawing.Size(1047, 407); + this.dataGridView.Size = new System.Drawing.Size(1215, 407); this.dataGridView.TabIndex = 8; // // menuStrip @@ -112,11 +92,12 @@ this.menuStrip.ImageScalingSize = new System.Drawing.Size(20, 20); this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.справочникиToolStripMenuItem, - this.отчетыToolStripMenuItem}); + this.отчетыToolStripMenuItem, + this.DoWorkToolStripMenuItem}); this.menuStrip.Location = new System.Drawing.Point(0, 0); this.menuStrip.Name = "menuStrip"; this.menuStrip.Padding = new System.Windows.Forms.Padding(6, 3, 0, 3); - this.menuStrip.Size = new System.Drawing.Size(1273, 30); + this.menuStrip.Size = new System.Drawing.Size(1441, 30); this.menuStrip.TabIndex = 7; this.menuStrip.Text = "Справочники"; // @@ -125,7 +106,8 @@ this.справочникиToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.компонентыToolStripMenuItem, this.мороженоеToolStripMenuItem, - this.клиентыToolStripMenuItem}); + this.клиентыToolStripMenuItem, + this.ImplementersToolStripMenuItem}); this.справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem"; this.справочникиToolStripMenuItem.Size = new System.Drawing.Size(117, 24); this.справочникиToolStripMenuItem.Text = "Справочники"; @@ -133,17 +115,31 @@ // компонентыToolStripMenuItem // this.компонентыToolStripMenuItem.Name = "компонентыToolStripMenuItem"; - this.компонентыToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.компонентыToolStripMenuItem.Size = new System.Drawing.Size(185, 26); this.компонентыToolStripMenuItem.Text = "Компоненты"; this.компонентыToolStripMenuItem.Click += new System.EventHandler(this.компонентыToolStripMenuItem_Click); // // мороженоеToolStripMenuItem // this.мороженоеToolStripMenuItem.Name = "мороженоеToolStripMenuItem"; - this.мороженоеToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.мороженоеToolStripMenuItem.Size = new System.Drawing.Size(185, 26); this.мороженоеToolStripMenuItem.Text = "Мороженое"; this.мороженоеToolStripMenuItem.Click += new System.EventHandler(this.мороженоеToolStripMenuItem_Click); // + // клиентыToolStripMenuItem + // + this.клиентыToolStripMenuItem.Name = "клиентыToolStripMenuItem"; + this.клиентыToolStripMenuItem.Size = new System.Drawing.Size(185, 26); + this.клиентыToolStripMenuItem.Text = "Клиенты"; + this.клиентыToolStripMenuItem.Click += new System.EventHandler(this.клиентыToolStripMenuItem_Click); + // + // ImplementersToolStripMenuItem + // + this.ImplementersToolStripMenuItem.Name = "ImplementersToolStripMenuItem"; + this.ImplementersToolStripMenuItem.Size = new System.Drawing.Size(185, 26); + this.ImplementersToolStripMenuItem.Text = "Исполнители"; + this.ImplementersToolStripMenuItem.Click += new System.EventHandler(this.ImplementersToolStripMenuItem_Click); + // // отчетыToolStripMenuItem // this.отчетыToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -175,22 +171,20 @@ this.ordersToolStripMenuItem.Text = "Список заказов"; this.ordersToolStripMenuItem.Click += new System.EventHandler(this.OrdersToolStripMenuItem_Click); // - // клиентыToolStripMenuItem + // DoWorkToolStripMenuItem // - this.клиентыToolStripMenuItem.Name = "клиентыToolStripMenuItem"; - this.клиентыToolStripMenuItem.Size = new System.Drawing.Size(224, 26); - this.клиентыToolStripMenuItem.Text = "Клиенты"; - this.клиентыToolStripMenuItem.Click += new System.EventHandler(this.клиентыToolStripMenuItem_Click); + this.DoWorkToolStripMenuItem.Name = "DoWorkToolStripMenuItem"; + this.DoWorkToolStripMenuItem.Size = new System.Drawing.Size(114, 24); + this.DoWorkToolStripMenuItem.Text = "Запуск работ"; + this.DoWorkToolStripMenuItem.Click += new System.EventHandler(this.DoWorkToolStripMenuItem_Click); // // FormMain // this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1273, 463); + this.ClientSize = new System.Drawing.Size(1441, 463); this.Controls.Add(this.buttonUpdate); this.Controls.Add(this.buttonSetToFinish); - this.Controls.Add(this.buttonSetToDone); - this.Controls.Add(this.buttonSetToWork); this.Controls.Add(this.buttonCreateOrder); this.Controls.Add(this.dataGridView); this.Controls.Add(this.menuStrip); @@ -210,8 +204,6 @@ private Button buttonUpdate; private Button buttonSetToFinish; - private Button buttonSetToDone; - private Button buttonSetToWork; private Button buttonCreateOrder; private DataGridView dataGridView; private MenuStrip menuStrip; @@ -223,5 +215,7 @@ private ToolStripMenuItem iceCreamToolStripMenuItem; private ToolStripMenuItem ordersToolStripMenuItem; private ToolStripMenuItem клиентыToolStripMenuItem; + private ToolStripMenuItem ImplementersToolStripMenuItem; + private ToolStripMenuItem DoWorkToolStripMenuItem; } } \ No newline at end of file diff --git a/IceCreamShop/IceCreamShop/FormMain.cs b/IceCreamShop/IceCreamShop/FormMain.cs index 172e9b5..a7d5832 100644 --- a/IceCreamShop/IceCreamShop/FormMain.cs +++ b/IceCreamShop/IceCreamShop/FormMain.cs @@ -21,12 +21,14 @@ namespace IceCreamShopView private readonly ILogger _logger; private readonly IOrderLogic _orderLogic; private readonly IReportLogic _reportLogic; - public FormMain(ILogger logger, IOrderLogic orderLogic, IReportLogic reportLogic) + private readonly IWorkProcess _workProcess; + public FormMain(ILogger logger, IOrderLogic orderLogic, IReportLogic reportLogic, IWorkProcess workProcess) { InitializeComponent(); _logger = logger; _orderLogic = orderLogic; _reportLogic = reportLogic; + _workProcess = workProcess; } private void FormMain_Load(object sender, EventArgs e) @@ -45,6 +47,7 @@ namespace IceCreamShopView dataGridView.DataSource = list; dataGridView.Columns["IceCreamId"].Visible = false; dataGridView.Columns["ClientId"].Visible = false; + dataGridView.Columns["ImplementerId"].Visible = false; } _logger.LogInformation("Загрузка заказов"); } @@ -204,5 +207,22 @@ namespace IceCreamShopView form.ShowDialog(); } } + + private void ImplementersToolStripMenuItem_Click(object sender, EventArgs e) + { + var service = Program.ServiceProvider?.GetService(typeof(FormImplementers)); + if (service is FormImplementers form) + { + form.ShowDialog(); + } + } + + private void DoWorkToolStripMenuItem_Click(object sender, EventArgs e) + { + _workProcess.DoWork(( + Program.ServiceProvider?.GetService(typeof(IImplementerLogic)) as IImplementerLogic)!,_orderLogic); + MessageBox.Show("Процесс обработки запущен", "Сообщение", + MessageBoxButtons.OK, MessageBoxIcon.Information); + } } } diff --git a/IceCreamShop/IceCreamShop/Program.cs b/IceCreamShop/IceCreamShop/Program.cs index f78aa62..02ccaad 100644 --- a/IceCreamShop/IceCreamShop/Program.cs +++ b/IceCreamShop/IceCreamShop/Program.cs @@ -58,7 +58,9 @@ namespace IceCreamShop services.AddTransient(); services.AddTransient(); - services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Implements/OrderStorage.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Implements/OrderStorage.cs index 10ad604..c657526 100644 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Implements/OrderStorage.cs +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Implements/OrderStorage.cs @@ -107,21 +107,14 @@ namespace IceCreamShopDatabaseImplement.Implements public OrderViewModel? Update(OrderBindingModel model) { using var context = new IceCreamShopDatabase(); - - var order = context.Orders - .Include(x => x.Client) - .Include(x => x.Implementer) - .FirstOrDefault(x => x.Id == model.Id); - + var order = context.Orders.FirstOrDefault(x => x.Id == model.Id); if (order == null) { return null; } - order.Update(model); context.SaveChanges(); - - return order.GetViewModel; + return context.Orders.Include(x => x.IceCream).Include(x => x.Implementer).FirstOrDefault(x => x.Id == model.Id)?.GetViewModel; } } } diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Models/Order.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Models/Order.cs index c28a550..4568883 100644 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Models/Order.cs +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Models/Order.cs @@ -26,8 +26,8 @@ namespace IceCreamShopDatabaseImplement.Models public DateTime? DateImplement { get; set; } public int Id { get; set; } - public virtual IceCream IceCream{ get; set; } - public virtual Client Client { get; set; } + public virtual IceCream IceCream{ get; private set; } + public virtual Client Client { get; private set; } public Implementer? Implementer { get; private set; } public static Order? Create(OrderBindingModel? model) { @@ -56,6 +56,7 @@ namespace IceCreamShopDatabaseImplement.Models return; } Status = model.Status; + ImplementerId = model.ImplementerId; DateImplement = model.DateImplement; } @@ -76,7 +77,7 @@ namespace IceCreamShopDatabaseImplement.Models DateImplement = DateImplement, Id = Id, IceCreamName = context.IceCreams.FirstOrDefault(x => x.Id == IceCreamId)?.IceCreamName ?? string.Empty, - ImplementerFIO = Implementer?.ImplementerFIO ?? string.Empty, + ImplementerFIO = context.Implementers.FirstOrDefault(x => x.Id == ImplementerId)?.ImplementerFIO ?? string.Empty, ClientFIO = Client?.ClientFIO ?? string.Empty, }; } -- 2.25.1 From b489c4725173ac302bcb5e084884acc43ccf5c8a Mon Sep 17 00:00:00 2001 From: Inohara Date: Sun, 9 Apr 2023 14:50:08 +0400 Subject: [PATCH 04/17] update --- IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs index ef9485d..5c3e941 100644 --- a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs +++ b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs @@ -131,7 +131,7 @@ namespace IceCreamBusinessLogic.BusinessLogics } model.Status = newStatus; if (model.Status == OrderStatus.Выдан) model.DateImplement = DateTime.Now; - if (_orderStorage. (model) == null) + if (_orderStorage.Update(model) == null) { model.Status--; _logger.LogWarning("Update operation failed"); -- 2.25.1 From ccfced6fd3d34d3ee8c2e99a859955da398b44da Mon Sep 17 00:00:00 2001 From: Inohara Date: Sun, 9 Apr 2023 20:36:57 +0400 Subject: [PATCH 05/17] =?UTF-8?q?=D0=B2=D1=80=D0=BE=D0=B4=D0=B5=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessLogics/OrderLogic.cs | 51 +++++++------------ .../BusinessLogics/WorkModeling.cs | 5 +- 2 files changed, 21 insertions(+), 35 deletions(-) diff --git a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs index 5c3e941..97f523b 100644 --- a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs +++ b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs @@ -95,45 +95,32 @@ namespace IceCreamBusinessLogic.BusinessLogics _logger.LogInformation("Order. OrderID:{Id}.Sum:{ Sum}. DocumentId: { DocumentId}", model.Id, model.Sum, model.IceCreamId); } - public bool SetNewStatus(OrderBindingModel rawModel, OrderStatus newStatus) + public bool SetNewStatus(OrderBindingModel model, OrderStatus orderStatus) { - var viewModel = _orderStorage.GetElement(new OrderSearchModel + // Находим статус заказа по его айди + var vmodel = _orderStorage.GetElement(new() { Id = model.Id }); + if (vmodel == null) { - Id = rawModel.Id - }); - - if (viewModel == null) - { - _logger.LogWarning("Order model not found"); - return false; + throw new ArgumentNullException(nameof(model)); } - - OrderBindingModel model = new OrderBindingModel + if ((int)vmodel.Status + 1 != (int)orderStatus) { - Id = viewModel.Id, - IceCreamId = viewModel.IceCreamId, - Status = viewModel.Status, - DateCreate = viewModel.DateCreate, - DateImplement = viewModel.DateImplement, - Count = viewModel.Count, - Sum = viewModel.Sum - }; - if (rawModel.ImplementerId.HasValue) - { - model.ImplementerId = rawModel.ImplementerId; + throw new InvalidOperationException($"Попытка перевести заказ не в следующий статус: " + + $"Текущий статус: {vmodel.Status} \n" + + $"Планируемый статус: {orderStatus} \n" + + $"Доступный статус: {(OrderStatus)((int)vmodel.Status + 1)}"); } - - CheckModel(model); - if (model.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; + model.Status = orderStatus; + model.DateCreate = vmodel.DateCreate; + if (model.DateImplement == null) + model.DateImplement = vmodel.DateImplement; + if (vmodel.ImplementerId.HasValue) + model.ImplementerId = vmodel.ImplementerId; + model.IceCreamId = vmodel.IceCreamId; + model.Sum = vmodel.Sum; + model.Count = vmodel.Count; if (_orderStorage.Update(model) == null) { - model.Status--; _logger.LogWarning("Update operation failed"); return false; } diff --git a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs index 93109ed..c4f04ef 100644 --- a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs +++ b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs @@ -72,12 +72,11 @@ namespace IceCreamBusinessLogic.BusinessLogic ImplementerId = implementer.Id }); // делаем работу - Thread.Sleep(implementer.WorkExperience * _rnd.Next(100, 1000) * order.Count); + Thread.Sleep(implementer.WorkExperience * _rnd.Next(200, 500) * order.Count); _logger.LogDebug("DoWork. Worker {Id} finish order {Order}", implementer.Id, order.Id); _orderLogic.DeliveryOrder(new OrderBindingModel { Id = order.Id, - ImplementerId = implementer.Id }); // отдыхаем Thread.Sleep(implementer.Qualification * _rnd.Next(10, 100)); @@ -121,7 +120,7 @@ namespace IceCreamBusinessLogic.BusinessLogic // доделываем работу Thread.Sleep(implementer.WorkExperience * _rnd.Next(100, 300) * runOrder.Count); _logger.LogDebug("DoWork. Worker {Id} finish order {Order}", implementer.Id, runOrder.Id); - _orderLogic.FinishOrder(new OrderBindingModel + _orderLogic.DeliveryOrder(new OrderBindingModel { Id = runOrder.Id }); -- 2.25.1 From 1f1851d25826191b24de8bc1f208da0ec86c2a5f Mon Sep 17 00:00:00 2001 From: Inohara Date: Sun, 9 Apr 2023 20:39:42 +0400 Subject: [PATCH 06/17] =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BD=D1=83=D0=BB?= =?UTF-8?q?=D0=B0=20=D1=86=D0=B8=D1=84=D0=BE=D1=80=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs index c4f04ef..930eeba 100644 --- a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs +++ b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs @@ -72,7 +72,7 @@ namespace IceCreamBusinessLogic.BusinessLogic ImplementerId = implementer.Id }); // делаем работу - Thread.Sleep(implementer.WorkExperience * _rnd.Next(200, 500) * order.Count); + Thread.Sleep(implementer.WorkExperience * _rnd.Next(100, 1000) * order.Count); _logger.LogDebug("DoWork. Worker {Id} finish order {Order}", implementer.Id, order.Id); _orderLogic.DeliveryOrder(new OrderBindingModel { -- 2.25.1 From 7a0afed40e3cc200cf84757a12fb1135ddac62fb Mon Sep 17 00:00:00 2001 From: Inohara Date: Tue, 11 Apr 2023 09:28:26 +0400 Subject: [PATCH 07/17] =?UTF-8?q?=D1=81=D0=B4=D0=B0=D0=BD=D0=B0=206=20?= =?UTF-8?q?=D0=B1=D0=B0=D0=B7=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs index 930eeba..c4f04ef 100644 --- a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs +++ b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs @@ -72,7 +72,7 @@ namespace IceCreamBusinessLogic.BusinessLogic ImplementerId = implementer.Id }); // делаем работу - Thread.Sleep(implementer.WorkExperience * _rnd.Next(100, 1000) * order.Count); + Thread.Sleep(implementer.WorkExperience * _rnd.Next(200, 500) * order.Count); _logger.LogDebug("DoWork. Worker {Id} finish order {Order}", implementer.Id, order.Id); _orderLogic.DeliveryOrder(new OrderBindingModel { -- 2.25.1 From 2c2eec51fffd7680f64cf2b6089951ee23fc32cd Mon Sep 17 00:00:00 2001 From: Inohara Date: Mon, 24 Apr 2023 18:50:18 +0400 Subject: [PATCH 08/17] =?UTF-8?q?=D0=BF=D0=BE=D1=87=D0=B5=D0=BC=D1=83=20?= =?UTF-8?q?=D1=82=D0=BE=20=D0=BD=D0=B5=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IceCreamShopDatabaseImplement/Models/Shop.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Models/Shop.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Models/Shop.cs index 7484a20..8143f85 100644 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Models/Shop.cs +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Models/Shop.cs @@ -89,9 +89,12 @@ namespace IceCreamShopDatabaseImplement.Models if (iceCreams != null && iceCreams.Count > 0) { // удалили те, которых нет в модели - context.ShopIcecreams.RemoveRange(iceCreams.Where(rec => !model.ShopIceCreams.ContainsKey(rec.IceCreamId))); - context.SaveChanges(); - iceCreams = context.ShopIcecreams.Where(rec => rec.ShopId == model.Id).ToList(); + if (shopIcecreams != null && shopIcecreams.Count > 0) + { + context.ShopIcecreams + .RemoveRange(shopIcecreams + .Where(rec => !model.ShopIceCreams + .ContainsKey(rec.IceCreamId))); // обновили количество у существующих записей foreach (var updateIceCream in iceCreams) { -- 2.25.1 From 91fdd361b6216cf07134ee56fd24f49096e09be6 Mon Sep 17 00:00:00 2001 From: Inohara Date: Tue, 25 Apr 2023 08:54:06 +0400 Subject: [PATCH 09/17] =?UTF-8?q?=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessLogics/OrderLogic.cs | 17 ++- .../BusinessLogics/ShopLogic.cs | 144 ++++++++++++++---- .../BusinessLogics/WorkModeling.cs | 33 +++- .../IceCreamShop/FormMain.Designer.cs | 69 +++------ IceCreamShop/IceCreamShop/FormMain.cs | 53 ------- .../BusinessLogicsContracts/IShopLogic.cs | 2 + .../Enums/OrderStatus.cs | 3 +- .../Implements/OrderStorage.cs | 2 +- .../IceCreamShopDatabaseModelSnapshot.cs | 31 ++-- .../Models/Order.cs | 2 +- .../Models/Shop.cs | 41 +++-- 11 files changed, 212 insertions(+), 185 deletions(-) diff --git a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs index 09a0704..290bd73 100644 --- a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs +++ b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs @@ -110,13 +110,27 @@ namespace IceCreamBusinessLogic.BusinessLogics { throw new ArgumentNullException(nameof(model)); } - if ((int)vmodel.Status + 1 != (int)orderStatus) + if ((int)vmodel.Status + 1 != (int)orderStatus && !(vmodel.Status == OrderStatus.Ожидается && orderStatus == OrderStatus.Готов)) { throw new InvalidOperationException($"Попытка перевести заказ не в следующий статус: " + $"Текущий статус: {vmodel.Status} \n" + $"Планируемый статус: {orderStatus} \n" + $"Доступный статус: {(OrderStatus)((int)vmodel.Status + 1)}"); } + if (orderStatus == OrderStatus.Готов || orderStatus == OrderStatus.Ожидается) + { + var icecream = _iceCreamStorage.GetElement(new() { Id = vmodel.IceCreamId }); + + if (icecream == null || !_shopLogic.AddIceCream(icecream, vmodel.Count)) + { + _logger.LogWarning($"Не удалось заполнить магазины изделием '{icecream?.IceCreamName ?? string.Empty}' из заказа {vmodel.Id}"); + orderStatus = OrderStatus.Ожидается; + } + else + { + orderStatus = OrderStatus.Готов; + } + } model.Status = orderStatus; model.DateCreate = vmodel.DateCreate; if (model.DateImplement == null) @@ -134,7 +148,6 @@ namespace IceCreamBusinessLogic.BusinessLogics return true; } - public OrderViewModel? ReadElement(OrderSearchModel model) { if (model == null) diff --git a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/ShopLogic.cs b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/ShopLogic.cs index acbc42c..bc15aa5 100644 --- a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/ShopLogic.cs +++ b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/ShopLogic.cs @@ -76,49 +76,133 @@ namespace IceCreamBusinessLogic.BusinessLogics throw new ArgumentNullException("Count of iceCreams in supply myst be more than 0", nameof(count)); } - var shopElement = _shopStorage.GetElement(model); - if (shopElement == null) + _logger.LogInformation("AddPastryInShop. ShopName:{ShopName}.Id:{ Id}", model.Name, model.Id); + var element = _shopStorage.GetElement(model); + if (element == null) { - _logger.LogWarning("Required shop element not found in storage"); + _logger.LogWarning("AddPastryInShop element not found"); return false; } - _logger.LogInformation("Shop element found. ID: {0}, Name: {1}", shopElement.Id, shopElement.Name); + _logger.LogInformation("AddPastryInShop find. Id:{Id}", element.Id); - var countDocs = 0; - foreach (var doc in shopElement.ShopIceCreams) + if (element.ShopIceCreams.TryGetValue(iceCream.Id, out var sameIcecream)) { - countDocs += doc.Value.Item2; - } - if (shopElement.IceCreamMaxCount - countDocs >= count) - { - if (shopElement.ShopIceCreams.TryGetValue(iceCream.Id, out var sameDocument)) - { - shopElement.ShopIceCreams[iceCream.Id] = (iceCream, sameDocument.Item2 + count); - _logger.LogInformation("Same iceCream found by supply. Added {0} of {1} in {2} shop", count, iceCream.IceCreamName, shopElement.Name); - } - else - { - shopElement.ShopIceCreams[iceCream.Id] = (iceCream, count); - _logger.LogInformation("New iceCream added by supply. Added {0} of {1} in {2} shop", count, iceCream.IceCreamName, shopElement.Name); - } - _shopStorage.Update(new() - { - Id = shopElement.Id, - Name = shopElement.Name, - Adress = shopElement.Adress, - OpeningDate = shopElement.OpeningDate, - ShopIceCreams = shopElement.ShopIceCreams, - IceCreamMaxCount = shopElement.IceCreamMaxCount - }); + element.ShopIceCreams[iceCream.Id] = (iceCream, sameIcecream.Item2 + count); + _logger.LogInformation("Same iceCream found by supply. Added {0} of {1} in {2} shop", count, iceCream.IceCreamName, element.Name); } else { - _logger.LogWarning("Required shop is overflowed"); + element.ShopIceCreams[iceCream.Id] = (iceCream, count); + _logger.LogInformation("New iceCream added by supply. Added {0} of {1} in {2} shop", count, iceCream.IceCreamName, element.Name); + } + +/* var prevCount = element.ShopIceCreams.GetValueOrDefault(iceCream.Id, (iceCream, 0)).Item2; + element.ShopIceCreams[iceCream.Id] = (iceCream, prevCount + count); + _logger.LogInformation( + "AddPastryInShop. Has been added {count} {pastry} in {ShopName}", + count, iceCream.IceCreamName, element.Name); +*/ + _shopStorage.Update(new() + { + Id = element.Id, + Adress = element.Adress, + Name = element.Name, + OpeningDate = element.OpeningDate, + ShopIceCreams = element.ShopIceCreams + }); + return true; + + + /* var shopElement = _shopStorage.GetElement(model); + if (shopElement == null) + { + _logger.LogWarning("Required shop element not found in storage"); + return false; + } + _logger.LogInformation("Shop element found. ID: {0}, Name: {1}", shopElement.Id, shopElement.Name); + + var countIcecreams = 0; + foreach (var icecream in shopElement.ShopIceCreams) + { + countIcecreams += icecream.Value.Item2; + } + if (shopElement.IceCreamMaxCount - countIcecreams >= count) + { + if (shopElement.ShopIceCreams.TryGetValue(iceCream.Id, out var sameIcecream)) + { + shopElement.ShopIceCreams[iceCream.Id] = (iceCream, sameIcecream.Item2 + count); + _logger.LogInformation("Same iceCream found by supply. Added {0} of {1} in {2} shop", count, iceCream.IceCreamName, shopElement.Name); + } + else + { + shopElement.ShopIceCreams[iceCream.Id] = (iceCream, count); + _logger.LogInformation("New iceCream added by supply. Added {0} of {1} in {2} shop", count, iceCream.IceCreamName, shopElement.Name); + } + _shopStorage.Update(new() + { + Id = shopElement.Id, + Name = shopElement.Name, + Adress = shopElement.Adress, + OpeningDate = shopElement.OpeningDate, + ShopIceCreams = shopElement.ShopIceCreams, + IceCreamMaxCount = shopElement.IceCreamMaxCount + }); + } + else + { + _logger.LogWarning("Required shop is overflowed"); + return false; + } + return true;*/ + } + + public bool AddIceCream(IIceCreamModel icecream, int count) + { + if (count <= 0) + { + _logger.LogWarning("AddPastriesInShops. Количество добавляемых изделий должно быть больше 0. Количество - {count}", count); return false; } + var freePlaces = GetFreePlaces(count); + if (freePlaces < 0) + { + _logger.LogInformation("AddPastriesInShops. Не удалось добавить изделия в магазины, поскольку они переполнены." + + "Освободите магазины на {places} изделий", -freePlaces); + return false; + } + foreach (var shop in _shopStorage.GetFullList()) + { +/* int freeInShop = shop.IceCreamMaxCount - shop.ShopIceCreams.Select(x => x.Value.Item2).Sum(); + if (freeInShop < count) continue;*/ + + var cnt = Math.Min(count, shop.IceCreamMaxCount - shop.ShopIceCreams.Select(x => x.Value.Item2).Sum()); + if (cnt <= 0) + { + continue; + } + if (!SupplyIceCreams(new() { Id = shop.Id }, icecream, cnt)) + { + _logger.LogWarning("При добавления изделий во все магазины произошла ошибка"); + return false; + } + count -= cnt; + if (count == 0) + { + return true; + } + } return true; } + //свободные места со всех магазинов + public int GetFreePlaces(int countIceCreams) + { + // Сумма разностей между максимальный кол-вом изделий и суммой всех изделий в магазине + return _shopStorage.GetFullList() + .Select(x => x.IceCreamMaxCount - x.ShopIceCreams.Select(p => p.Value.Item2).Sum()) + .Sum() - countIceCreams; + } + public bool SellIceCreams(IIceCreamModel iceCream, int count) { return _shopStorage.SellIceCreams(iceCream, count); diff --git a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs index c4f04ef..65fe55a 100644 --- a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs +++ b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs @@ -32,7 +32,7 @@ namespace IceCreamBusinessLogic.BusinessLogic } // Поскольку у нас могут быть заказы в работе мы не дожны заканчивать работы, если нет Принятых заказов // Поэтому находим заказы в работе и продолжаем работу, если они есть - var orders = _orderLogic.ReadList(new OrderSearchModel { Statusses = new() { OrderStatus.Принят, OrderStatus.Выполняется } }); + var orders = _orderLogic.ReadList(new OrderSearchModel { Statusses = new() { OrderStatus.Принят, OrderStatus.Выполняется, OrderStatus.Ожидается } }); if (orders == null || orders.Count == 0) { _logger.LogWarning("DoWork. Orders is null or empty"); @@ -56,7 +56,36 @@ namespace IceCreamBusinessLogic.BusinessLogic { return; } - await RunOrderInWork(implementer, orders); + + // Для заказов находящихся в статусе ожидания работник не должен делать никакую работу, а должен просто пытаться перевести их в статус готов + await Task.Run(() => + { + foreach (var order in orders.Where(x => x.Status == OrderStatus.Ожидается && x.ImplementerId == implementer.Id)) + { + try + { + _orderLogic.DeliveryOrder(new OrderBindingModel + { + Id = order.Id + }); + } + // кто-то мог уже перехватить + catch (InvalidOperationException ex) + { + _logger.LogWarning(ex, "Error try get work"); + } + // заканчиваем выполнение имитации в случае иной ошибки + catch (Exception ex) + { + _logger.LogError(ex, "Error while do work"); + throw; + } + // отдыхаем + Thread.Sleep(implementer.Qualification * _rnd.Next(10, 100)); + } + }); + + await RunOrderInWork(implementer, orders); await Task.Run(() => { diff --git a/IceCreamShop/IceCreamShop/FormMain.Designer.cs b/IceCreamShop/IceCreamShop/FormMain.Designer.cs index d957b04..f5a299b 100644 --- a/IceCreamShop/IceCreamShop/FormMain.Designer.cs +++ b/IceCreamShop/IceCreamShop/FormMain.Designer.cs @@ -34,7 +34,6 @@ this.dataGridView = new System.Windows.Forms.DataGridView(); this.menuStrip = new System.Windows.Forms.MenuStrip(); this.справочникиToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.клиентыToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.компонентыToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.мороженоеToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.клиентыToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -44,10 +43,10 @@ this.iceCreamComponentsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.iceCreamToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.ordersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.DoWorkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.listShopsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.shopWorkloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.ordersByDateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.DoWorkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.buttonSupplyShop = new System.Windows.Forms.Button(); this.SellIceCreamButton = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit(); @@ -56,8 +55,7 @@ // // buttonUpdate // - this.buttonUpdate.Location = new System.Drawing.Point(1235, 149); - this.buttonUpdate.Location = new System.Drawing.Point(1053, 390); + this.buttonUpdate.Location = new System.Drawing.Point(1231, 392); this.buttonUpdate.Name = "buttonUpdate"; this.buttonUpdate.Size = new System.Drawing.Size(194, 49); this.buttonUpdate.TabIndex = 13; @@ -67,8 +65,7 @@ // // buttonSetToFinish // - this.buttonSetToFinish.Location = new System.Drawing.Point(1235, 94); - this.buttonSetToFinish.Location = new System.Drawing.Point(1053, 193); + this.buttonSetToFinish.Location = new System.Drawing.Point(1231, 90); this.buttonSetToFinish.Name = "buttonSetToFinish"; this.buttonSetToFinish.Size = new System.Drawing.Size(194, 49); this.buttonSetToFinish.TabIndex = 12; @@ -76,30 +73,9 @@ this.buttonSetToFinish.UseVisualStyleBackColor = true; this.buttonSetToFinish.Click += new System.EventHandler(this.buttonSetToFinish_Click); // - // buttonSetToDone - // - this.buttonSetToDone.Location = new System.Drawing.Point(1053, 139); - this.buttonSetToDone.Name = "buttonSetToDone"; - this.buttonSetToDone.Size = new System.Drawing.Size(194, 49); - this.buttonSetToDone.TabIndex = 11; - this.buttonSetToDone.Text = "Заказ готов"; - this.buttonSetToDone.UseVisualStyleBackColor = true; - this.buttonSetToDone.Click += new System.EventHandler(this.buttonSetToDone_Click); - // - // buttonSetToWork - // - this.buttonSetToWork.Location = new System.Drawing.Point(1053, 87); - this.buttonSetToWork.Name = "buttonSetToWork"; - this.buttonSetToWork.Size = new System.Drawing.Size(194, 49); - this.buttonSetToWork.TabIndex = 10; - this.buttonSetToWork.Text = "Отдать на выполнение"; - this.buttonSetToWork.UseVisualStyleBackColor = true; - this.buttonSetToWork.Click += new System.EventHandler(this.buttonSetToWork_Click); - // // buttonCreateOrder // - this.buttonCreateOrder.Location = new System.Drawing.Point(1235, 39); - this.buttonCreateOrder.Location = new System.Drawing.Point(1053, 33); + this.buttonCreateOrder.Location = new System.Drawing.Point(1231, 35); this.buttonCreateOrder.Name = "buttonCreateOrder"; this.buttonCreateOrder.Size = new System.Drawing.Size(194, 49); this.buttonCreateOrder.TabIndex = 9; @@ -114,8 +90,7 @@ this.dataGridView.Name = "dataGridView"; this.dataGridView.RowHeadersWidth = 51; this.dataGridView.RowTemplate.Height = 29; - this.dataGridView.Size = new System.Drawing.Size(1215, 407); - this.dataGridView.Size = new System.Drawing.Size(1033, 407); + this.dataGridView.Size = new System.Drawing.Size(1202, 407); this.dataGridView.TabIndex = 8; // // menuStrip @@ -128,31 +103,22 @@ this.menuStrip.Location = new System.Drawing.Point(0, 0); this.menuStrip.Name = "menuStrip"; this.menuStrip.Padding = new System.Windows.Forms.Padding(6, 3, 0, 3); - this.menuStrip.Size = new System.Drawing.Size(1441, 30); - this.menuStrip.Size = new System.Drawing.Size(1259, 30); + this.menuStrip.Size = new System.Drawing.Size(1433, 30); this.menuStrip.TabIndex = 7; this.menuStrip.Text = "Справочники"; // // справочникиToolStripMenuItem // this.справочникиToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.клиентыToolStripMenuItem, this.компонентыToolStripMenuItem, this.мороженоеToolStripMenuItem, this.клиентыToolStripMenuItem, - this.ImplementersToolStripMenuItem}); + this.ImplementersToolStripMenuItem, this.магазиныToolStripMenuItem}); this.справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem"; this.справочникиToolStripMenuItem.Size = new System.Drawing.Size(117, 24); this.справочникиToolStripMenuItem.Text = "Справочники"; // - // клиентыToolStripMenuItem - // - this.клиентыToolStripMenuItem.Name = "клиентыToolStripMenuItem"; - this.клиентыToolStripMenuItem.Size = new System.Drawing.Size(224, 26); - this.клиентыToolStripMenuItem.Text = "Клиенты"; - this.клиентыToolStripMenuItem.Click += new System.EventHandler(this.клиентыToolStripMenuItem_Click); - // // компонентыToolStripMenuItem // this.компонентыToolStripMenuItem.Name = "компонентыToolStripMenuItem"; @@ -184,7 +150,7 @@ // магазиныToolStripMenuItem // this.магазиныToolStripMenuItem.Name = "магазиныToolStripMenuItem"; - this.магазиныToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.магазиныToolStripMenuItem.Size = new System.Drawing.Size(185, 26); this.магазиныToolStripMenuItem.Text = "Магазины"; this.магазиныToolStripMenuItem.Click += new System.EventHandler(this.магазиныToolStripMenuItem_Click); // @@ -222,7 +188,6 @@ this.ordersToolStripMenuItem.Text = "Список заказов"; this.ordersToolStripMenuItem.Click += new System.EventHandler(this.OrdersToolStripMenuItem_Click); // - // DoWorkToolStripMenuItem // listShopsToolStripMenuItem // this.listShopsToolStripMenuItem.Name = "listShopsToolStripMenuItem"; @@ -244,9 +209,16 @@ this.ordersByDateToolStripMenuItem.Text = "Заказы по дате"; this.ordersByDateToolStripMenuItem.Click += new System.EventHandler(this.ordersByDateToolStripMenuItem_Click); // + // DoWorkToolStripMenuItem + // + this.DoWorkToolStripMenuItem.Name = "DoWorkToolStripMenuItem"; + this.DoWorkToolStripMenuItem.Size = new System.Drawing.Size(114, 24); + this.DoWorkToolStripMenuItem.Text = "Запуск работ"; + this.DoWorkToolStripMenuItem.Click += new System.EventHandler(this.DoWorkToolStripMenuItem_Click); + // // buttonSupplyShop // - this.buttonSupplyShop.Location = new System.Drawing.Point(1053, 290); + this.buttonSupplyShop.Location = new System.Drawing.Point(1231, 292); this.buttonSupplyShop.Name = "buttonSupplyShop"; this.buttonSupplyShop.Size = new System.Drawing.Size(194, 44); this.buttonSupplyShop.TabIndex = 14; @@ -256,11 +228,7 @@ // // SellIceCreamButton // - this.DoWorkToolStripMenuItem.Name = "DoWorkToolStripMenuItem"; - this.DoWorkToolStripMenuItem.Size = new System.Drawing.Size(114, 24); - this.DoWorkToolStripMenuItem.Text = "Запуск работ"; - this.DoWorkToolStripMenuItem.Click += new System.EventHandler(this.DoWorkToolStripMenuItem_Click); - this.SellIceCreamButton.Location = new System.Drawing.Point(1053, 246); + this.SellIceCreamButton.Location = new System.Drawing.Point(1231, 248); this.SellIceCreamButton.Name = "SellIceCreamButton"; this.SellIceCreamButton.Size = new System.Drawing.Size(194, 40); this.SellIceCreamButton.TabIndex = 15; @@ -272,8 +240,7 @@ // this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1441, 463); - this.ClientSize = new System.Drawing.Size(1259, 467); + this.ClientSize = new System.Drawing.Size(1433, 467); this.Controls.Add(this.SellIceCreamButton); this.Controls.Add(this.buttonSupplyShop); this.Controls.Add(this.buttonUpdate); diff --git a/IceCreamShop/IceCreamShop/FormMain.cs b/IceCreamShop/IceCreamShop/FormMain.cs index f900f5e..4d6f9f6 100644 --- a/IceCreamShop/IceCreamShop/FormMain.cs +++ b/IceCreamShop/IceCreamShop/FormMain.cs @@ -95,59 +95,6 @@ namespace IceCreamShopView } } - private void buttonSetToWork_Click(object sender, EventArgs e) - { - if (dataGridView.SelectedRows.Count == 1) - { - int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); - _logger.LogInformation("Заказ №{id}. Меняется статус на 'В работе'", id); - try - { - var operationResult = _orderLogic.TakeOrderInWork(new OrderBindingModel - { - Id = id, - }); - if (!operationResult) - { - throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); - } - LoadData(); - } - catch (Exception ex) - { - _logger.LogError(ex, "Ошибка передачи заказа в работу"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, - MessageBoxIcon.Error); - } - } - } - - private void buttonSetToDone_Click(object sender, EventArgs e) - { - if (dataGridView.SelectedRows.Count == 1) - { - int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); - _logger.LogInformation("Заказ №{id}. Меняется статус на 'Готов'", id); - try - { - var operationResult = _orderLogic.DeliveryOrder(new OrderBindingModel - { - Id = id, - }); - if (!operationResult) - { - throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); - } - LoadData(); - } - catch (Exception ex) - { - _logger.LogError(ex, "Ошибка отметки о готовности заказа"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - } - private void buttonSetToFinish_Click(object sender, EventArgs e) { if (dataGridView.SelectedRows.Count == 1) diff --git a/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IShopLogic.cs b/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IShopLogic.cs index bffe5c3..b86ef7a 100644 --- a/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IShopLogic.cs +++ b/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IShopLogic.cs @@ -19,5 +19,7 @@ namespace IceCreamShopContracts.BusinessLogicsContracts bool Delete(ShopBindingModel model); bool SupplyIceCreams(ShopSearchModel model, IIceCreamModel iceCream, int count); bool SellIceCreams(IIceCreamModel iceCream, int count); + bool AddIceCream(IIceCreamModel icecream, int count); + int GetFreePlaces(int countIceCreams); } } diff --git a/IceCreamShop/IceCreamShopDataModels/Enums/OrderStatus.cs b/IceCreamShop/IceCreamShopDataModels/Enums/OrderStatus.cs index 5c22c79..e7e6adc 100644 --- a/IceCreamShop/IceCreamShopDataModels/Enums/OrderStatus.cs +++ b/IceCreamShop/IceCreamShopDataModels/Enums/OrderStatus.cs @@ -6,6 +6,7 @@ Принят = 0, Выполняется = 1, Готов = 2, - Выдан = 3 + Выдан = 3, + Ожидается = 4 } } \ No newline at end of file diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Implements/OrderStorage.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Implements/OrderStorage.cs index c657526..b38b9b4 100644 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Implements/OrderStorage.cs +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Implements/OrderStorage.cs @@ -114,7 +114,7 @@ namespace IceCreamShopDatabaseImplement.Implements } order.Update(model); context.SaveChanges(); - return context.Orders.Include(x => x.IceCream).Include(x => x.Implementer).FirstOrDefault(x => x.Id == model.Id)?.GetViewModel; + return order.GetViewModel; } } } diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs index 3369a3d..8afb064 100644 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs @@ -238,7 +238,7 @@ namespace IceCreamShopDatabaseImplement.Migrations b.HasIndex("ShopId"); - b.ToTable("IceCreams"); + b.ToTable("ShopIcecreams"); }); modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCreamComponent", b => @@ -274,16 +274,15 @@ namespace IceCreamShopDatabaseImplement.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - b.Navigation("IceCream"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Order", b => - { - b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", null) + b.HasOne("IceCreamShopDatabaseImplement.Models.Implementer", "Implementer") .WithMany("Orders") - .HasForeignKey("IceCreamId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + .HasForeignKey("ImplementerId"); + + b.Navigation("Client"); + + b.Navigation("IceCream"); + + b.Navigation("Implementer"); }); modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Shop", b => @@ -301,22 +300,14 @@ namespace IceCreamShopDatabaseImplement.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - b.HasOne("IceCreamShopDatabaseImplement.Models.Implementer", "Implementer") - .WithMany("Orders") - .HasForeignKey("ImplementerId"); - b.HasOne("IceCreamShopDatabaseImplement.Models.Shop", "Shop") .WithMany("IceCreams") .HasForeignKey("ShopId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); - b.Navigation("Client"); - b.Navigation("IceCream"); - b.Navigation("Implementer"); - b.Navigation("Shop"); }); @@ -335,13 +326,13 @@ namespace IceCreamShopDatabaseImplement.Migrations b.Navigation("Components"); b.Navigation("Orders"); + + b.Navigation("Shops"); }); modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Implementer", b => { b.Navigation("Orders"); - - b.Navigation("Shops"); }); modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Shop", b => diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Models/Order.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Models/Order.cs index 4568883..9180665 100644 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Models/Order.cs +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Models/Order.cs @@ -77,7 +77,7 @@ namespace IceCreamShopDatabaseImplement.Models DateImplement = DateImplement, Id = Id, IceCreamName = context.IceCreams.FirstOrDefault(x => x.Id == IceCreamId)?.IceCreamName ?? string.Empty, - ImplementerFIO = context.Implementers.FirstOrDefault(x => x.Id == ImplementerId)?.ImplementerFIO ?? string.Empty, + ImplementerFIO = Implementer?.ImplementerFIO ?? string.Empty, ClientFIO = Client?.ClientFIO ?? string.Empty, }; } diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Models/Shop.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Models/Shop.cs index 8143f85..3c5eff6 100644 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Models/Shop.cs +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Models/Shop.cs @@ -25,7 +25,7 @@ namespace IceCreamShopDatabaseImplement.Models { get { - if(_cashedIcecreams == null) + if (_cashedIcecreams == null) { _cashedIcecreams = IceCreams.ToDictionary(recPC => recPC.IceCreamId, recPC => (recPC.IceCream as IIceCreamModel, recPC.Count)); } @@ -56,7 +56,7 @@ namespace IceCreamShopDatabaseImplement.Models IceCreamMaxCount = model.IceCreamMaxCount, IceCreams = model.ShopIceCreams.Select(x => new ShopIcecream { - IceCream = context.IceCreams.First(y => y.Id == x.Key)!, + IceCream = context.IceCreams.FirstOrDefault(y => y.Id == x.Key)!, Count = x.Value.Item2, }).ToList() }; @@ -70,7 +70,6 @@ namespace IceCreamShopDatabaseImplement.Models Name = model.Name; Adress = model.Adress; OpeningDate = model.OpeningDate; - IceCreamMaxCount = model.IceCreamMaxCount; } public ShopViewModel GetViewModel => new() { @@ -84,36 +83,30 @@ namespace IceCreamShopDatabaseImplement.Models public void UpdateIceCreams(IceCreamShopDatabase context, ShopBindingModel model) { - if (model.ShopIceCreams == null) return; - var iceCreams = context.ShopIcecreams.Where(rec => rec.ShopId == model.Id).ToList(); - if (iceCreams != null && iceCreams.Count > 0) - { - // удалили те, которых нет в модели - if (shopIcecreams != null && shopIcecreams.Count > 0) + var shopIceCreams = context.ShopIcecreams + .Where(rec => rec.ShopId == model.Id) + .ToList(); + // удалили те, которых нет в модели + if (shopIceCreams != null && shopIceCreams.Count > 0) { context.ShopIcecreams - .RemoveRange(shopIcecreams + .RemoveRange(shopIceCreams .Where(rec => !model.ShopIceCreams .ContainsKey(rec.IceCreamId))); // обновили количество у существующих записей - foreach (var updateIceCream in iceCreams) + foreach (var updateIcecream in shopIceCreams.Where(x => model.ShopIceCreams.ContainsKey(x.IceCreamId))) { - updateIceCream.Count = model.ShopIceCreams[updateIceCream.IceCreamId].Item2; - model.ShopIceCreams.Remove(updateIceCream.IceCreamId); + updateIcecream.Count = model.ShopIceCreams[updateIcecream.IceCreamId].Item2; + model.ShopIceCreams.Remove(updateIcecream.IceCreamId); } - context.SaveChanges(); } - var shop = context.Shops.First(x => x.Id == Id); - foreach (var elem in model.ShopIceCreams) + var shop = context.Shops.First(x => x.Id == model.Id); + shop.IceCreams.AddRange(model.ShopIceCreams.Select(x => new ShopIcecream { - context.ShopIcecreams.Add(new ShopIcecream - { - Shop = shop, - IceCream = context.IceCreams.First(x => x.Id == elem.Key), - Count = elem.Value.Item2 - }); - context.SaveChanges(); - } + IceCream = context.IceCreams.First(y => y.Id == x.Key), + Count = x.Value.Item2, + }).Except(shopIceCreams ?? new())); + context.SaveChanges(); _cashedIcecreams = null; } } -- 2.25.1 From 016b5d3f6b166a06a4ab3dab24357c10c2d463e3 Mon Sep 17 00:00:00 2001 From: Inohara Date: Tue, 25 Apr 2023 11:18:23 +0400 Subject: [PATCH 10/17] =?UTF-8?q?=D1=81=D0=B4=D0=B0=D0=BD=D0=B0=206=20?= =?UTF-8?q?=D1=83=D1=81=D0=BB=D0=BE=D0=B6=D0=BD=D0=B5=D0=BD=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessLogics/OrderLogic.cs | 141 +++++++--- .../BusinessLogics/ShopLogic.cs | 144 ++-------- .../BusinessLogics/WorkModeling.cs | 69 +++-- .../BusinessLogicsContracts/IShopLogic.cs | 2 - .../IceCreamShopDatabaseImplement.csproj | 4 + .../Implements/ShopStorage.cs | 50 ++-- .../20230226160632_InitMigration.Designer.cs | 160 ----------- .../20230226160632_InitMigration.cs | 115 -------- .../20230313191542_NewMigration.Designer.cs | 171 ------------ .../Migrations/20230313191542_NewMigration.cs | 22 -- .../20230327111426_LabWork05Migr.Designer.cs | 214 --------------- .../20230327111426_LabWork05Migr.cs | 69 ----- .../20230408135215_implementer.Designer.cs | 257 ------------------ .../Migrations/20230408135215_implementer.cs | 67 ----- .../Migrations/20230409123459_shops.cs | 95 ------- ...s => 20230425055945_lab6_migr.Designer.cs} | 98 ++++++- .../Migrations/20230425055945_lab6_migr.cs | 255 +++++++++++++++++ .../Models/Shop.cs | 40 +-- 18 files changed, 584 insertions(+), 1389 deletions(-) delete mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230226160632_InitMigration.Designer.cs delete mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230226160632_InitMigration.cs delete mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.Designer.cs delete mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.cs delete mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230327111426_LabWork05Migr.Designer.cs delete mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230327111426_LabWork05Migr.cs delete mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230408135215_implementer.Designer.cs delete mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230408135215_implementer.cs delete mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230409123459_shops.cs rename IceCreamShop/IceCreamShopDatabaseImplement/Migrations/{20230409123459_shops.Designer.cs => 20230425055945_lab6_migr.Designer.cs} (74%) create mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230425055945_lab6_migr.cs diff --git a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs index 290bd73..8c47637 100644 --- a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs +++ b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/OrderLogic.cs @@ -102,52 +102,131 @@ namespace IceCreamBusinessLogic.BusinessLogics _logger.LogInformation("Order. OrderID:{Id}.Sum:{ Sum}. DocumentId: { DocumentId}", model.Id, model.Sum, model.IceCreamId); } - public bool SetNewStatus(OrderBindingModel model, OrderStatus orderStatus) + public bool SetNewStatus(OrderBindingModel rawModel, OrderStatus newStatus) { - // Находим статус заказа по его айди - var vmodel = _orderStorage.GetElement(new() { Id = model.Id }); - if (vmodel == null) + var viewModel = _orderStorage.GetElement(new OrderSearchModel { - throw new ArgumentNullException(nameof(model)); - } - if ((int)vmodel.Status + 1 != (int)orderStatus && !(vmodel.Status == OrderStatus.Ожидается && orderStatus == OrderStatus.Готов)) - { - throw new InvalidOperationException($"Попытка перевести заказ не в следующий статус: " + - $"Текущий статус: {vmodel.Status} \n" + - $"Планируемый статус: {orderStatus} \n" + - $"Доступный статус: {(OrderStatus)((int)vmodel.Status + 1)}"); - } - if (orderStatus == OrderStatus.Готов || orderStatus == OrderStatus.Ожидается) - { - var icecream = _iceCreamStorage.GetElement(new() { Id = vmodel.IceCreamId }); + Id = rawModel.Id + }); - if (icecream == null || !_shopLogic.AddIceCream(icecream, vmodel.Count)) + if (viewModel == null) + { + _logger.LogWarning("Order model not found"); + return false; + } + + OrderBindingModel model = new OrderBindingModel + { + Id = viewModel.Id, + IceCreamId = viewModel.IceCreamId, + Status = viewModel.Status, + DateCreate = viewModel.DateCreate, + DateImplement = viewModel.DateImplement, + Count = viewModel.Count, + Sum = viewModel.Sum, + ImplementerId = viewModel.ImplementerId + }; + if (rawModel.ImplementerId.HasValue) + { + model.ImplementerId = rawModel.ImplementerId; + } + + CheckModel(model); + if (model.Status + 1 != newStatus && model.Status != OrderStatus.Ожидается) + { + _logger.LogWarning("Status update to " + newStatus.ToString() + " operation failed. Order status incorrect."); + return false; + } + + if (newStatus == OrderStatus.Готов) + { + var icecream = _iceCreamStorage.GetElement(new IceCreamSearchModel() { Id = model.IceCreamId }); + if (icecream == null) { - _logger.LogWarning($"Не удалось заполнить магазины изделием '{icecream?.IceCreamName ?? string.Empty}' из заказа {vmodel.Id}"); - orderStatus = OrderStatus.Ожидается; + _logger.LogWarning("Status update to " + newStatus.ToString() + " operation failed. Icecream not found."); + return false; } - else + if (CheckSupply(icecream, model.Count) == false) { - orderStatus = OrderStatus.Готов; + _logger.LogWarning("Status update to " + newStatus.ToString() + " operation failed. Shop supply error."); + model.Status = OrderStatus.Ожидается; + _orderStorage.Update(model); + return false; } } - model.Status = orderStatus; - model.DateCreate = vmodel.DateCreate; - if (model.DateImplement == null) - model.DateImplement = vmodel.DateImplement; - if (vmodel.ImplementerId.HasValue) - model.ImplementerId = vmodel.ImplementerId; - model.IceCreamId = vmodel.IceCreamId; - model.Sum = vmodel.Sum; - model.Count = vmodel.Count; + + model.Status = newStatus; + if (model.Status == OrderStatus.Выдан) model.DateImplement = DateTime.Now; if (_orderStorage.Update(model) == null) { + model.Status--; _logger.LogWarning("Update operation failed"); return false; } return true; } - + + public bool CheckSupply(IIceCreamModel model, int count) + { + if (count <= 0) + { + _logger.LogWarning("Check then supply operation error. icecream count < 0."); + return false; + } + + int freeSpace = 0; + foreach (var shop in _shopStorage.GetFullList()) + { + freeSpace += shop.IceCreamMaxCount; + foreach (var icecream in shop.ShopIceCreams) + { + freeSpace -= icecream.Value.Item2; + } + } + + if (freeSpace - count < 0) + { + _logger.LogWarning("Check then supply operation error. There's no place for new icecreams in shops."); + return false; + } + + foreach (var shop in _shopStorage.GetFullList()) + { + freeSpace = shop.IceCreamMaxCount; + foreach (var icecream in shop.ShopIceCreams) + { + freeSpace -= icecream.Value.Item2; + } + if (freeSpace == 0) + { + continue; + } + if (freeSpace - count >= 0) + { + if (_shopLogic.SupplyIceCreams(new() { Id = shop.Id }, model, count)) count = 0; + else + { + _logger.LogWarning("Supply error"); + return false; + } + } + if (freeSpace - count < 0) + { + if (_shopLogic.SupplyIceCreams(new() { Id = shop.Id }, model, freeSpace)) count -= freeSpace; + else + { + _logger.LogWarning("Supply error"); + return false; + } + } + if (count <= 0) + { + return true; + } + } + return false; + } + public OrderViewModel? ReadElement(OrderSearchModel model) { if (model == null) diff --git a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/ShopLogic.cs b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/ShopLogic.cs index bc15aa5..66b078c 100644 --- a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/ShopLogic.cs +++ b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/ShopLogic.cs @@ -76,133 +76,49 @@ namespace IceCreamBusinessLogic.BusinessLogics throw new ArgumentNullException("Count of iceCreams in supply myst be more than 0", nameof(count)); } - _logger.LogInformation("AddPastryInShop. ShopName:{ShopName}.Id:{ Id}", model.Name, model.Id); - var element = _shopStorage.GetElement(model); - if (element == null) + var shopElement = _shopStorage.GetElement(model); + if (shopElement == null) { - _logger.LogWarning("AddPastryInShop element not found"); + _logger.LogWarning("Required shop element not found in storage"); return false; } - _logger.LogInformation("AddPastryInShop find. Id:{Id}", element.Id); + _logger.LogInformation("Shop element found. ID: {0}, Name: {1}", shopElement.Id, shopElement.Name); - if (element.ShopIceCreams.TryGetValue(iceCream.Id, out var sameIcecream)) + var countIcecreams = 0; + foreach (var icecream in shopElement.ShopIceCreams) { - element.ShopIceCreams[iceCream.Id] = (iceCream, sameIcecream.Item2 + count); - _logger.LogInformation("Same iceCream found by supply. Added {0} of {1} in {2} shop", count, iceCream.IceCreamName, element.Name); + countIcecreams += icecream.Value.Item2; + } + if (shopElement.IceCreamMaxCount - countIcecreams >= count) + { + if (shopElement.ShopIceCreams.TryGetValue(iceCream.Id, out var sameIcecream)) + { + shopElement.ShopIceCreams[iceCream.Id] = (iceCream, sameIcecream.Item2 + count); + _logger.LogInformation("Same iceCream found by supply. Added {0} of {1} in {2} shop", count, iceCream.IceCreamName, shopElement.Name); + } + else + { + shopElement.ShopIceCreams[iceCream.Id] = (iceCream, count); + _logger.LogInformation("New iceCream added by supply. Added {0} of {1} in {2} shop", count, iceCream.IceCreamName, shopElement.Name); + } + _shopStorage.Update(new() + { + Id = shopElement.Id, + Name = shopElement.Name, + Adress = shopElement.Adress, + OpeningDate = shopElement.OpeningDate, + ShopIceCreams = shopElement.ShopIceCreams, + IceCreamMaxCount = shopElement.IceCreamMaxCount + }); } else { - element.ShopIceCreams[iceCream.Id] = (iceCream, count); - _logger.LogInformation("New iceCream added by supply. Added {0} of {1} in {2} shop", count, iceCream.IceCreamName, element.Name); - } - -/* var prevCount = element.ShopIceCreams.GetValueOrDefault(iceCream.Id, (iceCream, 0)).Item2; - element.ShopIceCreams[iceCream.Id] = (iceCream, prevCount + count); - _logger.LogInformation( - "AddPastryInShop. Has been added {count} {pastry} in {ShopName}", - count, iceCream.IceCreamName, element.Name); -*/ - _shopStorage.Update(new() - { - Id = element.Id, - Adress = element.Adress, - Name = element.Name, - OpeningDate = element.OpeningDate, - ShopIceCreams = element.ShopIceCreams - }); - return true; - - - /* var shopElement = _shopStorage.GetElement(model); - if (shopElement == null) - { - _logger.LogWarning("Required shop element not found in storage"); - return false; - } - _logger.LogInformation("Shop element found. ID: {0}, Name: {1}", shopElement.Id, shopElement.Name); - - var countIcecreams = 0; - foreach (var icecream in shopElement.ShopIceCreams) - { - countIcecreams += icecream.Value.Item2; - } - if (shopElement.IceCreamMaxCount - countIcecreams >= count) - { - if (shopElement.ShopIceCreams.TryGetValue(iceCream.Id, out var sameIcecream)) - { - shopElement.ShopIceCreams[iceCream.Id] = (iceCream, sameIcecream.Item2 + count); - _logger.LogInformation("Same iceCream found by supply. Added {0} of {1} in {2} shop", count, iceCream.IceCreamName, shopElement.Name); - } - else - { - shopElement.ShopIceCreams[iceCream.Id] = (iceCream, count); - _logger.LogInformation("New iceCream added by supply. Added {0} of {1} in {2} shop", count, iceCream.IceCreamName, shopElement.Name); - } - _shopStorage.Update(new() - { - Id = shopElement.Id, - Name = shopElement.Name, - Adress = shopElement.Adress, - OpeningDate = shopElement.OpeningDate, - ShopIceCreams = shopElement.ShopIceCreams, - IceCreamMaxCount = shopElement.IceCreamMaxCount - }); - } - else - { - _logger.LogWarning("Required shop is overflowed"); - return false; - } - return true;*/ - } - - public bool AddIceCream(IIceCreamModel icecream, int count) - { - if (count <= 0) - { - _logger.LogWarning("AddPastriesInShops. Количество добавляемых изделий должно быть больше 0. Количество - {count}", count); + _logger.LogWarning("Required shop is overflowed"); return false; } - var freePlaces = GetFreePlaces(count); - if (freePlaces < 0) - { - _logger.LogInformation("AddPastriesInShops. Не удалось добавить изделия в магазины, поскольку они переполнены." + - "Освободите магазины на {places} изделий", -freePlaces); - return false; - } - foreach (var shop in _shopStorage.GetFullList()) - { -/* int freeInShop = shop.IceCreamMaxCount - shop.ShopIceCreams.Select(x => x.Value.Item2).Sum(); - if (freeInShop < count) continue;*/ - - var cnt = Math.Min(count, shop.IceCreamMaxCount - shop.ShopIceCreams.Select(x => x.Value.Item2).Sum()); - if (cnt <= 0) - { - continue; - } - if (!SupplyIceCreams(new() { Id = shop.Id }, icecream, cnt)) - { - _logger.LogWarning("При добавления изделий во все магазины произошла ошибка"); - return false; - } - count -= cnt; - if (count == 0) - { - return true; - } - } return true; } - //свободные места со всех магазинов - public int GetFreePlaces(int countIceCreams) - { - // Сумма разностей между максимальный кол-вом изделий и суммой всех изделий в магазине - return _shopStorage.GetFullList() - .Select(x => x.IceCreamMaxCount - x.ShopIceCreams.Select(p => p.Value.Item2).Sum()) - .Sum() - countIceCreams; - } - public bool SellIceCreams(IIceCreamModel iceCream, int count) { return _shopStorage.SellIceCreams(iceCream, count); diff --git a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs index 65fe55a..7ce9973 100644 --- a/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs +++ b/IceCreamShop/IceCreamBusinessLogic/BusinessLogics/WorkModeling.cs @@ -57,35 +57,9 @@ namespace IceCreamBusinessLogic.BusinessLogic return; } - // Для заказов находящихся в статусе ожидания работник не должен делать никакую работу, а должен просто пытаться перевести их в статус готов - await Task.Run(() => - { - foreach (var order in orders.Where(x => x.Status == OrderStatus.Ожидается && x.ImplementerId == implementer.Id)) - { - try - { - _orderLogic.DeliveryOrder(new OrderBindingModel - { - Id = order.Id - }); - } - // кто-то мог уже перехватить - catch (InvalidOperationException ex) - { - _logger.LogWarning(ex, "Error try get work"); - } - // заканчиваем выполнение имитации в случае иной ошибки - catch (Exception ex) - { - _logger.LogError(ex, "Error while do work"); - throw; - } - // отдыхаем - Thread.Sleep(implementer.Qualification * _rnd.Next(10, 100)); - } - }); + await RunWaitingOrder(implementer); - await RunOrderInWork(implementer, orders); + await RunOrderInWork(implementer, orders); await Task.Run(() => { @@ -106,6 +80,7 @@ namespace IceCreamBusinessLogic.BusinessLogic _orderLogic.DeliveryOrder(new OrderBindingModel { Id = order.Id, + ImplementerId = implementer.Id }); // отдыхаем Thread.Sleep(implementer.Qualification * _rnd.Next(10, 100)); @@ -168,5 +143,41 @@ namespace IceCreamBusinessLogic.BusinessLogic throw; } } - } + + private async Task RunWaitingOrder(ImplementerViewModel implementer) + { + if (_orderLogic == null || implementer == null) + { + return; + } + try + { + var order = await Task.Run(() => _orderLogic.ReadElement(new OrderSearchModel + { + ImplementerId = implementer.Id, + Statusses = new() { OrderStatus.Ожидается } + })); + if (order == null) + { + return; + } + _logger.LogDebug("DoWork. Worker {Id} finish order {Order}", implementer.Id, order.Id); + _orderLogic.DeliveryOrder(new OrderBindingModel + { + Id = order.Id, + ImplementerId = implementer.Id + }); + Thread.Sleep(implementer.Qualification * _rnd.Next(10, 100)); + } + catch (InvalidOperationException ex) + { + _logger.LogWarning(ex, "Error try get work"); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error while do work"); + throw; + } + } + } } diff --git a/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IShopLogic.cs b/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IShopLogic.cs index b86ef7a..bffe5c3 100644 --- a/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IShopLogic.cs +++ b/IceCreamShop/IceCreamShopContracts/BusinessLogicsContracts/IShopLogic.cs @@ -19,7 +19,5 @@ namespace IceCreamShopContracts.BusinessLogicsContracts bool Delete(ShopBindingModel model); bool SupplyIceCreams(ShopSearchModel model, IIceCreamModel iceCream, int count); bool SellIceCreams(IIceCreamModel iceCream, int count); - bool AddIceCream(IIceCreamModel icecream, int count); - int GetFreePlaces(int countIceCreams); } } diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/IceCreamShopDatabaseImplement.csproj b/IceCreamShop/IceCreamShopDatabaseImplement/IceCreamShopDatabaseImplement.csproj index 616d02d..282a781 100644 --- a/IceCreamShop/IceCreamShopDatabaseImplement/IceCreamShopDatabaseImplement.csproj +++ b/IceCreamShop/IceCreamShopDatabaseImplement/IceCreamShopDatabaseImplement.csproj @@ -20,4 +20,8 @@ + + + + diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Implements/ShopStorage.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Implements/ShopStorage.cs index 7a92025..474d615 100644 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Implements/ShopStorage.cs +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Implements/ShopStorage.cs @@ -93,31 +93,40 @@ namespace IceCreamShopDatabaseImplement.Implements public ShopViewModel? Update(ShopBindingModel model) { using var context = new IceCreamShopDatabase(); - var shop = context.Shops.FirstOrDefault(x => x.Id == model.Id); - if (shop == null) + using var transaction = context.Database.BeginTransaction(); + try { - return null; + var shop = context.Shops.Include(x => x.IceCreams).FirstOrDefault(x => x.Id == model.Id); + if (shop == null) + { + return null; + } + shop.Update(model); + context.SaveChanges(); + if (model.ShopIceCreams.Count > 0) + { + shop.UpdateIceCreams(context, model); + } + transaction.Commit(); + return shop.GetViewModel; + } + catch + { + transaction.Rollback(); + throw; } - shop.Update(model); - shop.UpdateIceCreams(context, model); - context.SaveChanges(); - return shop.GetViewModel; } public bool SellIceCreams(IIceCreamModel icecream, int needCount) { using var context = new IceCreamShopDatabase(); using var transaction = context.Database.BeginTransaction(); - foreach (var sp in context.ShopIcecreams.Where(x => x.IceCreamId == icecream.Id)) + foreach (var shopDocs in context.ShopIcecreams.Where(x => x.IceCreamId == icecream.Id)) { - var res = Math.Min(needCount, sp.Count); - sp.Count -= res; - needCount -= res; - if (sp.Count == 0) // Изделия больше нет в магазине, значит удаляем его - { - context.ShopIcecreams.Remove(sp); - } - if (needCount == 0) // Нельзя коммитить изменения в цикле, что использует контекст, поэтому выходим + var min = Math.Min(needCount, shopDocs.Count); + shopDocs.Count -= min; + needCount -= min; + if (needCount <= 0) { break; } @@ -128,9 +137,14 @@ namespace IceCreamShopDatabaseImplement.Implements transaction.Commit(); } else + { transaction.Rollback(); - - return needCount == 0; + } + if (needCount > 0) + { + return false; + } + return true; } } } diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230226160632_InitMigration.Designer.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230226160632_InitMigration.Designer.cs deleted file mode 100644 index f3b6c8e..0000000 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230226160632_InitMigration.Designer.cs +++ /dev/null @@ -1,160 +0,0 @@ -// -using System; -using IceCreamShopDatabaseImplement; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace IceCreamShopDatabaseImplement.Migrations -{ - [DbContext(typeof(IceCreamShopDatabase))] - [Migration("20230226160632_InitMigration")] - partial class InitMigration - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.3") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Component", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("ComponentName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Cost") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.ToTable("Components"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCream", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("IceCreamName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Price") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.ToTable("IceCreams"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCreamComponent", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("ComponentId") - .HasColumnType("int"); - - b.Property("Count") - .HasColumnType("int"); - - b.Property("IceCreamId") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.HasIndex("ComponentId"); - - b.HasIndex("IceCreamId"); - - b.ToTable("IceCreamComponents"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Order", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Count") - .HasColumnType("int"); - - b.Property("DateCreate") - .HasColumnType("datetime2"); - - b.Property("DateImplement") - .HasColumnType("datetime2"); - - b.Property("IceCreamId") - .HasColumnType("int"); - - b.Property("IceCreamName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Status") - .HasColumnType("int"); - - b.Property("Sum") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.ToTable("Orders"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCreamComponent", b => - { - b.HasOne("IceCreamShopDatabaseImplement.Models.Component", "Component") - .WithMany("IceCreamComponents") - .HasForeignKey("ComponentId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", "IceCream") - .WithMany("Components") - .HasForeignKey("IceCreamId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Component"); - - b.Navigation("IceCream"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Component", b => - { - b.Navigation("IceCreamComponents"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCream", b => - { - b.Navigation("Components"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230226160632_InitMigration.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230226160632_InitMigration.cs deleted file mode 100644 index acc77f9..0000000 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230226160632_InitMigration.cs +++ /dev/null @@ -1,115 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace IceCreamShopDatabaseImplement.Migrations -{ - /// - public partial class InitMigration : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Components", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - ComponentName = table.Column(type: "nvarchar(max)", nullable: false), - Cost = table.Column(type: "float", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Components", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "IceCreams", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - IceCreamName = table.Column(type: "nvarchar(max)", nullable: false), - Price = table.Column(type: "float", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IceCreams", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Orders", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - IceCreamId = table.Column(type: "int", nullable: false), - IceCreamName = table.Column(type: "nvarchar(max)", nullable: false), - Count = table.Column(type: "int", nullable: false), - Sum = table.Column(type: "float", nullable: false), - Status = table.Column(type: "int", nullable: false), - DateCreate = table.Column(type: "datetime2", nullable: false), - DateImplement = table.Column(type: "datetime2", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Orders", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "IceCreamComponents", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - IceCreamId = table.Column(type: "int", nullable: false), - ComponentId = table.Column(type: "int", nullable: false), - Count = table.Column(type: "int", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_IceCreamComponents", x => x.Id); - table.ForeignKey( - name: "FK_IceCreamComponents_Components_ComponentId", - column: x => x.ComponentId, - principalTable: "Components", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_IceCreamComponents_IceCreams_IceCreamId", - column: x => x.IceCreamId, - principalTable: "IceCreams", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateIndex( - name: "IX_IceCreamComponents_ComponentId", - table: "IceCreamComponents", - column: "ComponentId"); - - migrationBuilder.CreateIndex( - name: "IX_IceCreamComponents_IceCreamId", - table: "IceCreamComponents", - column: "IceCreamId"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "IceCreamComponents"); - - migrationBuilder.DropTable( - name: "Orders"); - - migrationBuilder.DropTable( - name: "Components"); - - migrationBuilder.DropTable( - name: "IceCreams"); - } - } -} diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.Designer.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.Designer.cs deleted file mode 100644 index ddb4850..0000000 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.Designer.cs +++ /dev/null @@ -1,171 +0,0 @@ -// -using System; -using IceCreamShopDatabaseImplement; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace IceCreamShopDatabaseImplement.Migrations -{ - [DbContext(typeof(IceCreamShopDatabase))] - [Migration("20230313191542_NewMigration")] - partial class NewMigration - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.3") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Component", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("ComponentName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Cost") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.ToTable("Components"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCream", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("IceCreamName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Price") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.ToTable("IceCreams"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCreamComponent", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("ComponentId") - .HasColumnType("int"); - - b.Property("Count") - .HasColumnType("int"); - - b.Property("IceCreamId") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.HasIndex("ComponentId"); - - b.HasIndex("IceCreamId"); - - b.ToTable("IceCreamComponents"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Order", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Count") - .HasColumnType("int"); - - b.Property("DateCreate") - .HasColumnType("datetime2"); - - b.Property("DateImplement") - .HasColumnType("datetime2"); - - b.Property("IceCreamId") - .HasColumnType("int"); - - b.Property("Status") - .HasColumnType("int"); - - b.Property("Sum") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.HasIndex("IceCreamId"); - - b.ToTable("Orders"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCreamComponent", b => - { - b.HasOne("IceCreamShopDatabaseImplement.Models.Component", "Component") - .WithMany("IceCreamComponents") - .HasForeignKey("ComponentId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", "IceCream") - .WithMany("Components") - .HasForeignKey("IceCreamId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Component"); - - b.Navigation("IceCream"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Order", b => - { - b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", "IceCream") - .WithMany("Orders") - .HasForeignKey("IceCreamId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("IceCream"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Component", b => - { - b.Navigation("IceCreamComponents"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCream", b => - { - b.Navigation("Components"); - - b.Navigation("Orders"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.cs deleted file mode 100644 index 9a429e5..0000000 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace IceCreamShopDatabaseImplement.Migrations -{ - /// - public partial class NewMigration : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - - } - } -} diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230327111426_LabWork05Migr.Designer.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230327111426_LabWork05Migr.Designer.cs deleted file mode 100644 index 5d663f3..0000000 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230327111426_LabWork05Migr.Designer.cs +++ /dev/null @@ -1,214 +0,0 @@ -// -using System; -using IceCreamShopDatabaseImplement; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace IceCreamShopDatabaseImplement.Migrations -{ - [DbContext(typeof(IceCreamShopDatabase))] - [Migration("20230327111426_LabWork05Migr")] - partial class LabWork05Migr - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.3") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Client", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("ClientFIO") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Email") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Password") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Clients"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Component", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("ComponentName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Cost") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.ToTable("Components"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCream", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("IceCreamName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Price") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.ToTable("IceCreams"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCreamComponent", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("ComponentId") - .HasColumnType("int"); - - b.Property("Count") - .HasColumnType("int"); - - b.Property("IceCreamId") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.HasIndex("ComponentId"); - - b.HasIndex("IceCreamId"); - - b.ToTable("IceCreamComponents"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Order", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("ClientId") - .HasColumnType("int"); - - b.Property("Count") - .HasColumnType("int"); - - b.Property("DateCreate") - .HasColumnType("datetime2"); - - b.Property("DateImplement") - .HasColumnType("datetime2"); - - b.Property("IceCreamId") - .HasColumnType("int"); - - b.Property("Status") - .HasColumnType("int"); - - b.Property("Sum") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.HasIndex("ClientId"); - - b.HasIndex("IceCreamId"); - - b.ToTable("Orders"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCreamComponent", b => - { - b.HasOne("IceCreamShopDatabaseImplement.Models.Component", "Component") - .WithMany("IceCreamComponents") - .HasForeignKey("ComponentId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", "IceCream") - .WithMany("Components") - .HasForeignKey("IceCreamId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Component"); - - b.Navigation("IceCream"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Order", b => - { - b.HasOne("IceCreamShopDatabaseImplement.Models.Client", "Client") - .WithMany("Orders") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", "IceCream") - .WithMany("Orders") - .HasForeignKey("IceCreamId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Client"); - - b.Navigation("IceCream"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Client", b => - { - b.Navigation("Orders"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Component", b => - { - b.Navigation("IceCreamComponents"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCream", b => - { - b.Navigation("Components"); - - b.Navigation("Orders"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230327111426_LabWork05Migr.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230327111426_LabWork05Migr.cs deleted file mode 100644 index 9be063b..0000000 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230327111426_LabWork05Migr.cs +++ /dev/null @@ -1,69 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace IceCreamShopDatabaseImplement.Migrations -{ - /// - public partial class LabWork05Migr : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.Sql("TRUNCATE TABLE Orders"); - migrationBuilder.AddColumn( - name: "ClientId", - table: "Orders", - type: "int", - nullable: false, - defaultValue: 0); - - migrationBuilder.CreateTable( - name: "Clients", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - ClientFIO = table.Column(type: "nvarchar(max)", nullable: false), - Email = table.Column(type: "nvarchar(max)", nullable: false), - Password = table.Column(type: "nvarchar(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Clients", x => x.Id); - }); - - migrationBuilder.CreateIndex( - name: "IX_Orders_ClientId", - table: "Orders", - column: "ClientId"); - - migrationBuilder.AddForeignKey( - name: "FK_Orders_Clients_ClientId", - table: "Orders", - column: "ClientId", - principalTable: "Clients", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_Orders_Clients_ClientId", - table: "Orders"); - - migrationBuilder.DropTable( - name: "Clients"); - - migrationBuilder.DropIndex( - name: "IX_Orders_ClientId", - table: "Orders"); - - migrationBuilder.DropColumn( - name: "ClientId", - table: "Orders"); - } - } -} diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230408135215_implementer.Designer.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230408135215_implementer.Designer.cs deleted file mode 100644 index 8f06b20..0000000 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230408135215_implementer.Designer.cs +++ /dev/null @@ -1,257 +0,0 @@ -// -using System; -using IceCreamShopDatabaseImplement; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace IceCreamShopDatabaseImplement.Migrations -{ - [DbContext(typeof(IceCreamShopDatabase))] - [Migration("20230408135215_implementer")] - partial class implementer - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.3") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Client", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("ClientFIO") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Email") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Password") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Clients"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Component", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("ComponentName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Cost") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.ToTable("Components"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCream", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("IceCreamName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Price") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.ToTable("IceCreams"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCreamComponent", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("ComponentId") - .HasColumnType("int"); - - b.Property("Count") - .HasColumnType("int"); - - b.Property("IceCreamId") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.HasIndex("ComponentId"); - - b.HasIndex("IceCreamId"); - - b.ToTable("IceCreamComponents"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Implementer", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("ImplementerFIO") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Password") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Qualification") - .HasColumnType("int"); - - b.Property("WorkExperience") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("Implementers"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Order", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("ClientId") - .HasColumnType("int"); - - b.Property("Count") - .HasColumnType("int"); - - b.Property("DateCreate") - .HasColumnType("datetime2"); - - b.Property("DateImplement") - .HasColumnType("datetime2"); - - b.Property("IceCreamId") - .HasColumnType("int"); - - b.Property("ImplementerId") - .HasColumnType("int"); - - b.Property("Status") - .HasColumnType("int"); - - b.Property("Sum") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.HasIndex("ClientId"); - - b.HasIndex("IceCreamId"); - - b.HasIndex("ImplementerId"); - - b.ToTable("Orders"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCreamComponent", b => - { - b.HasOne("IceCreamShopDatabaseImplement.Models.Component", "Component") - .WithMany("IceCreamComponents") - .HasForeignKey("ComponentId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", "IceCream") - .WithMany("Components") - .HasForeignKey("IceCreamId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Component"); - - b.Navigation("IceCream"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Order", b => - { - b.HasOne("IceCreamShopDatabaseImplement.Models.Client", "Client") - .WithMany("Orders") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", "IceCream") - .WithMany("Orders") - .HasForeignKey("IceCreamId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("IceCreamShopDatabaseImplement.Models.Implementer", "Implementer") - .WithMany("Orders") - .HasForeignKey("ImplementerId"); - - b.Navigation("Client"); - - b.Navigation("IceCream"); - - b.Navigation("Implementer"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Client", b => - { - b.Navigation("Orders"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Component", b => - { - b.Navigation("IceCreamComponents"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCream", b => - { - b.Navigation("Components"); - - b.Navigation("Orders"); - }); - - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Implementer", b => - { - b.Navigation("Orders"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230408135215_implementer.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230408135215_implementer.cs deleted file mode 100644 index 34ba28a..0000000 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230408135215_implementer.cs +++ /dev/null @@ -1,67 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace IceCreamShopDatabaseImplement.Migrations -{ - /// - public partial class implementer : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "ImplementerId", - table: "Orders", - type: "int", - nullable: true); - - migrationBuilder.CreateTable( - name: "Implementers", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - ImplementerFIO = table.Column(type: "nvarchar(max)", nullable: false), - Password = table.Column(type: "nvarchar(max)", nullable: false), - WorkExperience = table.Column(type: "int", nullable: false), - Qualification = table.Column(type: "int", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Implementers", x => x.Id); - }); - - migrationBuilder.CreateIndex( - name: "IX_Orders_ImplementerId", - table: "Orders", - column: "ImplementerId"); - - migrationBuilder.AddForeignKey( - name: "FK_Orders_Implementers_ImplementerId", - table: "Orders", - column: "ImplementerId", - principalTable: "Implementers", - principalColumn: "Id"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_Orders_Implementers_ImplementerId", - table: "Orders"); - - migrationBuilder.DropTable( - name: "Implementers"); - - migrationBuilder.DropIndex( - name: "IX_Orders_ImplementerId", - table: "Orders"); - - migrationBuilder.DropColumn( - name: "ImplementerId", - table: "Orders"); - } - } -} diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230409123459_shops.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230409123459_shops.cs deleted file mode 100644 index 5855cac..0000000 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230409123459_shops.cs +++ /dev/null @@ -1,95 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace IceCreamShopDatabaseImplement.Migrations -{ - /// - public partial class shops : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - - - migrationBuilder.CreateTable( - name: "Shops", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - Name = table.Column(type: "nvarchar(max)", nullable: false), - Adress = table.Column(type: "nvarchar(max)", nullable: false), - OpeningDate = table.Column(type: "datetime2", nullable: false), - IceCreamMaxCount = table.Column(type: "int", nullable: false), - IceCreamId = table.Column(type: "int", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Shops", x => x.Id); - table.ForeignKey( - name: "FK_Shops_IceCreams_IceCreamId", - column: x => x.IceCreamId, - principalTable: "IceCreams", - principalColumn: "Id"); - }); - - migrationBuilder.CreateTable( - name: "IceCreams", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - IceCreamId = table.Column(type: "int", nullable: false), - ShopId = table.Column(type: "int", nullable: false), - Count = table.Column(type: "int", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_ShopIcecreams", x => x.Id); - table.ForeignKey( - name: "FK_ShopIcecreams_IceCreams_IceCreamId", - column: x => x.IceCreamId, - principalTable: "IceCreams", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_ShopIcecreams_Shops_ShopId", - column: x => x.ShopId, - principalTable: "Shops", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateIndex( - name: "IX_ShopIcecreams_IceCreamId", - table: "IceCreams", - column: "IceCreamId"); - - migrationBuilder.CreateIndex( - name: "IX_ShopIcecreams_ShopId", - table: "IceCreams", - column: "ShopId"); - - migrationBuilder.CreateIndex( - name: "IX_Shops_IceCreamId", - table: "Shops", - column: "IceCreamId"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "IceCreams"); - - migrationBuilder.DropTable( - name: "Shops"); - - migrationBuilder.DropColumn( - name: "IceCreamName", - table: "Orders"); - } - } -} diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230409123459_shops.Designer.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230425055945_lab6_migr.Designer.cs similarity index 74% rename from IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230409123459_shops.Designer.cs rename to IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230425055945_lab6_migr.Designer.cs index 1b69253..5405da0 100644 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230409123459_shops.Designer.cs +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230425055945_lab6_migr.Designer.cs @@ -12,8 +12,8 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace IceCreamShopDatabaseImplement.Migrations { [DbContext(typeof(IceCreamShopDatabase))] - [Migration("20230409123459_shops")] - partial class shops + [Migration("20230425055945_lab6_migr")] + partial class lab6_migr { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -25,6 +25,31 @@ namespace IceCreamShopDatabaseImplement.Migrations SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Client", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClientFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Password") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Clients"); + }); + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Component", b => { b.Property("Id") @@ -91,6 +116,33 @@ namespace IceCreamShopDatabaseImplement.Migrations b.ToTable("IceCreamComponents"); }); + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Implementer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ImplementerFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Password") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Qualification") + .HasColumnType("int"); + + b.Property("WorkExperience") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Implementers"); + }); + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Order", b => { b.Property("Id") @@ -99,6 +151,9 @@ namespace IceCreamShopDatabaseImplement.Migrations SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + b.Property("ClientId") + .HasColumnType("int"); + b.Property("Count") .HasColumnType("int"); @@ -111,9 +166,8 @@ namespace IceCreamShopDatabaseImplement.Migrations b.Property("IceCreamId") .HasColumnType("int"); - b.Property("IceCreamName") - .IsRequired() - .HasColumnType("nvarchar(max)"); + b.Property("ImplementerId") + .HasColumnType("int"); b.Property("Status") .HasColumnType("int"); @@ -123,8 +177,12 @@ namespace IceCreamShopDatabaseImplement.Migrations b.HasKey("Id"); + b.HasIndex("ClientId"); + b.HasIndex("IceCreamId"); + b.HasIndex("ImplementerId"); + b.ToTable("Orders"); }); @@ -183,7 +241,7 @@ namespace IceCreamShopDatabaseImplement.Migrations b.HasIndex("ShopId"); - b.ToTable("IceCreams"); + b.ToTable("ShopIcecreams"); }); modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCreamComponent", b => @@ -207,11 +265,27 @@ namespace IceCreamShopDatabaseImplement.Migrations modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Order", b => { - b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", null) + b.HasOne("IceCreamShopDatabaseImplement.Models.Client", "Client") + .WithMany("Orders") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", "IceCream") .WithMany("Orders") .HasForeignKey("IceCreamId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + + b.HasOne("IceCreamShopDatabaseImplement.Models.Implementer", "Implementer") + .WithMany("Orders") + .HasForeignKey("ImplementerId"); + + b.Navigation("Client"); + + b.Navigation("IceCream"); + + b.Navigation("Implementer"); }); modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Shop", b => @@ -240,6 +314,11 @@ namespace IceCreamShopDatabaseImplement.Migrations b.Navigation("Shop"); }); + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Client", b => + { + b.Navigation("Orders"); + }); + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Component", b => { b.Navigation("IceCreamComponents"); @@ -254,6 +333,11 @@ namespace IceCreamShopDatabaseImplement.Migrations b.Navigation("Shops"); }); + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Implementer", b => + { + b.Navigation("Orders"); + }); + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Shop", b => { b.Navigation("IceCreams"); diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230425055945_lab6_migr.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230425055945_lab6_migr.cs new file mode 100644 index 0000000..de0125b --- /dev/null +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230425055945_lab6_migr.cs @@ -0,0 +1,255 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace IceCreamShopDatabaseImplement.Migrations +{ + /// + public partial class lab6_migr : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Clients", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + ClientFIO = table.Column(type: "nvarchar(max)", nullable: false), + Email = table.Column(type: "nvarchar(max)", nullable: false), + Password = table.Column(type: "nvarchar(max)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Clients", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Components", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + ComponentName = table.Column(type: "nvarchar(max)", nullable: false), + Cost = table.Column(type: "float", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Components", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "IceCreams", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + IceCreamName = table.Column(type: "nvarchar(max)", nullable: false), + Price = table.Column(type: "float", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IceCreams", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Implementers", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + ImplementerFIO = table.Column(type: "nvarchar(max)", nullable: false), + Password = table.Column(type: "nvarchar(max)", nullable: false), + WorkExperience = table.Column(type: "int", nullable: false), + Qualification = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Implementers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "IceCreamComponents", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + IceCreamId = table.Column(type: "int", nullable: false), + ComponentId = table.Column(type: "int", nullable: false), + Count = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IceCreamComponents", x => x.Id); + table.ForeignKey( + name: "FK_IceCreamComponents_Components_ComponentId", + column: x => x.ComponentId, + principalTable: "Components", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_IceCreamComponents_IceCreams_IceCreamId", + column: x => x.IceCreamId, + principalTable: "IceCreams", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Shops", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Name = table.Column(type: "nvarchar(max)", nullable: false), + Adress = table.Column(type: "nvarchar(max)", nullable: false), + OpeningDate = table.Column(type: "datetime2", nullable: false), + IceCreamMaxCount = table.Column(type: "int", nullable: false), + IceCreamId = table.Column(type: "int", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Shops", x => x.Id); + table.ForeignKey( + name: "FK_Shops_IceCreams_IceCreamId", + column: x => x.IceCreamId, + principalTable: "IceCreams", + principalColumn: "Id"); + }); + + migrationBuilder.CreateTable( + name: "Orders", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + IceCreamId = table.Column(type: "int", nullable: false), + ClientId = table.Column(type: "int", nullable: false), + ImplementerId = table.Column(type: "int", nullable: true), + Count = table.Column(type: "int", nullable: false), + Sum = table.Column(type: "float", nullable: false), + Status = table.Column(type: "int", nullable: false), + DateCreate = table.Column(type: "datetime2", nullable: false), + DateImplement = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Orders", x => x.Id); + table.ForeignKey( + name: "FK_Orders_Clients_ClientId", + column: x => x.ClientId, + principalTable: "Clients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Orders_IceCreams_IceCreamId", + column: x => x.IceCreamId, + principalTable: "IceCreams", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Orders_Implementers_ImplementerId", + column: x => x.ImplementerId, + principalTable: "Implementers", + principalColumn: "Id"); + }); + + migrationBuilder.CreateTable( + name: "ShopIcecreams", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + IceCreamId = table.Column(type: "int", nullable: false), + ShopId = table.Column(type: "int", nullable: false), + Count = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_ShopIcecreams", x => x.Id); + table.ForeignKey( + name: "FK_ShopIcecreams_IceCreams_IceCreamId", + column: x => x.IceCreamId, + principalTable: "IceCreams", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_ShopIcecreams_Shops_ShopId", + column: x => x.ShopId, + principalTable: "Shops", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_IceCreamComponents_ComponentId", + table: "IceCreamComponents", + column: "ComponentId"); + + migrationBuilder.CreateIndex( + name: "IX_IceCreamComponents_IceCreamId", + table: "IceCreamComponents", + column: "IceCreamId"); + + migrationBuilder.CreateIndex( + name: "IX_Orders_ClientId", + table: "Orders", + column: "ClientId"); + + migrationBuilder.CreateIndex( + name: "IX_Orders_IceCreamId", + table: "Orders", + column: "IceCreamId"); + + migrationBuilder.CreateIndex( + name: "IX_Orders_ImplementerId", + table: "Orders", + column: "ImplementerId"); + + migrationBuilder.CreateIndex( + name: "IX_ShopIcecreams_IceCreamId", + table: "ShopIcecreams", + column: "IceCreamId"); + + migrationBuilder.CreateIndex( + name: "IX_ShopIcecreams_ShopId", + table: "ShopIcecreams", + column: "ShopId"); + + migrationBuilder.CreateIndex( + name: "IX_Shops_IceCreamId", + table: "Shops", + column: "IceCreamId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "IceCreamComponents"); + + migrationBuilder.DropTable( + name: "Orders"); + + migrationBuilder.DropTable( + name: "ShopIcecreams"); + + migrationBuilder.DropTable( + name: "Components"); + + migrationBuilder.DropTable( + name: "Clients"); + + migrationBuilder.DropTable( + name: "Implementers"); + + migrationBuilder.DropTable( + name: "Shops"); + + migrationBuilder.DropTable( + name: "IceCreams"); + } + } +} diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Models/Shop.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Models/Shop.cs index 3c5eff6..01813c5 100644 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Models/Shop.cs +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Models/Shop.cs @@ -70,6 +70,7 @@ namespace IceCreamShopDatabaseImplement.Models Name = model.Name; Adress = model.Adress; OpeningDate = model.OpeningDate; + IceCreamMaxCount = IceCreamMaxCount; } public ShopViewModel GetViewModel => new() { @@ -83,30 +84,33 @@ namespace IceCreamShopDatabaseImplement.Models public void UpdateIceCreams(IceCreamShopDatabase context, ShopBindingModel model) { - var shopIceCreams = context.ShopIcecreams - .Where(rec => rec.ShopId == model.Id) - .ToList(); - // удалили те, которых нет в модели - if (shopIceCreams != null && shopIceCreams.Count > 0) + //if (model.ShopIceCreams == null) return; + var iceCreams = context.ShopIcecreams.Where(rec => rec.ShopId == model.Id).ToList(); + if (iceCreams != null && iceCreams.Count > 0) { - context.ShopIcecreams - .RemoveRange(shopIceCreams - .Where(rec => !model.ShopIceCreams - .ContainsKey(rec.IceCreamId))); + // удалили те, которых нет в модели + context.ShopIcecreams.RemoveRange(iceCreams.Where(rec => !model.ShopIceCreams.ContainsKey(rec.IceCreamId))); + context.SaveChanges(); + iceCreams = context.ShopIcecreams.Where(rec => rec.ShopId == model.Id).ToList(); // обновили количество у существующих записей - foreach (var updateIcecream in shopIceCreams.Where(x => model.ShopIceCreams.ContainsKey(x.IceCreamId))) + foreach (var updateIceCream in iceCreams) { - updateIcecream.Count = model.ShopIceCreams[updateIcecream.IceCreamId].Item2; - model.ShopIceCreams.Remove(updateIcecream.IceCreamId); + updateIceCream.Count = model.ShopIceCreams[updateIceCream.IceCreamId].Item2; + model.ShopIceCreams.Remove(updateIceCream.IceCreamId); } + context.SaveChanges(); } - var shop = context.Shops.First(x => x.Id == model.Id); - shop.IceCreams.AddRange(model.ShopIceCreams.Select(x => new ShopIcecream + var shop = context.Shops.First(x => x.Id == Id); + foreach (var elem in model.ShopIceCreams) { - IceCream = context.IceCreams.First(y => y.Id == x.Key), - Count = x.Value.Item2, - }).Except(shopIceCreams ?? new())); - context.SaveChanges(); + context.ShopIcecreams.Add(new ShopIcecream + { + Shop = shop, + IceCream = context.IceCreams.First(x => x.Id == elem.Key), + Count = elem.Value.Item2 + }); + context.SaveChanges(); + } _cashedIcecreams = null; } } -- 2.25.1 From 4b37411891d59e488324afc220fdeccf93285095 Mon Sep 17 00:00:00 2001 From: Ino Date: Wed, 3 May 2023 11:31:44 +0400 Subject: [PATCH 11/17] fix --- .../Migrations/IceCreamShopDatabaseModelSnapshot.cs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs index 8afb064..f8d2a55 100644 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs @@ -285,13 +285,6 @@ namespace IceCreamShopDatabaseImplement.Migrations b.Navigation("Implementer"); }); - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Shop", b => - { - b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", null) - .WithMany("Shops") - .HasForeignKey("IceCreamId"); - }); - modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.ShopIcecream", b => { b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", "IceCream") -- 2.25.1 From dee5de3f82c804466b387ccc02f8ea17e983205f Mon Sep 17 00:00:00 2001 From: Ino Date: Wed, 3 May 2023 11:37:32 +0400 Subject: [PATCH 12/17] Revert "fix" This reverts commit 4b37411891d59e488324afc220fdeccf93285095. --- .../Migrations/IceCreamShopDatabaseModelSnapshot.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs index f8d2a55..8afb064 100644 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs @@ -285,6 +285,13 @@ namespace IceCreamShopDatabaseImplement.Migrations b.Navigation("Implementer"); }); + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Shop", b => + { + b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", null) + .WithMany("Shops") + .HasForeignKey("IceCreamId"); + }); + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.ShopIcecream", b => { b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", "IceCream") -- 2.25.1 From 82fd32fb9ea5c5db9bdbdfec403e5280134bdac8 Mon Sep 17 00:00:00 2001 From: Ino Date: Wed, 3 May 2023 11:51:34 +0400 Subject: [PATCH 13/17] fix --- IceCreamShop/IceCreamShopListImplement/Models/Order.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/IceCreamShop/IceCreamShopListImplement/Models/Order.cs b/IceCreamShop/IceCreamShopListImplement/Models/Order.cs index f6c7f6e..cc6a5e2 100644 --- a/IceCreamShop/IceCreamShopListImplement/Models/Order.cs +++ b/IceCreamShop/IceCreamShopListImplement/Models/Order.cs @@ -62,7 +62,6 @@ namespace IceCreamShopListImplement.Models IceCreamId = IceCreamId, ClientId = ClientId, ImplementerId = ImplementerId, - ImplementerFIO = DataListSingleton.GetInstance().Implementers.FirstOrDefault(x => x.Id == ImplementerId)?.ImplementerFIO ?? string.Empty, Count = Count, Sum = Sum, Status = Status, -- 2.25.1 From 4378b3fb8dd59d16f067c0e09200d2886d558597 Mon Sep 17 00:00:00 2001 From: Inohara Date: Thu, 4 May 2023 20:54:48 +0400 Subject: [PATCH 14/17] =?UTF-8?q?=D1=83=D0=BF=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20230226160632_InitMigration.cs | 115 ++++++++++++++++++ .../Migrations/20230313191542_NewMigration.cs | 22 ++++ .../20230327111426_LabWork05Migr.cs | 69 +++++++++++ .../Migrations/20230408135215_implementer.cs | 67 ++++++++++ .../Migrations/20230409123459_shops.cs | 95 +++++++++++++++ 5 files changed, 368 insertions(+) create mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230226160632_InitMigration.cs create mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.cs create mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230327111426_LabWork05Migr.cs create mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230408135215_implementer.cs create mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230409123459_shops.cs diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230226160632_InitMigration.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230226160632_InitMigration.cs new file mode 100644 index 0000000..acc77f9 --- /dev/null +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230226160632_InitMigration.cs @@ -0,0 +1,115 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace IceCreamShopDatabaseImplement.Migrations +{ + /// + public partial class InitMigration : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Components", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + ComponentName = table.Column(type: "nvarchar(max)", nullable: false), + Cost = table.Column(type: "float", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Components", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "IceCreams", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + IceCreamName = table.Column(type: "nvarchar(max)", nullable: false), + Price = table.Column(type: "float", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IceCreams", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Orders", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + IceCreamId = table.Column(type: "int", nullable: false), + IceCreamName = table.Column(type: "nvarchar(max)", nullable: false), + Count = table.Column(type: "int", nullable: false), + Sum = table.Column(type: "float", nullable: false), + Status = table.Column(type: "int", nullable: false), + DateCreate = table.Column(type: "datetime2", nullable: false), + DateImplement = table.Column(type: "datetime2", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Orders", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "IceCreamComponents", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + IceCreamId = table.Column(type: "int", nullable: false), + ComponentId = table.Column(type: "int", nullable: false), + Count = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_IceCreamComponents", x => x.Id); + table.ForeignKey( + name: "FK_IceCreamComponents_Components_ComponentId", + column: x => x.ComponentId, + principalTable: "Components", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_IceCreamComponents_IceCreams_IceCreamId", + column: x => x.IceCreamId, + principalTable: "IceCreams", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_IceCreamComponents_ComponentId", + table: "IceCreamComponents", + column: "ComponentId"); + + migrationBuilder.CreateIndex( + name: "IX_IceCreamComponents_IceCreamId", + table: "IceCreamComponents", + column: "IceCreamId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "IceCreamComponents"); + + migrationBuilder.DropTable( + name: "Orders"); + + migrationBuilder.DropTable( + name: "Components"); + + migrationBuilder.DropTable( + name: "IceCreams"); + } + } +} diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.cs new file mode 100644 index 0000000..9a429e5 --- /dev/null +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace IceCreamShopDatabaseImplement.Migrations +{ + /// + public partial class NewMigration : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230327111426_LabWork05Migr.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230327111426_LabWork05Migr.cs new file mode 100644 index 0000000..9be063b --- /dev/null +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230327111426_LabWork05Migr.cs @@ -0,0 +1,69 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace IceCreamShopDatabaseImplement.Migrations +{ + /// + public partial class LabWork05Migr : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.Sql("TRUNCATE TABLE Orders"); + migrationBuilder.AddColumn( + name: "ClientId", + table: "Orders", + type: "int", + nullable: false, + defaultValue: 0); + + migrationBuilder.CreateTable( + name: "Clients", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + ClientFIO = table.Column(type: "nvarchar(max)", nullable: false), + Email = table.Column(type: "nvarchar(max)", nullable: false), + Password = table.Column(type: "nvarchar(max)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Clients", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_Orders_ClientId", + table: "Orders", + column: "ClientId"); + + migrationBuilder.AddForeignKey( + name: "FK_Orders_Clients_ClientId", + table: "Orders", + column: "ClientId", + principalTable: "Clients", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Orders_Clients_ClientId", + table: "Orders"); + + migrationBuilder.DropTable( + name: "Clients"); + + migrationBuilder.DropIndex( + name: "IX_Orders_ClientId", + table: "Orders"); + + migrationBuilder.DropColumn( + name: "ClientId", + table: "Orders"); + } + } +} diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230408135215_implementer.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230408135215_implementer.cs new file mode 100644 index 0000000..34ba28a --- /dev/null +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230408135215_implementer.cs @@ -0,0 +1,67 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace IceCreamShopDatabaseImplement.Migrations +{ + /// + public partial class implementer : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "ImplementerId", + table: "Orders", + type: "int", + nullable: true); + + migrationBuilder.CreateTable( + name: "Implementers", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + ImplementerFIO = table.Column(type: "nvarchar(max)", nullable: false), + Password = table.Column(type: "nvarchar(max)", nullable: false), + WorkExperience = table.Column(type: "int", nullable: false), + Qualification = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Implementers", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_Orders_ImplementerId", + table: "Orders", + column: "ImplementerId"); + + migrationBuilder.AddForeignKey( + name: "FK_Orders_Implementers_ImplementerId", + table: "Orders", + column: "ImplementerId", + principalTable: "Implementers", + principalColumn: "Id"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Orders_Implementers_ImplementerId", + table: "Orders"); + + migrationBuilder.DropTable( + name: "Implementers"); + + migrationBuilder.DropIndex( + name: "IX_Orders_ImplementerId", + table: "Orders"); + + migrationBuilder.DropColumn( + name: "ImplementerId", + table: "Orders"); + } + } +} diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230409123459_shops.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230409123459_shops.cs new file mode 100644 index 0000000..5855cac --- /dev/null +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230409123459_shops.cs @@ -0,0 +1,95 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace IceCreamShopDatabaseImplement.Migrations +{ + /// + public partial class shops : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + + migrationBuilder.CreateTable( + name: "Shops", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Name = table.Column(type: "nvarchar(max)", nullable: false), + Adress = table.Column(type: "nvarchar(max)", nullable: false), + OpeningDate = table.Column(type: "datetime2", nullable: false), + IceCreamMaxCount = table.Column(type: "int", nullable: false), + IceCreamId = table.Column(type: "int", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Shops", x => x.Id); + table.ForeignKey( + name: "FK_Shops_IceCreams_IceCreamId", + column: x => x.IceCreamId, + principalTable: "IceCreams", + principalColumn: "Id"); + }); + + migrationBuilder.CreateTable( + name: "IceCreams", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + IceCreamId = table.Column(type: "int", nullable: false), + ShopId = table.Column(type: "int", nullable: false), + Count = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_ShopIcecreams", x => x.Id); + table.ForeignKey( + name: "FK_ShopIcecreams_IceCreams_IceCreamId", + column: x => x.IceCreamId, + principalTable: "IceCreams", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_ShopIcecreams_Shops_ShopId", + column: x => x.ShopId, + principalTable: "Shops", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_ShopIcecreams_IceCreamId", + table: "IceCreams", + column: "IceCreamId"); + + migrationBuilder.CreateIndex( + name: "IX_ShopIcecreams_ShopId", + table: "IceCreams", + column: "ShopId"); + + migrationBuilder.CreateIndex( + name: "IX_Shops_IceCreamId", + table: "Shops", + column: "IceCreamId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "IceCreams"); + + migrationBuilder.DropTable( + name: "Shops"); + + migrationBuilder.DropColumn( + name: "IceCreamName", + table: "Orders"); + } + } +} -- 2.25.1 From 49cbb060757c34cc5102e23fe57aea8a1aec002e Mon Sep 17 00:00:00 2001 From: Inohara Date: Thu, 4 May 2023 21:00:47 +0400 Subject: [PATCH 15/17] =?UTF-8?q?=D1=83=D0=BF=D1=812?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IceCreamShopDatabaseImplement.csproj | 4 - .../20230226160632_InitMigration.Designer.cs | 160 +++++++++++++ .../20230313191542_NewMigration.Designer.cs | 171 ++++++++++++++ .../20230327111426_LabWork05Migr.Designer.cs | 214 ++++++++++++++++++ 4 files changed, 545 insertions(+), 4 deletions(-) create mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230226160632_InitMigration.Designer.cs create mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.Designer.cs create mode 100644 IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230327111426_LabWork05Migr.Designer.cs diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/IceCreamShopDatabaseImplement.csproj b/IceCreamShop/IceCreamShopDatabaseImplement/IceCreamShopDatabaseImplement.csproj index 282a781..616d02d 100644 --- a/IceCreamShop/IceCreamShopDatabaseImplement/IceCreamShopDatabaseImplement.csproj +++ b/IceCreamShop/IceCreamShopDatabaseImplement/IceCreamShopDatabaseImplement.csproj @@ -20,8 +20,4 @@ - - - - diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230226160632_InitMigration.Designer.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230226160632_InitMigration.Designer.cs new file mode 100644 index 0000000..f3b6c8e --- /dev/null +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230226160632_InitMigration.Designer.cs @@ -0,0 +1,160 @@ +// +using System; +using IceCreamShopDatabaseImplement; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace IceCreamShopDatabaseImplement.Migrations +{ + [DbContext(typeof(IceCreamShopDatabase))] + [Migration("20230226160632_InitMigration")] + partial class InitMigration + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.3") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Component", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ComponentName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Cost") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("Components"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCream", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("IceCreamName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Price") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("IceCreams"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCreamComponent", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ComponentId") + .HasColumnType("int"); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("IceCreamId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ComponentId"); + + b.HasIndex("IceCreamId"); + + b.ToTable("IceCreamComponents"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Order", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("DateCreate") + .HasColumnType("datetime2"); + + b.Property("DateImplement") + .HasColumnType("datetime2"); + + b.Property("IceCreamId") + .HasColumnType("int"); + + b.Property("IceCreamName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("Sum") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("Orders"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCreamComponent", b => + { + b.HasOne("IceCreamShopDatabaseImplement.Models.Component", "Component") + .WithMany("IceCreamComponents") + .HasForeignKey("ComponentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", "IceCream") + .WithMany("Components") + .HasForeignKey("IceCreamId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Component"); + + b.Navigation("IceCream"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Component", b => + { + b.Navigation("IceCreamComponents"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCream", b => + { + b.Navigation("Components"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.Designer.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.Designer.cs new file mode 100644 index 0000000..ddb4850 --- /dev/null +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230313191542_NewMigration.Designer.cs @@ -0,0 +1,171 @@ +// +using System; +using IceCreamShopDatabaseImplement; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace IceCreamShopDatabaseImplement.Migrations +{ + [DbContext(typeof(IceCreamShopDatabase))] + [Migration("20230313191542_NewMigration")] + partial class NewMigration + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.3") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Component", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ComponentName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Cost") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("Components"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCream", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("IceCreamName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Price") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("IceCreams"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCreamComponent", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ComponentId") + .HasColumnType("int"); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("IceCreamId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ComponentId"); + + b.HasIndex("IceCreamId"); + + b.ToTable("IceCreamComponents"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Order", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("DateCreate") + .HasColumnType("datetime2"); + + b.Property("DateImplement") + .HasColumnType("datetime2"); + + b.Property("IceCreamId") + .HasColumnType("int"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("Sum") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("IceCreamId"); + + b.ToTable("Orders"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCreamComponent", b => + { + b.HasOne("IceCreamShopDatabaseImplement.Models.Component", "Component") + .WithMany("IceCreamComponents") + .HasForeignKey("ComponentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", "IceCream") + .WithMany("Components") + .HasForeignKey("IceCreamId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Component"); + + b.Navigation("IceCream"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Order", b => + { + b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", "IceCream") + .WithMany("Orders") + .HasForeignKey("IceCreamId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("IceCream"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Component", b => + { + b.Navigation("IceCreamComponents"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCream", b => + { + b.Navigation("Components"); + + b.Navigation("Orders"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230327111426_LabWork05Migr.Designer.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230327111426_LabWork05Migr.Designer.cs new file mode 100644 index 0000000..5d663f3 --- /dev/null +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/20230327111426_LabWork05Migr.Designer.cs @@ -0,0 +1,214 @@ +// +using System; +using IceCreamShopDatabaseImplement; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace IceCreamShopDatabaseImplement.Migrations +{ + [DbContext(typeof(IceCreamShopDatabase))] + [Migration("20230327111426_LabWork05Migr")] + partial class LabWork05Migr + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.3") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Client", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClientFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Password") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Clients"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Component", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ComponentName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Cost") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("Components"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCream", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("IceCreamName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Price") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("IceCreams"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCreamComponent", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ComponentId") + .HasColumnType("int"); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("IceCreamId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ComponentId"); + + b.HasIndex("IceCreamId"); + + b.ToTable("IceCreamComponents"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Order", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClientId") + .HasColumnType("int"); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("DateCreate") + .HasColumnType("datetime2"); + + b.Property("DateImplement") + .HasColumnType("datetime2"); + + b.Property("IceCreamId") + .HasColumnType("int"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("Sum") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.HasIndex("IceCreamId"); + + b.ToTable("Orders"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCreamComponent", b => + { + b.HasOne("IceCreamShopDatabaseImplement.Models.Component", "Component") + .WithMany("IceCreamComponents") + .HasForeignKey("ComponentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", "IceCream") + .WithMany("Components") + .HasForeignKey("IceCreamId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Component"); + + b.Navigation("IceCream"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Order", b => + { + b.HasOne("IceCreamShopDatabaseImplement.Models.Client", "Client") + .WithMany("Orders") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("IceCreamShopDatabaseImplement.Models.IceCream", "IceCream") + .WithMany("Orders") + .HasForeignKey("IceCreamId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Client"); + + b.Navigation("IceCream"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Client", b => + { + b.Navigation("Orders"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.Component", b => + { + b.Navigation("IceCreamComponents"); + }); + + modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.IceCream", b => + { + b.Navigation("Components"); + + b.Navigation("Orders"); + }); +#pragma warning restore 612, 618 + } + } +} -- 2.25.1 From 079efaa43c6ec625494900fd4b41a4dd11ed5f8d Mon Sep 17 00:00:00 2001 From: Ino Date: Tue, 16 May 2023 09:43:13 +0400 Subject: [PATCH 16/17] fix --- .../Migrations/IceCreamShopDatabaseModelSnapshot.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs index aaff0e1..11eee2b 100644 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs @@ -281,6 +281,7 @@ namespace IceCreamShopDatabaseImplement.Migrations b.Navigation("Client"); b.Navigation("IceCream"); + } modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.ShopIcecream", b => { -- 2.25.1 From 687cff0a874e7f1f9a7d93d38f5ba39f9196ca97 Mon Sep 17 00:00:00 2001 From: Ino Date: Tue, 16 May 2023 09:43:39 +0400 Subject: [PATCH 17/17] fix --- .../Migrations/IceCreamShopDatabaseModelSnapshot.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs index 11eee2b..3bfc56d 100644 --- a/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs +++ b/IceCreamShop/IceCreamShopDatabaseImplement/Migrations/IceCreamShopDatabaseModelSnapshot.cs @@ -281,7 +281,7 @@ namespace IceCreamShopDatabaseImplement.Migrations b.Navigation("Client"); b.Navigation("IceCream"); - } + }); modelBuilder.Entity("IceCreamShopDatabaseImplement.Models.ShopIcecream", b => { -- 2.25.1