From b6eca8cccd2c0943754bbd0f3ad89d104c0cc54e Mon Sep 17 00:00:00 2001 From: Oleg Shabunov Date: Thu, 11 Apr 2024 01:07:25 +0400 Subject: [PATCH] List implement --- AutoWorkshopImplement/DataListSingleton.cs | 5 +- .../Implements/ClientStorage.cs | 111 ++++++++++++++++++ .../Implements/OrderStorage.cs | 15 ++- AutoWorkshopImplement/Models/Client.cs | 49 ++++++++ AutoWorkshopImplement/Models/Order.cs | 6 +- 5 files changed, 182 insertions(+), 4 deletions(-) create mode 100644 AutoWorkshopImplement/Implements/ClientStorage.cs create mode 100644 AutoWorkshopImplement/Models/Client.cs diff --git a/AutoWorkshopImplement/DataListSingleton.cs b/AutoWorkshopImplement/DataListSingleton.cs index 2bec800..211e51a 100644 --- a/AutoWorkshopImplement/DataListSingleton.cs +++ b/AutoWorkshopImplement/DataListSingleton.cs @@ -11,12 +11,15 @@ namespace AutoWorkshopListImplement public List Orders { get; set; } public List Repairs { get; set; } - + + public List Clients { get; set; } + private DataListSingleton() { Components = new List(); Orders = new List(); Repairs = new List(); + Clients = new List(); } public static DataListSingleton GetInstance() diff --git a/AutoWorkshopImplement/Implements/ClientStorage.cs b/AutoWorkshopImplement/Implements/ClientStorage.cs new file mode 100644 index 0000000..a361486 --- /dev/null +++ b/AutoWorkshopImplement/Implements/ClientStorage.cs @@ -0,0 +1,111 @@ +using AutoWorkshopContracts.BindingModels; +using AutoWorkshopContracts.SearchModels; +using AutoWorkshopContracts.StoragesContracts; +using AutoWorkshopContracts.ViewModels; +using AutoWorkshopListImplement.Models; + +namespace AutoWorkshopListImplement.Implements +{ + public class ClientStorage : IClientStorage + { + private readonly DataListSingleton _source; + + public ClientStorage() + { + _source = DataListSingleton.GetInstance(); + } + + public List GetFullList() + { + var Result = new List(); + + foreach (var Client in _source.Clients) + { + Result.Add(Client.GetViewModel); + } + + return Result; + } + + public List GetFilteredList(ClientSearchModel Model) + { + var Result = new List(); + + if (string.IsNullOrEmpty(Model.ClientFIO) && string.IsNullOrEmpty(Model.Email) && string.IsNullOrEmpty(Model.Password)) + return Result; + + foreach (var Client in _source.Clients) + { + if (Client.ClientFIO.Contains(Model.ClientFIO)) + { + Result.Add(Client.GetViewModel); + } + } + + return Result; + } + + public ClientViewModel? GetElement(ClientSearchModel Model) + { + foreach (var Client in _source.Clients) + { + if ((string.IsNullOrEmpty(Model.ClientFIO) || Client.ClientFIO == Model.ClientFIO) && + (!Model.Id.HasValue || Client.Id == Model.Id) && (string.IsNullOrEmpty(Model.Email) || Client.Email == Model.Email) && + (string.IsNullOrEmpty(Model.Password) || Client.Password == Model.Password)) + { + return Client.GetViewModel; + } + } + + return null; + } + + public ClientViewModel? Insert(ClientBindingModel Model) + { + Model.Id = 1; + foreach (var Client in _source.Clients) + { + if (Model.Id <= Client.Id) + { + Model.Id = Client.Id + 1; + } + } + + var NewClient = Client.Create(Model); + if (NewClient == null) + return null; + + _source.Clients.Add(NewClient); + return NewClient.GetViewModel; + } + + public ClientViewModel? Update(ClientBindingModel Model) + { + foreach (var Client in _source.Clients) + { + if (Client.Id == Model.Id) + { + Client.Update(Model); + return Client.GetViewModel; + } + } + + return null; + } + public ClientViewModel? Delete(ClientBindingModel Model) + { + for (int i = 0; i < _source.Clients.Count; ++i) + { + if (_source.Clients[i].Id == Model.Id) + { + var Element = _source.Clients[i]; + _source.Clients.RemoveAt(i); + + return Element.GetViewModel; + } + } + + return null; + } + } +} diff --git a/AutoWorkshopImplement/Implements/OrderStorage.cs b/AutoWorkshopImplement/Implements/OrderStorage.cs index 264e029..3a68c63 100644 --- a/AutoWorkshopImplement/Implements/OrderStorage.cs +++ b/AutoWorkshopImplement/Implements/OrderStorage.cs @@ -3,7 +3,6 @@ using AutoWorkshopContracts.SearchModels; using AutoWorkshopContracts.StoragesContracts; using AutoWorkshopContracts.ViewModels; using AutoWorkshopListImplement.Models; -using System.Reflection; namespace AutoWorkshopListImplement.Implements { @@ -37,7 +36,8 @@ namespace AutoWorkshopListImplement.Implements foreach (var Order in _source.Orders) { - if (Order.DateCreate >= Model.DateFrom && Order.DateCreate <= Model.DateTo) + if ((Order.DateCreate >= Model.DateFrom && Order.DateCreate <= Model.DateTo) && + (!Model.ClientId.HasValue || Model.ClientId == Model.ClientId)) { Result.Add(JoinRepairName(Order.GetViewModel)); break; @@ -123,5 +123,16 @@ namespace AutoWorkshopListImplement.Implements } return Model; } + + public OrderViewModel JoinClientFIO(OrderViewModel Model) + { + var SelectedClient = _source.Clients.FirstOrDefault(x => x.Id == Model.ClientId); + + if (SelectedClient != null) + { + Model.ClientFIO = SelectedClient.ClientFIO; + } + return Model; + } } } diff --git a/AutoWorkshopImplement/Models/Client.cs b/AutoWorkshopImplement/Models/Client.cs new file mode 100644 index 0000000..0f8907b --- /dev/null +++ b/AutoWorkshopImplement/Models/Client.cs @@ -0,0 +1,49 @@ +using AutoWorkshopContracts.BindingModels; +using AutoWorkshopContracts.ViewModels; +using AutoWorkshopDataModels.Models; + +namespace AutoWorkshopListImplement.Models +{ + public class Client : IClientModel + { + public int Id { get; private set; } + + public string ClientFIO { get; private 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 void Update(ClientBindingModel Model) + { + if (Model == null) + return; + + ClientFIO = Model.ClientFIO; + Email = Model.Email; + Password = Model.Password; + } + + public ClientViewModel GetViewModel => new() + { + Id = Id, + ClientFIO = ClientFIO, + Email = Email, + Password = Password + }; + } +} diff --git a/AutoWorkshopImplement/Models/Order.cs b/AutoWorkshopImplement/Models/Order.cs index aa58b80..45ff7ff 100644 --- a/AutoWorkshopImplement/Models/Order.cs +++ b/AutoWorkshopImplement/Models/Order.cs @@ -10,7 +10,9 @@ namespace AutoWorkshopListImplement.Models public int Id { get; private set; } public int RepairId { get; private set; } - + + public int ClientId { get; private set; } + public int Count { get; private set; } public double Sum { get; private set; } @@ -30,6 +32,7 @@ namespace AutoWorkshopListImplement.Models { Id = Model.Id, RepairId = Model.RepairId, + ClientId = Model.ClientId, Count = Model.Count, Sum = Model.Sum, Status = Model.Status, @@ -55,6 +58,7 @@ namespace AutoWorkshopListImplement.Models { Id = Id, RepairId = RepairId, + ClientId = ClientId, Count = Count, Sum = Sum, Status = Status,