5 Commits

67 changed files with 969 additions and 724 deletions

View File

@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\BlacksmithWorkshopContracts\BlacksmithWorkshopContracts.csproj" />
<ProjectReference Include="..\BlacksmithWorkshopDataModels\BlacksmithWorkshopDataModels.csproj" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,58 @@
using BlacksmithWorkshopFileImplement.Models;
using System.Xml.Linq;
namespace BlackcmithWorkshopFileImplement
{
internal class DataFileSingleton
{
private static DataFileSingleton? instance;
private readonly string ComponentFileName = "Component.xml";
private readonly string OrderFileName = "Order.xml";
private readonly string ManufactureFileName = "Manufacture.xml";
public List<Component> Components { get; private set; }
public List<Order> Orders { get; private set; }
public List<Manufacture> Manufactures { get; private set; }
public static DataFileSingleton GetInstance()
{
if (instance == null)
{
instance = new DataFileSingleton();
}
return instance;
}
public void SaveComponents() => SaveData(Components, ComponentFileName,
"Components", x => x.GetXElement);
public void SaveManufactures() => SaveData(Manufactures, ManufactureFileName,
"Manufactures", x => x.GetXElement);
public void SaveOrders() => SaveData(Orders, OrderFileName,
"Orders", x => x.GetXElement);
private DataFileSingleton()
{
Components = LoadData(ComponentFileName, "Component", x =>
Component.Create(x)!)!;
Manufactures = LoadData(ManufactureFileName, "Manufacture", x =>
Manufacture.Create(x)!)!;
Orders = LoadData(OrderFileName, "Order", x =>
Order.Create(x)!)!;
}
private static List<T>? LoadData<T>(string filename, string xmlNodeName,
Func<XElement, T> selectFunction)
{
if (File.Exists(filename))
{
return
XDocument.Load(filename)?.Root?.Elements(xmlNodeName)?.Select(selectFunction)?.ToList();
}
return new List<T>();
}
private static void SaveData<T>(List<T> data, string filename, string
xmlNodeName, Func<T, XElement> selectFunction)
{
if (data != null)
{
new XDocument(new XElement(xmlNodeName,
data.Select(selectFunction).ToArray())).Save(filename);
}
}
}
}

View File

@@ -0,0 +1,91 @@
using BlackcmithWorkshopFileImplement;
using BlacksmithWorkshopContracts.BindingModels;
using BlacksmithWorkshopContracts.SearchModels;
using BlacksmithWorkshopContracts.StoragesContracts;
using BlacksmithWorkshopContracts.ViewModels;
using BlacksmithWorkshopFileImplement.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BlacksmithWorkshopFileImplement.Implements
{
public class ComponentStorage : IComponentStorage
{
private readonly DataFileSingleton source;
public ComponentStorage()
{
source = DataFileSingleton.GetInstance();
}
public List<ComponentViewModel> GetFullList()
{
return source.Components
.Select(x => x.GetViewModel)
.ToList();
}
public List<ComponentViewModel> GetFilteredList(ComponentSearchModel
model)
{
if (string.IsNullOrEmpty(model.ComponentName))
{
return new();
}
return source.Components
.Where(x => x.ComponentName.Contains(model.ComponentName))
.Select(x => x.GetViewModel)
.ToList();
}
public ComponentViewModel? GetElement(ComponentSearchModel model)
{
if (string.IsNullOrEmpty(model.ComponentName) && !model.Id.HasValue)
{
return null;
}
return source.Components
.FirstOrDefault(x =>
(!string.IsNullOrEmpty(model.ComponentName) && x.ComponentName ==
model.ComponentName) ||
(model.Id.HasValue && x.Id == model.Id))
?.GetViewModel;
}
public ComponentViewModel? Insert(ComponentBindingModel model)
{
model.Id = source.Components.Count > 0 ? source.Components.Max(x =>
x.Id) + 1 : 1;
var newComponent = Component.Create(model);
if (newComponent == null)
{
return null;
}
source.Components.Add(newComponent);
source.SaveComponents();
return newComponent.GetViewModel;
}
public ComponentViewModel? Update(ComponentBindingModel model)
{
var component = source.Components.FirstOrDefault(x => x.Id ==
model.Id);
if (component == null)
{
return null;
}
component.Update(model);
source.SaveComponents();
return component.GetViewModel;
}
public ComponentViewModel? Delete(ComponentBindingModel model)
{
var element = source.Components.FirstOrDefault(x => x.Id ==
model.Id);
if (element != null)
{
source.Components.Remove(element);
source.SaveComponents();
return element.GetViewModel;
}
return null;
}
}
}

View File

@@ -0,0 +1,91 @@
using BlackcmithWorkshopFileImplement;
using BlacksmithWorkshopContracts.BindingModels;
using BlacksmithWorkshopContracts.SearchModels;
using BlacksmithWorkshopContracts.StoragesContracts;
using BlacksmithWorkshopContracts.ViewModels;
using BlacksmithWorkshopFileImplement.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BlacksmithWorkshopFileImplement.Implements
{
public class ManufactureStorage : IManufactureStorage
{
private readonly DataFileSingleton source;
public ManufactureStorage()
{
source = DataFileSingleton.GetInstance();
}
public List<ManufactureViewModel> GetFullList()
{
return source.Manufactures
.Select(x => x.GetViewModel)
.ToList();
}
public List<ManufactureViewModel> GetFilteredList(ManufactureSearchModel model)
{
if (string.IsNullOrEmpty(model.ManufactureName))
{
return new();
}
return source.Manufactures
.Where(x => x.ManufactureName.Contains(model.ManufactureName))
.Select(x => x.GetViewModel)
.ToList();
}
public ManufactureViewModel? GetElement(ManufactureSearchModel model)
{
if (string.IsNullOrEmpty(model.ManufactureName) && !model.Id.HasValue)
{
return null;
}
return source.Manufactures
.FirstOrDefault(x =>
(!string.IsNullOrEmpty(model.ManufactureName) && x.ManufactureName ==
model.ManufactureName) ||
(model.Id.HasValue && x.Id == model.Id))
?.GetViewModel;
}
public ManufactureViewModel? Insert(ManufactureBindingModel model)
{
model.Id = source.Manufactures.Count > 0 ? source.Manufactures.Max(x =>
x.Id) + 1 : 1;
var newManufacture = Manufacture.Create(model);
if (newManufacture == null)
{
return null;
}
source.Manufactures.Add(newManufacture);
source.SaveManufactures();
return newManufacture.GetViewModel;
}
public ManufactureViewModel? Update(ManufactureBindingModel model)
{
var Manufacture = source.Manufactures.FirstOrDefault(x => x.Id ==
model.Id);
if (Manufacture == null)
{
return null;
}
Manufacture.Update(model);
source.SaveManufactures();
return Manufacture.GetViewModel;
}
public ManufactureViewModel? Delete(ManufactureBindingModel model)
{
var Manufacture = source.Manufactures.FirstOrDefault(x => x.Id ==
model.Id);
if (Manufacture != null)
{
source.Manufactures.Remove(Manufacture);
source.SaveManufactures();
return Manufacture.GetViewModel;
}
return null;
}
}
}

View File

@@ -0,0 +1,99 @@
using BlackcmithWorkshopFileImplement;
using BlacksmithWorkshopContracts.BindingModels;
using BlacksmithWorkshopContracts.SearchModels;
using BlacksmithWorkshopContracts.StoragesContracts;
using BlacksmithWorkshopContracts.ViewModels;
using BlacksmithWorkshopFileImplement.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BlacksmithWorkshopFileImplement.Implements
{
public class OrderStorage : IOrderStorage
{
private readonly DataFileSingleton source;
public OrderStorage()
{
source = DataFileSingleton.GetInstance();
}
public List<OrderViewModel> GetFullList()
{
return source.Orders
.Select(x => AccessManufactureStorage(x.GetViewModel))
.ToList();
}
public List<OrderViewModel> GetFilteredList(OrderSearchModel model)
{
if (!model.Id.HasValue)
{
return new();
}
return source.Orders
.Where(x => x.Id == model.Id)
.Select(x => AccessManufactureStorage(x.GetViewModel))
.ToList();
}
public OrderViewModel? GetElement(OrderSearchModel model)
{
if (!model.Id.HasValue)
{
return null;
}
return AccessManufactureStorage(source.Orders.FirstOrDefault(
x => (model.Id.HasValue && x.Id == model.Id))?.GetViewModel
);
}
public OrderViewModel? Insert(OrderBindingModel model)
{
model.Id = source.Orders.Count > 0 ? source.Orders.Max(x => x.Id) + 1 : 1;
var newOrder = Order.Create(model);
if (newOrder == null)
{
return null;
}
source.Orders.Add(newOrder);
source.SaveOrders();
return AccessManufactureStorage(newOrder.GetViewModel);
}
public OrderViewModel? Update(OrderBindingModel model)
{
var order = source.Orders.FirstOrDefault(x => x.Id == model.Id);
if (order == null)
{
return null;
}
order.Update(model);
source.SaveOrders();
return AccessManufactureStorage(order.GetViewModel);
}
public OrderViewModel? Delete(OrderBindingModel model)
{
var element = source.Orders.FirstOrDefault(x => x.Id ==
model.Id);
if (element != null)
{
source.Orders.Remove(element);
source.SaveOrders();
return AccessManufactureStorage(element.GetViewModel);
}
return null;
}
public OrderViewModel? AccessManufactureStorage(OrderViewModel model)
{
if (model == null)
return null;
foreach (var Manufacture in source.Manufactures)
{
if (Manufacture.Id == model.ManufactureId)
{
model.ManufactureName = Manufacture.ManufactureName;
break;
}
}
return model;
}
}
}

