diff --git a/GarmentFactoryFileImplement/Implements/ShopStorage.cs b/GarmentFactoryFileImplement/Implements/ShopStorage.cs index 6d3c1a3..fed4ced 100644 --- a/GarmentFactoryFileImplement/Implements/ShopStorage.cs +++ b/GarmentFactoryFileImplement/Implements/ShopStorage.cs @@ -89,34 +89,43 @@ namespace GarmentFactoryFileImplement.Implements { return false; } - - int remainingSpace = source.Shops.Select(x => x.Textiles.ContainsKey(model.TextileId.Value) ? x.Textiles[model.TextileId.Value] : 0).Sum(); - if (remainingSpace < model.Count) + //магазины по степени наполненности (от самого наполненного) с этим текстилем + var shopsWithThisTextile = source.Shops.Where(x => x.Textiles.ContainsKey(model.TextileId.Value)).OrderByDescending(x => x.Textiles[model.TextileId.Value]).ToList(); + + int thisTextileInShops = shopsWithThisTextile.Select(x => x.Textiles[model.TextileId.Value]).Sum(); + + if (thisTextileInShops < model.Count) { return false; } - var shops = source.Shops.Where(x => x.Textiles.ContainsKey(model.TextileId.Value)).OrderByDescending(x => x.Textiles[model.TextileId.Value]).ToList(); - - foreach (var shop in shops) + foreach (var shop in shopsWithThisTextile) { - int residue = model.Count.Value - shop.Textiles[model.TextileId.Value]; - if (residue > 0) + //кол-во необходимых текстилей после возможной продажи всех текстилей + int thisTextileNeed = model.Count.Value - shop.Textiles[model.TextileId.Value]; + + //Если текстиль ещё нужен будет + if (thisTextileNeed > 0) { + //удаление всех текстилей в этом магазине shop.Textiles.Remove(model.TextileId.Value); shop.TextilesUpdate(); - model.Count = residue; + model.Count = thisTextileNeed; } + else { - if (residue == 0) + //Если ровно хватает + if (thisTextileNeed == 0) { shop.Textiles.Remove(model.TextileId.Value); } + //Если нужно меньше, чем есть в магазине else { - shop.Textiles[model.TextileId.Value] = -residue; + //уменьшение кол-ва + shop.Textiles[model.TextileId.Value] = -thisTextileNeed; } shop.TextilesUpdate(); source.SaveShops();