From e13229f35d5f9fc1c22554ed2ac493d0c5c101e4 Mon Sep 17 00:00:00 2001
From: Danila_Mochalov <volzhankaonelove@yandex.ru>
Date: Fri, 21 Apr 2023 11:30:22 +0400
Subject: [PATCH] =?UTF-8?q?=D1=81=D0=B4=D0=B0=D0=BD=D0=B0=20=D0=BB=D0=B0?=
 =?UTF-8?q?=D0=B16=D1=85=D0=B0=D1=80=D0=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../BusinessLogics/OrderLogic.cs              |  2 +-
 .../BusinessLogics/WorkModeling.cs            | 28 +++++++++++-------
 .../Implements/OrderStorage.cs                | 29 ++++++++++++-------
 .../Migrations/20230407205507_Implementer.cs  |  4 ++-
 4 files changed, 39 insertions(+), 24 deletions(-)

diff --git a/LawFirm/LawFirmBusinessLogic/BusinessLogics/OrderLogic.cs b/LawFirm/LawFirmBusinessLogic/BusinessLogics/OrderLogic.cs
index ad014dc..5c2d2a1 100644
--- a/LawFirm/LawFirmBusinessLogic/BusinessLogics/OrderLogic.cs
+++ b/LawFirm/LawFirmBusinessLogic/BusinessLogics/OrderLogic.cs
@@ -85,7 +85,7 @@ namespace LawFirmBusinessLogic.BusinessLogics
                 return false;
             }
 
-            if (newStatus == OrderStatus.Готов || newStatus == OrderStatus.Ожидание)
+            if (newStatus == OrderStatus.Готов)
             {
                 var document = _documentStorage.GetElement(new DocumentSearchModel() { Id = model.DocumentId});
                 if (document == null)
diff --git a/LawFirm/LawFirmBusinessLogic/BusinessLogics/WorkModeling.cs b/LawFirm/LawFirmBusinessLogic/BusinessLogics/WorkModeling.cs
index 0ac57c6..e2b3525 100644
--- a/LawFirm/LawFirmBusinessLogic/BusinessLogics/WorkModeling.cs
+++ b/LawFirm/LawFirmBusinessLogic/BusinessLogics/WorkModeling.cs
@@ -62,7 +62,7 @@ namespace LawFirmBusinessLogic.BusinessLogics
 
             await RunWaitingOrder(implementer);
 
-            await RunOrderInWork(implementer, orders);
+            await RunOrderInWork(implementer);
 
 			await Task.Run(() =>
 			{
@@ -106,17 +106,21 @@ namespace LawFirmBusinessLogic.BusinessLogics
 			});
         }
 
-        private async Task RunOrderInWork(ImplementerViewModel implementer, List<OrderViewModel> allOrders)
+        private async Task RunOrderInWork(ImplementerViewModel implementer)
         {
-            if (_orderLogic == null || implementer == null || allOrders == null || allOrders.Count == 0)
+            if (_orderLogic == null || implementer == null)
             {
                 return;
             }
             try
             {
-                // Выбираем из всех заказов тот, который выполняется данным исполнителем
-                var runOrder = await Task.Run(() => allOrders.FirstOrDefault(x => x.ImplementerId == implementer.Id && x.Status == OrderStatus.Выполняется));
-                if (runOrder == null)
+				// Выбираем из всех заказов тот, который выполняется данным исполнителем
+				var runOrder = await Task.Run(() => _orderLogic.ReadElement(new OrderSearchModel
+				{
+					ImplementerId = implementer.Id,
+					Status = OrderStatus.Выполняется
+				}));
+				if (runOrder == null)
                 {
                     return;
                 }
@@ -125,10 +129,11 @@ namespace LawFirmBusinessLogic.BusinessLogics
                 // доделываем работу
                 Thread.Sleep(implementer.WorkExperience * _rnd.Next(100, 300) * runOrder.Count);
                 _logger.LogDebug("DoWork. Worker {Id} finish order {Order}", implementer.Id, runOrder.Id);
-                _orderLogic.FinishOrder(new OrderBindingModel
+                _orderLogic.DeliveryOrder(new OrderBindingModel
                 {
-                    Id = runOrder.Id
-                });
+                    Id = runOrder.Id,
+					ImplementerId = implementer.Id
+				});
                 // отдыхаем
                 Thread.Sleep(implementer.Qualification * _rnd.Next(10, 100));
             }
