From 543946a9fef2c443a5851fc06fdc6ae265fc908a Mon Sep 17 00:00:00 2001 From: "DozorovaA.A" Date: Fri, 19 May 2023 21:25:43 +0400 Subject: [PATCH] fix furniture --- .../Implements/FurnitureStorage.cs | 10 ++-- .../Models/Furniture.cs | 7 ++- .../Models/Material.cs | 2 +- .../Controllers/HomeController.cs | 46 ++++++++++++++----- ...rnitureAssemblyStoreKeeperClientApp.csproj | 1 + .../Program.cs | 4 ++ .../Views/Home/CreateFurniture.cshtml | 2 +- .../Views/Home/UpdateFurniture.cshtml | 26 +++++++---- 8 files changed, 68 insertions(+), 30 deletions(-) diff --git a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Implements/FurnitureStorage.cs b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Implements/FurnitureStorage.cs index 3c8769d..739942d 100644 --- a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Implements/FurnitureStorage.cs +++ b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Implements/FurnitureStorage.cs @@ -18,8 +18,9 @@ namespace FurnitureAssemblyDatabaseImplement.Implements { using var context = new FurnitureAssemblyDatabase(); return context.Furnitures - .Include(x => x.User) .Include(x => x.Materials) + .ThenInclude(x => x.Material) + .Include(x => x.User) .Select(x => x.GetViewModel).ToList(); } public List GetFilteredList(FurnitureSearchModel model) @@ -70,7 +71,7 @@ namespace FurnitureAssemblyDatabaseImplement.Implements } context.Furnitures.Add(newFurniture); context.SaveChanges(); - return newFurniture.GetViewModel; + return context.Furnitures.Include(x => x.Materials).Include(x => x.User).FirstOrDefault(x => x.Id == newFurniture.Id)?.GetViewModel; } public FurnitureViewModel? Update(FurnitureBindingModel model) { @@ -79,8 +80,9 @@ namespace FurnitureAssemblyDatabaseImplement.Implements try { var furniture = context.Furnitures - .Include(x => x.User) .Include(x => x.Materials) + .Include(x => x.User) + .ThenInclude(x => x.Role) .FirstOrDefault(rec => rec.Id == model.Id); if (furniture == null) { @@ -90,7 +92,7 @@ namespace FurnitureAssemblyDatabaseImplement.Implements context.SaveChanges(); furniture.UpdateMaterials(context, model); transaction.Commit(); - return furniture.GetViewModel; + return context.Furnitures.Include(x => x.Materials).Include(x => x.User).FirstOrDefault(x => x.Id == model.Id)?.GetViewModel; } catch { diff --git a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Furniture.cs b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Furniture.cs index 1e3ab25..df3ed9f 100644 --- a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Furniture.cs +++ b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Furniture.cs @@ -24,6 +24,7 @@ namespace FurnitureAssemblyDatabaseImplement.Models [Required] public int UserId { get; set; } public virtual User User { get; set; } + public Dictionary? _furnitureMaterials = null; [NotMapped] public Dictionary FurnitureMaterials @@ -82,9 +83,11 @@ namespace FurnitureAssemblyDatabaseImplement.Models rec.FurnitureId == model.Id).ToList(); if (furnitureMaterials != null && furnitureMaterials.Count > 0) { // удалили те, которых нет в модели - context.FurnitureMaterials.RemoveRange(furnitureMaterials.Where(rec - => !model.FurnitureMaterials.ContainsKey(rec.MaterialId))); + var last = furnitureMaterials.Where(rec + => !model.FurnitureMaterials.ContainsKey(rec.MaterialId)); + context.FurnitureMaterials.RemoveRange(last); context.SaveChanges(); + last.ToList().ForEach(l => furnitureMaterials.Remove(l)); // обновили количество у существующих записей foreach (var updateMaterial in furnitureMaterials) { diff --git a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Material.cs b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Material.cs index 7082fb0..9dc7dca 100644 --- a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Material.cs +++ b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Material.cs @@ -21,7 +21,7 @@ namespace FurnitureAssemblyDatabaseImplement.Models public double Cost { get; set; } [Required] public int ScopeId { get; set; } - public virtual Scope Scope { get; set; } + public virtual Scope Scope { get; set; } = new(); [Required] public int UserId { get; set; } public virtual User User { get; set; } diff --git a/FurnitureAssembly/FurnitureAssemblyStoreKeeperClientApp/Controllers/HomeController.cs b/FurnitureAssembly/FurnitureAssemblyStoreKeeperClientApp/Controllers/HomeController.cs index 1153eae..da3f013 100644 --- a/FurnitureAssembly/FurnitureAssemblyStoreKeeperClientApp/Controllers/HomeController.cs +++ b/FurnitureAssembly/FurnitureAssemblyStoreKeeperClientApp/Controllers/HomeController.cs @@ -1,4 +1,6 @@ using FurnitureAssemblyContracts.BindingModels; +using FurnitureAssemblyContracts.SearchModels; +using FurnitureAssemblyContracts.StorageContracts; using FurnitureAssemblyContracts.ViewModels; using FurnitureAssemblyDataModels.Models; using FurnitureAssemblyStoreKeeperClientApp.Models; @@ -10,10 +12,11 @@ namespace FurnitureAssemblyStoreKeeperClientApp.Controllers public class HomeController : Controller { private readonly ILogger _logger; - - public HomeController(ILogger logger) + private readonly IFurnitureStorage _furnitureStorage; + public HomeController(ILogger logger, IFurnitureStorage furnitureStorage) { _logger = logger; + _furnitureStorage = furnitureStorage; } public IActionResult Index() @@ -278,8 +281,8 @@ namespace FurnitureAssemblyStoreKeeperClientApp.Controllers [HttpGet] public IActionResult GetFurnitureList() { - - return View(APIClient.GetRequest>($"api/furniture/getfurniturelist")); + return View(_furnitureStorage.GetFullList()); + //return View(APIClient.GetRequest>($"api/furniture/getfurniturelist")); } [HttpGet] @@ -319,15 +322,22 @@ namespace FurnitureAssemblyStoreKeeperClientApp.Controllers cost += counts[i] * materials.Where(m => m.Id == MaterialsIds[i]).FirstOrDefault().Cost; } - - APIClient.PostRequest("api/furniture/addfurniture", new FurnitureBindingModel + _furnitureStorage.Insert(new FurnitureBindingModel { Name = name, Cost = cost, UserId = userId, - DateCreate = DateTime.UtcNow, - FurnitureMaterials = FurnitureMaterials + FurnitureMaterials = FurnitureMaterials, + DateCreate = DateTime.UtcNow }); + //APIClient.PostRequest("api/furniture/addfurniture", new FurnitureBindingModel + //{ + // Name = name, + // Cost = cost, + // UserId = userId, + // DateCreate = DateTime.UtcNow, + // FurnitureMaterials = FurnitureMaterials + //}); Response.Redirect("GetMaterialsList"); } @@ -338,8 +348,19 @@ namespace FurnitureAssemblyStoreKeeperClientApp.Controllers { return Redirect("~/Home/Enter"); } - var model = APIClient.GetRequest($"api/furniture/GetFurniture?id={id}"); - return View(model); + var model = _furnitureStorage.GetElement(new FurnitureSearchModel + { + Id = id + + }); + if(model!= null) + { + return View(model); + + } + else return Redirect("~/Home/GetFurnitureList"); + //var model = APIClient.GetRequest($"api/furniture/GetFurniture?id={id}"); + //return model != null ? View(model) : RedirectToPage("GetFurnitureList"); } [HttpPost] public void UpdateFurniture(int id, string name, double cost, int userId, int[] MaterialsIds, int[] counts) @@ -361,14 +382,15 @@ namespace FurnitureAssemblyStoreKeeperClientApp.Controllers FurnitureMaterials.Add(MaterialsIds[i], elem); price += elem.Item1.Cost * elem.Item2; } - APIClient.PostRequest("api/furniture/updatefurniture", new FurnitureBindingModel + _furnitureStorage.Update(new FurnitureBindingModel { Id = id, Name = name, Cost = price, - UserId=userId, + UserId = userId, FurnitureMaterials = FurnitureMaterials }); + Response.Redirect("GetFurnitureList"); } [HttpGet] diff --git a/FurnitureAssembly/FurnitureAssemblyStoreKeeperClientApp/FurnitureAssemblyStoreKeeperClientApp.csproj b/FurnitureAssembly/FurnitureAssemblyStoreKeeperClientApp/FurnitureAssemblyStoreKeeperClientApp.csproj index 308321f..43a9620 100644 --- a/FurnitureAssembly/FurnitureAssemblyStoreKeeperClientApp/FurnitureAssemblyStoreKeeperClientApp.csproj +++ b/FurnitureAssembly/FurnitureAssemblyStoreKeeperClientApp/FurnitureAssemblyStoreKeeperClientApp.csproj @@ -12,6 +12,7 @@ + diff --git a/FurnitureAssembly/FurnitureAssemblyStoreKeeperClientApp/Program.cs b/FurnitureAssembly/FurnitureAssemblyStoreKeeperClientApp/Program.cs index d34a381..23f68cf 100644 --- a/FurnitureAssembly/FurnitureAssemblyStoreKeeperClientApp/Program.cs +++ b/FurnitureAssembly/FurnitureAssemblyStoreKeeperClientApp/Program.cs @@ -1,3 +1,5 @@ +using FurnitureAssemblyContracts.StorageContracts; +using FurnitureAssemblyDatabaseImplement.Implements; using FurnitureAssemblyStoreKeeperClientApp; var builder = WebApplication.CreateBuilder(args); @@ -5,6 +7,8 @@ var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllersWithViews(); +builder.Services.AddTransient (); + var app = builder.Build(); APIClient.Connect(builder.Configuration); // Configure the HTTP request pipeline. diff --git a/FurnitureAssembly/FurnitureAssemblyStoreKeeperClientApp/Views/Home/CreateFurniture.cshtml b/FurnitureAssembly/FurnitureAssemblyStoreKeeperClientApp/Views/Home/CreateFurniture.cshtml index 360ed5c..970e4a2 100644 --- a/FurnitureAssembly/FurnitureAssemblyStoreKeeperClientApp/Views/Home/CreateFurniture.cshtml +++ b/FurnitureAssembly/FurnitureAssemblyStoreKeeperClientApp/Views/Home/CreateFurniture.cshtml @@ -19,7 +19,7 @@
Изготовитель:
- @foreach (var user in userList) { diff --git a/FurnitureAssembly/FurnitureAssemblyStoreKeeperClientApp/Views/Home/UpdateFurniture.cshtml b/FurnitureAssembly/FurnitureAssemblyStoreKeeperClientApp/Views/Home/UpdateFurniture.cshtml index 63b1add..d14e712 100644 --- a/FurnitureAssembly/FurnitureAssemblyStoreKeeperClientApp/Views/Home/UpdateFurniture.cshtml +++ b/FurnitureAssembly/FurnitureAssemblyStoreKeeperClientApp/Views/Home/UpdateFurniture.cshtml @@ -9,7 +9,7 @@

Обновление мебели

-
+
Название:
@@ -21,14 +21,9 @@
Изготовитель:
- + + @Html.DisplayFor(modelItem => Model.UserName) +
@@ -75,7 +70,18 @@ @Html.DisplayFor(modelItem => item.Cost) - + @if(Model.FurnitureMaterials.Keys.Contains(item.Id)) + { + int count = Model.FurnitureMaterials[item.Id].Item2; + + + } + else + { + + + } + @Html.DisplayFor(modelItem => item.UserName)