diff --git a/AircraftPlant/AircraftPlantDataModels/IOrderModel.cs b/AircraftPlant/AircraftPlantDataModels/IOrderModel.cs
index 5e60ef2..dc17f38 100644
--- a/AircraftPlant/AircraftPlantDataModels/IOrderModel.cs
+++ b/AircraftPlant/AircraftPlantDataModels/IOrderModel.cs
@@ -17,6 +17,11 @@ namespace AircraftPlantDataModels.Models
///
int PlaneId { get; }
+ ///
+ /// Идентификатор клиента
+ ///
+ int ClientId { get; }
+
///
/// Количество изделий
///
diff --git a/AircraftPlant/AircraftPlantFileImplement/Client.cs b/AircraftPlant/AircraftPlantFileImplement/Client.cs
new file mode 100644
index 0000000..9390971
--- /dev/null
+++ b/AircraftPlant/AircraftPlantFileImplement/Client.cs
@@ -0,0 +1,77 @@
+using AircraftPlantContracts.BindingModels;
+using AircraftPlantContracts.ViewModels;
+using AircraftPlantDataModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace AircraftPlantFileImplement
+{
+ public class Client : IClientModel
+ {
+ public int Id { get; set; }
+ public string ClientFIO { get; set; } = string.Empty;
+ public string Email { get; set; } = string.Empty;
+ public string Password { get; set; } = string.Empty;
+ public static Client? Create(ClientBindingModel? model)
+ {
+ if (model == null)
+ {
+ return null;
+ }
+
+ return new Client()
+ {
+ Id = model.Id,
+ ClientFIO = model.ClientFIO,
+ Email = model.Email,
+ Password = model.Password
+ };
+ }
+
+ public static Client? Create(XElement element)
+ {
+ if (element == null)
+ {
+ return null;
+ }
+
+ return new Client()
+ {
+ Id = Convert.ToInt32(element.Attribute("Id")!.Value),
+ ClientFIO = element.Attribute("ClientFIO")!.Value,
+ Email = element.Attribute("Email")!.Value,
+ Password = element.Attribute("Password")!.Value
+ };
+ }
+
+ public void Update(ClientBindingModel? model)
+ {
+ if (model == null)
+ {
+ return;
+ }
+
+ ClientFIO = model.ClientFIO;
+ Password = model.Password;
+ Email = model.Email;
+ }
+
+ public ClientViewModel GetViewModel => new()
+ {
+ Id = Id,
+ ClientFIO = ClientFIO,
+ Password = Password,
+ Email = Email
+ };
+
+ public XElement GetXElement => new("Client",
+ new XAttribute("Id", Id),
+ new XElement("ClientFIO", ClientFIO),
+ new XElement("Email", Email),
+ new XElement("Password", Password));
+ }
+}
\ No newline at end of file
diff --git a/AircraftPlant/AircraftPlantFileImplement/ClientStorage.cs b/AircraftPlant/AircraftPlantFileImplement/ClientStorage.cs
new file mode 100644
index 0000000..66b8717
--- /dev/null
+++ b/AircraftPlant/AircraftPlantFileImplement/ClientStorage.cs
@@ -0,0 +1,97 @@
+using AircraftPlantContracts.BindingModels;
+using AircraftPlantContracts.SearchModels;
+using AircraftPlantContracts.StoragesContracts;
+using AircraftPlantContracts.ViewModels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace AircraftPlantFileImplement
+{
+ public class ClientStorage : IClientStorage
+ {
+ private readonly DataFileSingleton _source;
+
+ public ClientStorage()
+ {
+ _source = DataFileSingleton.GetInstance();
+ }
+
+ public List GetFullList()
+ {
+ return _source.Clients
+ .Select(x => x.GetViewModel)
+ .ToList();
+ }
+
+ public List GetFilteredList(ClientSearchModel model)
+ {
+ if (string.IsNullOrEmpty(model.Email))
+ {
+ return new();
+ }
+
+ return _source.Clients
+ .Where(x => x.Email.Contains(model.Email))
+ .Select(x => x.GetViewModel)
+ .ToList();
+ }
+
+ public ClientViewModel? GetElement(ClientSearchModel model)
+ {
+ if (string.IsNullOrEmpty(model.Email) && !model.Id.HasValue)
+ {
+ return null;
+ }
+
+ return _source.Clients
+ .FirstOrDefault(x =>
+ (!string.IsNullOrEmpty(model.Email) &&
+ x.Email == model.Email) ||
+ (model.Id.HasValue && x.Id == model.Id))
+ ?.GetViewModel;
+ }
+
+ public ClientViewModel? Insert(ClientBindingModel model)
+ {
+ model.Id = _source.Clients.Count > 0 ? _source.Clients.Max(x => x.Id) + 1 : 1;
+
+ var newClient = Client.Create(model);
+ if (newClient == null)
+ {
+ return null;
+ }
+
+ _source.Clients.Add(newClient);
+ _source.SaveClients();
+ return newClient.GetViewModel;
+ }
+
+ public ClientViewModel? Update(ClientBindingModel model)
+ {
+ var client = _source.Clients.FirstOrDefault(x => x.Id == model.Id);
+ if (client == null)
+ {
+ return null;
+ }
+
+ client.Update(model);
+ _source.SaveClients();
+ return client.GetViewModel;
+ }
+
+ public ClientViewModel? Delete(ClientBindingModel model)
+ {
+ var element = _source.Clients.FirstOrDefault(x => x.Id == model.Id);
+ if (element != null)
+ {
+ _source.Clients.Remove(element);
+ _source.SaveClients();
+ return element.GetViewModel;
+ }
+ return null;
+ }
+ }
+}
diff --git a/AircraftPlant/AircraftPlantFileImplement/DataFileSingleton.cs b/AircraftPlant/AircraftPlantFileImplement/DataFileSingleton.cs
index 4d2ea23..fac96aa 100644
--- a/AircraftPlant/AircraftPlantFileImplement/DataFileSingleton.cs
+++ b/AircraftPlant/AircraftPlantFileImplement/DataFileSingleton.cs
@@ -14,9 +14,11 @@ namespace AircraftPlantFileImplement
private readonly string ComponentFileName = "Component.xml";
private readonly string OrderFileName = "Order.xml";
private readonly string PlaneFileName = "Plane.xml";
+ private readonly string ClientFileName = "Client.xml";
public List Components { get; private set; }
public List Orders { get; private set; }
public List Planes { get; private set; }
+ public List Clients { get; set; }
public static DataFileSingleton GetInstance()
{
if (instance == null)
@@ -28,11 +30,13 @@ namespace AircraftPlantFileImplement
public void SaveComponents() => SaveData(Components, ComponentFileName, "Components", x => x.GetXElement);
public void SavePlanes() => SaveData(Planes, PlaneFileName, "Planes", x => x.GetXElement);
public void SaveOrders() => SaveData(Orders, OrderFileName, "Orders", x => x.GetXElement);
+ public void SaveClients() => SaveData(Clients, ClientFileName, "Clients", x => x.GetXElement);
private DataFileSingleton()
{
Components = LoadData(ComponentFileName, "Component", x => Component.Create(x)!)!;
Planes = LoadData(PlaneFileName, "Plane", x => Plane.Create(x)!)!;
Orders = LoadData(OrderFileName, "Order", x => Order.Create(x)!)!;
+ Clients = LoadData(ClientFileName, "Client", x => Client.Create(x)!)!;
}
private static List? LoadData(string filename, string xmlNodeName, Func selectFunction)
{
diff --git a/AircraftPlant/AircraftPlantFileImplement/OrderStorage.cs b/AircraftPlant/AircraftPlantFileImplement/OrderStorage.cs
index ca152f7..959eb3a 100644
--- a/AircraftPlant/AircraftPlantFileImplement/OrderStorage.cs
+++ b/AircraftPlant/AircraftPlantFileImplement/OrderStorage.cs
@@ -24,7 +24,7 @@ namespace AircraftPlantFileImplement.Implements
}
public List GetFilteredList(OrderSearchModel model)
{
- if (!model.Id.HasValue)
+ if (!model.Id.HasValue || !model.DateFrom.HasValue || !model.DateTo.HasValue || !model.ClientId.HasValue)
{
return new();
}