@@ -163,9 +168,10 @@ namespace LawFirmBusinessLogic.BusinessLogics
 					return;
 				}
 				_logger.LogDebug("DoWork. Worker {Id} finish order {Order}", implementer.Id, order.Id);
-				_orderLogic.FinishOrder(new OrderBindingModel
+				_orderLogic.DeliveryOrder(new OrderBindingModel
 				{
-					Id = order.Id
+					Id = order.Id,
+					ImplementerId = implementer.Id
 				});
 				Thread.Sleep(implementer.Qualification * _rnd.Next(10, 100));
 			}
diff --git a/LawFirm/LawFirmDatabaseImplement/Implements/OrderStorage.cs b/LawFirm/LawFirmDatabaseImplement/Implements/OrderStorage.cs
index 6a6127d..317c900 100644
--- a/LawFirm/LawFirmDatabaseImplement/Implements/OrderStorage.cs
+++ b/LawFirm/LawFirmDatabaseImplement/Implements/OrderStorage.cs
@@ -16,11 +16,18 @@ namespace LawFirmDatabaseImplement.Implements
     {
         public OrderViewModel? GetElement(OrderSearchModel model)
         {
-            if (!model.Id.HasValue)
-            {
-                return null;
-            }
             using var context = new LawFirmDatabase();
+
+            if (model.ImplementerId != null && model.Status != null)
+            {
+                return context.Orders
+                    .Include(x => x.Document)
+                    .Include(x => x.Client)
+                    .Include(x => x.Implementer)
+                    .FirstOrDefault(x => x.Status.Equals(model.Status) && x.ImplementerId.Equals(model.ImplementerId))?.GetViewModel;
+
+			}
+
             return context.Orders
                     .Include(x => x.Document)
                     .Include(x => x.Client)
@@ -48,16 +55,16 @@ namespace LawFirmDatabaseImplement.Implements
                     .Select(x => x.GetViewModel)
                     .ToList();
             }
-            if (model.Status!= null)
+            if (model.Status != null)
             {
-                return context.Orders
+				return context.Orders
 					.Include(x => x.Document)
 					.Include(x => x.Client)
-                    .Include(x => x.Implementer)
-                    .Where(x => model.Status.Equals(x.Status))
-                    .Select(x => x.GetViewModel)
-                    .ToList();
-            }
+					.Include(x => x.Implementer)
+					.Where(x => model.Status.Equals(x.Status))
+					.Select(x => x.GetViewModel)
+					.ToList();
+			}
             return context.Orders
                 .Include(x => x.Document)
 				.Include(x => x.Client)
diff --git a/LawFirm/LawFirmDatabaseImplement/Migrations/20230407205507_Implementer.cs b/LawFirm/LawFirmDatabaseImplement/Migrations/20230407205507_Implementer.cs
index c63db5d..0ddb3a3 100644
--- a/LawFirm/LawFirmDatabaseImplement/Migrations/20230407205507_Implementer.cs
+++ b/LawFirm/LawFirmDatabaseImplement/Migrations/20230407205507_Implementer.cs
@@ -1,4 +1,6 @@
 using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Migrations.Operations;
+
 
 #nullable disable
 
@@ -10,7 +12,7 @@ namespace LawFirmDatabaseImplement.Migrations
         /// <inheritdoc />
         protected override void Up(MigrationBuilder migrationBuilder)
         {
-            migrationBuilder.AddColumn<int>(
+			migrationBuilder.AddColumn<int>(
                 name: "ImplementerId",
                 table: "Orders",
                 type: "int",