diff --git a/BlacksmithWorkshop/BlacksmithWorkshop.sln b/BlacksmithWorkshop/BlacksmithWorkshop.sln
index 0834832..9bee79b 100644
--- a/BlacksmithWorkshop/BlacksmithWorkshop.sln
+++ b/BlacksmithWorkshop/BlacksmithWorkshop.sln
@@ -13,7 +13,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlacksmithWorkshopBusinessL
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlacksmithWorkshopListImplement", "BlacksmithWorkshopListImplement\BlacksmithWorkshopListImplement.csproj", "{2942D468-0C3B-4B8D-A15F-184F5D7C969A}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlacksmithWorkshopFileImplement", "BlacksmithWorkshopFileImplement\BlacksmithWorkshopFileImplement.csproj", "{58737D93-9A12-4D07-BF3F-86AC512CE626}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlacksmithWorkshopFileImplement", "BlacksmithWorkshopFileImplement\BlacksmithWorkshopFileImplement.csproj", "{58737D93-9A12-4D07-BF3F-86AC512CE626}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlacksmithWorkshopDatabaseImplement", "BlacksmithWorkshopDatabaseImplement\BlacksmithWorkshopDatabaseImplement.csproj", "{EE03BAE3-52EE-4E3B-8992-382D89E61E1A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -45,6 +47,10 @@ Global
{58737D93-9A12-4D07-BF3F-86AC512CE626}.Debug|Any CPU.Build.0 = Debug|Any CPU
{58737D93-9A12-4D07-BF3F-86AC512CE626}.Release|Any CPU.ActiveCfg = Release|Any CPU
{58737D93-9A12-4D07-BF3F-86AC512CE626}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EE03BAE3-52EE-4E3B-8992-382D89E61E1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EE03BAE3-52EE-4E3B-8992-382D89E61E1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EE03BAE3-52EE-4E3B-8992-382D89E61E1A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EE03BAE3-52EE-4E3B-8992-382D89E61E1A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/BlacksmithWorkshop/BlacksmithWorkshop/BlacksmithWorkshop.csproj b/BlacksmithWorkshop/BlacksmithWorkshop/BlacksmithWorkshop.csproj
index f51fc76..c5a85a4 100644
--- a/BlacksmithWorkshop/BlacksmithWorkshop/BlacksmithWorkshop.csproj
+++ b/BlacksmithWorkshop/BlacksmithWorkshop/BlacksmithWorkshop.csproj
@@ -9,14 +9,19 @@
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
-
+
+
diff --git a/BlacksmithWorkshop/BlacksmithWorkshop/FormShop.cs b/BlacksmithWorkshop/BlacksmithWorkshop/FormShop.cs
index 86043c9..c582e91 100644
--- a/BlacksmithWorkshop/BlacksmithWorkshop/FormShop.cs
+++ b/BlacksmithWorkshop/BlacksmithWorkshop/FormShop.cs
@@ -54,7 +54,7 @@ namespace BlacksmithWorkshop
textBoxAddress.Text = view.Address.ToString();
dateTimePickerDate.Value = view.DateOpen;
numericUpDownCount.Value = view.MaxCountManufactures;
- _shopManufactures = view.Manufactures ?? new Dictionary();
+ _shopManufactures = view.ShopManufactures ?? new Dictionary();
LoadData();
}
}
diff --git a/BlacksmithWorkshop/BlacksmithWorkshop/FormShops.cs b/BlacksmithWorkshop/BlacksmithWorkshop/FormShops.cs
index 8b91d5f..9c33261 100644
--- a/BlacksmithWorkshop/BlacksmithWorkshop/FormShops.cs
+++ b/BlacksmithWorkshop/BlacksmithWorkshop/FormShops.cs
@@ -37,13 +37,15 @@ namespace BlacksmithWorkshop
try
{
var list = _logic.ReadList(null);
+
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["Id"].Visible = false;
- dataGridView.Columns["Manufactures"].Visible = false;
+ dataGridView.Columns["ShopManufactures"].Visible = false;
dataGridView.Columns["ShopName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
+
_logger.LogInformation("Загрузка магазинов");
}
catch (Exception ex)
diff --git a/BlacksmithWorkshop/BlacksmithWorkshop/Program.cs b/BlacksmithWorkshop/BlacksmithWorkshop/Program.cs
index 09752bf..e7b1270 100644
--- a/BlacksmithWorkshop/BlacksmithWorkshop/Program.cs
+++ b/BlacksmithWorkshop/BlacksmithWorkshop/Program.cs
@@ -1,7 +1,7 @@
using BlacksmithWorkshopBusinessLogic.BusinessLogic;
using BlacksmithWorkshopContracts.BusinessLogicsContracts;
using BlacksmithWorkshopContracts.StoragesContracts;
-using BlacksmithWorkshopFileImplement.Implements;
+using BlacksmithWorkshopDatabaseImplement.Implements;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using NLog.Extensions.Logging;
@@ -59,6 +59,5 @@ namespace BlacksmithWorkshop
services.AddTransient();
services.AddTransient();
}
-
}
}
\ No newline at end of file
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopBusinessLogic/BusinessLogic/ShopLogic.cs b/BlacksmithWorkshop/BlacksmithWorkshopBusinessLogic/BusinessLogic/ShopLogic.cs
index acb9128..b86e500 100644
--- a/BlacksmithWorkshop/BlacksmithWorkshopBusinessLogic/BusinessLogic/ShopLogic.cs
+++ b/BlacksmithWorkshop/BlacksmithWorkshopBusinessLogic/BusinessLogic/ShopLogic.cs
@@ -50,6 +50,7 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogic
public List? ReadList(ShopSearchModel? model)
{
_logger.LogInformation("ReadList. ShopName:{ShopName}. Id: {Id}", model?.ShopName, model?.Id);
+
var list = model == null ? _shopStorage.GetFullList() : _shopStorage.GetFilteredList(model);
if (list == null)
@@ -79,52 +80,40 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogic
_logger.LogInformation("AddManufacture. ShopName:{ShopName}. Id: {Id}", model?.ShopName, model?.Id);
var shop = _shopStorage.GetElement(model);
- if (shop == null || !CheckShopCount(shop, count))
+ if (shop == null)
{
_logger.LogWarning("Add Manufacture operation failed");
return false;
}
- if (!shop.Manufactures.ContainsKey(manufacture.Id))
+ if (shop.MaxCountManufactures - shop.ShopManufactures.Select(x => x.Value.Item2).Sum() < count)
{
- shop.Manufactures[manufacture.Id] = (manufacture, count);
+ throw new ArgumentNullException("Слишком много изделий для одного магазина", nameof(count));
+ }
+
+ if (!shop.ShopManufactures.ContainsKey(manufacture.Id))
+ {
+ shop.ShopManufactures[manufacture.Id] = (manufacture, count);
}
else
{
- shop.Manufactures[manufacture.Id] = (manufacture, shop.Manufactures[manufacture.Id].Item2 + count);
+ shop.ShopManufactures[manufacture.Id] = (manufacture, shop.ShopManufactures[manufacture.Id].Item2 + count);
}
_shopStorage.Update(new ShopBindingModel()
{
+ Id = shop.Id,
ShopName = shop.ShopName,
Address = shop.Address,
DateOpen = shop.DateOpen,
MaxCountManufactures = shop.MaxCountManufactures,
- Manufactures = shop.Manufactures
+ ShopManufactures = shop.ShopManufactures
});
return true;
}
- //проверка на переполнение магазина
- private bool CheckShopCount(ShopViewModel model, int count)
- {
- int _countManufactures = 0;
-
- foreach (var manufacture in model.Manufactures)
- {
- _countManufactures += model.Manufactures[manufacture.Key].Item2;
- }
-
- if(_countManufactures + count > model.MaxCountManufactures)
- {
- return false;
- }
-
- return true;
- }
-
public bool Create(ShopBindingModel model)
{
CheckModel(model);
@@ -211,7 +200,7 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogic
_logger.LogInformation("AddManufactures. Manufacture: {Manufacture}. Count: {Count}", model?.ManufactureName, count);
- var capacity = _shopStorage.GetFullList().Select(x => x.MaxCountManufactures - x.Manufactures.Select(x => x.Value.Item2).Sum()).Sum() - count;
+ var capacity = _shopStorage.GetFullList().Select(x => x.MaxCountManufactures - x.ShopManufactures.Select(x => x.Value.Item2).Sum()).Sum() - count;
if (capacity < 0)
{
@@ -221,16 +210,16 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogic
foreach (var shop in _shopStorage.GetFullList())
{
- if (shop.MaxCountManufactures - shop.Manufactures.Select(x => x.Value.Item2).Sum() < count)
+ if (shop.MaxCountManufactures - shop.ShopManufactures.Select(x => x.Value.Item2).Sum() < count)
{
- if (!AddManufacture(new() { Id = shop.Id }, model, shop.MaxCountManufactures - shop.Manufactures.Select(x => x.Value.Item2).Sum()))
+ if (!AddManufacture(new() { Id = shop.Id }, model, shop.MaxCountManufactures - shop.ShopManufactures.Select(x => x.Value.Item2).Sum()))
{
_logger.LogWarning("AddManufactures operation failed.");
return false;
}
- count -= shop.MaxCountManufactures - shop.Manufactures.Select(x => x.Value.Item2).Sum();
+ count -= shop.MaxCountManufactures - shop.ShopManufactures.Select(x => x.Value.Item2).Sum();
}
else
{
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopContracts/BindingModels/ShopBindingModel.cs b/BlacksmithWorkshop/BlacksmithWorkshopContracts/BindingModels/ShopBindingModel.cs
index 0afcf18..cdaaa0a 100644
--- a/BlacksmithWorkshop/BlacksmithWorkshopContracts/BindingModels/ShopBindingModel.cs
+++ b/BlacksmithWorkshop/BlacksmithWorkshopContracts/BindingModels/ShopBindingModel.cs
@@ -15,7 +15,7 @@ namespace BlacksmithWorkshopContracts.BindingModels
public DateTime DateOpen { get; set; } = DateTime.Now;
- public Dictionary Manufactures { get; set; } = new();
+ public Dictionary ShopManufactures { get; set; } = new();
public int Id { get; set; }
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopContracts/ViewModels/ShopViewModel.cs b/BlacksmithWorkshop/BlacksmithWorkshopContracts/ViewModels/ShopViewModel.cs
index 9604850..67d9e18 100644
--- a/BlacksmithWorkshop/BlacksmithWorkshopContracts/ViewModels/ShopViewModel.cs
+++ b/BlacksmithWorkshop/BlacksmithWorkshopContracts/ViewModels/ShopViewModel.cs
@@ -21,7 +21,7 @@ namespace BlacksmithWorkshopContracts.ViewModels
[DisplayName("Дата открытия")]
public DateTime DateOpen { get; set; } = DateTime.Now;
- public Dictionary Manufactures { get; set; } = new();
+ public Dictionary ShopManufactures { get; set; } = new();
[DisplayName("Вместимость магазина")]
public int MaxCountManufactures { get; set; }
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopDataModels/Models/IShopModel.cs b/BlacksmithWorkshop/BlacksmithWorkshopDataModels/Models/IShopModel.cs
index 46e4d68..3b50f3a 100644
--- a/BlacksmithWorkshop/BlacksmithWorkshopDataModels/Models/IShopModel.cs
+++ b/BlacksmithWorkshop/BlacksmithWorkshopDataModels/Models/IShopModel.cs
@@ -23,6 +23,6 @@ namespace BlacksmithWorkshopDataModels.Models
int MaxCountManufactures { get; }
//изделия в магазине
- Dictionary Manufactures { get; }
+ Dictionary ShopManufactures { get; }
}
}
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/BlacksmithWorkshopDatabase.cs b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/BlacksmithWorkshopDatabase.cs
new file mode 100644
index 0000000..bb81317
--- /dev/null
+++ b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/BlacksmithWorkshopDatabase.cs
@@ -0,0 +1,36 @@
+using BlacksmithWorkshopDatabaseImplement.Models;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BlacksmithWorkshopDatabaseImplement
+{
+ public class BlacksmithWorkshopDatabase : DbContext
+ {
+ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
+ {
+ if (optionsBuilder.IsConfigured == false)
+ {
+ optionsBuilder.UseSqlServer(@"Data Source=LAPTOP-CFLH20EE\SQLEXPRESS;Initial Catalog=BlacksmithWorkshopDatabase;Integrated Security=True;MultipleActiveResultSets=True;;TrustServerCertificate=True");
+ }
+
+ base.OnConfiguring(optionsBuilder);
+ }
+
+ public virtual DbSet WorkPieces { set; get; }
+
+ public virtual DbSet Manufactures { set; get; }
+
+ public virtual DbSet ManufactureWorkPieces { set; get; }
+
+ public virtual DbSet Orders { set; get; }
+
+ public virtual DbSet Shops { set; get; }
+
+ public virtual DbSet ShopManufactures { get; set; }
+ }
+}
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/BlacksmithWorkshopDatabaseImplement.csproj b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/BlacksmithWorkshopDatabaseImplement.csproj
new file mode 100644
index 0000000..dffd6a4
--- /dev/null
+++ b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/BlacksmithWorkshopDatabaseImplement.csproj
@@ -0,0 +1,23 @@
+
+
+
+ net6.0
+ enable
+ enable
+
+
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+
+
+
+
+
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Implements/ManufactureStorage.cs b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Implements/ManufactureStorage.cs
new file mode 100644
index 0000000..2273dda
--- /dev/null
+++ b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Implements/ManufactureStorage.cs
@@ -0,0 +1,127 @@
+using BlacksmithWorkshopContracts.BindingModels;
+using BlacksmithWorkshopContracts.SearchModels;
+using BlacksmithWorkshopContracts.StoragesContracts;
+using BlacksmithWorkshopContracts.ViewModels;
+using BlacksmithWorkshopDatabaseImplement.Models;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BlacksmithWorkshopDatabaseImplement.Implements
+{
+ public class ManufactureStorage : IManufactureStorage
+ {
+ public List GetFullList()
+ {
+ using var context = new BlacksmithWorkshopDatabase();
+
+ return context.Manufactures
+ .Include(x => x.WorkPieces)
+ .ThenInclude(x => x.WorkPiece)
+ .ToList()
+ .Select(x => x.GetViewModel)
+ .ToList();
+ }
+
+ public List GetFilteredList(ManufactureSearchModel model)
+ {
+ if (string.IsNullOrEmpty(model.ManufactureName))
+ {
+ return new();
+ }
+
+ using var context = new BlacksmithWorkshopDatabase();
+
+ return context.Manufactures
+ .Include(x => x.WorkPieces)
+ .ThenInclude(x => x.WorkPiece)
+ .Where(x => x.ManufactureName.Contains(model.ManufactureName))
+ .ToList()
+ .Select(x => x.GetViewModel)
+ .ToList();
+ }
+
+ public ManufactureViewModel? GetElement(ManufactureSearchModel model)
+ {
+ if (string.IsNullOrEmpty(model.ManufactureName) && !model.Id.HasValue)
+ {
+ return null;
+ }
+
+ using var context = new BlacksmithWorkshopDatabase();
+
+ return context.Manufactures
+ .Include(x => x.WorkPieces)
+ .ThenInclude(x => x.WorkPiece)
+ .FirstOrDefault(x => (!string.IsNullOrEmpty(model.ManufactureName) && x.ManufactureName == model.ManufactureName) ||
+ (model.Id.HasValue && x.Id == model.Id))
+ ?.GetViewModel;
+ }
+
+ public ManufactureViewModel? Insert(ManufactureBindingModel model)
+ {
+ using var context = new BlacksmithWorkshopDatabase();
+ var newManufacture = Manufacture.Create(context, model);
+
+ if (newManufacture == null)
+ {
+ return null;
+ }
+
+ context.Manufactures.Add(newManufacture);
+ context.SaveChanges();
+
+ return newManufacture.GetViewModel;
+ }
+
+ public ManufactureViewModel? Update(ManufactureBindingModel model)
+ {
+ using var context = new BlacksmithWorkshopDatabase();
+ using var transaction = context.Database.BeginTransaction();
+
+ try
+ {
+ var manufacture = context.Manufactures.FirstOrDefault(rec => rec.Id == model.Id);
+
+ if (manufacture == null)
+ {
+ return null;
+ }
+
+ manufacture.Update(model);
+ context.SaveChanges();
+ manufacture.UpdateWorkPieces(context, model);
+ transaction.Commit();
+
+ return manufacture.GetViewModel;
+ }
+ catch
+ {
+ transaction.Rollback();
+ throw;
+ }
+ }
+
+ public ManufactureViewModel? Delete(ManufactureBindingModel model)
+ {
+ using var context = new BlacksmithWorkshopDatabase();
+ var element = context.Manufactures
+ .Include(x => x.WorkPieces)
+ .Include(x => x.Orders)
+ .FirstOrDefault(rec => rec.Id == model.Id);
+
+ if (element != null)
+ {
+ context.Manufactures.Remove(element);
+ context.SaveChanges();
+
+ return element.GetViewModel;
+ }
+
+ return null;
+ }
+ }
+}
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Implements/OrderStorage.cs b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Implements/OrderStorage.cs
new file mode 100644
index 0000000..290843b
--- /dev/null
+++ b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Implements/OrderStorage.cs
@@ -0,0 +1,111 @@
+using BlacksmithWorkshopContracts.BindingModels;
+using BlacksmithWorkshopContracts.SearchModels;
+using BlacksmithWorkshopContracts.StoragesContracts;
+using BlacksmithWorkshopContracts.ViewModels;
+using BlacksmithWorkshopDatabaseImplement.Models;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BlacksmithWorkshopDatabaseImplement.Implements
+{
+ public class OrderStorage : IOrderStorage
+ {
+ public OrderViewModel? Delete(OrderBindingModel model)
+ {
+ using var context = new BlacksmithWorkshopDatabase();
+ var element = context.Orders
+ .Include(x => x.Manufacture)
+ .FirstOrDefault(rec => rec.Id == model.Id);
+
+ if (element != null)
+ {
+ context.Orders.Remove(element);
+ context.SaveChanges();
+
+ return element.GetViewModel;
+ }
+
+ return null;
+ }
+
+ public OrderViewModel? GetElement(OrderSearchModel model)
+ {
+ if (!model.Id.HasValue)
+ {
+ return null;
+ }
+
+ using var context = new BlacksmithWorkshopDatabase();
+
+ return context.Orders
+ .Include(x => x.Manufacture)
+ .FirstOrDefault(x => model.Id.HasValue && x.Id == model.Id)
+ ?.GetViewModel;
+ }
+
+ public List GetFilteredList(OrderSearchModel model)
+ {
+ if (!model.Id.HasValue)
+ {
+ return new();
+ }
+
+ using var context = new BlacksmithWorkshopDatabase();
+
+ return context.Orders
+ .Include(x => x.Manufacture)
+ .Where(x => x.Id == model.Id)
+ .Select(x => x.GetViewModel)
+ .ToList();
+ }
+
+ public List GetFullList()
+ {
+ using var context = new BlacksmithWorkshopDatabase();
+
+ return context.Orders
+ .Include(x => x.Manufacture)
+ .Select(x => x.GetViewModel)
+ .ToList();
+ }
+
+ public OrderViewModel? Insert(OrderBindingModel model)
+ {
+ var newOrder = Order.Create(model);
+
+ if (newOrder == null)
+ {
+ return null;
+ }
+
+ using var context = new BlacksmithWorkshopDatabase();
+ context.Orders.Add(newOrder);
+ context.SaveChanges();
+
+ return context.Orders
+ .Include(x => x.Manufacture)
+ .FirstOrDefault(x => x.Id == newOrder.Id)
+ ?.GetViewModel;
+ }
+
+ public OrderViewModel? Update(OrderBindingModel model)
+ {
+ using var context = new BlacksmithWorkshopDatabase();
+ var order = context.Orders.Include(x => x.Manufacture).FirstOrDefault(x => x.Id == model.Id);
+
+ if (order == null)
+ {
+ return null;
+ }
+
+ order.Update(model);
+ context.SaveChanges();
+
+ return order.GetViewModel;
+ }
+ }
+}
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Implements/ShopStorage.cs b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Implements/ShopStorage.cs
new file mode 100644
index 0000000..5f8e213
--- /dev/null
+++ b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Implements/ShopStorage.cs
@@ -0,0 +1,179 @@
+using BlacksmithWorkshopContracts.BindingModels;
+using BlacksmithWorkshopContracts.SearchModels;
+using BlacksmithWorkshopContracts.StoragesContracts;
+using BlacksmithWorkshopContracts.ViewModels;
+using BlacksmithWorkshopDatabaseImplement.Models;
+using BlacksmithWorkshopDataModels.Models;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BlacksmithWorkshopDatabaseImplement.Implements
+{
+ public class ShopStorage : IShopStorage
+ {
+ public List GetFullList()
+ {
+ using var context = new BlacksmithWorkshopDatabase();
+
+ return context.Shops
+ .Include(x => x.Manufactures)
+ .ThenInclude(x => x.Manufacture)
+ .ToList()
+ .Select(x => x.GetViewModel)
+ .ToList();
+ }
+
+ public List GetFilteredList(ShopSearchModel model)
+ {
+ if (string.IsNullOrEmpty(model.ShopName))
+ {
+ return new();
+ }
+
+ using var context = new BlacksmithWorkshopDatabase();
+
+ return context.Shops
+ .Include(x => x.Manufactures)
+ .ThenInclude(x => x.Manufacture)
+ .Where(x => x.ShopName.Contains(model.ShopName))
+ .ToList()
+ .Select(x => x.GetViewModel)
+ .ToList();
+ }
+
+ public ShopViewModel? GetElement(ShopSearchModel model)
+ {
+ if (string.IsNullOrEmpty(model.ShopName) && !model.Id.HasValue)
+ {
+ return null;
+ }
+
+ using var context = new BlacksmithWorkshopDatabase();
+
+ return context.Shops
+ .Include(x => x.Manufactures)
+ .ThenInclude(x => x.Manufacture)
+ .FirstOrDefault(x => (!string.IsNullOrEmpty(model.ShopName) && x.ShopName == model.ShopName) ||
+ (model.Id.HasValue && x.Id == model.Id))
+ ?.GetViewModel;
+ }
+
+ public ShopViewModel? Insert(ShopBindingModel model)
+ {
+ using var context = new BlacksmithWorkshopDatabase();
+ var newShop = Shop.Create(context, model);
+
+ if (newShop == null)
+ {
+ return null;
+ }
+
+ context.Shops.Add(newShop);
+ context.SaveChanges();
+
+ return newShop.GetViewModel;
+ }
+
+ public ShopViewModel? Update(ShopBindingModel model)
+ {
+ using var context = new BlacksmithWorkshopDatabase();
+ using var transaction = context.Database.BeginTransaction();
+
+ try
+ {
+ var shop = context.Shops.FirstOrDefault(rec => rec.Id == model.Id);
+
+ if (shop == null)
+ {
+ return null;
+ }
+
+ shop.Update(model);
+ context.SaveChanges();
+ shop.UpdateManufactures(context, model);
+ transaction.Commit();
+
+ return shop.GetViewModel;
+ }
+ catch
+ {
+ transaction.Rollback();
+
+ throw;
+ }
+ }
+
+ public ShopViewModel? Delete(ShopBindingModel model)
+ {
+ using var context = new BlacksmithWorkshopDatabase();
+
+ var element = context.Shops
+ .Include(x => x.Manufactures)
+ .FirstOrDefault(rec => rec.Id == model.Id);
+
+ if (element != null)
+ {
+ context.Shops.Remove(element);
+ context.SaveChanges();
+
+ return element.GetViewModel;
+ }
+
+ return null;
+ }
+
+ public bool SellManufactures(IManufactureModel model, int count)
+ {
+ using var context = new BlacksmithWorkshopDatabase();
+ using var transaction = context.Database.BeginTransaction();
+
+ try
+ {
+ var shops = context.ShopManufactures
+ .Include(x => x.Shop)
+ .ToList()
+ .Where(rec => rec.ManufactureId == model.Id);
+
+ if (shops == null)
+ {
+ return false;
+ }
+
+ foreach (var shop in shops)
+ {
+ if (shop.Count < count)
+ {
+ count -= shop.Count;
+ shop.Count = 0;
+ }
+ else
+ {
+ shop.Count = shop.Count - count;
+ count -= count;
+ }
+
+ if (count == 0)
+ {
+ context.SaveChanges();
+ transaction.Commit();
+
+ return true;
+ }
+ }
+
+ transaction.Rollback();
+
+ return false;
+ }
+ catch
+ {
+ transaction.Rollback();
+ throw;
+ }
+ }
+ }
+}
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Implements/WorkPieceStorage.cs b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Implements/WorkPieceStorage.cs
new file mode 100644
index 0000000..ec2cc00
--- /dev/null
+++ b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Implements/WorkPieceStorage.cs
@@ -0,0 +1,103 @@
+using BlacksmithWorkshopContracts.BindingModels;
+using BlacksmithWorkshopContracts.SearchModels;
+using BlacksmithWorkshopContracts.StoragesContracts;
+using BlacksmithWorkshopContracts.ViewModels;
+using BlacksmithWorkshopDatabaseImplement.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BlacksmithWorkshopDatabaseImplement.Implements
+{
+ public class WorkPieceStorage : IWorkPieceStorage
+ {
+ public List GetFullList()
+ {
+ using var context = new BlacksmithWorkshopDatabase();
+
+ return context.WorkPieces
+ .Select(x => x.GetViewModel)
+ .ToList();
+ }
+
+ public List GetFilteredList(WorkPieceSearchModel model)
+ {
+ if (string.IsNullOrEmpty(model.WorkPieceName))
+ {
+ return new();
+ }
+
+ using var context = new BlacksmithWorkshopDatabase();
+
+ return context.WorkPieces
+ .Where(x => x.WorkPieceName.Contains(model.WorkPieceName))
+ .Select(x => x.GetViewModel)
+ .ToList();
+ }
+
+ public WorkPieceViewModel? GetElement(WorkPieceSearchModel model)
+ {
+ if (string.IsNullOrEmpty(model.WorkPieceName) && !model.Id.HasValue)
+ {
+ return null;
+ }
+
+ using var context = new BlacksmithWorkshopDatabase();
+
+ return context.WorkPieces
+ .FirstOrDefault(x => (!string.IsNullOrEmpty(model.WorkPieceName) && x.WorkPieceName == model.WorkPieceName) ||
+ (model.Id.HasValue && x.Id == model.Id))
+ ?.GetViewModel;
+ }
+
+ public WorkPieceViewModel? Insert(WorkPieceBindingModel model)
+ {
+ var newWorkPiece = WorkPiece.Create(model);
+
+ if (newWorkPiece == null)
+ {
+ return null;
+ }
+
+ using var context = new BlacksmithWorkshopDatabase();
+ context.WorkPieces.Add(newWorkPiece);
+ context.SaveChanges();
+
+ return newWorkPiece.GetViewModel;
+ }
+
+ public WorkPieceViewModel? Update(WorkPieceBindingModel model)
+ {
+ using var context = new BlacksmithWorkshopDatabase();
+ var workPiece = context.WorkPieces.FirstOrDefault(x => x.Id == model.Id);
+
+ if (workPiece == null)
+ {
+ return null;
+ }
+
+ workPiece.Update(model);
+ context.SaveChanges();
+
+ return workPiece.GetViewModel;
+ }
+
+ public WorkPieceViewModel? Delete(WorkPieceBindingModel model)
+ {
+ using var context = new BlacksmithWorkshopDatabase();
+ var element = context.WorkPieces.FirstOrDefault(rec => rec.Id == model.Id);
+
+ if (element != null)
+ {
+ context.WorkPieces.Remove(element);
+ context.SaveChanges();
+
+ return element.GetViewModel;
+ }
+
+ return null;
+ }
+ }
+}
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Migrations/20230227172536_InitMigration.Designer.cs b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Migrations/20230227172536_InitMigration.Designer.cs
new file mode 100644
index 0000000..fc42141
--- /dev/null
+++ b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Migrations/20230227172536_InitMigration.Designer.cs
@@ -0,0 +1,170 @@
+//
+using System;
+using BlacksmithWorkshopDatabaseImplement;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace BlacksmithWorkshopDatabaseImplement.Migrations
+{
+ [DbContext(typeof(BlacksmithWorkshopDatabase))]
+ [Migration("20230227172536_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("BlacksmithWorkshopDatabaseImplement.Models.Manufacture", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("ManufactureName")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Price")
+ .HasColumnType("float");
+
+ b.HasKey("Id");
+
+ b.ToTable("Manufactures");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.ManufactureWorkPiece", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Count")
+ .HasColumnType("int");
+
+ b.Property("ManufactureId")
+ .HasColumnType("int");
+
+ b.Property("WorkPieceId")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ManufactureId");
+
+ b.HasIndex("WorkPieceId");
+
+ b.ToTable("ManufactureWorkPieces");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.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("ManufactureId")
+ .HasColumnType("int");
+
+ b.Property("ProductId")
+ .HasColumnType("int");
+
+ b.Property("Status")
+ .HasColumnType("int");
+
+ b.Property("Sum")
+ .HasColumnType("float");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ProductId");
+
+ b.ToTable("Orders");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.WorkPiece", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Cost")
+ .HasColumnType("float");
+
+ b.Property("WorkPieceName")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("WorkPieces");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.ManufactureWorkPiece", b =>
+ {
+ b.HasOne("BlacksmithWorkshopDatabaseImplement.Models.Manufacture", "Manufacture")
+ .WithMany("WorkPieces")
+ .HasForeignKey("ManufactureId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("BlacksmithWorkshopDatabaseImplement.Models.WorkPiece", "WorkPiece")
+ .WithMany("ManufactureWorkPieces")
+ .HasForeignKey("WorkPieceId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Manufacture");
+
+ b.Navigation("WorkPiece");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.Order", b =>
+ {
+ b.HasOne("BlacksmithWorkshopDatabaseImplement.Models.Manufacture", null)
+ .WithMany("Orders")
+ .HasForeignKey("ProductId");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.Manufacture", b =>
+ {
+ b.Navigation("Orders");
+
+ b.Navigation("WorkPieces");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.WorkPiece", b =>
+ {
+ b.Navigation("ManufactureWorkPieces");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Migrations/20230227172536_InitMigration.cs b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Migrations/20230227172536_InitMigration.cs
new file mode 100644
index 0000000..c1fbbc3
--- /dev/null
+++ b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Migrations/20230227172536_InitMigration.cs
@@ -0,0 +1,125 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace BlacksmithWorkshopDatabaseImplement.Migrations
+{
+ ///
+ public partial class InitMigration : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.CreateTable(
+ name: "Manufactures",
+ columns: table => new
+ {
+ Id = table.Column(type: "int", nullable: false)
+ .Annotation("SqlServer:Identity", "1, 1"),
+ ManufactureName = table.Column(type: "nvarchar(max)", nullable: false),
+ Price = table.Column(type: "float", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Manufactures", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "WorkPieces",
+ columns: table => new
+ {
+ Id = table.Column(type: "int", nullable: false)
+ .Annotation("SqlServer:Identity", "1, 1"),
+ WorkPieceName = table.Column(type: "nvarchar(max)", nullable: false),
+ Cost = table.Column(type: "float", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_WorkPieces", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Orders",
+ columns: table => new
+ {
+ Id = table.Column(type: "int", nullable: false)
+ .Annotation("SqlServer:Identity", "1, 1"),
+ ManufactureId = table.Column(type: "int", 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),
+ ProductId = table.Column(type: "int", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Orders", x => x.Id);
+ table.ForeignKey(
+ name: "FK_Orders_Manufactures_ProductId",
+ column: x => x.ProductId,
+ principalTable: "Manufactures",
+ principalColumn: "Id");
+ });
+
+ migrationBuilder.CreateTable(
+ name: "ManufactureWorkPieces",
+ columns: table => new
+ {
+ Id = table.Column(type: "int", nullable: false)
+ .Annotation("SqlServer:Identity", "1, 1"),
+ ManufactureId = table.Column(type: "int", nullable: false),
+ WorkPieceId = table.Column(type: "int", nullable: false),
+ Count = table.Column(type: "int", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_ManufactureWorkPieces", x => x.Id);
+ table.ForeignKey(
+ name: "FK_ManufactureWorkPieces_Manufactures_ManufactureId",
+ column: x => x.ManufactureId,
+ principalTable: "Manufactures",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_ManufactureWorkPieces_WorkPieces_WorkPieceId",
+ column: x => x.WorkPieceId,
+ principalTable: "WorkPieces",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "IX_ManufactureWorkPieces_ManufactureId",
+ table: "ManufactureWorkPieces",
+ column: "ManufactureId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_ManufactureWorkPieces_WorkPieceId",
+ table: "ManufactureWorkPieces",
+ column: "WorkPieceId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Orders_ProductId",
+ table: "Orders",
+ column: "ProductId");
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "ManufactureWorkPieces");
+
+ migrationBuilder.DropTable(
+ name: "Orders");
+
+ migrationBuilder.DropTable(
+ name: "WorkPieces");
+
+ migrationBuilder.DropTable(
+ name: "Manufactures");
+ }
+ }
+}
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Migrations/20230228043436_SecondMigration.Designer.cs b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Migrations/20230228043436_SecondMigration.Designer.cs
new file mode 100644
index 0000000..0cef030
--- /dev/null
+++ b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Migrations/20230228043436_SecondMigration.Designer.cs
@@ -0,0 +1,171 @@
+//
+using System;
+using BlacksmithWorkshopDatabaseImplement;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace BlacksmithWorkshopDatabaseImplement.Migrations
+{
+ [DbContext(typeof(BlacksmithWorkshopDatabase))]
+ [Migration("20230228043436_SecondMigration")]
+ partial class SecondMigration
+ {
+ ///
+ 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("BlacksmithWorkshopDatabaseImplement.Models.Manufacture", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("ManufactureName")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Price")
+ .HasColumnType("float");
+
+ b.HasKey("Id");
+
+ b.ToTable("Manufactures");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.ManufactureWorkPiece", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Count")
+ .HasColumnType("int");
+
+ b.Property("ManufactureId")
+ .HasColumnType("int");
+
+ b.Property("WorkPieceId")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ManufactureId");
+
+ b.HasIndex("WorkPieceId");
+
+ b.ToTable("ManufactureWorkPieces");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.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("ManufactureId")
+ .HasColumnType("int");
+
+ b.Property("Status")
+ .HasColumnType("int");
+
+ b.Property("Sum")
+ .HasColumnType("float");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ManufactureId");
+
+ b.ToTable("Orders");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.WorkPiece", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Cost")
+ .HasColumnType("float");
+
+ b.Property("WorkPieceName")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("WorkPieces");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.ManufactureWorkPiece", b =>
+ {
+ b.HasOne("BlacksmithWorkshopDatabaseImplement.Models.Manufacture", "Manufacture")
+ .WithMany("WorkPieces")
+ .HasForeignKey("ManufactureId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("BlacksmithWorkshopDatabaseImplement.Models.WorkPiece", "WorkPiece")
+ .WithMany("ManufactureWorkPieces")
+ .HasForeignKey("WorkPieceId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Manufacture");
+
+ b.Navigation("WorkPiece");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.Order", b =>
+ {
+ b.HasOne("BlacksmithWorkshopDatabaseImplement.Models.Manufacture", "Manufacture")
+ .WithMany("Orders")
+ .HasForeignKey("ManufactureId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Manufacture");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.Manufacture", b =>
+ {
+ b.Navigation("Orders");
+
+ b.Navigation("WorkPieces");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.WorkPiece", b =>
+ {
+ b.Navigation("ManufactureWorkPieces");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Migrations/20230228043436_SecondMigration.cs b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Migrations/20230228043436_SecondMigration.cs
new file mode 100644
index 0000000..c5e65a8
--- /dev/null
+++ b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Migrations/20230228043436_SecondMigration.cs
@@ -0,0 +1,69 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace BlacksmithWorkshopDatabaseImplement.Migrations
+{
+ ///
+ public partial class SecondMigration : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropForeignKey(
+ name: "FK_Orders_Manufactures_ProductId",
+ table: "Orders");
+
+ migrationBuilder.DropIndex(
+ name: "IX_Orders_ProductId",
+ table: "Orders");
+
+ migrationBuilder.DropColumn(
+ name: "ProductId",
+ table: "Orders");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Orders_ManufactureId",
+ table: "Orders",
+ column: "ManufactureId");
+
+ migrationBuilder.AddForeignKey(
+ name: "FK_Orders_Manufactures_ManufactureId",
+ table: "Orders",
+ column: "ManufactureId",
+ principalTable: "Manufactures",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropForeignKey(
+ name: "FK_Orders_Manufactures_ManufactureId",
+ table: "Orders");
+
+ migrationBuilder.DropIndex(
+ name: "IX_Orders_ManufactureId",
+ table: "Orders");
+
+ migrationBuilder.AddColumn(
+ name: "ProductId",
+ table: "Orders",
+ type: "int",
+ nullable: true);
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Orders_ProductId",
+ table: "Orders",
+ column: "ProductId");
+
+ migrationBuilder.AddForeignKey(
+ name: "FK_Orders_Manufactures_ProductId",
+ table: "Orders",
+ column: "ProductId",
+ principalTable: "Manufactures",
+ principalColumn: "Id");
+ }
+ }
+}
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Migrations/20230324151111_ThirdHardLabWork.Designer.cs b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Migrations/20230324151111_ThirdHardLabWork.Designer.cs
new file mode 100644
index 0000000..02fe08f
--- /dev/null
+++ b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Migrations/20230324151111_ThirdHardLabWork.Designer.cs
@@ -0,0 +1,250 @@
+//
+using System;
+using BlacksmithWorkshopDatabaseImplement;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace BlacksmithWorkshopDatabaseImplement.Migrations
+{
+ [DbContext(typeof(BlacksmithWorkshopDatabase))]
+ [Migration("20230324151111_ThirdHardLabWork")]
+ partial class ThirdHardLabWork
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "7.0.4")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+ SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.Manufacture", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("ManufactureName")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Price")
+ .HasColumnType("float");
+
+ b.HasKey("Id");
+
+ b.ToTable("Manufactures");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.ManufactureWorkPiece", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Count")
+ .HasColumnType("int");
+
+ b.Property("ManufactureId")
+ .HasColumnType("int");
+
+ b.Property("WorkPieceId")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ManufactureId");
+
+ b.HasIndex("WorkPieceId");
+
+ b.ToTable("ManufactureWorkPieces");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.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("ManufactureId")
+ .HasColumnType("int");
+
+ b.Property("Status")
+ .HasColumnType("int");
+
+ b.Property("Sum")
+ .HasColumnType("float");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ManufactureId");
+
+ b.ToTable("Orders");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.Shop", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Address")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DateOpen")
+ .HasColumnType("datetime2");
+
+ b.Property("MaxCountManufactures")
+ .HasColumnType("int");
+
+ b.Property("ShopName")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Shops");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.ShopManufacture", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Count")
+ .HasColumnType("int");
+
+ b.Property("ManufactureId")
+ .HasColumnType("int");
+
+ b.Property("ShopId")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ManufactureId");
+
+ b.HasIndex("ShopId");
+
+ b.ToTable("ShopManufactures");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.WorkPiece", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Cost")
+ .HasColumnType("float");
+
+ b.Property("WorkPieceName")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("WorkPieces");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.ManufactureWorkPiece", b =>
+ {
+ b.HasOne("BlacksmithWorkshopDatabaseImplement.Models.Manufacture", "Manufacture")
+ .WithMany("WorkPieces")
+ .HasForeignKey("ManufactureId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("BlacksmithWorkshopDatabaseImplement.Models.WorkPiece", "WorkPiece")
+ .WithMany("ManufactureWorkPieces")
+ .HasForeignKey("WorkPieceId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Manufacture");
+
+ b.Navigation("WorkPiece");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.Order", b =>
+ {
+ b.HasOne("BlacksmithWorkshopDatabaseImplement.Models.Manufacture", "Manufacture")
+ .WithMany("Orders")
+ .HasForeignKey("ManufactureId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Manufacture");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.ShopManufacture", b =>
+ {
+ b.HasOne("BlacksmithWorkshopDatabaseImplement.Models.Manufacture", "Manufacture")
+ .WithMany("Shops")
+ .HasForeignKey("ManufactureId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("BlacksmithWorkshopDatabaseImplement.Models.Shop", "Shop")
+ .WithMany("Manufactures")
+ .HasForeignKey("ShopId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Manufacture");
+
+ b.Navigation("Shop");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.Manufacture", b =>
+ {
+ b.Navigation("Orders");
+
+ b.Navigation("Shops");
+
+ b.Navigation("WorkPieces");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.Shop", b =>
+ {
+ b.Navigation("Manufactures");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.WorkPiece", b =>
+ {
+ b.Navigation("ManufactureWorkPieces");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Migrations/20230324151111_ThirdHardLabWork.cs b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Migrations/20230324151111_ThirdHardLabWork.cs
new file mode 100644
index 0000000..f71fd8c
--- /dev/null
+++ b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Migrations/20230324151111_ThirdHardLabWork.cs
@@ -0,0 +1,78 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace BlacksmithWorkshopDatabaseImplement.Migrations
+{
+ ///
+ public partial class ThirdHardLabWork : 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"),
+ ShopName = table.Column(type: "nvarchar(max)", nullable: false),
+ Address = table.Column(type: "nvarchar(max)", nullable: false),
+ DateOpen = table.Column(type: "datetime2", nullable: false),
+ MaxCountManufactures = table.Column(type: "int", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Shops", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "ShopManufactures",
+ columns: table => new
+ {
+ Id = table.Column(type: "int", nullable: false)
+ .Annotation("SqlServer:Identity", "1, 1"),
+ ShopId = table.Column(type: "int", nullable: false),
+ ManufactureId = table.Column(type: "int", nullable: false),
+ Count = table.Column(type: "int", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_ShopManufactures", x => x.Id);
+ table.ForeignKey(
+ name: "FK_ShopManufactures_Manufactures_ManufactureId",
+ column: x => x.ManufactureId,
+ principalTable: "Manufactures",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_ShopManufactures_Shops_ShopId",
+ column: x => x.ShopId,
+ principalTable: "Shops",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "IX_ShopManufactures_ManufactureId",
+ table: "ShopManufactures",
+ column: "ManufactureId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_ShopManufactures_ShopId",
+ table: "ShopManufactures",
+ column: "ShopId");
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "ShopManufactures");
+
+ migrationBuilder.DropTable(
+ name: "Shops");
+ }
+ }
+}
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Migrations/BlacksmithWorkshopDatabaseModelSnapshot.cs b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Migrations/BlacksmithWorkshopDatabaseModelSnapshot.cs
new file mode 100644
index 0000000..b7f7228
--- /dev/null
+++ b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Migrations/BlacksmithWorkshopDatabaseModelSnapshot.cs
@@ -0,0 +1,247 @@
+//
+using System;
+using BlacksmithWorkshopDatabaseImplement;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace BlacksmithWorkshopDatabaseImplement.Migrations
+{
+ [DbContext(typeof(BlacksmithWorkshopDatabase))]
+ partial class BlacksmithWorkshopDatabaseModelSnapshot : ModelSnapshot
+ {
+ protected override void BuildModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "7.0.4")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+ SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.Manufacture", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("ManufactureName")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Price")
+ .HasColumnType("float");
+
+ b.HasKey("Id");
+
+ b.ToTable("Manufactures");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.ManufactureWorkPiece", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Count")
+ .HasColumnType("int");
+
+ b.Property("ManufactureId")
+ .HasColumnType("int");
+
+ b.Property("WorkPieceId")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ManufactureId");
+
+ b.HasIndex("WorkPieceId");
+
+ b.ToTable("ManufactureWorkPieces");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.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("ManufactureId")
+ .HasColumnType("int");
+
+ b.Property("Status")
+ .HasColumnType("int");
+
+ b.Property("Sum")
+ .HasColumnType("float");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ManufactureId");
+
+ b.ToTable("Orders");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.Shop", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Address")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DateOpen")
+ .HasColumnType("datetime2");
+
+ b.Property("MaxCountManufactures")
+ .HasColumnType("int");
+
+ b.Property("ShopName")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Shops");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.ShopManufacture", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Count")
+ .HasColumnType("int");
+
+ b.Property("ManufactureId")
+ .HasColumnType("int");
+
+ b.Property("ShopId")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ManufactureId");
+
+ b.HasIndex("ShopId");
+
+ b.ToTable("ShopManufactures");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.WorkPiece", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Cost")
+ .HasColumnType("float");
+
+ b.Property("WorkPieceName")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("WorkPieces");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.ManufactureWorkPiece", b =>
+ {
+ b.HasOne("BlacksmithWorkshopDatabaseImplement.Models.Manufacture", "Manufacture")
+ .WithMany("WorkPieces")
+ .HasForeignKey("ManufactureId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("BlacksmithWorkshopDatabaseImplement.Models.WorkPiece", "WorkPiece")
+ .WithMany("ManufactureWorkPieces")
+ .HasForeignKey("WorkPieceId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Manufacture");
+
+ b.Navigation("WorkPiece");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.Order", b =>
+ {
+ b.HasOne("BlacksmithWorkshopDatabaseImplement.Models.Manufacture", "Manufacture")
+ .WithMany("Orders")
+ .HasForeignKey("ManufactureId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Manufacture");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.ShopManufacture", b =>
+ {
+ b.HasOne("BlacksmithWorkshopDatabaseImplement.Models.Manufacture", "Manufacture")
+ .WithMany("Shops")
+ .HasForeignKey("ManufactureId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("BlacksmithWorkshopDatabaseImplement.Models.Shop", "Shop")
+ .WithMany("Manufactures")
+ .HasForeignKey("ShopId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Manufacture");
+
+ b.Navigation("Shop");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.Manufacture", b =>
+ {
+ b.Navigation("Orders");
+
+ b.Navigation("Shops");
+
+ b.Navigation("WorkPieces");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.Shop", b =>
+ {
+ b.Navigation("Manufactures");
+ });
+
+ modelBuilder.Entity("BlacksmithWorkshopDatabaseImplement.Models.WorkPiece", b =>
+ {
+ b.Navigation("ManufactureWorkPieces");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Models/Manufacture.cs b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Models/Manufacture.cs
new file mode 100644
index 0000000..e3ac5d9
--- /dev/null
+++ b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Models/Manufacture.cs
@@ -0,0 +1,119 @@
+using BlacksmithWorkshopContracts.BindingModels;
+using BlacksmithWorkshopContracts.ViewModels;
+using BlacksmithWorkshopDataModels.Models;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BlacksmithWorkshopDatabaseImplement.Models
+{
+ public class Manufacture : IManufactureModel
+ {
+ public int Id { get; set; }
+
+ [Required]
+ public string ManufactureName { get; set; } = string.Empty;
+
+ [Required]
+ public double Price { get; set; }
+
+ public Dictionary? _manufactureWorkPieces = null;
+
+ //это поле не будет "мапиться" в бд
+ [NotMapped]
+ public Dictionary ManufactureWorkPieces
+ {
+ get
+ {
+ if(_manufactureWorkPieces == null)
+ {
+ _manufactureWorkPieces = WorkPieces
+ .ToDictionary(recPC => recPC.WorkPieceId, recPC => (recPC.WorkPiece as IWorkPieceModel, recPC.Count));
+ }
+
+ return _manufactureWorkPieces;
+ }
+ }
+
+ //для реализации связи многие ко многим с заготовками
+ [ForeignKey("ManufactureId")]
+ public virtual List WorkPieces { get; set; } = new();
+
+ [ForeignKey("ManufactureId")]
+ public virtual List Orders { get; set; } = new();
+
+ [ForeignKey("ManufactureId")]
+ public virtual List Shops { get; set; } = new();
+
+ public static Manufacture Create(BlacksmithWorkshopDatabase context, ManufactureBindingModel model)
+ {
+ return new Manufacture()
+ {
+ Id = model.Id,
+ ManufactureName = model.ManufactureName,
+ Price = model.Price,
+ WorkPieces = model.ManufactureWorkPieces.Select(x => new ManufactureWorkPiece
+ {
+ WorkPiece = context.WorkPieces.First(y => y.Id == x.Key),
+ Count = x.Value.Item2
+ }).ToList()
+ };
+ }
+
+ public void Update(ManufactureBindingModel model)
+ {
+ ManufactureName = model.ManufactureName;
+ Price = model.Price;
+ }
+
+ public ManufactureViewModel GetViewModel => new()
+ {
+ Id = Id,
+ ManufactureName = ManufactureName,
+ Price = Price,
+ ManufactureWorkPieces = ManufactureWorkPieces
+ };
+
+ public void UpdateWorkPieces(BlacksmithWorkshopDatabase context, ManufactureBindingModel model)
+ {
+ var manufactureWorkPieces = context.ManufactureWorkPieces.Where(rec => rec.ManufactureId == model.Id).ToList();
+
+ if (manufactureWorkPieces != null && manufactureWorkPieces.Count > 0)
+ {
+ // удалили те, которых нет в модели
+ context.ManufactureWorkPieces.RemoveRange(manufactureWorkPieces.Where(rec => !model.ManufactureWorkPieces.ContainsKey(rec.ManufactureId)));
+ context.SaveChanges();
+
+ // обновили количество у существующих записей
+ foreach (var updateManufacture in manufactureWorkPieces)
+ {
+ updateManufacture.Count = model.ManufactureWorkPieces[updateManufacture.ManufactureId].Item2;
+ model.ManufactureWorkPieces.Remove(updateManufacture.ManufactureId);
+ }
+
+ context.SaveChanges();
+ }
+
+ var manufacture = context.Manufactures.First(x => x.Id == Id);
+
+ foreach (var mwp in model.ManufactureWorkPieces)
+ {
+ context.ManufactureWorkPieces.Add(new ManufactureWorkPiece
+ {
+ Manufacture = manufacture,
+ WorkPiece = context.WorkPieces.First(x => x.Id == mwp.Key),
+ Count = mwp.Value.Item2
+ });
+
+ context.SaveChanges();
+ }
+
+ _manufactureWorkPieces = null;
+ }
+ }
+}
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Models/ManufactureWorkPiece.cs b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Models/ManufactureWorkPiece.cs
new file mode 100644
index 0000000..dbe90f6
--- /dev/null
+++ b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Models/ManufactureWorkPiece.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BlacksmithWorkshopDatabaseImplement.Models
+{
+ public class ManufactureWorkPiece
+ {
+ public int Id { get; set; }
+
+ [Required]
+ public int ManufactureId { get; set; }
+
+ [Required]
+ public int WorkPieceId { get; set; }
+
+ [Required]
+ public int Count { get; set; }
+
+ public virtual WorkPiece WorkPiece { get; set; } = new();
+
+ public virtual Manufacture Manufacture { get; set; } = new();
+ }
+}
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Models/Order.cs b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Models/Order.cs
new file mode 100644
index 0000000..efc3f06
--- /dev/null
+++ b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Models/Order.cs
@@ -0,0 +1,81 @@
+using BlacksmithWorkshopContracts.BindingModels;
+using BlacksmithWorkshopContracts.ViewModels;
+using BlacksmithWorkshopDataModels.Enums;
+using BlacksmithWorkshopDataModels.Models;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace BlacksmithWorkshopDatabaseImplement.Models
+{
+ public class Order : IOrderModel
+ {
+ public int Id { get; private set; }
+
+ [Required]
+ public int ManufactureId { get; private set; }
+
+ [Required]
+ public int Count { get; private set; }
+
+ [Required]
+ public double Sum { get; private set; }
+
+ [Required]
+ public OrderStatus Status { get; private set; }
+
+ [Required]
+ public DateTime DateCreate { get; private set; }
+
+ public DateTime? DateImplement { get; private set; }
+
+ //для передачи названия изделия
+ public virtual Manufacture Manufacture { get; set; }
+
+ public static Order? Create(OrderBindingModel model)
+ {
+ if (model == null)
+ {
+ return null;
+ }
+
+ return new Order()
+ {
+ Id = model.Id,
+ ManufactureId = model.ManufactureId,
+ Count = model.Count,
+ Sum = model.Sum,
+ Status = model.Status,
+ DateCreate = model.DateCreate,
+ DateImplement = model.DateImplement
+ };
+ }
+
+ public void Update(OrderBindingModel model)
+ {
+ if (model == null)
+ {
+ return;
+ }
+
+ Status = model.Status;
+ DateImplement = model.DateImplement;
+ }
+
+ public OrderViewModel GetViewModel => new()
+ {
+ Id = Id,
+ ManufactureId = ManufactureId,
+ Count = Count,
+ Sum = Sum,
+ Status = Status,
+ DateCreate = DateCreate,
+ DateImplement = DateImplement,
+ ManufactureName = Manufacture.ManufactureName
+ };
+ }
+}
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Models/Shop.cs b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Models/Shop.cs
new file mode 100644
index 0000000..aa6ed05
--- /dev/null
+++ b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Models/Shop.cs
@@ -0,0 +1,119 @@
+using BlacksmithWorkshopContracts.BindingModels;
+using BlacksmithWorkshopContracts.ViewModels;
+using BlacksmithWorkshopDataModels.Models;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BlacksmithWorkshopDatabaseImplement.Models
+{
+ public class Shop : IShopModel
+ {
+ public int Id { get; set; }
+
+ [Required]
+ public string ShopName { get; set; } = string.Empty;
+
+ [Required]
+ public string Address { get; set; } = string.Empty;
+
+ [Required]
+ public DateTime DateOpen { get; set; }
+
+ [Required]
+ public int MaxCountManufactures { get; set; }
+
+ private Dictionary? _shopManufactures = null;
+
+ [Required]
+ public Dictionary ShopManufactures
+ {
+ get
+ {
+ if (_shopManufactures == null)
+ {
+ _shopManufactures = Manufactures.ToDictionary(recSI => recSI.ManufactureId, recSI => (recSI.Manufacture as IManufactureModel, recSI.Count));
+ }
+ return _shopManufactures;
+ }
+ }
+
+ [ForeignKey("ShopId")]
+ public virtual List Manufactures { get; set; } = new();
+
+ public static Shop? Create(BlacksmithWorkshopDatabase context, ShopBindingModel model)
+ {
+ return new Shop()
+ {
+ Id = model.Id,
+ ShopName = model.ShopName,
+ Address = model.Address,
+ DateOpen = model.DateOpen,
+ Manufactures = model.ShopManufactures.Select(x => new ShopManufacture
+ {
+ Manufacture = context.Manufactures.First(y => y.Id == x.Key),
+ Count = x.Value.Item2
+ }).ToList(),
+ MaxCountManufactures = model.MaxCountManufactures
+ };
+ }
+
+ public void Update(ShopBindingModel model)
+ {
+ ShopName = model.ShopName;
+ Address = model.Address;
+ DateOpen = model.DateOpen;
+ MaxCountManufactures = model.MaxCountManufactures;
+ }
+
+ public ShopViewModel GetViewModel => new()
+ {
+ Id = Id,
+ ShopName = ShopName,
+ Address = Address,
+ DateOpen = DateOpen,
+ MaxCountManufactures = MaxCountManufactures,
+ ShopManufactures = ShopManufactures
+ };
+
+ public void UpdateManufactures(BlacksmithWorkshopDatabase context, ShopBindingModel model)
+ {
+ var shopManufactures = context.ShopManufactures.Where(rec => rec.ShopId == model.Id).ToList();
+
+ if (shopManufactures != null && shopManufactures.Count > 0)
+ { // удалили те, которых нет в модели
+ context.ShopManufactures.RemoveRange(shopManufactures.Where(rec => !model.ShopManufactures.ContainsKey(rec.ManufactureId)));
+ context.SaveChanges();
+
+ // обновили количество у существующих записей
+ foreach (var _shopManufactures in shopManufactures)
+ {
+ _shopManufactures.Count = model.ShopManufactures[_shopManufactures.ManufactureId].Item2;
+ model.ShopManufactures.Remove(_shopManufactures.ManufactureId);
+ }
+
+ context.SaveChanges();
+ }
+
+ var shop = context.Shops.First(x => x.Id == Id);
+
+ foreach (var sm in model.ShopManufactures)
+ {
+ context.ShopManufactures.Add(new ShopManufacture
+ {
+ Shop = shop,
+ Manufacture = context.Manufactures.First(x => x.Id == sm.Key),
+ Count = sm.Value.Item2
+ });
+
+ context.SaveChanges();
+ }
+
+ _shopManufactures = null;
+ }
+ }
+}
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Models/ShopManufacture.cs b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Models/ShopManufacture.cs
new file mode 100644
index 0000000..646d724
--- /dev/null
+++ b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Models/ShopManufacture.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BlacksmithWorkshopDatabaseImplement.Models
+{
+ public class ShopManufacture
+ {
+ public int Id { get; set; }
+
+ [Required]
+ public int ShopId { get; set; }
+
+ [Required]
+ public int ManufactureId { get; set; }
+
+ [Required]
+ public int Count { get; set; }
+
+ public virtual Shop Shop { get; set; } = new();
+
+ public virtual Manufacture Manufacture { get; set; } = new();
+ }
+}
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Models/WorkPiece.cs b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Models/WorkPiece.cs
new file mode 100644
index 0000000..8ef7ca3
--- /dev/null
+++ b/BlacksmithWorkshop/BlacksmithWorkshopDatabaseImplement/Models/WorkPiece.cs
@@ -0,0 +1,72 @@
+using BlacksmithWorkshopContracts.BindingModels;
+using BlacksmithWorkshopContracts.ViewModels;
+using BlacksmithWorkshopDataModels.Models;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BlacksmithWorkshopDatabaseImplement.Models
+{
+ public class WorkPiece : IWorkPieceModel
+ {
+ public int Id { get; private set; }
+
+ [Required]
+ public string WorkPieceName { get; private set; } = string.Empty;
+
+ [Required]
+ public double Cost { get; set; }
+
+ //для реализации связи многие ко многим с изделиями
+ [ForeignKey("WorkPieceId")]
+ public virtual List ManufactureWorkPieces { get; set; } = new();
+
+ public static WorkPiece? Create(WorkPieceBindingModel model)
+ {
+ if(model == null)
+ {
+ return null;
+ }
+
+ return new WorkPiece()
+ {
+ Id = model.Id,
+ WorkPieceName = model.WorkPieceName,
+ Cost = model.Cost
+ };
+ }
+
+ public static WorkPiece Create(WorkPieceViewModel model)
+ {
+ return new WorkPiece
+ {
+ Id = model.Id,
+ WorkPieceName = model.WorkPieceName,
+ Cost = model.Cost
+ };
+ }
+
+ public void Update(WorkPieceBindingModel model)
+ {
+ if(model == null)
+ {
+ return;
+ }
+
+ WorkPieceName = model.WorkPieceName;
+ Cost = model.Cost;
+ }
+
+ public WorkPieceViewModel GetViewModel => new()
+ {
+ Id = Id,
+ WorkPieceName = WorkPieceName,
+ Cost = Cost
+ };
+ }
+}
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopFileImplement/Implements/ShopStorage.cs b/BlacksmithWorkshop/BlacksmithWorkshopFileImplement/Implements/ShopStorage.cs
index 65a67cc..5e1b878 100644
--- a/BlacksmithWorkshop/BlacksmithWorkshopFileImplement/Implements/ShopStorage.cs
+++ b/BlacksmithWorkshop/BlacksmithWorkshopFileImplement/Implements/ShopStorage.cs
@@ -98,23 +98,23 @@ namespace BlacksmithWorkshopFileImplement.Implements
public bool SellManufactures(IManufactureModel model, int count)
{
- if (_source.Shops.Select(x => x.Manufactures.FirstOrDefault(x => x.Key == model.Id).Value.Item2).Sum() < count)
+ if (_source.Shops.Select(x => x.ShopManufactures.FirstOrDefault(x => x.Key == model.Id).Value.Item2).Sum() < count)
{
return false;
}
- var list = _source.Shops.Where(x => x.Manufactures.ContainsKey(model.Id));
+ var list = _source.Shops.Where(x => x.ShopManufactures.ContainsKey(model.Id));
foreach (var shop in list)
{
- if (shop.Manufactures[model.Id].Item2 < count)
+ if (shop.ShopManufactures[model.Id].Item2 < count)
{
- count -= shop.Manufactures[model.Id].Item2;
- shop.Manufactures[model.Id] = (shop.Manufactures[model.Id].Item1, 0);
+ count -= shop.ShopManufactures[model.Id].Item2;
+ shop.ShopManufactures[model.Id] = (shop.ShopManufactures[model.Id].Item1, 0);
}
else
{
- shop.Manufactures[model.Id] = (shop.Manufactures[model.Id].Item1, shop.Manufactures[model.Id].Item2 - count);
+ shop.ShopManufactures[model.Id] = (shop.ShopManufactures[model.Id].Item1, shop.ShopManufactures[model.Id].Item2 - count);
count -= count;
}
@@ -124,7 +124,7 @@ namespace BlacksmithWorkshopFileImplement.Implements
Address = shop.Address,
DateOpen = shop.DateOpen,
MaxCountManufactures = shop.MaxCountManufactures,
- Manufactures = shop.Manufactures
+ ShopManufactures = shop.ShopManufactures
});
if (count == 0)
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopFileImplement/Models/Shop.cs b/BlacksmithWorkshop/BlacksmithWorkshopFileImplement/Models/Shop.cs
index fa00ef2..eecff32 100644
--- a/BlacksmithWorkshop/BlacksmithWorkshopFileImplement/Models/Shop.cs
+++ b/BlacksmithWorkshop/BlacksmithWorkshopFileImplement/Models/Shop.cs
@@ -22,18 +22,18 @@ namespace BlacksmithWorkshopFileImplement.Models
public int MaxCountManufactures { get; set; }
- public Dictionary countManufacture { get; private set; } = new();
+ public Dictionary Manufactures { get; private set; } = new();
public Dictionary _manufactures = null;
- public Dictionary Manufactures
+ public Dictionary ShopManufactures
{
get
{
if (_manufactures == null)
{
var source = DataFileSingleton.GetInstance();
- _manufactures = countManufacture.ToDictionary(x => x.Key, y => ((source.Manufactures.FirstOrDefault(z => z.Id == y.Key) as IManufactureModel)!, y.Value));
+ _manufactures = Manufactures.ToDictionary(x => x.Key, y => ((source.Manufactures.FirstOrDefault(z => z.Id == y.Key) as IManufactureModel)!, y.Value));
}
return _manufactures;
@@ -53,9 +53,10 @@ namespace BlacksmithWorkshopFileImplement.Models
Address = model.Address,
DateOpen = model.DateOpen,
MaxCountManufactures = model.MaxCountManufactures,
- countManufacture = model.Manufactures.ToDictionary(x => x.Key, x => x.Value.Item2)
+ Manufactures = model.ShopManufactures.ToDictionary(x => x.Key, x => x.Value.Item2)
};
}
+
public static Shop? Create(XElement element)
{
@@ -70,7 +71,7 @@ namespace BlacksmithWorkshopFileImplement.Models
Address = element.Element("Address")!.Value,
DateOpen = Convert.ToDateTime(element.Element("DateOpen")!.Value),
MaxCountManufactures = Convert.ToInt32(element.Element("MaxCountManufactures")!.Value),
- countManufacture = element.Element("Manufactures")!.Elements("Manufactures").ToDictionary(x => Convert.ToInt32(x.Element("Key")?.Value), x => Convert.ToInt32(x.Element("Value")?.Value))
+ Manufactures = element.Element("Manufactures")!.Elements("Manufactures").ToDictionary(x => Convert.ToInt32(x.Element("Key")?.Value), x => Convert.ToInt32(x.Element("Value")?.Value))
};
}
@@ -84,7 +85,7 @@ namespace BlacksmithWorkshopFileImplement.Models
Address = model.Address;
DateOpen = model.DateOpen;
MaxCountManufactures = model.MaxCountManufactures;
- countManufacture = model.Manufactures.ToDictionary(x => x.Key, x => x.Value.Item2);
+ Manufactures = model.ShopManufactures.ToDictionary(x => x.Key, x => x.Value.Item2);
_manufactures = null;
}
@@ -95,15 +96,16 @@ namespace BlacksmithWorkshopFileImplement.Models
Address = Address,
DateOpen = DateOpen,
MaxCountManufactures = MaxCountManufactures,
- Manufactures = Manufactures
+ ShopManufactures = ShopManufactures
};
+
public XElement GetXElement => new("Shop",
new XAttribute("Id", Id),
new XElement("ShopName", ShopName),
new XElement("Address", Address),
new XElement("DateOpen", DateOpen.ToString()),
new XElement("MaxCountManufactures", MaxCountManufactures.ToString()),
- new XElement("Manufactures", countManufacture.Select(x => new XElement("Manufactures",
+ new XElement("Manufactures", Manufactures.Select(x => new XElement("Manufactures",
new XElement("Key", x.Key),
new XElement("Value", x.Value))).ToArray()));
}
diff --git a/BlacksmithWorkshop/BlacksmithWorkshopListImplement/Models/Shop.cs b/BlacksmithWorkshop/BlacksmithWorkshopListImplement/Models/Shop.cs
index a6221c2..1754ef5 100644
--- a/BlacksmithWorkshop/BlacksmithWorkshopListImplement/Models/Shop.cs
+++ b/BlacksmithWorkshop/BlacksmithWorkshopListImplement/Models/Shop.cs
@@ -21,7 +21,7 @@ namespace BlacksmithWorkshopListImplement.Models
public int MaxCountManufactures { get; set; }
- public Dictionary Manufactures { get; private set; } =
+ public Dictionary ShopManufactures { get; private set; } =
new Dictionary();
public static Shop? Create(ShopBindingModel? model)
@@ -37,7 +37,7 @@ namespace BlacksmithWorkshopListImplement.Models
ShopName = model.ShopName,
Address = model.Address,
DateOpen = model.DateOpen,
- Manufactures = model.Manufactures
+ ShopManufactures = model.ShopManufactures
};
}
@@ -51,7 +51,7 @@ namespace BlacksmithWorkshopListImplement.Models
ShopName = model.ShopName;
Address = model.Address;
DateOpen = model.DateOpen;
- Manufactures = model.Manufactures;
+ ShopManufactures = model.ShopManufactures;
}
public ShopViewModel GetViewModel => new()
@@ -60,7 +60,7 @@ namespace BlacksmithWorkshopListImplement.Models
ShopName = ShopName,
Address = Address,
DateOpen = DateOpen,
- Manufactures = Manufactures
+ ShopManufactures = ShopManufactures
};
}
}