diff --git a/PlumbingRepair/PlumbingRepair.sln b/PlumbingRepair/PlumbingRepair.sln index f1d6baf..e91f191 100644 --- a/PlumbingRepair/PlumbingRepair.sln +++ b/PlumbingRepair/PlumbingRepair.sln @@ -17,9 +17,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PlumbingRepairFileImplement EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PlumbingRepairDatabaseImplement", "PlumbingRepairDatabaseImplement\PlumbingRepairDatabaseImplement.csproj", "{6DDC0CCD-97E0-4CB7-8024-C27DB9AEF97B}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PlumbingRepairClientApp", "..\..\PlumbingRepair 5 усложненная\PlumbingRepairClientApp\PlumbingRepairClientApp.csproj", "{298D21A7-C230-43AF-BD9E-752BE7A25ADC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PlumbingRepairClientApp", "..\..\PlumbingRepair 7 база\PlumbingRepairClientApp\PlumbingRepairClientApp.csproj", "{4F1E898C-449A-4A60-95D8-BC7818019644}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PlumbingRepairRestApi", "..\..\PlumbingRepair 5 усложненная\PlumbingRepairRestApi\PlumbingRepairRestApi.csproj", "{71B443EA-7014-4137-A2BD-25E8414CF6A3}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PlumbingRepairRestApi", "..\..\PlumbingRepair 7 база\PlumbingRepairRestApi\PlumbingRepairRestApi.csproj", "{CEB61A52-7C4D-45CC-A48B-E52B295EE28E}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -55,14 +55,14 @@ Global {6DDC0CCD-97E0-4CB7-8024-C27DB9AEF97B}.Debug|Any CPU.Build.0 = Debug|Any CPU {6DDC0CCD-97E0-4CB7-8024-C27DB9AEF97B}.Release|Any CPU.ActiveCfg = Release|Any CPU {6DDC0CCD-97E0-4CB7-8024-C27DB9AEF97B}.Release|Any CPU.Build.0 = Release|Any CPU - {298D21A7-C230-43AF-BD9E-752BE7A25ADC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {298D21A7-C230-43AF-BD9E-752BE7A25ADC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {298D21A7-C230-43AF-BD9E-752BE7A25ADC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {298D21A7-C230-43AF-BD9E-752BE7A25ADC}.Release|Any CPU.Build.0 = Release|Any CPU - {71B443EA-7014-4137-A2BD-25E8414CF6A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {71B443EA-7014-4137-A2BD-25E8414CF6A3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {71B443EA-7014-4137-A2BD-25E8414CF6A3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {71B443EA-7014-4137-A2BD-25E8414CF6A3}.Release|Any CPU.Build.0 = Release|Any CPU + {4F1E898C-449A-4A60-95D8-BC7818019644}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4F1E898C-449A-4A60-95D8-BC7818019644}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4F1E898C-449A-4A60-95D8-BC7818019644}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4F1E898C-449A-4A60-95D8-BC7818019644}.Release|Any CPU.Build.0 = Release|Any CPU + {CEB61A52-7C4D-45CC-A48B-E52B295EE28E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CEB61A52-7C4D-45CC-A48B-E52B295EE28E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CEB61A52-7C4D-45CC-A48B-E52B295EE28E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CEB61A52-7C4D-45CC-A48B-E52B295EE28E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/PlumbingRepair/PlumbingRepairBusinessLogic/BusinessLogics/OrderLogic.cs b/PlumbingRepair/PlumbingRepairBusinessLogic/BusinessLogics/OrderLogic.cs index 6757fe1..ff17bd4 100644 --- a/PlumbingRepair/PlumbingRepairBusinessLogic/BusinessLogics/OrderLogic.cs +++ b/PlumbingRepair/PlumbingRepairBusinessLogic/BusinessLogics/OrderLogic.cs @@ -17,15 +17,15 @@ namespace PlumbingRepairBusinessLogic.BusinessLogics private readonly IOrderStorage _orderStorage; private readonly AbstractMailWorker _mailWorker; - private readonly IClientLogic _clientLogic; + private readonly IClientStorage _clientStorage; - private readonly object _locker =new(); + private readonly object _locker =new(); - public OrderLogic(ILogger logger, IOrderStorage orderStorage, IClientLogic clientLogic, AbstractMailWorker mailWorker) + public OrderLogic(ILogger logger, IOrderStorage orderStorage, IClientStorage clientStorage, AbstractMailWorker mailWorker) { _logger = logger; _orderStorage = orderStorage; - _clientLogic = clientLogic; + _clientStorage = clientStorage; _mailWorker = mailWorker; } @@ -61,13 +61,11 @@ namespace PlumbingRepairBusinessLogic.BusinessLogics _logger.LogWarning("Insert operation failed"); return false; } - Task.Run(() => _mailWorker.MailSendAsync(new MailSendInfoBindingModel - { - MailAddress = result.ClientEmail, - Subject = $"Изменение статуса заказа номер {result.Id}", - Text = $"Ваш заказ №{result.Id} на покупку цветов {result.WorkName} от {result.DateCreate} на сумму {result.Sum} принят." - })); - return true; + var orderView = _orderStorage.GetElement(new() { Id = result.Id }); + var clientView = _clientStorage.GetElement(new() { Id = orderView!.ClientId }); + + SendEmail(clientView, orderView); + return true; } public bool DeliveryOrder(OrderBindingModel model) @@ -117,28 +115,47 @@ namespace PlumbingRepairBusinessLogic.BusinessLogics model.Status = newStatus; if (model.Status == OrderStatus.Выдан) model.DateImplement = DateTime.Now; - var result = _orderStorage.Update(model); - return true; + _orderStorage.Update(model); + var orderView = _orderStorage.GetElement(new() { Id = model.Id }); + var clientView = _clientStorage.GetElement(new() { Id = orderView!.ClientId }); + + SendEmail(clientView, orderView); + return true; } - private bool SendOrderStatusMail(int clientId, string subject, string text) - { - var client = _clientLogic.ReadElement(new() { Id = clientId }); + public void SendEmail(ClientViewModel clientModel, OrderViewModel orderModel) + { + if (clientModel == null && orderModel == null) + { + return; + } - if (client == null) - { - return false; - } + MailSendInfoBindingModel mailModel; - _mailWorker.MailSendAsync(new MailSendInfoBindingModel - { - MailAddress = client.Email, - Subject = subject, - Text = text - }); - return true; - } - private void CheckModel(OrderBindingModel model, bool withParams = true) + if (orderModel.Status == OrderStatus.Принят) + { + mailModel = new MailSendInfoBindingModel + { + MailAddress = clientModel.Email, + Subject = $"Order №{orderModel.Id}", + Text = $"Your order №{orderModel.Id} by {orderModel.DateCreate} on {orderModel.Sum} was accepted!" + }; + } + else + { + mailModel = new MailSendInfoBindingModel + { + MailAddress = clientModel.Email, + Subject = $"Order №{orderModel.Id}", + Text = $"Order №{orderModel.Id} status was changed to {orderModel.Status}" + }; + } + + + _mailWorker.MailSendAsync(mailModel); + } + + private void CheckModel(OrderBindingModel model, bool withParams = true) { if (model == null) { diff --git a/PlumbingRepair/PlumbingRepairBusinessLogic/MailWorker/AbstractMailWorker.cs b/PlumbingRepair/PlumbingRepairBusinessLogic/MailWorker/AbstractMailWorker.cs index 386c94b..c9c5996 100644 --- a/PlumbingRepair/PlumbingRepairBusinessLogic/MailWorker/AbstractMailWorker.cs +++ b/PlumbingRepair/PlumbingRepairBusinessLogic/MailWorker/AbstractMailWorker.cs @@ -6,17 +6,17 @@ namespace PlumbingRepairBusinessLogic.MailWorker { public abstract class AbstractMailWorker { - protected string _mailLogin = string.Empty; + protected static string _mailLogin = string.Empty; - protected string _mailPassword = string.Empty; + protected static string _mailPassword = string.Empty; - protected string _smtpClientHost = string.Empty; + protected static string _smtpClientHost = string.Empty; - protected int _smtpClientPort; + protected static int _smtpClientPort; - protected string _popHost = string.Empty; + protected static string _popHost = string.Empty; - protected int _popPort; + protected static int _popPort; private readonly IMessageInfoLogic _messageInfoLogic; diff --git a/PlumbingRepair/PlumbingRepairDatabaseImplement/Implements/OrderStorage.cs b/PlumbingRepair/PlumbingRepairDatabaseImplement/Implements/OrderStorage.cs index 77e871e..8f90b98 100644 --- a/PlumbingRepair/PlumbingRepairDatabaseImplement/Implements/OrderStorage.cs +++ b/PlumbingRepair/PlumbingRepairDatabaseImplement/Implements/OrderStorage.cs @@ -12,7 +12,7 @@ namespace PlumbingRepairDatabaseImplement.Implements public OrderViewModel? Delete(OrderBindingModel model) { using var context = new PlumbingRepairDatabase(); - var element = context.Orders.Include(x => x.Work).FirstOrDefault(rec => rec.Id == model.Id); + var element = context.Orders.Include(x => x.Work).Include(x => x.Client).Include(x => x.Implementer).FirstOrDefault(rec => rec.Id == model.Id); if (element != null) { context.Orders.Remove(element); @@ -24,57 +24,47 @@ namespace PlumbingRepairDatabaseImplement.Implements public OrderViewModel? GetElement(OrderSearchModel model) { - if (!model.Id.HasValue) - { - return null; - } - using var context = new PlumbingRepairDatabase(); - if (model.Id.HasValue) - return AttachNames(context.Orders - .Include(x => x.Work) - .FirstOrDefault(x => model.Id.HasValue && x.Id == model.Id) - ?.GetViewModel); - else if (model.ImplementerId.HasValue && model.Status.HasValue) - return AttachNames(context.Orders - .Include(x => x.Implementer) - .FirstOrDefault(x => model.ImplementerId.HasValue && x.ImplementerId == model.ImplementerId) - ?.GetViewModel); - return null; - } + if (!model.Id.HasValue && !model.ImplementerId.HasValue && !model.Status.HasValue) + return null; - public List GetFilteredList(OrderSearchModel model) + using var context = new PlumbingRepairDatabase(); + + return context.Orders + .Include(x => x.Work) + .Include(x => x.Client) + .Include(x => x.Implementer) + .FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id) + || (model.ImplementerId.HasValue && model.Status.HasValue && x.ImplementerId == model.ImplementerId && x.Status == model.Status))? + .GetViewModel; + + } + + public List GetFilteredList(OrderSearchModel model) { using var context = new PlumbingRepairDatabase(); + if (model.DateFrom.HasValue) + { + return context.Orders + .Include(x => x.Work) + .Include(x => x.Client) + .Include(x => x.Implementer) + .Where(x => (x.DateCreate >= model.DateFrom && x.DateCreate <= model.DateTo) + && (!model.ClientId.HasValue || x.ClientId == model.ClientId)) + .Select(x => x.GetViewModel) + .ToList(); + } - if (model.Id.HasValue) - { - return context.Orders - .Where(x => x.Id == model.Id) - .Select(x => AttachNames(x.GetViewModel)).ToList(); - } - if (model.Status.HasValue) - { - return context.Orders - .Where(x => x.ImplementerId == model.ImplementerId && x.Status == model.Status) - .Select(x => AttachNames(x.GetViewModel)).ToList(); - } - if (model.ClientId.HasValue) - { - return context.Orders - .Include(x => x.Client). - Where(x => x.ClientId == model.ClientId) - .Select(x =>AttachNames(x.GetViewModel)).ToList(); - } - if (model.DateFrom != null && model.DateTo != null) - { - return context.Orders. - Include(x => x.Work) - .Where(x => x.Id == model.Id || model.DateFrom <= x.DateCreate && x.DateCreate <= model.DateTo) - .Select(x => AttachNames(x.GetViewModel)).ToList(); - } - return new(); - + return context.Orders + .Include(x => x.Work) + .Include(x => x.Client) + .Include(x => x.Implementer) + .Where(x => (model.Id.HasValue && x.Id == model.Id) + || (model.ClientId.HasValue && x.ClientId == model.ClientId) + || (model.ImplementerId.HasValue && x.ImplementerId == model.ImplementerId) + || (model.Status.HasValue && x.Status == model.Status)) + .Select(x => x.GetViewModel) + .ToList(); } public List GetFullList() @@ -83,6 +73,7 @@ namespace PlumbingRepairDatabaseImplement.Implements return context.Orders .Include(x => x.Work) .Include(x => x.Implementer) + .Include(x => x.Client) .Select(x =>AttachNames(x.GetViewModel)) .ToList(); } @@ -104,7 +95,7 @@ namespace PlumbingRepairDatabaseImplement.Implements public OrderViewModel? Update(OrderBindingModel model) { using var context = new PlumbingRepairDatabase(); - var order = context.Orders.Include(x => x.Work).FirstOrDefault(x => x.Id == model.Id); + var order = context.Orders.Include(x => x.Work).Include(x => x.Implementer).Include(x => x.Client).FirstOrDefault(x => x.Id == model.Id); if (order == null) { return null; @@ -133,6 +124,7 @@ namespace PlumbingRepairDatabaseImplement.Implements if (client.Id == model.ClientId) { model.ClientFIO = client.ClientFIO; + model.ClientEmail = client.Email; return model; } } diff --git a/PlumbingRepair/PlumbingRepairDatabaseImplement/Migrations/20240502155936_InitCreate.Designer.cs b/PlumbingRepair/PlumbingRepairDatabaseImplement/Migrations/20240503080749_InitCreate.Designer.cs similarity index 99% rename from PlumbingRepair/PlumbingRepairDatabaseImplement/Migrations/20240502155936_InitCreate.Designer.cs rename to PlumbingRepair/PlumbingRepairDatabaseImplement/Migrations/20240503080749_InitCreate.Designer.cs index f48fb27..0442d10 100644 --- a/PlumbingRepair/PlumbingRepairDatabaseImplement/Migrations/20240502155936_InitCreate.Designer.cs +++ b/PlumbingRepair/PlumbingRepairDatabaseImplement/Migrations/20240503080749_InitCreate.Designer.cs @@ -12,7 +12,7 @@ using PlumbingRepairDatabaseImplement; namespace PlumbingRepairDatabaseImplement.Migrations { [DbContext(typeof(PlumbingRepairDatabase))] - [Migration("20240502155936_InitCreate")] + [Migration("20240503080749_InitCreate")] partial class InitCreate { protected override void BuildTargetModel(ModelBuilder modelBuilder) diff --git a/PlumbingRepair/PlumbingRepairDatabaseImplement/Migrations/20240502155936_InitCreate.cs b/PlumbingRepair/PlumbingRepairDatabaseImplement/Migrations/20240503080749_InitCreate.cs similarity index 100% rename from PlumbingRepair/PlumbingRepairDatabaseImplement/Migrations/20240502155936_InitCreate.cs rename to PlumbingRepair/PlumbingRepairDatabaseImplement/Migrations/20240503080749_InitCreate.cs diff --git a/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Order.cs b/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Order.cs index b3396dd..7b9e643 100644 --- a/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Order.cs +++ b/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Order.cs @@ -14,6 +14,7 @@ namespace PlumbingRepairDatabaseImplement.Models public int ClientId { get; set; } public int? ImplementerId { get; set; } + [Required] public int Count { get; set; } [Required] @@ -68,7 +69,8 @@ namespace PlumbingRepairDatabaseImplement.Models ImplementerId= ImplementerId, ImplementerFIO = Implementer == null ? null : Implementer.ImplementerFIO, Count = Count, - Sum = Sum, + ClientEmail = Client.Email, + Sum = Sum, DateCreate = DateCreate, DateImplement = DateImplement, Id = Id,