View File

@@ -0,0 +1,64 @@
using BlacksmithWorkshopContracts.BindingModels;
using BlacksmithWorkshopContracts.ViewModels;
using BlacksmithWorkshopDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace BlacksmithWorkshopFileImplement.Models
{
public class Component : IComponentModel
{
public int Id { get; set; }
public string ComponentName { get; set; } = string.Empty;
public double Cost { get; set; }
public static Component? Create(ComponentBindingModel model)
{
if (model == null)
{
return null;
}
return new Component()
{
Id = model.Id,
ComponentName = model.ComponentName,
Cost = model.Cost,
};
}
public static Component? Create(XElement element)
{
if (element == null)
{
return null;
}
return new Component()
{
Id = Convert.ToInt32(element.Attribute("Id")!.Value),
ComponentName = element.Element("ComponentName")!.Value,
Cost = Convert.ToDouble(element.Element("Cost")!.Value),
};
}
public void Update(ComponentBindingModel model)
{
if (model == null)
{
return;
}
ComponentName = model.ComponentName;
Cost = model.Cost;
}
public ComponentViewModel GetViewModel => new()
{
Id = Id,
ComponentName = ComponentName,
Cost = Cost
};
public XElement GetXElement => new("Component",
new XAttribute("Id", Id),
new XElement("ComponentName", ComponentName),
new XElement("Cost", Cost.ToString()));
}
}

View File

@@ -0,0 +1,96 @@
using BlackcmithWorkshopFileImplement;
using BlacksmithWorkshopContracts.BindingModels;
using BlacksmithWorkshopContracts.ViewModels;
using BlacksmithWorkshopDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace BlacksmithWorkshopFileImplement.Models
{
public class Manufacture : IManufactureModel
{
public int Id { get; private set; }
public string ManufactureName { get; private set; } = string.Empty;
public double Price { get; private set; }
public Dictionary<int, int> Components { get; private set; } = new();
private Dictionary<int, (IComponentModel, int)>? _ManufactureComponents = null;
public Dictionary<int, (IComponentModel, int)> ManufactureComponents
{
get
{
if (_ManufactureComponents == null)
{
var source = DataFileSingleton.GetInstance();
_ManufactureComponents = Components.ToDictionary(x => x.Key, y =>
((source.Components.FirstOrDefault(z => z.Id == y.Key) as IComponentModel)!,
y.Value));
}
return _ManufactureComponents;
}
}
public static Manufacture? Create(ManufactureBindingModel model)
{
if (model == null)
{
return null;
}
return new Manufacture()
{
Id = model.Id,
ManufactureName = model.ManufactureName,
Price = model.Price,
Components = model.ManufactureComponents.ToDictionary(x => x.Key, x
=> x.Value.Item2)
};
}
public static Manufacture? Create(XElement element)
{
if (element == null)
{
return null;
}
return new Manufacture()
{
Id = Convert.ToInt32(element.Attribute("Id")!.Value),
ManufactureName = element.Element("ManufactureName")!.Value,
Price = Convert.ToDouble(element.Element("Price")!.Value),
Components =
element.Element("ManufactureComponents")!.Elements("ManufactureComponent")
.ToDictionary(x =>
Convert.ToInt32(x.Element("Key")?.Value), x =>
Convert.ToInt32(x.Element("Value")?.Value))
};
}
public void Update(ManufactureBindingModel model)
{
if (model == null)
{
return;
}
ManufactureName = model.ManufactureName;
Price = model.Price;
Components = model.ManufactureComponents.ToDictionary(x => x.Key, x =>
x.Value.Item2);
_ManufactureComponents = null;
}
public ManufactureViewModel GetViewModel => new()
{
Id = Id,
ManufactureName = ManufactureName,
Price = Price,
ManufactureComponents = ManufactureComponents
};
public XElement GetXElement => new("Manufacture",
new XAttribute("Id", Id),
new XElement("ManufactureName", ManufactureName),
new XElement("Price", Price.ToString()),
new XElement("ManufactureComponents", Components.Select(x =>
new XElement("ManufactureComponent",
new XElement("Key", x.Key),
new XElement("Value", x.Value))).ToArray()));
}
}

View File

@@ -0,0 +1,87 @@
using BlacksmithWorkshopContracts.BindingModels;
using BlacksmithWorkshopContracts.ViewModels;
using BlacksmithWorkshopDataModels.Enums;
using BlacksmithWorkshopDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace BlacksmithWorkshopFileImplement.Models
{
public class Order : IOrderModel
{
public int Id { get; private set; }
public int ManufactureId { get; private set; }
public int Count { get; private set; }
public double Sum { get; private set; }
public OrderStatus Status { get; private set; }
public DateTime DateCreate { get; private set; }
public DateTime? DateImplement { get; private 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 static Order? Create(XElement element)
{
if (element == null)
{
return null;
}
return new Order()
{
Id = Convert.ToInt32(element.Attribute("Id")!.Value),
ManufactureId = Convert.ToInt32(element.Element("ManufactureId")!.Value),
Count = Convert.ToInt32(element.Element("Count")!.Value),
Sum = Convert.ToDouble(element.Element("Sum")!.Value),
Status = (OrderStatus)Enum.Parse(typeof(OrderStatus), element.Element("Status")!.Value.ToString()),
DateCreate = Convert.ToDateTime(element.Element("DateCreate")!.Value),
DateImplement = string.IsNullOrEmpty(element.Element("DateImplement")!.Value) ? null : Convert.ToDateTime(element.Element("DateImplement")!.Value)
};
}
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,
};
public XElement GetXElement => new("Order",
new XAttribute("Id", Id),
new XElement("ManufactureId", ManufactureId),
new XElement("Sum", Sum.ToString()),
new XElement("Count", Count),
new XElement("Status", Status.ToString()),
new XElement("DateCreate", DateCreate.ToString()),
new XElement("DateImplement", DateImplement.ToString())
);
}
}

View File

