fix furniture

This commit is contained in:
DozorovaA.A 2023-05-19 21:25:43 +04:00
parent 83943268b6
commit 543946a9fe
8 changed files with 68 additions and 30 deletions

View File

@ -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<FurnitureViewModel> 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
{

View File

@ -24,6 +24,7 @@ namespace FurnitureAssemblyDatabaseImplement.Models
[Required]
public int UserId { get; set; }
public virtual User User { get; set; }
public Dictionary<int, (IMaterialModel, int)>? _furnitureMaterials = null;
[NotMapped]
public Dictionary<int, (IMaterialModel, int)> 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)
{

View File

@ -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; }

View File

@ -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<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
private readonly IFurnitureStorage _furnitureStorage;
public HomeController(ILogger<HomeController> 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<List<FurnitureViewModel>>($"api/furniture/getfurniturelist"));
return View(_furnitureStorage.GetFullList());
//return View(APIClient.GetRequest<List<FurnitureViewModel>>($"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<FurnitureViewModel>($"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<FurnitureViewModel>($"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]

View File

@ -12,6 +12,7 @@
<ItemGroup>
<ProjectReference Include="..\FurnitureAssemblyContracts\FurnitureAssemblyContracts.csproj" />
<ProjectReference Include="..\FurnitureAssemblyDatabaseImplement\FurnitureAssemblyDatabaseImplement.csproj" />
</ItemGroup>
</Project>

View File

@ -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<IFurnitureStorage, FurnitureStorage> ();
var app = builder.Build();
APIClient.Connect(builder.Configuration);
// Configure the HTTP request pipeline.

View File

@ -19,7 +19,7 @@
<div class="col-4">Изготовитель:</div>
<div class="col-8">
<select name="userId">
<select id="userId" name="userId">
<option value="0" disabled></option>
@foreach (var user in userList)
{

View File

@ -9,7 +9,7 @@
<h2 class="display-4">Обновление мебели</h2>
</div>
<form method="post">
<div class="row" id = @Model.Id>
<div class="row" id = @Model?.Id>
<div class="col-4">Название:</div>
<div class="col-8"><input type="text" name="name" id="name" value=@Model.Name /></div>
</div>
@ -21,14 +21,9 @@
<div class="col-4">Изготовитель:</div>
<div class="row">
<div class="col-8">
<select id="userId" name="userId" class="form-control" onselect = @Model.UserName>
@foreach (var item in userList)
{
<option value="@item.Id">
@Html.DisplayFor(modelItem => item.Name)
</option>
}
</select>
@Html.DisplayFor(modelItem => Model.UserName)
</div>
</div>
@ -75,7 +70,18 @@
@Html.DisplayFor(modelItem => item.Cost)
</td>
<td>
<input type="text" id="@item.Id:count" name="counts[]" />
@if(Model.FurnitureMaterials.Keys.Contains(item.Id))
{
int count = Model.FurnitureMaterials[item.Id].Item2;
<input type="text" id="@item.Id:count" name="counts[]" value=@count />
}
else
{
<input type="text" id="@item.Id:count" name="counts[]"/>
}
</td>
<td>
@Html.DisplayFor(modelItem => item.UserName)