From 61650ce283758c28fc3a3f207ef38f26b45e1fc5 Mon Sep 17 00:00:00 2001 From: "ns.potapov" Date: Mon, 20 May 2024 11:42:39 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=BC=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=20ShopStorage=20=D0=B2=20FileImplements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Implements/ShopStorage.cs | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/SecuritySystem/SecuritySystemFileImplement/Implements/ShopStorage.cs b/SecuritySystem/SecuritySystemFileImplement/Implements/ShopStorage.cs index 7a12271..34c38a9 100644 --- a/SecuritySystem/SecuritySystemFileImplement/Implements/ShopStorage.cs +++ b/SecuritySystem/SecuritySystemFileImplement/Implements/ShopStorage.cs @@ -75,5 +75,58 @@ namespace SecuritySystemFileImplement.Implements source.SaveShops(); return shop.GetViewModel; } + + public bool SellSecures(ISecureModel secureModel, int securesCount) + { + var car = source.Secures.FirstOrDefault(x => x.Id == secureModel.Id); + + if (car == null) + { + return false; + } + + + var shopSecures = source.Shops.SelectMany(shop => shop.ShopSecures.Where(c => c.Value.Item1.Id == car.Id)); + + int countStore = 0; + + foreach (var it in shopSecures) + countStore += it.Value.Item2; + + if (securesCount > countStore) + return false; + + foreach (var shop in source.Shops) + { + var cars = shop.ShopSecures; + + foreach (var c in cars.Where(x => x.Value.Item1.Id == car.Id)) + { + int min = Math.Min(c.Value.Item2, securesCount); + cars[c.Value.Item1.Id] = (c.Value.Item1, c.Value.Item2 - min); + securesCount -= min; + + if (securesCount <= 0) + break; + } + + shop.Update(new ShopBindingModel + { + Id = shop.Id, + Name = shop.Name, + Address = shop.Address, + MaxSecuresCount = shop.MaxSecuresCount, + OpeningDate = shop.OpeningDate, + ShopSecures = cars + }); + + source.SaveShops(); + + if (securesCount <= 0) + return true; + } + + return true; + } } }