FixDatabase + UpdateView

Заряжай, заря-заря-жай, заряжай меня
Мне не спрятаться от тебя и не убежать
This commit is contained in:
Sergey Kozyrev 2024-04-30 17:03:49 +04:00
parent 8e9e4dd321
commit f502a218a7
21 changed files with 206 additions and 90 deletions

View File

@ -13,7 +13,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DatabaseImplement", "Databa
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ImplementerApp", "ImplementerApp\ImplementerApp.csproj", "{9CEB1DEF-2254-4745-89C9-832E2F857BF4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GuarantorAPP", "GuarantorAPP\GuarantorAPP.csproj", "{9B5881EA-1F06-422A-85F4-BDD188921374}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GuarantorAPP", "GuarantorAPP\GuarantorAPP.csproj", "{9B5881EA-1F06-422A-85F4-BDD188921374}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestingDatabase", "TestingDatabase\TestingDatabase.csproj", "{022506BE-1362-4426-9B66-168680BD4AA4}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -45,6 +47,10 @@ Global
{9B5881EA-1F06-422A-85F4-BDD188921374}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9B5881EA-1F06-422A-85F4-BDD188921374}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9B5881EA-1F06-422A-85F4-BDD188921374}.Release|Any CPU.Build.0 = Release|Any CPU
{022506BE-1362-4426-9B66-168680BD4AA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{022506BE-1362-4426-9B66-168680BD4AA4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{022506BE-1362-4426-9B66-168680BD4AA4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{022506BE-1362-4426-9B66-168680BD4AA4}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -27,23 +27,13 @@ namespace DatabaseImplement.Implements
public List<DetailViewModel> GetFilteredList(DetailSearchModel model)
{
if (!model.Id.HasValue && string.IsNullOrEmpty(model.Name) && !model.UserId.HasValue)
if (!model.UserId.HasValue)
{
return new();
}
using var context = new FactoryGoWorkDatabase();
if (model.Id.HasValue)
{
return context.Details.Where(x => x.Id == model.Id).Select(x => x.GetViewModel).ToList();
}
else if (model.UserId.HasValue)
{
return context.Details.Where(x => x.UserId == model.Id).Select(x => x.GetViewModel).ToList();
}
else
{
return context.Details.Where(x => model.Name == x.Name).Select(x => x.GetViewModel).ToList();
}
}
public List<DetailViewModel> GetFullList()

View File

@ -3,6 +3,7 @@ using Contracts.SearchModels;
using Contracts.StoragesContracts;
using Contracts.ViewModels;
using DatabaseImplement.Models;
using Microsoft.EntityFrameworkCore;
namespace DatabaseImplement.Implements
{
@ -14,6 +15,7 @@ namespace DatabaseImplement.Implements
var newProduct = context.Products.FirstOrDefault(x => x.Id == model.Id);
if (newProduct == null)
return null;
newProduct.UpdateDetails(context, model);
context.Products.Remove(newProduct);
context.SaveChanges();
return newProduct.GetViewModel;
@ -22,34 +24,23 @@ namespace DatabaseImplement.Implements
public ProductViewModel? GetElement(ProductSearchModel model)
{
using var context = new FactoryGoWorkDatabase();
return context.Products.FirstOrDefault(x => (!string.IsNullOrEmpty(model.Name) && x.Name.Contains(model.Name)) || (model.Id.HasValue && x.Id == model.Id))?.GetViewModel;
return context.Products.Include(p => p.Details).ThenInclude(p => p.Detail).FirstOrDefault(x => (!string.IsNullOrEmpty(model.Name) && x.Name.Contains(model.Name)) || (model.Id.HasValue && x.Id == model.Id))?.GetViewModel;
}
public List<ProductViewModel> GetFilteredList(ProductSearchModel model)
{
if (!model.Id.HasValue && string.IsNullOrEmpty(model.Name) && !model.UserId.HasValue)
if (!model.UserId.HasValue)
{
return new();
}
using var context = new FactoryGoWorkDatabase();
if (model.Id.HasValue)
{
return context.Products.Where(x => x.Id == model.Id).Select(x => x.GetViewModel).ToList();
}
else if (model.UserId.HasValue)
{
return context.Products.Where(x => x.UserId == model.Id).Select(x => x.GetViewModel).ToList();
}
else
{
return context.Products.Where(x => model.Name == x.Name).Select(x => x.GetViewModel).ToList();
}
return context.Products.Include(p => p.Details).ThenInclude(p => p.Detail).Where(x => x.UserId == model.Id).Select(x => x.GetViewModel).ToList();
}
public List<ProductViewModel> GetFullList()
{
using var context = new FactoryGoWorkDatabase();
return context.Products.Select(x => x.GetViewModel).ToList();
return context.Products.Include(p => p.Details).ThenInclude(p => p.Detail).Select(x => x.GetViewModel).ToList();
}
public ProductViewModel? Insert(ProductBindingModel model)
@ -70,6 +61,7 @@ namespace DatabaseImplement.Implements
if (newProduct == null)
return null;
newProduct.Update(model);
newProduct.UpdateDetails(context, model);
context.SaveChanges();
return newProduct.GetViewModel;
}

View File

@ -3,6 +3,7 @@ using Contracts.SearchModels;
using Contracts.StoragesContracts;
using Contracts.ViewModels;
using DatabaseImplement.Models;
using Microsoft.EntityFrameworkCore;
namespace DatabaseImplement.Implements
{
@ -22,34 +23,23 @@ namespace DatabaseImplement.Implements
public ProductionViewModel? GetElement(ProductionSearchModel model)
{
using var context = new FactoryGoWorkDatabase();
return context.Productions.FirstOrDefault(x => (!string.IsNullOrEmpty(model.Name) && x.Name.Contains(model.Name)) || (model.Id.HasValue && x.Id == model.Id))?.GetViewModel;
return context.Productions.Include(x => x.Details).ThenInclude(x => x.Detail).FirstOrDefault(x => (!string.IsNullOrEmpty(model.Name) && x.Name.Contains(model.Name)) || (model.Id.HasValue && x.Id == model.Id))?.GetViewModel;
}
public List<ProductionViewModel> GetFilteredList(ProductionSearchModel model)
{
if (!model.Id.HasValue && string.IsNullOrEmpty(model.Name) && !model.UserId.HasValue)
if (!model.UserId.HasValue)
{
return new();
}
using var context = new FactoryGoWorkDatabase();
if (model.Id.HasValue)
{
return context.Productions.Where(x => x.Id == model.Id).Select(x => x.GetViewModel).ToList();
}
else if (model.UserId.HasValue)
{
return context.Productions.Where(x => x.UserId == model.Id).Select(x => x.GetViewModel).ToList();
}
else
{
return context.Productions.Where(x => model.Name == x.Name).Select(x => x.GetViewModel).ToList();
}
return context.Productions.Include(x => x.Details).ThenInclude(x => x.Detail).Where(x => x.UserId == model.Id).Select(x => x.GetViewModel).ToList();
}
public List<ProductionViewModel> GetFullList()
{
using var context = new FactoryGoWorkDatabase();
return context.Productions.Select(x => x.GetViewModel).ToList();
return context.Productions.Include(x => x.Details).ThenInclude(x => x.Detail).Select(x => x.GetViewModel).ToList();
}
public ProductionViewModel? Insert(ProductionBindingModel model)

View File

@ -12,8 +12,8 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
namespace DatabaseImplement.Migrations
{
[DbContext(typeof(FactoryGoWorkDatabase))]
[Migration("20240427200038_somestrange")]
partial class somestrange
[Migration("20240430122917_tryToCheck")]
partial class tryToCheck
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
@ -330,7 +330,6 @@ namespace DatabaseImplement.Migrations
.HasColumnType("nvarchar(max)");
b.Property<int?>("ProductionId")
.IsRequired()
.HasColumnType("int");
b.Property<string>("Title")
@ -489,10 +488,8 @@ namespace DatabaseImplement.Migrations
modelBuilder.Entity("DatabaseImplement.Models.Workshop", b =>
{
b.HasOne("DatabaseImplement.Models.Production", "Production")
.WithMany()
.HasForeignKey("ProductionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
.WithMany("Workshops")
.HasForeignKey("ProductionId");
b.HasOne("DatabaseImplement.Models.Guarantor", "Guarantor")
.WithMany("Workshops")
@ -543,6 +540,8 @@ namespace DatabaseImplement.Migrations
modelBuilder.Entity("DatabaseImplement.Models.Production", b =>
{
b.Navigation("Details");
b.Navigation("Workshops");
});
modelBuilder.Entity("DatabaseImplement.Models.Worker", b =>

View File

@ -5,7 +5,7 @@ using Microsoft.EntityFrameworkCore.Migrations;
namespace DatabaseImplement.Migrations
{
public partial class somestrange : Migration
public partial class tryToCheck : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
@ -151,7 +151,8 @@ namespace DatabaseImplement.Migrations
name: "FK_Products_Machines_MachineId",
column: x => x.MachineId,
principalTable: "Machines",
principalColumn: "Id");
principalColumn: "Id",
onDelete: ReferentialAction.SetNull);
});
migrationBuilder.CreateTable(
@ -171,13 +172,13 @@ namespace DatabaseImplement.Migrations
column: x => x.WorkerId,
principalTable: "Machines",
principalColumn: "Id",
onDelete: ReferentialAction.NoAction);
onDelete: ReferentialAction.Restrict);
table.ForeignKey(
name: "FK_WorkerMachines_Workers_WorkerId",
column: x => x.WorkerId,
principalTable: "Workers",
principalColumn: "Id",
onDelete: ReferentialAction.NoAction);
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
@ -197,13 +198,13 @@ namespace DatabaseImplement.Migrations
column: x => x.DetailId,
principalTable: "Details",
principalColumn: "Id",
onDelete: ReferentialAction.NoAction);
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_DetailProductions_Productions_ProductionId",
column: x => x.ProductionId,
principalTable: "Productions",
principalColumn: "Id",
onDelete: ReferentialAction.NoAction);
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateTable(
@ -216,7 +217,7 @@ namespace DatabaseImplement.Migrations
Address = table.Column<string>(type: "nvarchar(max)", nullable: false),
Director = table.Column<string>(type: "nvarchar(max)", nullable: false),
UserId = table.Column<int>(type: "int", nullable: false),
ProductionId = table.Column<int>(type: "int", nullable: false)
ProductionId = table.Column<int>(type: "int", nullable: true)
},
constraints: table =>
{
@ -232,7 +233,7 @@ namespace DatabaseImplement.Migrations
column: x => x.ProductionId,
principalTable: "Productions",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
onDelete: ReferentialAction.SetNull);
});
migrationBuilder.CreateTable(
@ -253,13 +254,13 @@ namespace DatabaseImplement.Migrations
column: x => x.DetailId,
principalTable: "Details",
principalColumn: "Id",
onDelete: ReferentialAction.NoAction);
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_DetailProducts_Products_ProductId",
column: x => x.ProductId,
principalTable: "Products",
principalColumn: "Id",
onDelete: ReferentialAction.NoAction);
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateTable(
@ -279,13 +280,13 @@ namespace DatabaseImplement.Migrations
column: x => x.WorkerId,
principalTable: "Workers",
principalColumn: "Id",
onDelete: ReferentialAction.NoAction);
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_WorkerWorkshops_Workshops_WorkshopId",
column: x => x.WorkshopId,
principalTable: "Workshops",
principalColumn: "Id",
onDelete: ReferentialAction.NoAction);
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateIndex(

View File

@ -328,7 +328,6 @@ namespace DatabaseImplement.Migrations
.HasColumnType("nvarchar(max)");
b.Property<int?>("ProductionId")
.IsRequired()
.HasColumnType("int");
b.Property<string>("Title")
@ -487,10 +486,8 @@ namespace DatabaseImplement.Migrations
modelBuilder.Entity("DatabaseImplement.Models.Workshop", b =>
{
b.HasOne("DatabaseImplement.Models.Production", "Production")
.WithMany()
.HasForeignKey("ProductionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
.WithMany("Workshops")
.HasForeignKey("ProductionId");
b.HasOne("DatabaseImplement.Models.Guarantor", "Guarantor")
.WithMany("Workshops")
@ -541,6 +538,8 @@ namespace DatabaseImplement.Migrations
modelBuilder.Entity("DatabaseImplement.Models.Production", b =>
{
b.Navigation("Details");
b.Navigation("Workshops");
});
modelBuilder.Entity("DatabaseImplement.Models.Worker", b =>

View File

@ -56,6 +56,7 @@ namespace DatabaseImplement.Models
return;
Email = model.Email;
Name = model.Name;
Login = model.Login;
Password = model.Password;
}
public ImplementerViewModel GetViewModel => new()

View File

@ -91,13 +91,16 @@ namespace DatabaseImplement.Models
context.DetailProducts.RemoveRange(productDetails.Where(rec => !model.ProductDetails.ContainsKey(rec.DetailId)));
context.SaveChanges();
foreach (var upDetail in productDetails)
{
if (model.ProductDetails.ContainsKey(upDetail.DetailId))
{
upDetail.Count = model.ProductDetails[upDetail.DetailId].Item2;
model.ProductDetails.Remove(upDetail.DetailId);
}
}
context.SaveChanges();
}
var product = context.Products.First(x => x.Id == model.Id);
var product = context.Products.FirstOrDefault(x => x.Id == model.Id);
foreach (var dp in model.ProductDetails)
{
context.DetailProducts.Add(new DetailProduct

View File

@ -31,8 +31,10 @@ namespace DatabaseImplement.Models
}
}
[ForeignKey("ProductionId")]
public List<DetailProduction> Details { get; set; } = new();
public virtual List<DetailProduction> Details { get; set; } = new();
public virtual Implementer User { get; set; }
[ForeignKey("ProductionId")]
public virtual List<Workshop> Workshops { get; set; }
public static Production Create(FactoryGoWorkDatabase context, ProductionBindingModel model)
{

View File

@ -17,7 +17,6 @@ namespace DatabaseImplement.Models
public string Director { get; set; } = string.Empty;
[Required]
public int UserId { get; set; }
[Required]
public int? ProductionId { get; set; }
public virtual Production? Production { get; set; }
private Dictionary<int, IWorkerModel>? _workerWorkshops = null;

View File

@ -60,7 +60,26 @@ namespace ImplementerApp.Controllers
public IActionResult IndexProduct()
{
return View(new List<ProductViewModel>());
List<ProductViewModel> products = new List<ProductViewModel>
{
new ProductViewModel
{
Id = 1,
Name = "Изделие 1",
Cost = 10.99,
UserId = 1,
MachineId = 1
},
new ProductViewModel
{
Id = 2,
Name = "Изделие 2",
Cost = 19.99,
UserId = 2,
MachineId = 2
}
};
return View(products);
}
public IActionResult CreateProduct()
{
@ -83,7 +102,24 @@ namespace ImplementerApp.Controllers
}
public IActionResult IndexProduction()
{
return View(new List<ProductionViewModel>());
List<ProductionViewModel> productionViewModels = new List<ProductionViewModel>
{
new ProductionViewModel
{
Id = 1,
Name = "Производство А",
Cost = 1000.00,
UserId = 1
},
new ProductionViewModel
{
Id = 2,
Name = "Производство Б",
Cost = 1500.00,
UserId = 2
}
};
return View(productionViewModels);
}
public IActionResult CreateProduction()
{
@ -106,15 +142,52 @@ namespace ImplementerApp.Controllers
}
public IActionResult Privacy()
{
return View();
ImplementerViewModel user = new()
{
Email = "mail@mail.ru",
Login = "Login",
Password = "password",
Name = "User"
};
return View(user);
}
public IActionResult DetailTimeReport()
{
return View(new List<DetailTimeReport>());
List<DetailTimeReport> detailTimeReports = new List<DetailTimeReport>
{
new DetailTimeReport
{
DetailName = "Деталь А",
Productions = new List<string> { "Производство 1", "Производство 2" },
Machines = new List<string> { "Машина X", "Машина Y" }
},
new DetailTimeReport
{
DetailName = "Деталь B",
Productions = new List<string> { "Производство 3", "Производство 4" },
Machines = new List<string> { "Машина Z", "Машина W" }
}
};
return View(detailTimeReports);
}
public IActionResult DetailWorkshopReport()
{
return View(new List<DetailWorkshopReportViewModel>());
List<DetailWorkshopReportViewModel> detailWorkshopReports = new List<DetailWorkshopReportViewModel>
{
new DetailWorkshopReportViewModel
{
DetailName = "Деталь X",
WorkShops = new List<string> { "Цех 1", "Цех 2" }
},
new DetailWorkshopReportViewModel
{
DetailName = "Деталь Y",
WorkShops = new List<string> { "Цех 3", "Цех 4" }
}
};
return View(detailWorkshopReports);
}
public IActionResult ReportsMenu()
{

View File

@ -14,13 +14,14 @@
<div class="col-8"><input type="text" name="title" id="title" /></div>
</div>
<div class="container">
<div>Details</div>
<div>Детали</div>
<div class="table-responsive-lg">
<table id="detailsTable" class="display">
<thead>
<tr>
<th>Выбор</th>
<th>Название</th>
<th>Количество</th>
</tr>
</thead>
<tbody>

View File

@ -21,7 +21,6 @@
<tr>
<th>Выбор</th>
<th>Название</th>
<th>Количество</th>
</tr>
</thead>
<tbody>

View File

@ -57,7 +57,7 @@
<a asp-action="CreateDetail" asp-route-id="@item.Id" class="btn btn-primary">Изменить</a>
</td>
<td>
<a asp-action="Delete" asp-route-id="@item.Id" class="btn btn-danger">Удалить</a>
<a asp-action="DeleteDetail" asp-route-id="@item.Id" class="btn btn-danger">Удалить</a>
</td>
</tr>
}

View File

@ -7,11 +7,10 @@
}
<div class="text-center">
<h1 class="display-4">Изедлия</h1>
<h1 class="display-4">Изделия</h1>
</div>
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="ProductMachineAdd">Привязать станок к изделию</a>
ProductMachineAdd
<div class="text-center">
@{
if (Model == null)
@ -34,6 +33,9 @@
<th>
Цена
</th>
<th>
Привязка станка к изделию
</th>
<th>
Изменить изделие
</th>
@ -55,11 +57,14 @@
<td>
@Html.DisplayFor(modelItem => item.Cost)
</td>
<td>
<a asp-action="ProductMachineAdd" asp-route-id="@item.Id" class="btn btn-primary">Привязать станок</a>
</td>
<td>
<a asp-action="CreateProduct" asp-route-id="@item.Id" class="btn btn-primary">Изменить</a>
</td>
<td>
<a asp-action="Delete" asp-route-id="@item.Id" class="btn btn-danger">Удалить</a>
<a asp-action="DeleteProduct" asp-route-id="@item.Id" class="btn btn-danger">Удалить</a>
</td>
</tr>
}

View File

@ -1,6 +1,28 @@
@{
ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>
<p>Use this page to detail your site's privacy policy.</p>
<div class="text-center">
<h2 class="display-4">Личные данные</h2>
</div>
<form method="post">
<div class="row">
<div class="col-4">Логин:</div>
<div class="col-8"><input type="text" name="login" value="@Model.Login" /></div>
</div>
<div class="row">
<div class="col-4">Почта:</div>
<div class="col-8"><input type="email" name="email" value="@Model.Email" /></div>
</div>
<div class="row">
<div class="col-4">Пароль:</div>
<div class="col-8"><input type="password" name="password" value="@Model.Password" /></div>
</div>
<div class="row">
<div class="col-4">ФИО:</div>
<div class="col-8"><input type="text" name="fio" value="@Model.Name" /></div>
</div>
<div class="row">
<div class="col-8"></div>
<div class="col-4"><input type="submit" value="Сохранить" class="btn btn-primary" /></div>
</div>
</form>

View File

@ -12,7 +12,8 @@
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container-fluid">
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">Завод "Иди работать". Исполнитель</a>
<img src="~/images/Work-transformed.png" width="150" height="150" alt="Логотип">
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">Исполнитель</a>
</div>
</nav>
</header>

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

View File

@ -0,0 +1,17 @@
using DatabaseImplement;
using DatabaseImplement.Implements;
using Contracts.BindingModels;
using Contracts.BusinessLogicsContracts;
using Contracts.SearchModels;
using Contracts.ViewModels;
using Microsoft.EntityFrameworkCore.Query.Internal;
using DatabaseImplement.Models;
using DataModels.Models;
DetailStorage detailStorage = new DetailStorage();
ImplementerStorage implementationStorage = new ImplementerStorage();
ProductionionStorage productionionStorage = new ProductionionStorage();
ProductStorage productStorage = new ProductStorage();
var i = productStorage.GetFullList();
Console.WriteLine(i);

View File

@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\BusinessLogic\BusinessLogic.csproj" />
<ProjectReference Include="..\Contracts\Contracts.csproj" />
<ProjectReference Include="..\DatabaseImplement\DatabaseImplement.csproj" />
</ItemGroup>
</Project>