@@ -1,17 +1,19 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.7.34221.43
VisualStudioVersion = 17.7.34031.279
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlacksmithWorkshopDataModels", "BlacksmithWorkshopDataModels\BlacksmithWorkshopDataModels.csproj", "{0C497766-56C5-43BE-B322-E2DF09E1F45B}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlacksmithWorkshop", "BlacksmithWorkshop\BlacksmithWorkshop.csproj", "{54575961-6705-47D3-8063-416A45518BED}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlacksmithWorkshopContracts", "BlacksmithWorkshopContracts\BlacksmithWorkshopContracts.csproj", "{DCE9EE1E-E6B7-4692-B1A2-F891ED03B520}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlacksmithWorkshopDataModels", "BlacksmithWorkshopDataModels\BlacksmithWorkshopDataModels.csproj", "{96E8CFC7-A9D8-438B-AE8C-184ED25D5AAC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlacksmithWorkshopListImplement", "BlacksmithWorkshopListImplement\BlacksmithWorkshopListImplement.csproj", "{4F7BD599-9898-4A21-9446-E541F7AEBF11}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlacksmithWorkshopContracts", "BlacksmithWorkshopContracts\BlacksmithWorkshopContracts.csproj", "{40A50297-20F6-4F73-834D-0902F6F7965B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlacksmithWorkshopBusinessLogic", "BlacksmithWorkshopBusinessLogic\BlacksmithWorkshopBusinessLogic.csproj", "{3C843EC8-0599-4D93-A696-A96B42A30199}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlacksmithWorkshopBusinessLogic", "BlacksmithWorkshopBusinessLogic\BlacksmithWorkshopBusinessLogic.csproj", "{81DD48F2-F58D-4C86-AC0C-74E447366DFA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlacksmithWorkshopView", "BlacksmithWorkshopView\BlacksmithWorkshopView.csproj", "{B172C5B2-796C-4CC9-BB35-180AFBDB6AF7}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlacksmithWorkshopListImplement", "BlacksmithWorkshopListImplement\BlacksmithWorkshopListImplement.csproj", "{F6B2AA66-2A89-4DEA-AE90-84991C1EE424}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlacksmithWorkshopFileImplement", "BlackcmithWorkshopFileImplement\BlacksmithWorkshopFileImplement.csproj", "{63C0A1A4-FA76-4F7C-8144-A33085F7DF08}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -19,31 +21,35 @@ Global
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{0C497766-56C5-43BE-B322-E2DF09E1F45B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0C497766-56C5-43BE-B322-E2DF09E1F45B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0C497766-56C5-43BE-B322-E2DF09E1F45B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0C497766-56C5-43BE-B322-E2DF09E1F45B}.Release|Any CPU.Build.0 = Release|Any CPU
{DCE9EE1E-E6B7-4692-B1A2-F891ED03B520}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DCE9EE1E-E6B7-4692-B1A2-F891ED03B520}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DCE9EE1E-E6B7-4692-B1A2-F891ED03B520}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DCE9EE1E-E6B7-4692-B1A2-F891ED03B520}.Release|Any CPU.Build.0 = Release|Any CPU
{4F7BD599-9898-4A21-9446-E541F7AEBF11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4F7BD599-9898-4A21-9446-E541F7AEBF11}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4F7BD599-9898-4A21-9446-E541F7AEBF11}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4F7BD599-9898-4A21-9446-E541F7AEBF11}.Release|Any CPU.Build.0 = Release|Any CPU
{3C843EC8-0599-4D93-A696-A96B42A30199}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3C843EC8-0599-4D93-A696-A96B42A30199}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3C843EC8-0599-4D93-A696-A96B42A30199}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3C843EC8-0599-4D93-A696-A96B42A30199}.Release|Any CPU.Build.0 = Release|Any CPU
{B172C5B2-796C-4CC9-BB35-180AFBDB6AF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B172C5B2-796C-4CC9-BB35-180AFBDB6AF7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B172C5B2-796C-4CC9-BB35-180AFBDB6AF7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B172C5B2-796C-4CC9-BB35-180AFBDB6AF7}.Release|Any CPU.Build.0 = Release|Any CPU
{54575961-6705-47D3-8063-416A45518BED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{54575961-6705-47D3-8063-416A45518BED}.Debug|Any CPU.Build.0 = Debug|Any CPU
{54575961-6705-47D3-8063-416A45518BED}.Release|Any CPU.ActiveCfg = Release|Any CPU
{54575961-6705-47D3-8063-416A45518BED}.Release|Any CPU.Build.0 = Release|Any CPU
{96E8CFC7-A9D8-438B-AE8C-184ED25D5AAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{96E8CFC7-A9D8-438B-AE8C-184ED25D5AAC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{96E8CFC7-A9D8-438B-AE8C-184ED25D5AAC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{96E8CFC7-A9D8-438B-AE8C-184ED25D5AAC}.Release|Any CPU.Build.0 = Release|Any CPU
{40A50297-20F6-4F73-834D-0902F6F7965B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{40A50297-20F6-4F73-834D-0902F6F7965B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{40A50297-20F6-4F73-834D-0902F6F7965B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{40A50297-20F6-4F73-834D-0902F6F7965B}.Release|Any CPU.Build.0 = Release|Any CPU
{81DD48F2-F58D-4C86-AC0C-74E447366DFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{81DD48F2-F58D-4C86-AC0C-74E447366DFA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{81DD48F2-F58D-4C86-AC0C-74E447366DFA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{81DD48F2-F58D-4C86-AC0C-74E447366DFA}.Release|Any CPU.Build.0 = Release|Any CPU
{F6B2AA66-2A89-4DEA-AE90-84991C1EE424}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F6B2AA66-2A89-4DEA-AE90-84991C1EE424}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F6B2AA66-2A89-4DEA-AE90-84991C1EE424}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F6B2AA66-2A89-4DEA-AE90-84991C1EE424}.Release|Any CPU.Build.0 = Release|Any CPU
{63C0A1A4-FA76-4F7C-8144-A33085F7DF08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{63C0A1A4-FA76-4F7C-8144-A33085F7DF08}.Debug|Any CPU.Build.0 = Debug|Any CPU
{63C0A1A4-FA76-4F7C-8144-A33085F7DF08}.Release|Any CPU.ActiveCfg = Release|Any CPU
{63C0A1A4-FA76-4F7C-8144-A33085F7DF08}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {281A4CA0-E778-4FE3-B4C8-B86463BEB2C1}
SolutionGuid = {8DF79FEE-7448-48A9-BF6C-BC36C78CDC16}
EndGlobalSection
EndGlobal

View File

@@ -13,6 +13,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\BlackcmithWorkshopFileImplement\BlacksmithWorkshopFileImplement.csproj" />
<ProjectReference Include="..\BlacksmithWorkshopBusinessLogic\BlacksmithWorkshopBusinessLogic.csproj" />
<ProjectReference Include="..\BlacksmithWorkshopListImplement\BlacksmithWorkshopListImplement.csproj" />
</ItemGroup>

View File

@@ -32,6 +32,8 @@
GuidesToolStripMenuItem = new ToolStripMenuItem();
ComponentsToolStripMenuItem = new ToolStripMenuItem();
ManufacturesToolStripMenuItem = new ToolStripMenuItem();
ShopsToolStripMenuItem = new ToolStripMenuItem();
SupplyToolStripMenuItem = new ToolStripMenuItem();
dataGridView = new DataGridView();
buttonCreateOrder = new Button();
buttonRefresh = new Button();
@@ -61,7 +63,7 @@
// ComponentsToolStripMenuItem
//
ComponentsToolStripMenuItem.Name = "ComponentsToolStripMenuItem";
ComponentsToolStripMenuItem.Size = new Size(181, 22);
ComponentsToolStripMenuItem.Size = new Size(198, 22);
ComponentsToolStripMenuItem.Text = "Компоненты";
ComponentsToolStripMenuItem.Click += ComponentsStripMenuItem_Click;
//
@@ -71,7 +73,7 @@
ManufacturesToolStripMenuItem.Size = new Size(181, 22);
ManufacturesToolStripMenuItem.Text = "Кузнечные изделия";
ManufacturesToolStripMenuItem.Click += ManufacturesStripMenuItem_Click;
//
//
// dataGridView
//
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
@@ -167,5 +169,7 @@
private Button buttonIssued;
private Button buttonReady;
private Button buttonTakeInWork;
private ToolStripMenuItem ShopsToolStripMenuItem;
private ToolStripMenuItem SupplyToolStripMenuItem;
}
}

View File

@@ -163,5 +163,21 @@ namespace BlacksmithWorkshop
{
LoadData();
}
//private void ShopsToolStripMenuItem_Click(object sender, EventArgs e)
//{
// var service = Program.ServiceProvider?.GetService(typeof(FormShops));
// if (service is FormShops form)
// {
// form.ShowDialog();
// }
//}
//private void SupplyToolStripMenuItem_Click(object sender, EventArgs e)
//{
// var service = Program.ServiceProvider?.GetService(typeof(FormSupply));
// if (service is FormSupply form)
// {
// form.ShowDialog();
// }
//}
}
}

View File

@@ -1,10 +1,10 @@
using BlacksmithWorkshopBusinessLogic.BusinessLogic;
using BlacksmithWorkshopBusinessLogic.BusinessLogics;
using BlacksmithWorkshopContracts.BusinessLogicsContracts;
using BlacksmithWorkshopContracts.StoragesContracts;
using BlacksmithWorkshopListImplement.Implements;
using BlacksmithWorkshopFileImplement.Implements;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using NLog.Extensions.Logging;
using System;
namespace BlacksmithWorkshop
@@ -32,6 +32,7 @@ namespace BlacksmithWorkshop
services.AddLogging(option =>
{
option.SetMinimumLevel(LogLevel.Information);
option.AddNLog("nlog.config");
});
services.AddTransient<IComponentStorage, ComponentStorage>();
services.AddTransient<IOrderStorage, OrderStorage>();
@@ -39,7 +40,7 @@ namespace BlacksmithWorkshop
services.AddTransient<IComponentLogic, ComponentLogic>();
services.AddTransient<IOrderLogic, OrderLogic>();
services.AddTransient<IManufactureLogic, ManufactureLogic>();
services.AddTransient<FormMain>();
services.AddTransient<FormMain>();
services.AddTransient<FormComponent>();
services.AddTransient<FormComponents>();
services.AddTransient<FormCreateOrder>();

View File

@@ -7,15 +7,11 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\BlacksmithWorkshopContracts\BlacksmithWorkshopContracts.csproj" />
<ProjectReference Include="..\BlacksmithWorkshopListImplement\BlacksmithWorkshopListImplement.csproj" />
</ItemGroup>
</Project>

View File

@@ -1,160 +0,0 @@
using BlacksmithWorkshopContracts.BindingModels;
using BlacksmithWorkshopContracts.BusinessLogicsContracts;
using BlacksmithWorkshopContracts.SearchModels;
using BlacksmithWorkshopContracts.StoragesContracts;
using BlacksmithWorkshopContracts.ViewModels;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BlacksmithWorkshopBusinessLogic.BusinessLogic
{
public class ManufactureLogic : IManufactureLogic
{
private readonly ILogger _logger;
private readonly IManufactureStorage _manufactureStorage;
//конструктор
public ManufactureLogic(ILogger<ManufactureLogic> logger, IManufactureStorage manufactureStorage)
{
_logger = logger;
_manufactureStorage = manufactureStorage;
}
//вывод отфильтрованного списка
public List<ManufactureViewModel>? ReadList(ManufactureSearchModel? model)
{
_logger.LogInformation("ReadList. ManufactureName:{ManufactureName}. Id:{Id}", model?.ManufactureName, model?.Id);
//list хранит весь список в случае, если model пришло со значением null на вход метода
var list = model == null ? _manufactureStorage.GetFullList() : _manufactureStorage.GetFilteredList(model);
if(list == null)
{
_logger.LogWarning("ReadList return null list");
return null;
}
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
return list;
}
//вывод конкретного изделия
public ManufactureViewModel? ReadElement(ManufactureSearchModel model)
{
if(model == null)
{
throw new ArgumentNullException(nameof(model));
}
_logger.LogInformation("ReadElement. ManufactureName:{ManufactureName}. Id:{Id}", model.ManufactureName, model.Id);
var element = _manufactureStorage.GetElement(model);
if(element == null)
{
_logger.LogWarning("ReadElement element not found");
return null;
}
_logger.LogInformation("ReadElement find. Id:{Id}", model.Id);
return element;
}
//Создание изделия
public bool Create(ManufactureBindingModel model)
{
CheckModel(model);
if(_manufactureStorage.Insert(model) == null)
{
_logger.LogWarning("Create operation failed");
return false;
}
return true;
}
//обновление изделия
public bool Update(ManufactureBindingModel model)
{
CheckModel(model);
if(_manufactureStorage.Update(model) == null)
{
_logger.LogWarning("Update operation failed");
return false;
}
return true;
}
//удаление изделия
public bool Delete(ManufactureBindingModel model)
{
CheckModel(model, false);
_logger.LogInformation("Delete. Id:{Id}", model.Id);
if(_manufactureStorage.Delete(model) == null)
{
_logger.LogWarning("Delete operation failed");
return false;
}
return true;
}
//проверка входного аргумента для методов Insert, Update и Delete
private void CheckModel(ManufactureBindingModel model, bool withParams = true)
{
if(model == null)
{
throw new ArgumentNullException(nameof(model));
}
//так как при удалении параметром withParams передаём false
if (!withParams)
{
return;
}
//проверка на наличие названия изделия
if (string.IsNullOrEmpty(model.ManufactureName))
{
throw new ArgumentNullException("Нет названия изделия", nameof(model.ManufactureName));
}
//проверка на наличие нормальной цены у изделия
if(model.Price <= 0)
{
throw new ArgumentNullException("Цена изделия должна быть больше 0", nameof(model.Price));
}
_logger.LogInformation("Manufacture. ManufactureName:{ManufactureName}. Price:{Price}. Id:{Id}",
model.ManufactureName, model.Price, model.Id);
//проверка на наличие такого же изделия в списке
var element = _manufactureStorage.GetElement(new ManufactureSearchModel
{
ManufactureName = model.ManufactureName,
});
//если элемент найден и его Id не совпадает с Id объекта, переданного на вход
if(element != null && element.Id != model.Id)
{
throw new InvalidOperationException("Изделие с таким названием уже есть");
}
}
}
}

View File

@@ -1,173 +0,0 @@
using BlacksmithWorkshopContracts.BindingModels;
using BlacksmithWorkshopContracts.BusinessLogicsContracts;
using BlacksmithWorkshopContracts.SearchModels;
using BlacksmithWorkshopContracts.StoragesContracts;
using BlacksmithWorkshopContracts.ViewModels;
using BlacksmithWorkshopDataModels.Enums;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BlacksmithWorkshopBusinessLogic.BusinessLogic
{
public class OrderLogic : IOrderLogic
{
private readonly ILogger _logger;
private readonly IOrderStorage _orderStorage;
public OrderLogic(ILogger<OrderLogic> logger, IOrderStorage orderStorage)
{
_logger = logger;
_orderStorage = orderStorage;
}
//вывод отфильтрованного списка компонентов
public List<OrderViewModel>? ReadList(OrderSearchModel? model)
{
_logger.LogInformation("ReadList. Id:{Id}", model?.Id);
//list хранит весь список в случае, если model пришло со значением null на вход метода
var list = model == null ? _orderStorage.GetFullList() : _orderStorage.GetFilteredList(model);
if(list == null)
{
_logger.LogWarning("ReadList return null list");
return null;
}
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
return list;
}
//создание чека
public bool CreateOrder(OrderBindingModel model)
{
CheckModel(model);
if(model.Status != OrderStatus.Неизвестен)
{
_logger.LogWarning("Insert operation failed, incorrect order status");
return false;
}
model.Status = OrderStatus.Принят;
if(_orderStorage.Insert(model) == null)
{
model.Status = OrderStatus.Неизвестен;
_logger.LogWarning("Insert operation failed");
return false;
}
return true;
}
public bool TakeOrderInWork(OrderBindingModel model)
{
return StatusUpdate(model, OrderStatus.Выполняется);
}
public bool FinishOrder(OrderBindingModel model)
{
return StatusUpdate(model, OrderStatus.Готов);
}
public bool DeliveryOrder(OrderBindingModel model)
{
return StatusUpdate(model, OrderStatus.Выдан);
}
//проверка на пустоту входного параметра
private void CheckModel(OrderBindingModel model, bool withParams = true)
{
if(model == null)
{
throw new ArgumentNullException(nameof(model));
}
//так как при удалении параметром withParams передаём false
if (!withParams)
{
return;
}
//проверка на наличие товаров в заказе
if(model.Count <= 0)
{
throw new ArgumentNullException("В заказе не может быть 0 изделий", nameof(model.Count));
}
//проверка на наличие нормальной суммарной стоимости чека
if(model.Sum <= 0)
{
throw new ArgumentNullException("Суммарная стоимость заказа должна быть больше 0", nameof(model.Sum));
}
//проверка корректности id у изделий
if (model.ManufactureId < 0)
{
throw new ArgumentNullException("Некорректный id у изделия", nameof(model.ManufactureId));
}
//проверка корректности дат
if(model.DateCreate > model.DateImplement)
{
throw new InvalidOperationException("Дата создания должна быть более ранней, нежели дата завершения");
}
_logger.LogInformation("Order. OrderId:{Id}. Sun:{Sum}. ManufactureId:{Id}", model.Id, model.Sum, model.ManufactureId);
}
//обновление статуса заказа
public bool StatusUpdate(OrderBindingModel model, OrderStatus newOrderStatus)
{
var viewModel = _orderStorage.GetElement(new OrderSearchModel { Id = model.Id });
//если не смогли найти указанный заказ по его Id
if(viewModel == null)
{
throw new ArgumentNullException(nameof(model));
}
//проверка на возможность обновления статуса на следующий
if (viewModel.Status + 1 != newOrderStatus)
{
_logger.LogWarning("Status update operation failed. New status " + newOrderStatus.ToString() + " incorrect");
return false;
}
model.Status = newOrderStatus;
//проверка на выдачу
if(model.Status == OrderStatus.Выдан)
{
model.DateImplement = DateTime.Now;
}
else
{
model.DateImplement = viewModel.DateImplement;
}
CheckModel(model, false);
//финальная проверка на возможность обновления
if (_orderStorage.Update(model) == null)
{
model.Status--;
_logger.LogWarning("Update operation failed");
return false;
}
return true;
}
}
}

View File

@@ -4,34 +4,22 @@ using BlacksmithWorkshopContracts.SearchModels;
using BlacksmithWorkshopContracts.StoragesContracts;
using BlacksmithWorkshopContracts.ViewModels;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BlacksmithWorkshopBusinessLogic.BusinessLogics
{
//класс, реализующий логику для заготовок
public class ComponentLogic : IComponentLogic
{
private readonly ILogger _logger;
private readonly IComponentStorage _componentStorage;
//конструктор
public ComponentLogic(ILogger<ComponentLogic> logger, IComponentStorage
componentStorage)
{
_logger = logger;
_componentStorage = componentStorage;
}
//вывод отфильтрованного списка компонентов
public List<ComponentViewModel>? ReadList(ComponentSearchModel? model)
{
_logger.LogInformation("ReadList. ComponentName:{ComponentName}.Id:{ Id}", model?.ComponentName, model?.Id);
//list хранит весь список в случае, если model пришло со значением null на вход метода
var list = model == null ? _componentStorage.GetFullList() :
_componentStorage.GetFilteredList(model);
if (list == null)
@@ -42,8 +30,6 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogics
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
return list;
}
//вывод конкретного заготовки
public ComponentViewModel? ReadElement(ComponentSearchModel model)
{
if (model == null)
@@ -60,8 +46,6 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogics
_logger.LogInformation("ReadElement find. Id:{Id}", element.Id);
return element;
}
//создание заготовки
public bool Create(ComponentBindingModel model)
{
CheckModel(model);
@@ -73,8 +57,6 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogics
return true;
}
//обновление заготовки
public bool Update(ComponentBindingModel model)
{
CheckModel(model);
@@ -85,8 +67,6 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogics
}
return true;
}
//удаление заготовки
public bool Delete(ComponentBindingModel model)
{
CheckModel(model, false);
@@ -98,8 +78,6 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogics
}
return true;
}
//проверка входного аргумента для методов Insert, Update и Delete
private void CheckModel(ComponentBindingModel model, bool withParams =
true)
{
@@ -107,32 +85,24 @@ namespace BlacksmithWorkshopBusinessLogic.BusinessLogics
{
throw new ArgumentNullException(nameof(model));
}
//так как при удалении передаём как параметр false
if (!withParams)
{
return;
}
//проверка на наличие названия заготовки
if (string.IsNullOrEmpty(model.ComponentName))
{
throw new ArgumentNullException("Нет названия компонента",
nameof(model.ComponentName));
}
//проверка на наличие нормальной цены у заготовки
if (model.Cost <= 0)
{
throw new ArgumentNullException("Цена компонента должна быть больше 0", nameof(model.Cost));
}
_logger.LogInformation("Component. ComponentName:{ComponentName}. Cost:{ Cost}. Id: { Id} ",
model.ComponentName, model.Cost, model.Id);
//проверка на наличие такой же заготовки в списке
_logger.LogInformation("Component. ComponentName:{ComponentName}. Cost:{ Cost}. Id: { Id} ", model.ComponentName, model.Cost, model.Id);
var element = _componentStorage.GetElement(new ComponentSearchModel
{
ComponentName = model.ComponentName
});
//если элемент найден и его Id не совпадает с Id переданного объекта
if (element != null && element.Id != model.Id)
{
throw new InvalidOperationException("Компонент с таким названием уже есть");

View File

@@ -0,0 +1,114 @@
using BlacksmithWorkshopContracts.BindingModels;
using BlacksmithWorkshopContracts.BusinessLogicsContracts;
using BlacksmithWorkshopContracts.SearchModels;
using BlacksmithWorkshopContracts.StoragesContracts;
using BlacksmithWorkshopContracts.ViewModels;
using Microsoft.Extensions.Logging;
namespace BlacksmithWorkshopBusinessLogic.BusinessLogics
{
public class ManufactureLogic : IManufactureLogic
{
private readonly ILogger _logger;
private readonly IManufactureStorage _ManufactureStorage;
public ManufactureLogic(ILogger<ManufactureLogic> logger, IManufactureStorage ManufactureStorage)
{
_logger = logger;
_ManufactureStorage = ManufactureStorage;
}
public List<ManufactureViewModel>? ReadList(ManufactureSearchModel? model)
{
_logger.LogInformation("ReadList. ManufactureName:{ManufactureName}. Id:{ Id}", model?.ManufactureName, model?.Id);
var list = model == null ? _ManufactureStorage.GetFullList() :
_ManufactureStorage.GetFilteredList(model);
if (list == null)
{
_logger.LogWarning("ReadList return null list");
return null;
}
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
return list;
}
public ManufactureViewModel? ReadElement(ManufactureSearchModel model)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
_logger.LogInformation("ReadElement. ManufactureName:{ManufactureName}.Id:{ Id}", model.ManufactureName, model.Id);
var element = _ManufactureStorage.GetElement(model);
if (element == null)
{
_logger.LogWarning("ReadElement element not found");
return null;
}
_logger.LogInformation("ReadElement find. Id:{Id}", element.Id);
return element;
}
public bool Create(ManufactureBindingModel model)
{
CheckModel(model);
if (_ManufactureStorage.Insert(model) == null)
{
_logger.LogWarning("Insert operation failed");
return false;
}
return true;
}
public bool Update(ManufactureBindingModel model)
{
CheckModel(model);
if (_ManufactureStorage.Update(model) == null)
{
_logger.LogWarning("Update operation failed");
return false;
}
return true;
}
public bool Delete(ManufactureBindingModel model)
{
CheckModel(model, false);
_logger.LogInformation("Delete. Id:{Id}", model.Id);
if (_ManufactureStorage.Delete(model) == null)
{
_logger.LogWarning("Delete operation failed");
return false;
}
return true;
}
private void CheckModel(ManufactureBindingModel model, bool withParams =
true)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
if (!withParams)
{
return;
}
if (string.IsNullOrEmpty(model.ManufactureName))
{
throw new ArgumentNullException("Нет названия кузнечного изделия",
nameof(model.ManufactureName));
}
if (model.Price <= 0)
{
throw new ArgumentNullException("Цена кузнечных изделий должна быть больше 0", nameof(model.Price));
}
_logger.LogInformation("Manufacture. Manufacture:{Manufacture}. Price:{ Price }. Id: { Id}", model.ManufactureName, model.Price, model.Id);
var element = _ManufactureStorage.GetElement(new ManufactureSearchModel
{
ManufactureName = model.ManufactureName
});
if (element != null && element.Id != model.Id)
{
throw new InvalidOperationException("Компонент с таким названием уже есть");
}
}
}
}

View File

@@ -0,0 +1,112 @@
using BlacksmithWorkshopContracts.BindingModels;
using BlacksmithWorkshopContracts.BusinessLogicsContracts;
using BlacksmithWorkshopContracts.SearchModels;
using BlacksmithWorkshopContracts.StoragesContracts;
using BlacksmithWorkshopContracts.ViewModels;
using BlacksmithWorkshopDataModels.Enums;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BlacksmithWorkshopBusinessLogic.BusinessLogics
{
public class OrderLogic : IOrderLogic
{
private readonly ILogger _logger;
private readonly IOrderStorage _orderStorage;
public OrderLogic(ILogger<OrderLogic> logger, IOrderStorage orderStorage)
{
_logger = logger;
_orderStorage = orderStorage;
}
public List<OrderViewModel>? ReadList(OrderSearchModel? model)
{
_logger.LogInformation("ReadList. Id:{ Id}", model?.Id);
var list = model == null ? _orderStorage.GetFullList() :
_orderStorage.GetFilteredList(model);
if (list == null)
{
_logger.LogWarning("ReadList return null list");
return null;
}
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
return list;
}
public bool CreateOrder(OrderBindingModel model)
{
CheckModel(model);
if (model.Status != OrderStatus.Неизвестен) return false;
model.Status = OrderStatus.Принят;
if (_orderStorage.Insert(model) == null)
{
_logger.LogWarning("Insert operation failed");
return false;
}
return true;
}
public bool ChangeStatus(OrderBindingModel model, OrderStatus status)
{
CheckModel(model);
var element = _orderStorage.GetElement(new OrderSearchModel { Id = model.Id });
if (element == null)
{
_logger.LogWarning("Read operation failed");
return false;
}
if (element.Status != status - 1)
{
_logger.LogWarning("Status change operation failed");
throw new InvalidOperationException("Текущий статус заказа не может быть переведен в выбранный");
}
model.Status = status;
if (model.Status == OrderStatus.Выдан)
model.DateImplement = DateTime.Now;
_orderStorage.Update(model);
return true;
}
public bool TakeOrderInWork(OrderBindingModel model)
{
return ChangeStatus(model, OrderStatus.Выполняется);
}
public bool FinishOrder(OrderBindingModel model)
{
return ChangeStatus(model, OrderStatus.Готов);
}
public bool DeliveryOrder(OrderBindingModel model)
{
return ChangeStatus(model, OrderStatus.Выдан);
}
private void CheckModel(OrderBindingModel model, bool withParams =
true)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
if (!withParams)
{
return;
}
if (model.Sum <= 0)
{
throw new ArgumentNullException("Цена заказа должна быть больше 0", nameof(model.Sum));
}
if (model.Count <= 0)
{
throw new ArgumentNullException("Количество элементов в заказе должно быть больше 0", nameof(model.Count));
}
_logger.LogInformation("Order. Sum:{ Cost}. Id: { Id}", model.Sum, model.Id);
}
}
}

View File

@@ -1,13 +1,7 @@
using BlacksmithWorkshopDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BlacksmithWorkshopContracts.BindingModels
{
//реализация сущности "Компонент"
public class ComponentBindingModel : IComponentModel
{
public int Id { get; set; }
@@ -15,4 +9,4 @@ namespace BlacksmithWorkshopContracts.BindingModels
public double Cost { get; set; }
}
}
}

View File

@@ -7,15 +7,15 @@ using System.Threading.Tasks;
namespace BlacksmithWorkshopContracts.BindingModels
{
//реализация сущности "Изделие"
public class ManufactureBindingModel : IManufactureModel
{
public int Id { get; set; }
public string ManufactureName { get; set; } = string.Empty;
public double Price { get; set; }
public Dictionary<int, (IComponentModel, int)> ManufactureComponents { get; set; } = new();
public Dictionary<int, (IComponentModel, int)> ManufactureComponents
{
get;
set;
} = new();
}
}

View File

@@ -8,7 +8,6 @@ using System.Threading.Tasks;
namespace BlacksmithWorkshopContracts.BindingModels
{
//реализация сущности "Заказ"
public class OrderBindingModel : IOrderModel
{
public int Id { get; set; }

View File

@@ -9,17 +9,12 @@ using System.Threading.Tasks;
namespace BlacksmithWorkshopContracts.BusinessLogicsContracts
{
//бизнес-логика для компонентов
public interface IComponentLogic
{
List<ComponentViewModel>? ReadList(ComponentSearchModel? model);
ComponentViewModel? ReadElement(ComponentSearchModel model);
bool Create(ComponentBindingModel model);
bool Update(ComponentBindingModel model);
bool Delete(ComponentBindingModel model);
}
}

View File

@@ -9,17 +9,12 @@ using System.Threading.Tasks;
namespace BlacksmithWorkshopContracts.BusinessLogicsContracts
{
//бизнес-логика для продуктов
public interface IManufactureLogic
{
List<ManufactureViewModel>? ReadList(ManufactureSearchModel? model);
ManufactureViewModel? ReadElement(ManufactureSearchModel model);
bool Create(ManufactureBindingModel model);
bool Update(ManufactureBindingModel model);
bool Delete(ManufactureBindingModel model);
}
}

View File

@@ -9,17 +9,12 @@ using System.Threading.Tasks;
namespace BlacksmithWorkshopContracts.BusinessLogicsContracts
{
//бизнес-логика для заказов
public interface IOrderLogic
{
List<OrderViewModel>? ReadList(OrderSearchModel? model);
bool CreateOrder(OrderBindingModel model);
bool TakeOrderInWork(OrderBindingModel model);
bool FinishOrder(OrderBindingModel model);
bool DeliveryOrder(OrderBindingModel model);
}
}

View File

@@ -6,14 +6,9 @@ using System.Threading.Tasks;
namespace BlacksmithWorkshopContracts.SearchModels
{
//модель для поиска сущности "Компонент" (она же заготовка)
public class ComponentSearchModel
{
//для поиска по идентификатору
public int? Id { get; set; }
//для поиска по названию
public string? ComponentName { get; set; }
}
}

View File

@@ -6,13 +6,9 @@ using System.Threading.Tasks;
namespace BlacksmithWorkshopContracts.SearchModels
{
//модель для поиска заготовки "Продукт" (она же изделие)
public class ManufactureSearchModel
{
//для поиска по идентификатору
public int? Id { get; set; }
//для поиска по названию
public string? ManufactureName { get; set; }
}
}

View File

@@ -6,11 +6,8 @@ using System.Threading.Tasks;
namespace BlacksmithWorkshopContracts.SearchModels
{
//для поиска сущности "Заказ"
public class OrderSearchModel
{
//для поиска по идентификатору
public int? Id { get; set; }
}
}

View File

@@ -9,19 +9,13 @@ using System.Threading.Tasks;
namespace BlacksmithWorkshopContracts.StoragesContracts
{
//класс хранилища компонентов (заготовок)
public interface IComponentStorage
{
List<ComponentViewModel> GetFullList();
List<ComponentViewModel> GetFilteredList(ComponentSearchModel model);
ComponentViewModel? GetElement(ComponentSearchModel model);
ComponentViewModel? Insert(ComponentBindingModel model);
ComponentViewModel? Update(ComponentBindingModel model);
ComponentViewModel? Delete(ComponentBindingModel model);
}
}

View File

@@ -9,19 +9,13 @@ using System.Threading.Tasks;
namespace BlacksmithWorkshopContracts.StoragesContracts
{
//класс для хранилища продуктов (изделий)
public interface IManufactureStorage
{
List<ManufactureViewModel> GetFullList();
List<ManufactureViewModel> GetFilteredList(ManufactureSearchModel model);
ManufactureViewModel? GetElement(ManufactureSearchModel model);
ManufactureViewModel? Insert(ManufactureBindingModel model);
ManufactureViewModel? Update(ManufactureBindingModel model);
ManufactureViewModel? Delete(ManufactureBindingModel model);
}
}

View File

@@ -9,19 +9,13 @@ using System.Threading.Tasks;
namespace BlacksmithWorkshopContracts.StoragesContracts
{
//класс для хранилища заказов
public interface IOrderStorage
{
List<OrderViewModel> GetFullList();
List<OrderViewModel> GetFilteredList(OrderSearchModel model);
OrderViewModel? GetElement(OrderSearchModel model);
OrderViewModel? Insert(OrderBindingModel model);
OrderViewModel? Update(OrderBindingModel model);
OrderViewModel? Delete(OrderBindingModel model);
OrderViewModel? Update(OrderBindingModel model);
OrderViewModel? Delete(OrderBindingModel model);
}
}

View File

@@ -1,24 +1,19 @@
using BlacksmithWorkshopDataModels;
using BlacksmithWorkshopDataModels.Models;
using System.ComponentModel;
using BlacksmithWorkshopDataModels.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BlacksmithWorkshopContracts.ViewModels
{
//класс для отображения пользователю данных о заготовких (заготовках)
public class ComponentViewModel : IComponentModel
{
public int Id { get; set; }
[DisplayName("Название заготовки")]
public string WorkPieceName { get; set; } = string.Empty;
[DisplayName("Название компонента")]
public string ComponentName { get; set; } = string.Empty;
[DisplayName("Цена")]
public double Cost { get; set; }
public string ComponentName { get; set; }
}
}

View File

@@ -8,17 +8,17 @@ using System.Threading.Tasks;
namespace BlacksmithWorkshopContracts.ViewModels
{
//класс для отображения пользователю информаци о продуктах (изделиях)
public class ManufactureViewModel : IManufactureModel
{
public int Id { get; set; }
[DisplayName("Навание изделия")]
[DisplayName("Название кузнечного изделия")]
public string ManufactureName { get; set; } = string.Empty;
[DisplayName("Цена")]
public double Price { get; set; }
public Dictionary<int, (IComponentModel, int)> ManufactureComponents { get; set; }
public Dictionary<int, (IComponentModel, int)> ManufactureComponents
{
get;
set;
} = new();
}
}

View File

@@ -9,29 +9,21 @@ using System.Threading.Tasks;
namespace BlacksmithWorkshopContracts.ViewModels
{
//класс для отображения пользователю информации о заказах
public class OrderViewModel : IOrderModel
{
[DisplayName("Номер")]
public int Id { get; set; }
public int ManufactureId { get; set; }
[DisplayName("Изделие")]
[DisplayName("Кузнечное изделие")]
public string ManufactureName { get; set; } = string.Empty;
[DisplayName("Количество")]
public int Count { get; set; }
[DisplayName("Сумма")]
public double Sum { get; set; }
[DisplayName("Статус")]
public OrderStatus Status { get; set; } = OrderStatus.Неизвестен;
[DisplayName("Дата создания")]
public DateTime DateCreate { get; set; } = DateTime.Now;
[DisplayName("Дата выполнения")]
public DateTime? DateImplement { get; set; }
}

View File

@@ -1,12 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BlacksmithWorkshopDataModels.Enums
namespace BlacksmithWorkshopDataModels.Enums
{
//статус заказа
public enum OrderStatus
{
Неизвестен = -1,

View File

@@ -6,9 +6,8 @@ using System.Threading.Tasks;
namespace BlacksmithWorkshopDataModels
{
//интерфейс, отвечающий за id у компонентов, продуктов и чеков
public interface IId
{
int Id { get; }
}
}
}

View File

@@ -6,13 +6,10 @@ using System.Threading.Tasks;
namespace BlacksmithWorkshopDataModels.Models
{
//интерфейс, отвечающий за компоненты
public interface IComponentModel : IId
{
//название составляющей (изделие состоит из составляющих)
string ComponentName { get; }
//цена составляющей
double Cost { get; }
}
}

View File

@@ -6,16 +6,10 @@ using System.Threading.Tasks;
namespace BlacksmithWorkshopDataModels.Models
{
//интерфейс, отвечающий за продукт
public interface IManufactureModel : IId
{
//наименование изделия
string ManufactureName { get; }
//цена изделия
double Price { get; }
//словарь, хранящий пары кол-во + компонент и его цена
Dictionary<int, (IComponentModel, int)> ManufactureComponents { get; }
}
}

View File

@@ -7,25 +7,13 @@ using System.Threading.Tasks;
namespace BlacksmithWorkshopDataModels.Models
{
//интерфейс, отвечающий за заказ
public interface IOrderModel : IId
{
//ID продукта
int ManufactureId { get; }
//кол-во продуктов
int Count { get; }
//суммарная стоимость продуктов
double Sum { get; }
//статус заказа
OrderStatus Status { get; }
//дата создания заказа
DateTime DateCreate { get; }
//дата завершения заказа
DateTime? DateImplement { get; }
}
}

View File

@@ -8,6 +8,7 @@
<ItemGroup>
<ProjectReference Include="..\BlacksmithWorkshopContracts\BlacksmithWorkshopContracts.csproj" />
<ProjectReference Include="..\BlacksmithWorkshopDataModels\BlacksmithWorkshopDataModels.csproj" />
</ItemGroup>
</Project>

View File

@@ -7,34 +7,24 @@ using System.Threading.Tasks;
namespace BlacksmithWorkshopListImplement
{
//класс для списков, в которых будет храниться информация при работе приложения
public class DataListSingleton
{
private static DataListSingleton? _instance;
//список для хранения заготовок
public List<Component> Components { get; set; }
//список для хранения изделий
public List<Manufacture> Manufactures { get; set; }
//список для хранения заказов
public List<Order> Orders { get; set; }
public DataListSingleton()
public List<Manufacture> Manufactures { get; set; }
private DataListSingleton()
{
Components = new List<Component>();
Manufactures = new List<Manufacture>();
Orders = new List<Order>();
Manufactures = new List<Manufacture>();
}
public static DataListSingleton GetInstance()
{
if(_instance == null)
if (_instance == null)
{
_instance = new DataListSingleton();
}
return _instance;
}
}

View File

@@ -11,19 +11,13 @@ using System.Threading.Tasks;
namespace BlacksmithWorkshopListImplement.Implements
{
//класс, реализующий интерфейс хранилища заготовок
public class ComponentStorage : IComponentStorage
{
//поле для работы со списком заготовок
private readonly DataListSingleton _source;
//получение в конструкторе объекта DataListSingleton
public ComponentStorage()
{
_source = DataListSingleton.GetInstance();
}
//получение полного списка заготовок
public List<ComponentViewModel> GetFullList()
{
var result = new List<ComponentViewModel>();
@@ -33,8 +27,6 @@ namespace BlacksmithWorkshopListImplement.Implements
}
return result;
}
//получение отфильтрованного списка заготовок
public List<ComponentViewModel> GetFilteredList(ComponentSearchModel
model)
{
@@ -52,8 +44,6 @@ namespace BlacksmithWorkshopListImplement.Implements
}
return result;
}
//получение элемента из списка заготовок
public ComponentViewModel? GetElement(ComponentSearchModel model)
{
if (string.IsNullOrEmpty(model.ComponentName) && !model.Id.HasValue)
@@ -71,8 +61,6 @@ namespace BlacksmithWorkshopListImplement.Implements
}
return null;
}
//при создании заготовки определяем для него новый id: ищем max id и прибавляем к нему 1
public ComponentViewModel? Insert(ComponentBindingModel model)
{
model.Id = 1;
@@ -91,8 +79,6 @@ namespace BlacksmithWorkshopListImplement.Implements
_source.Components.Add(newComponent);
return newComponent.GetViewModel;
}
//обновление заготовки
public ComponentViewModel? Update(ComponentBindingModel model)
{
foreach (var component in _source.Components)
@@ -105,8 +91,6 @@ namespace BlacksmithWorkshopListImplement.Implements
}
return null;
}
//удаление заготовки
public ComponentViewModel? Delete(ComponentBindingModel model)
{
for (int i = 0; i < _source.Components.Count; ++i)

View File

@@ -11,127 +11,97 @@ using System.Threading.Tasks;
namespace BlacksmithWorkshopListImplement.Implements
{
//класс, реализующий интерфейс хранилища изделий
public class ManufactureStorage : IManufactureStorage
{
//поле для работы со списком изделий
private readonly DataListSingleton _source;
//получение в конструкторе объекта DataListSingleton
public ManufactureStorage()
{
_source = DataListSingleton.GetInstance();
}
//получение полного списка изделий
public List<ManufactureViewModel> GetFullList()
{
var result = new List<ManufactureViewModel>();
foreach(var manufacture in _source.Manufactures)
foreach (var Manufacture in _source.Manufactures)
{
result.Add(manufacture.GetViewModel);
result.Add(Manufacture.GetViewModel);
}
return result;
}
//получение отфильтрованного списка изделий
public List<ManufactureViewModel> GetFilteredList(ManufactureSearchModel model)
public List<ManufactureViewModel> GetFilteredList(ManufactureSearchModel
model)
{
var result = new List<ManufactureViewModel>();
if (string.IsNullOrEmpty(model.ManufactureName))
{
return result;
}
foreach(var manufacture in _source.Manufactures)
foreach (var Manufacture in _source.Manufactures)
{
if(manufacture.ManufactureName.Contains(model.ManufactureName))
if (Manufacture.ManufactureName.Contains(model.ManufactureName))
{
result.Add(manufacture.GetViewModel);
result.Add(Manufacture.GetViewModel);
}
}
return result;
}
//получение элемента из списка изделий
public ManufactureViewModel? GetElement(ManufactureSearchModel model)
{
if(string.IsNullOrEmpty(model.ManufactureName) && !model.Id.HasValue)
if (string.IsNullOrEmpty(model.ManufactureName) && !model.Id.HasValue)
{
return null;
}
foreach(var manufacture in _source.Manufactures)
foreach (var Manufacture in _source.Manufactures)
{
if((!string.IsNullOrEmpty(model.ManufactureName) && manufacture.ManufactureName == model.ManufactureName) ||
(model.Id.HasValue && manufacture.Id == model.Id))
if ((!string.IsNullOrEmpty(model.ManufactureName) &&
Manufacture.ManufactureName == model.ManufactureName) ||
(model.Id.HasValue && Manufacture.Id == model.Id))
{
return manufacture.GetViewModel;
return Manufacture.GetViewModel;
}
}
return null;
}
//при создании изделия определяем для него новый id: ищем max id и прибавлляем к нему 1
public ManufactureViewModel? Insert(ManufactureBindingModel model)
{
model.Id = 1;
foreach(var manufacture in _source.Manufactures)
foreach (var Manufacture in _source.Manufactures)
{
if(model.Id <= manufacture.Id)
if (model.Id <= Manufacture.Id)
{
model.Id = manufacture.Id + 1;
model.Id = Manufacture.Id + 1;
}
}
var newManufacture = Manufacture.Create(model);
if(newManufacture == null)
if (newManufacture == null)
{
return null;
}
_source.Manufactures.Add(newManufacture);
return newManufacture.GetViewModel;
}
//обновление изделия
public ManufactureViewModel? Update(ManufactureBindingModel model)
{
foreach (var manufacture in _source.Manufactures)
foreach (var Manufacture in _source.Manufactures)
{
if (manufacture.Id == model.Id)
if (Manufacture.Id == model.Id)
{
manufacture.Update(model);
return manufacture.GetViewModel;
Manufacture.Update(model);
return Manufacture.GetViewModel;
}
}
return null;
}
//удаление изделия
public ManufactureViewModel? Delete(ManufactureBindingModel model)
{
for(int i = 0; i < _source.Manufactures.Count; ++i)
for (int i = 0; i < _source.Manufactures.Count; ++i)
{
if (_source.Manufactures[i].Id == model.Id)
{
var element = _source.Manufactures[i];
_source.Manufactures.RemoveAt(i);
return element.GetViewModel;
}
}
return null;
}
}

View File

@@ -11,94 +11,57 @@ using System.Threading.Tasks;
namespace BlacksmithWorkshopListImplement.Implements
{
//класс, реализующий интерфейс хранилища заказов
public class OrderStorage : IOrderStorage
{
//поле для работы со списком заказов
private readonly DataListSingleton _source;
//получение в конструкторе объекта DataListSingleton
public OrderStorage()
{
_source = DataListSingleton.GetInstance();
}
//получение полного списка заготовок
public List<OrderViewModel> GetFullList()
{
var result = new List<OrderViewModel>();
foreach (var order in _source.Orders)
{
result.Add(GetViewModel(order));
result.Add(AccessManufactureStorage(order.GetViewModel));
}
return result;
}
//получение отфильтрованного списка заказов
public List<OrderViewModel> GetFilteredList(OrderSearchModel model)
public List<OrderViewModel> GetFilteredList(OrderSearchModel
model)
{
var result = new List<OrderViewModel>();
if (!model.Id.HasValue)
{
return result;
}
foreach (var order in _source.Orders)
{
if (order.Id == model.Id)
{
result.Add(GetViewModel(order));
result.Add(AccessManufactureStorage(order.GetViewModel));
}
}
return result;
}
//получение элемента из списка заказов
public OrderViewModel? GetElement(OrderSearchModel model)
{
if (!model.Id.HasValue)
{
return null;
}
foreach (var order in _source.Orders)
{
if (model.Id.HasValue && order.Id == model.Id)
{
return GetViewModel(order);
return order.GetViewModel;
}
}
return null;
}
//метод для записи названия изделия на форме с заказами
private OrderViewModel GetViewModel(Order order)
{
var viewModel = order.GetViewModel;
foreach (var manufactures in _source.Manufactures)
{
if (manufactures.Id == order.ManufactureId)
{
viewModel.ManufactureName = manufactures.ManufactureName;
break;
}
}
return viewModel;
}
//при создании заказа определяем для него новый id: ищем max id и прибавляем к нему 1
public OrderViewModel? Insert(OrderBindingModel model)
{
model.Id = 1;
foreach (var order in _source.Orders)
{
if (model.Id <= order.Id)
@@ -106,20 +69,14 @@ namespace BlacksmithWorkshopListImplement.Implements
model.Id = order.Id + 1;
}
}
var newOrder = Order.Create(model);
if (newOrder == null)
{
return null;
}
_source.Orders.Add(newOrder);
return GetViewModel(newOrder);
return newOrder.GetViewModel;
}
//обновление заказа
public OrderViewModel? Update(OrderBindingModel model)
{
foreach (var order in _source.Orders)
@@ -127,15 +84,11 @@ namespace BlacksmithWorkshopListImplement.Implements
if (order.Id == model.Id)
{
order.Update(model);
return GetViewModel(order);
return order.GetViewModel;
}
}
return null;
}
//удаление заказа
public OrderViewModel? Delete(OrderBindingModel model)
{
for (int i = 0; i < _source.Orders.Count; ++i)
@@ -144,12 +97,22 @@ namespace BlacksmithWorkshopListImplement.Implements
{
var element = _source.Orders[i];
_source.Orders.RemoveAt(i);
return GetViewModel(element);
return element.GetViewModel;
}
}
return null;
}
public OrderViewModel AccessManufactureStorage(OrderViewModel model)
{
foreach (var Manufacture in _source.Manufactures)
{
if (Manufacture.Id == model.ManufactureId)
{
model.ManufactureName = Manufacture.ManufactureName;
break;
}
}
return model;
}
}
}

View File

@@ -1,32 +1,20 @@
using BlacksmithWorkshopContracts.BindingModels;
using BlacksmithWorkshopContracts.ViewModels;
using BlacksmithWorkshopDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BlacksmithWorkshopListImplement.Models
{
//реализация интерфейса модели заготовки
public class Component : IComponentModel
{
//методы set делаем приватным, чтобы исключить неразрешённые манипуляции
public int Id { get; private set; }
public string ComponentName { get; private set; } = string.Empty;
public double Cost { get; private set; }
//метод для создания объекта от класса-компонента на основе класса-BindingModel
public double Cost { get; set; }
public static Component? Create(ComponentBindingModel? model)
{
if (model == null)
{
return null;
}
return new Component()
{
Id = model.Id,
@@ -34,20 +22,15 @@ namespace BlacksmithWorkshopListImplement.Models
Cost = model.Cost
};
}
//метод изменения существующего объекта
public void Update(ComponentBindingModel? model)
{
if(model == null)
if (model == null)
{
return;
}
ComponentName = model.ComponentName;
Cost = model.Cost;
}
//метод для создания объекта класса ViewModel на основе данных объекта класса-компонента
public ComponentViewModel GetViewModel => new()
{
Id = Id,
@@ -55,4 +38,4 @@ namespace BlacksmithWorkshopListImplement.Models
Cost = Cost
};
}
}
}

View File

@@ -9,26 +9,22 @@ using System.Threading.Tasks;
namespace BlacksmithWorkshopListImplement.Models
{
//класс реализующий интерфейс модели изделия
public class Manufacture : IManufactureModel
{
//методы set делаем приватным, чтобы исключить неразрешённые манипуляции
public int Id { get; private set; }
public string ManufactureName { get; private set; } = string.Empty;
public double Price { get; private set; }
public Dictionary<int, (IComponentModel, int)> ManufactureComponents { get; private set; } = new Dictionary<int, (IComponentModel, int)>();
//метод для создания объекта от класса-компонента на основе класса-BindingModel
public Dictionary<int, (IComponentModel, int)> ManufactureComponents
{
get;
private set;
} = new Dictionary<int, (IComponentModel, int)>();
public static Manufacture? Create(ManufactureBindingModel? model)
{
if (model == null)
{
return null;
}
return new Manufacture()
{
Id = model.Id,
@@ -37,21 +33,16 @@ namespace BlacksmithWorkshopListImplement.Models
ManufactureComponents = model.ManufactureComponents
};
}
//метод изменения существующего объекта
public void Update(ManufactureBindingModel? model)
{
if (model == null)
{
return;
}
ManufactureName = model.ManufactureName;
Price = model.Price;
ManufactureComponents = model.ManufactureComponents;
}
//метод для создания объекта класса ViewModel на основе данных объекта класса-компонента
public ManufactureViewModel GetViewModel => new()
{
Id = Id,

View File

@@ -5,28 +5,19 @@ using BlacksmithWorkshopDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.PortableExecutable;
using System.Text;
using System.Threading.Tasks;
namespace BlacksmithWorkshopListImplement.Models
{
//класс, реализующий интерфейс модели заказа
public class Order : IOrderModel
{
//методы set сделали приватными, чтобы исключить неразрешённые манипуляции
public int Id { get; private set; }
public int ManufactureId { get; private set; }
public int Count { get; private set; }
public double Sum { get; private set; }
public OrderStatus Status { get; private set; }
public DateTime DateCreate { get; private set; } = DateTime.Now;
public DateTime DateCreate { get; private set; }
public DateTime? DateImplement { get; private set; }
public static Order? Create(OrderBindingModel? model)
@@ -35,7 +26,6 @@ namespace BlacksmithWorkshopListImplement.Models
{
return null;
}
return new Order()
{
Id = model.Id,
@@ -44,22 +34,18 @@ namespace BlacksmithWorkshopListImplement.Models
Sum = model.Sum,
Status = model.Status,
DateCreate = model.DateCreate,
DateImplement = model.DateImplement
DateImplement = model.DateImplement,
};
}
//метод изменения существующего объекта
public void Update(OrderBindingModel? model)
{
if(model == null)
if (model == null)
{
return;
}
Status = model.Status;
DateImplement = model.DateImplement;
}
//метод для создания объекта класса ViewModel на основе данных объекта класса-компонента
public OrderViewModel GetViewModel => new()
{
Id = Id,
@@ -68,7 +54,7 @@ namespace BlacksmithWorkshopListImplement.Models
Sum = Sum,
Status = Status,
DateCreate = DateCreate,
DateImplement = DateImplement
DateImplement = DateImplement,
};
}
}

View File

@@ -1,16 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\BlacksmithWorkshopBusinessLogic\BlacksmithWorkshopBusinessLogic.csproj" />
<ProjectReference Include="..\BlacksmithWorkshopListImplement\BlacksmithWorkshopListImplement.csproj" />
</ItemGroup>
</Project>