From d51c8ddcabfbff7c42b9d6aff4e2310f5c5e46bd Mon Sep 17 00:00:00 2001 From: "ns.potapov" Date: Mon, 20 May 2024 09:57:39 +0400 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D0=B5=20=D1=81=20=D0=B7=D0=B0=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D0=BD=D0=B5=D0=BD=D0=BD=D0=BE=D1=81=D1=82=D0=B1=D1=8E=20?= =?UTF-8?q?=D0=BC=D0=B0=D0=B3=D0=B0=D0=B7=D0=B8=D0=BD=D0=BE=D0=B2,=20?= =?UTF-8?q?=D0=B1=D0=B0=D0=B3=20=D1=82=D0=B0=D0=BA=20=D0=B8=20=D0=BD=D0=B5?= =?UTF-8?q?=20=D1=80=D0=B5=D1=88=D0=B8=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessLogics/ShopLogic.cs | 2 +- .../ViewModels/ShopViewModel.cs | 2 ++ .../Implements/ShopStorage.cs | 7 ++-- .../Models/Shop.cs | 33 +++++++++++++++---- .../SecuritySystemView/FormMain.Designer.cs | 22 ++++++------- 5 files changed, 44 insertions(+), 22 deletions(-) diff --git a/SecuritySystem/SecuritySystemBusinessLogic/BusinessLogics/ShopLogic.cs b/SecuritySystem/SecuritySystemBusinessLogic/BusinessLogics/ShopLogic.cs index de7e5f2..178f78f 100644 --- a/SecuritySystem/SecuritySystemBusinessLogic/BusinessLogics/ShopLogic.cs +++ b/SecuritySystem/SecuritySystemBusinessLogic/BusinessLogics/ShopLogic.cs @@ -192,7 +192,7 @@ namespace SecuritySystemBusinessLogic.BusinessLogics foreach (var shop in shops) { int shopFreeSpace = GetFreeSpace(shop.Id); - if (shopFreeSpace > 0) + if (shopFreeSpace > 0 && count > 0) { int min = Math.Min(count, shopFreeSpace); count -= min; diff --git a/SecuritySystem/SecuritySystemContracts/ViewModels/ShopViewModel.cs b/SecuritySystem/SecuritySystemContracts/ViewModels/ShopViewModel.cs index 1fb3d93..948392a 100644 --- a/SecuritySystem/SecuritySystemContracts/ViewModels/ShopViewModel.cs +++ b/SecuritySystem/SecuritySystemContracts/ViewModels/ShopViewModel.cs @@ -12,6 +12,8 @@ namespace SecuritySystemContracts.ViewModels public string Address { get; set; } = string.Empty; [DisplayName("Вместимость")] public int MaxSecuresCount { get; set; } + [DisplayName("Заполненность")] + public int UsedSpace { get; set; } [DisplayName("Дата открытия")] public DateTime OpeningDate { get; set; } public Dictionary ShopSecures { get; set; } = new(); diff --git a/SecuritySystem/SecuritySystemDatabaseImplement/Implements/ShopStorage.cs b/SecuritySystem/SecuritySystemDatabaseImplement/Implements/ShopStorage.cs index 865b9bd..82b3088 100644 --- a/SecuritySystem/SecuritySystemDatabaseImplement/Implements/ShopStorage.cs +++ b/SecuritySystem/SecuritySystemDatabaseImplement/Implements/ShopStorage.cs @@ -113,10 +113,9 @@ namespace SecuritySystemDatabaseImplement.Implements } shop.Update(model); context.SaveChanges(); - if (model.ShopSecures.Count > 0) - { - shop.UpdateSecures(context, model); - } + + shop.UpdateSecures(context, model); + transaction.Commit(); return shop.GetViewModel; } diff --git a/SecuritySystem/SecuritySystemDatabaseImplement/Models/Shop.cs b/SecuritySystem/SecuritySystemDatabaseImplement/Models/Shop.cs index 3f736aa..728ac2b 100644 --- a/SecuritySystem/SecuritySystemDatabaseImplement/Models/Shop.cs +++ b/SecuritySystem/SecuritySystemDatabaseImplement/Models/Shop.cs @@ -3,7 +3,6 @@ using SecuritySystemContracts.ViewModels; using SecuritySystemDataModels.Models; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; -using System.Diagnostics; namespace SecuritySystemDatabaseImplement.Models { @@ -21,14 +20,31 @@ namespace SecuritySystemDatabaseImplement.Models [ForeignKey("ShopId")] public virtual List Secures { get; set; } = new(); private Dictionary? _shopSecures = null; + [NotMapped] + private int UsedSpace { get; set; } + [NotMapped] public Dictionary ShopSecures { get { if (_shopSecures == null) { - _shopSecures = Secures - .ToDictionary(shopSecure => shopSecure.SecureId, shopSecure => (shopSecure.Secure as ISecureModel, shopSecure.Count)); + // TODO + try + { + _shopSecures = Secures + .ToDictionary( + shopSecure => shopSecure.SecureId, + shopSecure => (shopSecure.Secure as ISecureModel, shopSecure.Count) + ); + } + catch (Exception) + { + _shopSecures = new(); + throw; + } + + UsedSpace = _shopSecures.Select(x => x.Value.Item2).Sum(); } return _shopSecures; } @@ -63,17 +79,22 @@ namespace SecuritySystemDatabaseImplement.Models Address = Address, OpeningDate = OpeningDate, MaxSecuresCount = MaxSecuresCount, - ShopSecures = ShopSecures + ShopSecures = ShopSecures, + UsedSpace = UsedSpace }; public void UpdateSecures(SecuritySystemDatabase context, ShopBindingModel model) { - var shopSecures = context.ShopSecures.Where(rec => rec.SecureId == model.Id).ToList(); + // TODO + //context.ShopSecures.RemoveRange(context.ShopSecures.ToList()); + //context.SaveChanges(); + var shopSecures = context.ShopSecures.Where(shopSecure => shopSecure.SecureId == model.Id).ToList(); if (shopSecures != null && shopSecures.Count > 0) { // удалили те, которых нет в модели - context.ShopSecures.RemoveRange(shopSecures.Where(rec => !model.ShopSecures.ContainsKey(rec.SecureId))); + context.ShopSecures.RemoveRange(shopSecures.Where(shopSecure => !model.ShopSecures.ContainsKey(shopSecure.SecureId) || shopSecure.Count == 0)); context.SaveChanges(); + shopSecures = context.ShopSecures.Where(rec => rec.ShopId == model.Id).ToList(); // обновили количество у существующих записей foreach (var updateSecure in shopSecures) { diff --git a/SecuritySystem/SecuritySystemView/FormMain.Designer.cs b/SecuritySystem/SecuritySystemView/FormMain.Designer.cs index a987d3d..13c7ca0 100644 --- a/SecuritySystem/SecuritySystemView/FormMain.Designer.cs +++ b/SecuritySystem/SecuritySystemView/FormMain.Designer.cs @@ -34,13 +34,13 @@ SecuresToolStripMenuItem = new ToolStripMenuItem(); магазиныToolStripMenuItem = new ToolStripMenuItem(); пополнениеМагазинаToolStripMenuItem = new ToolStripMenuItem(); + продатьПродукциюToolStripMenuItem = new ToolStripMenuItem(); dataGridView = new DataGridView(); buttonCreateOrder = new Button(); buttonTakeOrderInWork = new Button(); buttonOrderReady = new Button(); button4 = new Button(); buttonRefresh = new Button(); - продатьПродукциюToolStripMenuItem = new ToolStripMenuItem(); menuStrip.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); SuspendLayout(); @@ -65,21 +65,21 @@ // ComponentsToolStripMenuItem // ComponentsToolStripMenuItem.Name = "ComponentsToolStripMenuItem"; - ComponentsToolStripMenuItem.Size = new Size(182, 26); + ComponentsToolStripMenuItem.Size = new Size(224, 26); ComponentsToolStripMenuItem.Text = "Компоненты"; ComponentsToolStripMenuItem.Click += ComponentsToolStripMenuItem_Click; // // SecuresToolStripMenuItem // SecuresToolStripMenuItem.Name = "SecuresToolStripMenuItem"; - SecuresToolStripMenuItem.Size = new Size(182, 26); + SecuresToolStripMenuItem.Size = new Size(224, 26); SecuresToolStripMenuItem.Text = "Изделия"; SecuresToolStripMenuItem.Click += SecuresToolStripMenuItem_Click; // // магазиныToolStripMenuItem // магазиныToolStripMenuItem.Name = "магазиныToolStripMenuItem"; - магазиныToolStripMenuItem.Size = new Size(182, 26); + магазиныToolStripMenuItem.Size = new Size(224, 26); магазиныToolStripMenuItem.Text = "Магазины"; магазиныToolStripMenuItem.Click += ShopsToolStripMenuItem_Click; // @@ -90,6 +90,13 @@ пополнениеМагазинаToolStripMenuItem.Text = "Пополнение магазина"; пополнениеМагазинаToolStripMenuItem.Click += SupplyShopToolStripMenuItem_Click; // + // продатьПродукциюToolStripMenuItem + // + продатьПродукциюToolStripMenuItem.Name = "продатьПродукциюToolStripMenuItem"; + продатьПродукциюToolStripMenuItem.Size = new Size(165, 24); + продатьПродукциюToolStripMenuItem.Text = "Продать продукцию"; + продатьПродукциюToolStripMenuItem.Click += продатьПродукциюToolStripMenuItem_Click; + // // dataGridView // dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; @@ -159,13 +166,6 @@ buttonRefresh.UseVisualStyleBackColor = true; buttonRefresh.Click += ButtonRefresh_Click; // - // продатьПродукциюToolStripMenuItem - // - продатьПродукциюToolStripMenuItem.Name = "продатьПродукциюToolStripMenuItem"; - продатьПродукциюToolStripMenuItem.Size = new Size(165, 24); - продатьПродукциюToolStripMenuItem.Text = "Продать продукцию"; - продатьПродукциюToolStripMenuItem.Click += продатьПродукциюToolStripMenuItem_Click; - // // FormMain // AutoScaleDimensions = new SizeF(8F, 20F);