From 4463c8832fbd4454e3301ca973153af1e35d0a5a Mon Sep 17 00:00:00 2001 From: "Pyatkin I.A" <4234.sunrise.234@gmail.com> Date: Sun, 28 Apr 2024 23:08:31 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20=D1=84?= =?UTF-8?q?=D0=B8=D0=BA=D1=81=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA=20+?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B8=D0=B7=D0=BE=D0=BB=D0=BE=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BC?= =?UTF-8?q?=D0=B8=D0=B3=D1=80=D0=B0=D1=86=D0=B8=D0=B8,=20=D0=B2=D1=80?= =?UTF-8?q?=D0=BE=D0=B4=D0=B5=20=D0=B2=D1=81=D0=B5=20=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=B0=D0=B5=D1=82,=20=D0=BF=D0=BE=D0=BA=D0=B0=20?= =?UTF-8?q?=D1=87=D1=82=D0=BE....?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FurnitureFactory/FurnitureFactory.sln | 6 + .../BindingModels/OrderBindingModel.cs | 1 - .../ViewModels/OrderViewModel.cs | 1 - .../FurnitureFactoryDataBase.cs | 31 ++ .../FurnitureFactoryDataBaseImplement.csproj | 23 ++ .../Implements/ClientStorage.cs | 101 +++++++ .../Implements/EmployeeStorage.cs | 95 +++++++ .../Implements/FurnitureStorage.cs | 109 ++++++++ .../Implements/MaterialStorage.cs | 90 ++++++ .../Implements/OrderStorage.cs | 127 +++++++++ .../20240428190428_InitialCreate.Designer.cs | 264 ++++++++++++++++++ .../20240428190428_InitialCreate.cs | 187 +++++++++++++ .../FurnitureFactoryDataBaseModelSnapshot.cs | 261 +++++++++++++++++ .../Models/Client.cs | 64 +++++ .../Models/Employee.cs | 75 +++++ .../Models/Furniture.cs | 102 +++++++ .../Models/FurnitureMaterial.cs | 23 ++ .../Models/Material.cs | 62 ++++ .../Models/Order.cs | 93 ++++++ .../Models/IOrderModel.cs | 1 - .../FurnitureFactoryView.csproj | 18 ++ 21 files changed, 1731 insertions(+), 3 deletions(-) create mode 100644 FurnitureFactory/FurnitureFactoryDataBaseImplements/FurnitureFactoryDataBase.cs create mode 100644 FurnitureFactory/FurnitureFactoryDataBaseImplements/FurnitureFactoryDataBaseImplement.csproj create mode 100644 FurnitureFactory/FurnitureFactoryDataBaseImplements/Implements/ClientStorage.cs create mode 100644 FurnitureFactory/FurnitureFactoryDataBaseImplements/Implements/EmployeeStorage.cs create mode 100644 FurnitureFactory/FurnitureFactoryDataBaseImplements/Implements/FurnitureStorage.cs create mode 100644 FurnitureFactory/FurnitureFactoryDataBaseImplements/Implements/MaterialStorage.cs create mode 100644 FurnitureFactory/FurnitureFactoryDataBaseImplements/Implements/OrderStorage.cs create mode 100644 FurnitureFactory/FurnitureFactoryDataBaseImplements/Migrations/20240428190428_InitialCreate.Designer.cs create mode 100644 FurnitureFactory/FurnitureFactoryDataBaseImplements/Migrations/20240428190428_InitialCreate.cs create mode 100644 FurnitureFactory/FurnitureFactoryDataBaseImplements/Migrations/FurnitureFactoryDataBaseModelSnapshot.cs create mode 100644 FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/Client.cs create mode 100644 FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/Employee.cs create mode 100644 FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/Furniture.cs create mode 100644 FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/FurnitureMaterial.cs create mode 100644 FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/Material.cs create mode 100644 FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/Order.cs diff --git a/FurnitureFactory/FurnitureFactory.sln b/FurnitureFactory/FurnitureFactory.sln index 8a3fbd2..9de7067 100644 --- a/FurnitureFactory/FurnitureFactory.sln +++ b/FurnitureFactory/FurnitureFactory.sln @@ -11,6 +11,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FurnitureFactoryContracts", EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FurnitureFactoryBusinessLogic", "FurnitureFactoryBusinessLogic\FurnitureFactoryBusinessLogic.csproj", "{F823EC86-06B1-4D50-BD39-85CF213F7A00}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FurnitureFactoryDataBaseImplement", "FurnitureFactoryDataBaseImplements\FurnitureFactoryDataBaseImplement.csproj", "{A68BD54C-88D5-4446-B61D-3A94AF07D69F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -33,6 +35,10 @@ Global {F823EC86-06B1-4D50-BD39-85CF213F7A00}.Debug|Any CPU.Build.0 = Debug|Any CPU {F823EC86-06B1-4D50-BD39-85CF213F7A00}.Release|Any CPU.ActiveCfg = Release|Any CPU {F823EC86-06B1-4D50-BD39-85CF213F7A00}.Release|Any CPU.Build.0 = Release|Any CPU + {A68BD54C-88D5-4446-B61D-3A94AF07D69F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A68BD54C-88D5-4446-B61D-3A94AF07D69F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A68BD54C-88D5-4446-B61D-3A94AF07D69F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A68BD54C-88D5-4446-B61D-3A94AF07D69F}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/FurnitureFactory/FurnitureFactoryContracts/BindingModels/OrderBindingModel.cs b/FurnitureFactory/FurnitureFactoryContracts/BindingModels/OrderBindingModel.cs index d09899d..49c97e8 100644 --- a/FurnitureFactory/FurnitureFactoryContracts/BindingModels/OrderBindingModel.cs +++ b/FurnitureFactory/FurnitureFactoryContracts/BindingModels/OrderBindingModel.cs @@ -20,6 +20,5 @@ namespace FurnitureFactoryContracts.BindingModels public PaymentStatus PStatus { get; set; } = PaymentStatus.Неизвестно; public DateTime DateCreate { get; set; } = DateTime.Now; public DateTime? DateImplement { get; set; } - public Dictionary OrderFurnitures { get; set; } = new(); } } diff --git a/FurnitureFactory/FurnitureFactoryContracts/ViewModels/OrderViewModel.cs b/FurnitureFactory/FurnitureFactoryContracts/ViewModels/OrderViewModel.cs index 88b947f..af05e84 100644 --- a/FurnitureFactory/FurnitureFactoryContracts/ViewModels/OrderViewModel.cs +++ b/FurnitureFactory/FurnitureFactoryContracts/ViewModels/OrderViewModel.cs @@ -34,6 +34,5 @@ namespace FurnitureFactoryContracts.ViewModels public DateTime DateCreate { get; set; } = DateTime.Now; [DisplayName("Дата выполнения")] public DateTime? DateImplement { get; set; } - public Dictionary OrderFurnitures { get; set; } = new(); } } diff --git a/FurnitureFactory/FurnitureFactoryDataBaseImplements/FurnitureFactoryDataBase.cs b/FurnitureFactory/FurnitureFactoryDataBaseImplements/FurnitureFactoryDataBase.cs new file mode 100644 index 0000000..f7b35b0 --- /dev/null +++ b/FurnitureFactory/FurnitureFactoryDataBaseImplements/FurnitureFactoryDataBase.cs @@ -0,0 +1,31 @@ +using FurnitureFactoryDataBaseImplement.Models; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FurnitureFactoryDataBaseImplement +{ + public class FurnitureFactoryDataBase : DbContext + { + protected override void OnConfiguring(DbContextOptionsBuilder +optionsBuilder) + { + if (optionsBuilder.IsConfigured == false) + { + optionsBuilder.UseSqlServer(@"Data Source=SUNRISEPC;Initial Catalog=FurnitureFactoryDataBase;Integrated Security=True;MultipleActiveResultSets=True;;TrustServerCertificate=True"); + } + base.OnConfiguring(optionsBuilder); + } + public virtual DbSet Materials { set; get; } + public virtual DbSet Furnitures { set; get; } + public virtual DbSet FurnitureMaterials { set; get; } + public virtual DbSet Orders { set; get; } + public virtual DbSet Clients { set; get; } + public virtual DbSet Employees { set; get; } + + } +} diff --git a/FurnitureFactory/FurnitureFactoryDataBaseImplements/FurnitureFactoryDataBaseImplement.csproj b/FurnitureFactory/FurnitureFactoryDataBaseImplements/FurnitureFactoryDataBaseImplement.csproj new file mode 100644 index 0000000..7759ebd --- /dev/null +++ b/FurnitureFactory/FurnitureFactoryDataBaseImplements/FurnitureFactoryDataBaseImplement.csproj @@ -0,0 +1,23 @@ + + + + net6.0 + enable + enable + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + diff --git a/FurnitureFactory/FurnitureFactoryDataBaseImplements/Implements/ClientStorage.cs b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Implements/ClientStorage.cs new file mode 100644 index 0000000..af0185b --- /dev/null +++ b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Implements/ClientStorage.cs @@ -0,0 +1,101 @@ +using Microsoft.EntityFrameworkCore; +using FurnitureFactoryContracts.BindingModels; +using FurnitureFactoryContracts.SearchModels; +using FurnitureFactoryContracts.StorageContracts; +using FurnitureFactoryContracts.ViewModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using FurnitureFactoryDataBaseImplement.Models; + +namespace FurnitureFactoryDataBaseImplement.Implements +{ + public class ClientStorage : IClientStorage + { + public List GetFullList() + { + using var context = new FurnitureFactoryDataBase(); + return context.Clients + .Include(x => x.Orders) + .Select(x => x.GetViewModel) + .ToList(); + } + + public List GetFilteredList(ClientSearchModel model) + { + if (model == null) + { + return new(); + } + if (!string.IsNullOrEmpty(model.Email)) + { + using var context = new FurnitureFactoryDataBase(); + return context.Clients + .Include(x => x.Orders) + .Where(x => x.Email.Contains(model.Email)) + .Select(x => x.GetViewModel) + .ToList(); + } + return new(); + } + + public ClientViewModel? GetElement(ClientSearchModel model) + { + using var context = new FurnitureFactoryDataBase(); + if (model.Id.HasValue) + { + return context.Clients + .FirstOrDefault(x => (x.Id == model.Id))?.GetViewModel; + } + else if (!string.IsNullOrEmpty(model.Email) && !string.IsNullOrEmpty(model.Password)) + { + return context.Clients + .FirstOrDefault(x => (x.Email == model.Email && x.Password == model.Password))?.GetViewModel; + } + return new(); + } + + public ClientViewModel? Insert(ClientBindingModel model) + { + var newClient = Client.Create(model); + if (newClient == null) + { + return null; + } + using var context = new FurnitureFactoryDataBase(); + context.Clients.Add(newClient); + context.SaveChanges(); + return newClient.GetViewModel; + } + + public ClientViewModel? Update(ClientBindingModel model) + { + using var context = new FurnitureFactoryDataBase(); + var client = context.Clients.FirstOrDefault(x => x.Id == model.Id); + if (client == null) + { + return null; + } + client.Update(model); + context.SaveChanges(); + return client.GetViewModel; + } + + public ClientViewModel? Delete(ClientBindingModel model) + { + using var context = new FurnitureFactoryDataBase(); + var element = context.Clients + .Include(x => x.Orders) + .FirstOrDefault(rec => rec.Id == model.Id); + if (element != null) + { + context.Clients.Remove(element); + context.SaveChanges(); + return element.GetViewModel; + } + return null; + } + } +} diff --git a/FurnitureFactory/FurnitureFactoryDataBaseImplements/Implements/EmployeeStorage.cs b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Implements/EmployeeStorage.cs new file mode 100644 index 0000000..b0a848f --- /dev/null +++ b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Implements/EmployeeStorage.cs @@ -0,0 +1,95 @@ +using FurnitureFactoryContracts.BindingModels; +using FurnitureFactoryContracts.SearchModels; +using FurnitureFactoryContracts.StorageContracts; +using FurnitureFactoryContracts.ViewModels; +using FurnitureFactoryDataBaseImplement.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FurnitureFactoryDataBaseImplement.Implements +{ + public class EmployeeStorage : IEmployeeStorage + { + public EmployeeViewModel? Delete(EmployeeBindingModel model) + { + using var context = new FurnitureFactoryDataBase(); + var res = context.Employees.FirstOrDefault(x => x.Id == model.Id); + if (res != null) + { + context.Employees.Remove(res); + context.SaveChanges(); + } + return res?.GetViewModel; + } + + public EmployeeViewModel? GetElement(EmployeeSearchModel model) + { + using var context = new FurnitureFactoryDataBase(); + if (model.Id.HasValue) + return context.Employees.FirstOrDefault(x => x.Id == model.Id)?.GetViewModel; + if (model.EmployeeFIO != null && model.Password != null) + return context.Employees + .FirstOrDefault(x => x.EmployeeFIO.Equals(model.EmployeeFIO) + && x.Password.Equals(model.Password)) + ?.GetViewModel; + if (model.EmployeeFIO != null) + return context.Employees.FirstOrDefault(x => x.EmployeeFIO.Equals(model.EmployeeFIO))?.GetViewModel; + return null; + } + + public List GetFilteredList(EmployeeSearchModel model) + { + if (model == null) + { + return new(); + } + if (model.Id.HasValue) + { + var res = GetElement(model); + return res != null ? new() { res } : new(); + } + if (model.EmployeeFIO != null) + { + using var context = new FurnitureFactoryDataBase(); + return context.Employees + .Where(x => x.EmployeeFIO.Equals(model.EmployeeFIO)) + .Select(x => x.GetViewModel) + .ToList(); + } + return new(); + } + + public List GetFullList() + { + using var context = new FurnitureFactoryDataBase(); + return context.Employees.Select(x => x.GetViewModel).ToList(); + } + + public EmployeeViewModel? Insert(EmployeeBindingModel model) + { + using var context = new FurnitureFactoryDataBase(); + var res = Employee.Create(model); + if (res != null) + { + context.Employees.Add(res); + context.SaveChanges(); + } + return res?.GetViewModel; + } + + public EmployeeViewModel? Update(EmployeeBindingModel model) + { + using var context = new FurnitureFactoryDataBase(); + var res = context.Employees.FirstOrDefault(x => x.Id == model.Id); + if (res != null) + { + res.Update(model); + context.SaveChanges(); + } + return res?.GetViewModel; + } + } +} diff --git a/FurnitureFactory/FurnitureFactoryDataBaseImplements/Implements/FurnitureStorage.cs b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Implements/FurnitureStorage.cs new file mode 100644 index 0000000..4b6a638 --- /dev/null +++ b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Implements/FurnitureStorage.cs @@ -0,0 +1,109 @@ +using Microsoft.EntityFrameworkCore; +using FurnitureFactoryContracts.BindingModels; +using FurnitureFactoryContracts.SearchModels; +using FurnitureFactoryContracts.StorageContracts; +using FurnitureFactoryContracts.ViewModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using FurnitureFactoryDataBaseImplement.Models; + +namespace FurnitureFactoryDataBaseImplement.Implements +{ + public class FurnitureStorage : IFurnitureStorage + { + public List GetFullList() + { + using var context = new FurnitureFactoryDataBase(); + return context.Furnitures + .Include(x => x.Materials) + .ThenInclude(x => x.Material) + .ToList() + .Select(x => x.GetViewModel) + .ToList(); + } + public List GetFilteredList(FurnitureSearchModel model) + { + if (string.IsNullOrEmpty(model.FurnitureName)) + { + return new(); + } + using var context = new FurnitureFactoryDataBase(); + return context.Furnitures.Include(x => x.Materials) + .ThenInclude(x => x.Material) + .Where(x => x.FurnitureName.Contains(model.FurnitureName)) + .ToList() + .Select(x => x.GetViewModel) + .ToList(); + } + public FurnitureViewModel? GetElement(FurnitureSearchModel model) + { + if (string.IsNullOrEmpty(model.FurnitureName) && + !model.Id.HasValue) + { + return null; + } + using var context = new FurnitureFactoryDataBase(); + return context.Furnitures + .Include(x => x.Materials) + .ThenInclude(x => x.Material) + .FirstOrDefault(x => (!string.IsNullOrEmpty(model.FurnitureName) && + x.FurnitureName == model.FurnitureName) || + (model.Id.HasValue && x.Id == + model.Id)) + ?.GetViewModel; + } + public FurnitureViewModel? Insert(FurnitureBindingModel model) + { + using var context = new FurnitureFactoryDataBase(); + var newFurniture = Furniture.Create(context, model); + if (newFurniture == null) + { + return null; + } + context.Furnitures.Add(newFurniture); + context.SaveChanges(); + return newFurniture.GetViewModel; + } + public FurnitureViewModel? Update(FurnitureBindingModel model) + { + using var context = new FurnitureFactoryDataBase(); + using var transaction = context.Database.BeginTransaction(); + try + { + var Furniture = context.Furnitures.FirstOrDefault(rec => + rec.Id == model.Id); + if (Furniture == null) + { + return null; + } + Furniture.Update(model); + context.SaveChanges(); + Furniture.UpdateMaterials(context, model); + transaction.Commit(); + return Furniture.GetViewModel; + } + catch + { + transaction.Rollback(); + throw; + } + } + public FurnitureViewModel? Delete(FurnitureBindingModel model) + { + using var context = new FurnitureFactoryDataBase(); + var element = context.Furnitures + .Include(x => x.Materials) + .FirstOrDefault(rec => rec.Id == model.Id); + if (element != null) + { + context.Furnitures.Remove(element); + context.SaveChanges(); + return element.GetViewModel; + } + return null; + } + } +} diff --git a/FurnitureFactory/FurnitureFactoryDataBaseImplements/Implements/MaterialStorage.cs b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Implements/MaterialStorage.cs new file mode 100644 index 0000000..2bc33a2 --- /dev/null +++ b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Implements/MaterialStorage.cs @@ -0,0 +1,90 @@ +using FurnitureFactoryContracts.BindingModels; +using FurnitureFactoryContracts.SearchModels; +using FurnitureFactoryContracts.StorageContracts; +using FurnitureFactoryContracts.ViewModels; +using FurnitureFactoryDataBaseImplement.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FurnitureFactoryDataBaseImplement.Implements +{ + public class MaterialStorage : IMaterialStorage + { + public List GetFullList() + { + using var context = new FurnitureFactoryDataBase(); + return context.Materials + .Select(x => x.GetViewModel) + .ToList(); + } + public List GetFilteredList(MaterialSearchModel + model) + { + if (string.IsNullOrEmpty(model.MaterialName)) + { + return new(); + } + using var context = new FurnitureFactoryDataBase(); + return context.Materials + .Where(x => x.MaterialName.Contains(model.MaterialName)) + .Select(x => x.GetViewModel) + .ToList(); + } + public MaterialViewModel? GetElement(MaterialSearchModel model) + { + if (string.IsNullOrEmpty(model.MaterialName) && !model.Id.HasValue) + { + return null; + } + using var context = new FurnitureFactoryDataBase(); + return context.Materials + .FirstOrDefault(x => + (!string.IsNullOrEmpty(model.MaterialName) && x.MaterialName == + model.MaterialName) || + (model.Id.HasValue && x.Id == model.Id)) + ?.GetViewModel; + } + public MaterialViewModel? Insert(MaterialBindingModel model) + { + var newMaterial = Material.Create(model); + if (newMaterial == null) + { + return null; + } + using var context = new FurnitureFactoryDataBase(); + context.Materials.Add(newMaterial); + context.SaveChanges(); + return newMaterial.GetViewModel; + } + public MaterialViewModel? Update(MaterialBindingModel model) + { + using var context = new FurnitureFactoryDataBase(); + var material = context.Materials.FirstOrDefault(x => x.Id == + model.Id); + if (material == null) + { + return null; + } + material.Update(model); + context.SaveChanges(); + return material.GetViewModel; + } + public MaterialViewModel? Delete(MaterialBindingModel model) + { + using var context = new FurnitureFactoryDataBase(); + var element = context.Materials.FirstOrDefault(rec => rec.Id == + model.Id); + if (element != null) + { + context.Materials.Remove(element); + context.SaveChanges(); + return element.GetViewModel; + } + return null; + } + } +} diff --git a/FurnitureFactory/FurnitureFactoryDataBaseImplements/Implements/OrderStorage.cs b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Implements/OrderStorage.cs new file mode 100644 index 0000000..26ff568 --- /dev/null +++ b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Implements/OrderStorage.cs @@ -0,0 +1,127 @@ +using FurnitureFactoryContracts.BindingModels; +using FurnitureFactoryContracts.SearchModels; +using FurnitureFactoryContracts.StorageContracts; +using FurnitureFactoryContracts.ViewModels; +using FurnitureFactoryDataBaseImplement.Models; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FurnitureFactoryDataBaseImplement.Implements +{ + public class OrderStorage : IOrderStorage + { + public List GetFullList() + { + using var context = new FurnitureFactoryDataBase(); + return context.Orders + .Include(x => x.Furniture).Include(x => x.Client).Include(x => x.Employee).Select(x => x.GetViewModel).ToList(); + } + public List GetFilteredList(OrderSearchModel model) + { + if (model.Id.HasValue) + { + var result = GetElement(model); + return result != null ? new() { result } : new(); + } + + using var context = new FurnitureFactoryDataBase(); + IQueryable? queryWhere = null; + + if (model.DateFrom.HasValue && model.DateTo.HasValue) + { + queryWhere = context.Orders + .Where(x => model.DateFrom <= x.DateCreate.Date && + x.DateCreate.Date <= model.DateTo); + } + + else if (model.OStatuses != null && model.PStatuses != null) + { + queryWhere = context.Orders.Where(x => model.OStatuses.Contains(x.OStatus)); + queryWhere = context.Orders.Where(x => model.PStatuses.Contains(x.PStatus)); + } + + 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.Employee) + .Select(x => x.GetViewModel) + .ToList(); + } + public OrderViewModel? GetElement(OrderSearchModel model) + { + if (!model.Id.HasValue) + { + return null; + } + using var context = new FurnitureFactoryDataBase(); + return context.Orders.Include(x => x.Client).Include(x => x.Employee).FirstOrDefault(x => + (model.OStatuses == null || model.OStatuses != null && model.OStatuses.Contains(x.OStatus)) && model.PStatuses == null || model.PStatuses != null && model.PStatuses.Contains(x.PStatus) && + model.EmployeeId.HasValue && x.EmployeeId == model.EmployeeId || + model.Id.HasValue && x.Id == model.Id + )?.GetViewModel; + } + public OrderViewModel? Insert(OrderBindingModel model) + { + var newOrder = Order.Create(model); + if (newOrder == null) + { + return null; + } + using var context = new FurnitureFactoryDataBase(); + context.Orders.Add(newOrder); + context.SaveChanges(); + return newOrder.GetViewModel; + } + public OrderViewModel? Update(OrderBindingModel model) + { + using var context = new FurnitureFactoryDataBase(); + + var order = context.Orders + .Include(x => x.Furniture) + .Include(x => x.Client) + .Include(x => x.Employee) + .FirstOrDefault(x => x.Id == model.Id); + + if (order == null) + { + return null; + } + + order.Update(model); + context.SaveChanges(); + + return order.GetViewModel; + } + public OrderViewModel? Delete(OrderBindingModel model) + { + using var context = new FurnitureFactoryDataBase(); + + var element = context.Orders + .Include(x => x.Furniture) + .Include(x => x.Client) + .Include(x => x.Employee) + .FirstOrDefault(rec => rec.Id == model.Id); + + if (element != null) + { + context.Orders.Remove(element); + context.SaveChanges(); + return element.GetViewModel; + } + return null; + } + } +} diff --git a/FurnitureFactory/FurnitureFactoryDataBaseImplements/Migrations/20240428190428_InitialCreate.Designer.cs b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Migrations/20240428190428_InitialCreate.Designer.cs new file mode 100644 index 0000000..d2fdd0a --- /dev/null +++ b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Migrations/20240428190428_InitialCreate.Designer.cs @@ -0,0 +1,264 @@ +// +using System; +using FurnitureFactoryDataBaseImplement; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace FurnitureFactoryDataBaseImplement.Migrations +{ + [DbContext(typeof(FurnitureFactoryDataBase))] + [Migration("20240428190428_InitialCreate")] + partial class InitialCreate + { + /// + 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("FurnitureFactoryDataBaseImplement.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("FurnitureFactoryDataBaseImplement.Models.Employee", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Email") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("EmployeeFIO") + .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("Employees"); + }); + + modelBuilder.Entity("FurnitureFactoryDataBaseImplement.Models.Furniture", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("FurnitureName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FurniturePrice") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("Furnitures"); + }); + + modelBuilder.Entity("FurnitureFactoryDataBaseImplement.Models.FurnitureMaterial", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("FurnitureId") + .HasColumnType("int"); + + b.Property("MaterialId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("FurnitureId"); + + b.HasIndex("MaterialId"); + + b.ToTable("FurnitureMaterials"); + }); + + modelBuilder.Entity("FurnitureFactoryDataBaseImplement.Models.Material", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("MaterialCost") + .HasColumnType("float"); + + b.Property("MaterialName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Materials"); + }); + + modelBuilder.Entity("FurnitureFactoryDataBaseImplement.Models.Order", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClientId") + .HasColumnType("int"); + + b.Property("DateCreate") + .HasColumnType("datetime2"); + + b.Property("DateImplement") + .HasColumnType("datetime2"); + + b.Property("EmployeeId") + .HasColumnType("int"); + + b.Property("FurnitureCount") + .HasColumnType("int"); + + b.Property("FurnitureId") + .HasColumnType("int"); + + b.Property("OStatus") + .HasColumnType("int"); + + b.Property("OrderPrice") + .HasColumnType("float"); + + b.Property("PStatus") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.HasIndex("EmployeeId"); + + b.HasIndex("FurnitureId"); + + b.ToTable("Orders"); + }); + + modelBuilder.Entity("FurnitureFactoryDataBaseImplement.Models.FurnitureMaterial", b => + { + b.HasOne("FurnitureFactoryDataBaseImplement.Models.Furniture", "Furniture") + .WithMany("Materials") + .HasForeignKey("FurnitureId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("FurnitureFactoryDataBaseImplement.Models.Material", "Material") + .WithMany("FurnitureMaterials") + .HasForeignKey("MaterialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Furniture"); + + b.Navigation("Material"); + }); + + modelBuilder.Entity("FurnitureFactoryDataBaseImplement.Models.Order", b => + { + b.HasOne("FurnitureFactoryDataBaseImplement.Models.Client", "Client") + .WithMany("Orders") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("FurnitureFactoryDataBaseImplement.Models.Employee", "Employee") + .WithMany("Orders") + .HasForeignKey("EmployeeId"); + + b.HasOne("FurnitureFactoryDataBaseImplement.Models.Furniture", "Furniture") + .WithMany("Orders") + .HasForeignKey("FurnitureId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Client"); + + b.Navigation("Employee"); + + b.Navigation("Furniture"); + }); + + modelBuilder.Entity("FurnitureFactoryDataBaseImplement.Models.Client", b => + { + b.Navigation("Orders"); + }); + + modelBuilder.Entity("FurnitureFactoryDataBaseImplement.Models.Employee", b => + { + b.Navigation("Orders"); + }); + + modelBuilder.Entity("FurnitureFactoryDataBaseImplement.Models.Furniture", b => + { + b.Navigation("Materials"); + + b.Navigation("Orders"); + }); + + modelBuilder.Entity("FurnitureFactoryDataBaseImplement.Models.Material", b => + { + b.Navigation("FurnitureMaterials"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/FurnitureFactory/FurnitureFactoryDataBaseImplements/Migrations/20240428190428_InitialCreate.cs b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Migrations/20240428190428_InitialCreate.cs new file mode 100644 index 0000000..ddc9457 --- /dev/null +++ b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Migrations/20240428190428_InitialCreate.cs @@ -0,0 +1,187 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace FurnitureFactoryDataBaseImplement.Migrations +{ + /// + public partial class InitialCreate : 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: "Employees", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + EmployeeFIO = table.Column(type: "nvarchar(max)", nullable: false), + Email = 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_Employees", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Furnitures", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + FurnitureName = table.Column(type: "nvarchar(max)", nullable: false), + FurniturePrice = table.Column(type: "float", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Furnitures", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Materials", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + MaterialName = table.Column(type: "nvarchar(max)", nullable: false), + MaterialCost = table.Column(type: "float", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Materials", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Orders", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + ClientId = table.Column(type: "int", nullable: false), + EmployeeId = table.Column(type: "int", nullable: true), + FurnitureCount = table.Column(type: "int", nullable: false), + OrderPrice = table.Column(type: "float", nullable: false), + OStatus = table.Column(type: "int", nullable: false), + PStatus = table.Column(type: "int", nullable: false), + DateCreate = table.Column(type: "datetime2", nullable: false), + DateImplement = table.Column(type: "datetime2", nullable: true), + FurnitureId = table.Column(type: "int", nullable: false) + }, + 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_Employees_EmployeeId", + column: x => x.EmployeeId, + principalTable: "Employees", + principalColumn: "Id"); + table.ForeignKey( + name: "FK_Orders_Furnitures_FurnitureId", + column: x => x.FurnitureId, + principalTable: "Furnitures", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "FurnitureMaterials", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + FurnitureId = table.Column(type: "int", nullable: false), + MaterialId = table.Column(type: "int", nullable: false), + Count = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_FurnitureMaterials", x => x.Id); + table.ForeignKey( + name: "FK_FurnitureMaterials_Furnitures_FurnitureId", + column: x => x.FurnitureId, + principalTable: "Furnitures", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_FurnitureMaterials_Materials_MaterialId", + column: x => x.MaterialId, + principalTable: "Materials", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_FurnitureMaterials_FurnitureId", + table: "FurnitureMaterials", + column: "FurnitureId"); + + migrationBuilder.CreateIndex( + name: "IX_FurnitureMaterials_MaterialId", + table: "FurnitureMaterials", + column: "MaterialId"); + + migrationBuilder.CreateIndex( + name: "IX_Orders_ClientId", + table: "Orders", + column: "ClientId"); + + migrationBuilder.CreateIndex( + name: "IX_Orders_EmployeeId", + table: "Orders", + column: "EmployeeId"); + + migrationBuilder.CreateIndex( + name: "IX_Orders_FurnitureId", + table: "Orders", + column: "FurnitureId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "FurnitureMaterials"); + + migrationBuilder.DropTable( + name: "Orders"); + + migrationBuilder.DropTable( + name: "Materials"); + + migrationBuilder.DropTable( + name: "Clients"); + + migrationBuilder.DropTable( + name: "Employees"); + + migrationBuilder.DropTable( + name: "Furnitures"); + } + } +} diff --git a/FurnitureFactory/FurnitureFactoryDataBaseImplements/Migrations/FurnitureFactoryDataBaseModelSnapshot.cs b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Migrations/FurnitureFactoryDataBaseModelSnapshot.cs new file mode 100644 index 0000000..a8fddec --- /dev/null +++ b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Migrations/FurnitureFactoryDataBaseModelSnapshot.cs @@ -0,0 +1,261 @@ +// +using System; +using FurnitureFactoryDataBaseImplement; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace FurnitureFactoryDataBaseImplement.Migrations +{ + [DbContext(typeof(FurnitureFactoryDataBase))] + partial class FurnitureFactoryDataBaseModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.3") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("FurnitureFactoryDataBaseImplement.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("FurnitureFactoryDataBaseImplement.Models.Employee", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Email") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("EmployeeFIO") + .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("Employees"); + }); + + modelBuilder.Entity("FurnitureFactoryDataBaseImplement.Models.Furniture", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("FurnitureName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("FurniturePrice") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("Furnitures"); + }); + + modelBuilder.Entity("FurnitureFactoryDataBaseImplement.Models.FurnitureMaterial", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("FurnitureId") + .HasColumnType("int"); + + b.Property("MaterialId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("FurnitureId"); + + b.HasIndex("MaterialId"); + + b.ToTable("FurnitureMaterials"); + }); + + modelBuilder.Entity("FurnitureFactoryDataBaseImplement.Models.Material", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("MaterialCost") + .HasColumnType("float"); + + b.Property("MaterialName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Materials"); + }); + + modelBuilder.Entity("FurnitureFactoryDataBaseImplement.Models.Order", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClientId") + .HasColumnType("int"); + + b.Property("DateCreate") + .HasColumnType("datetime2"); + + b.Property("DateImplement") + .HasColumnType("datetime2"); + + b.Property("EmployeeId") + .HasColumnType("int"); + + b.Property("FurnitureCount") + .HasColumnType("int"); + + b.Property("FurnitureId") + .HasColumnType("int"); + + b.Property("OStatus") + .HasColumnType("int"); + + b.Property("OrderPrice") + .HasColumnType("float"); + + b.Property("PStatus") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.HasIndex("EmployeeId"); + + b.HasIndex("FurnitureId"); + + b.ToTable("Orders"); + }); + + modelBuilder.Entity("FurnitureFactoryDataBaseImplement.Models.FurnitureMaterial", b => + { + b.HasOne("FurnitureFactoryDataBaseImplement.Models.Furniture", "Furniture") + .WithMany("Materials") + .HasForeignKey("FurnitureId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("FurnitureFactoryDataBaseImplement.Models.Material", "Material") + .WithMany("FurnitureMaterials") + .HasForeignKey("MaterialId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Furniture"); + + b.Navigation("Material"); + }); + + modelBuilder.Entity("FurnitureFactoryDataBaseImplement.Models.Order", b => + { + b.HasOne("FurnitureFactoryDataBaseImplement.Models.Client", "Client") + .WithMany("Orders") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("FurnitureFactoryDataBaseImplement.Models.Employee", "Employee") + .WithMany("Orders") + .HasForeignKey("EmployeeId"); + + b.HasOne("FurnitureFactoryDataBaseImplement.Models.Furniture", "Furniture") + .WithMany("Orders") + .HasForeignKey("FurnitureId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Client"); + + b.Navigation("Employee"); + + b.Navigation("Furniture"); + }); + + modelBuilder.Entity("FurnitureFactoryDataBaseImplement.Models.Client", b => + { + b.Navigation("Orders"); + }); + + modelBuilder.Entity("FurnitureFactoryDataBaseImplement.Models.Employee", b => + { + b.Navigation("Orders"); + }); + + modelBuilder.Entity("FurnitureFactoryDataBaseImplement.Models.Furniture", b => + { + b.Navigation("Materials"); + + b.Navigation("Orders"); + }); + + modelBuilder.Entity("FurnitureFactoryDataBaseImplement.Models.Material", b => + { + b.Navigation("FurnitureMaterials"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/Client.cs b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/Client.cs new file mode 100644 index 0000000..134da1d --- /dev/null +++ b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/Client.cs @@ -0,0 +1,64 @@ +using FurnitureFactoryContracts.BindingModels; +using FurnitureFactoryContracts.ViewModels; +using FurnitureFactoryDataModels.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FurnitureFactoryDataBaseImplement.Models +{ + public class Client : IClientModel + { + public int Id { get; set; } + + [Required] + public string ClientFIO { get; set; } = string.Empty; + + [Required] + public string Email { get; set; } = string.Empty; + + [Required] + public string Password { get; set; } = string.Empty; + + [ForeignKey("ClientId")] + public virtual List Orders { get; set; } = new(); + + public static Client? Create(ClientBindingModel? model) + { + if (model == null) + { + return null; + } + return new Client() + { + Id = model.Id, + ClientFIO = model.ClientFIO, + Email = model.Email, + Password = model.Password + }; + } + + public void Update(ClientBindingModel? model) + { + if (model == null) + { + return; + } + ClientFIO = model.ClientFIO; + Email = model.Email; + Password = model.Password; + } + + public ClientViewModel GetViewModel => new() + { + Id = Id, + ClientFIO = ClientFIO, + Email = Email, + Password = Password + }; + } +} diff --git a/FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/Employee.cs b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/Employee.cs new file mode 100644 index 0000000..879c88f --- /dev/null +++ b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/Employee.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using FurnitureFactoryDataModels.Models; +using FurnitureFactoryContracts.BindingModels; +using FurnitureFactoryContracts.ViewModels; + +namespace FurnitureFactoryDataBaseImplement.Models +{ + public class Employee : IEmployeeModel + { + public int Id { get; private set; } + + [Required] + public string EmployeeFIO { get; private set; } = string.Empty; + [Required] + public string Email { get; private set; } = string.Empty; + + [Required] + public string Password { get; private set; } = string.Empty; + + [Required] + public int WorkExperience { get; private set; } + + [Required] + public int Qualification { get; private set; } + + [ForeignKey("EmployeeId")] + public virtual List Orders { get; set; } = new(); + + public static Employee? Create(EmployeeBindingModel model) + { + if (model == null) + { + return null; + } + return new Employee() + { + Id = model.Id, + EmployeeFIO = model.EmployeeFIO, + Email = model.Email, + Password = model.Password, + WorkExperience = model.WorkExperience, + Qualification = model.Qualification, + }; + } + + public void Update(EmployeeBindingModel model) + { + if (model == null) + { + return; + } + EmployeeFIO = model.EmployeeFIO; + Email = model.Email; + Password = model.Password; + WorkExperience = model.WorkExperience; + Qualification = model.Qualification; + } + + public EmployeeViewModel GetViewModel => new() + { + Id = Id, + EmployeeFIO = EmployeeFIO, + Email = Email, + Password = Password, + WorkExperience = WorkExperience, + Qualification = Qualification, + }; + } +} diff --git a/FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/Furniture.cs b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/Furniture.cs new file mode 100644 index 0000000..8fcd39d --- /dev/null +++ b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/Furniture.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using FurnitureFactoryDataModels.Models; +using FurnitureFactoryContracts.BindingModels; +using FurnitureFactoryContracts.ViewModels; + +namespace FurnitureFactoryDataBaseImplement.Models +{ + public class Furniture : IFurnitureModel + { + public int Id { get; set; } + [Required] + public string FurnitureName { get; set; } = string.Empty; + [Required] + public double FurniturePrice { get; set; } + private Dictionary? _FurnitureMaterials = + null; + [NotMapped] + public Dictionary FurnitureMaterials + { + get + { + if (_FurnitureMaterials == null) + { + _FurnitureMaterials = Materials + .ToDictionary(recPC => recPC.MaterialId, recPC => + (recPC.Material as IMaterialModel, recPC.Count)); + } + return _FurnitureMaterials; + } + } + [ForeignKey("FurnitureId")] + public virtual List Materials { get; set; } = new(); + [ForeignKey("FurnitureId")] + public virtual List Orders { get; set; } = new(); + public static Furniture Create(FurnitureFactoryDataBase context, + FurnitureBindingModel model) + { + return new Furniture() + { + Id = model.Id, + FurnitureName = model.FurnitureName, + FurniturePrice = model.FurniturePrice, + Materials = model.FurnitureMaterials.Select(x => new + FurnitureMaterial + { + Material = context.Materials.First(y => y.Id == x.Key), + Count = x.Value.Item2 + }).ToList() + }; + } + public void Update(FurnitureBindingModel model) + { + FurnitureName = model.FurnitureName; + FurniturePrice = model.FurniturePrice; + } + public FurnitureViewModel GetViewModel => new() + { + Id = Id, + FurnitureName = FurnitureName, + FurniturePrice = FurniturePrice, + FurnitureMaterials = FurnitureMaterials + }; + public void UpdateMaterials(FurnitureFactoryDataBase context, + FurnitureBindingModel model) + { + var FurnitureMaterials = context.FurnitureMaterials.Where(rec => + rec.FurnitureId == model.Id).ToList(); + if (FurnitureMaterials != null && FurnitureMaterials.Count > 0) + { + context.FurnitureMaterials.RemoveRange(FurnitureMaterials.Where(rec +=> !model.FurnitureMaterials.ContainsKey(rec.MaterialId))); + + context.SaveChanges(); + foreach (var updateMaterial in FurnitureMaterials) + { + updateMaterial.Count = + model.FurnitureMaterials[updateMaterial.MaterialId].Item2; + model.FurnitureMaterials.Remove(updateMaterial.MaterialId); + } + context.SaveChanges(); + } + var Furniture = context.Furnitures.First(x => x.Id == Id); + foreach (var pc in model.FurnitureMaterials) + { + context.FurnitureMaterials.Add(new FurnitureMaterial + { + Furniture = Furniture, + Material = context.Materials.First(x => x.Id == pc.Key), + Count = pc.Value.Item2 + }); + context.SaveChanges(); + } + _FurnitureMaterials = null; + } + } +} diff --git a/FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/FurnitureMaterial.cs b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/FurnitureMaterial.cs new file mode 100644 index 0000000..2766609 --- /dev/null +++ b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/FurnitureMaterial.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FurnitureFactoryDataBaseImplement.Models +{ + public class FurnitureMaterial + { + public int Id { get; set; } + [Required] + public int FurnitureId { get; set; } + [Required] + public int MaterialId { get; set; } + [Required] + public int Count { get; set; } + public virtual Material Material { get; set; } = new(); + public virtual Furniture Furniture { get; set; } = new(); + } +} diff --git a/FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/Material.cs b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/Material.cs new file mode 100644 index 0000000..0554e8d --- /dev/null +++ b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/Material.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using FurnitureFactoryDataModels.Models; +using FurnitureFactoryContracts.BindingModels; +using FurnitureFactoryContracts.ViewModels; + +namespace FurnitureFactoryDataBaseImplement.Models +{ + public class Material : IMaterialModel + { + public int Id { get; private set; } + [Required] + public string MaterialName { get; private set; } = string.Empty; + [Required] + public double MaterialCost { get; set; } + [ForeignKey("MaterialId")] + public virtual List FurnitureMaterials { get; set; } = + new(); + public static Material? Create(MaterialBindingModel model) + { + if (model == null) + { + return null; + } + return new Material() + { + Id = model.Id, + MaterialName = model.MaterialName, + MaterialCost = model.MaterialCost + }; + } + public static Material Create(MaterialViewModel model) + { + return new Material + { + Id = model.Id, + MaterialName = model.MaterialName, + MaterialCost = model.MaterialCost + }; + } + public void Update(MaterialBindingModel model) + { + if (model == null) + { + return; + } + MaterialName = model.MaterialName; + MaterialCost = model.MaterialCost; + } + public MaterialViewModel GetViewModel => new() + { + Id = Id, + MaterialName = MaterialName, + MaterialCost = MaterialCost + }; + } +} diff --git a/FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/Order.cs b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/Order.cs new file mode 100644 index 0000000..826fbf3 --- /dev/null +++ b/FurnitureFactory/FurnitureFactoryDataBaseImplements/Models/Order.cs @@ -0,0 +1,93 @@ +using FurnitureFactoryContracts.BindingModels; +using FurnitureFactoryContracts.ViewModels; +using FurnitureFactoryDataModels.Enums; +using FurnitureFactoryDataModels.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FurnitureFactoryDataBaseImplement.Models +{ + public class Order : IOrderModel + { + public int Id { get; private set; } + [Required] + public int ClientId { get; set; } + public int? EmployeeId { get; set; } + public int FurnitureCount { get; private set; } + [Required] + public double OrderPrice { get; private set; } + [Required] + public OrderStatus OStatus { get; private set; } + [Required] + public PaymentStatus PStatus { get; private set; } + [Required] + public DateTime DateCreate { get; private set; } + public DateTime? DateImplement { get; private set; } + [Required] + public int FurnitureId { get; private set; } + public virtual Furniture Furniture { get; set; } + public virtual Client Client { get; set; } + public virtual Employee? Employee { get; set; } + + public static Order? Create(OrderBindingModel model) + { + if (model == null) + { + return null; + } + return new Order() + { + Id = model.Id, + ClientId = model.ClientId, + EmployeeId = model.EmployeeId, + FurnitureCount = model.FurnitureCount, + OrderPrice = model.OrderPrice, + OStatus = model.OStatus, + PStatus = model.PStatus, + DateCreate = model.DateCreate, + DateImplement = model.DateImplement, + FurnitureId = model.FurnitureId, + }; + } + + public void Update(OrderBindingModel? model) + { + if (model == null) + { + return; + } + OStatus = model.OStatus; + PStatus = model.PStatus; + DateImplement = model.DateImplement; + EmployeeId = model.EmployeeId; + } + + public OrderViewModel GetViewModel + { + get + { + using var context = new FurnitureFactoryDataBase(); + return new OrderViewModel + { + FurnitureId = FurnitureId, + EmployeeId = EmployeeId, + EmployeeFIO = Employee?.EmployeeFIO ?? string.Empty, + FurnitureName = context.Furnitures.FirstOrDefault(x => x.Id == FurnitureId)?.FurnitureName ?? string.Empty, + ClientId = ClientId, + ClientFIO = context.Clients.FirstOrDefault(x => x.Id == ClientId)?.ClientFIO ?? string.Empty, + FurnitureCount = FurnitureCount, + OrderPrice = OrderPrice, + OStatus = OStatus, + PStatus = PStatus, + DateCreate = DateCreate, + DateImplement = DateImplement, + Id = Id, + }; + } + } + } +} diff --git a/FurnitureFactory/FurnitureFactoryDataModels/Models/IOrderModel.cs b/FurnitureFactory/FurnitureFactoryDataModels/Models/IOrderModel.cs index fe95c5b..3bfdba3 100644 --- a/FurnitureFactory/FurnitureFactoryDataModels/Models/IOrderModel.cs +++ b/FurnitureFactory/FurnitureFactoryDataModels/Models/IOrderModel.cs @@ -18,6 +18,5 @@ namespace FurnitureFactoryDataModels.Models PaymentStatus PStatus { get; } DateTime DateCreate { get; } DateTime? DateImplement { get; } - Dictionary OrderFurnitures { get; } } } diff --git a/FurnitureFactory/FurnitureFactoryView/FurnitureFactoryView.csproj b/FurnitureFactory/FurnitureFactoryView/FurnitureFactoryView.csproj index b57c89e..37b89af 100644 --- a/FurnitureFactory/FurnitureFactoryView/FurnitureFactoryView.csproj +++ b/FurnitureFactory/FurnitureFactoryView/FurnitureFactoryView.csproj @@ -8,4 +8,22 @@ enable + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + \ No newline at end of file