diff --git a/CarCenter/CarCenterContracts/BindingModels/CarBindingModel.cs b/CarCenter/CarCenterContracts/BindingModels/CarBindingModel.cs index 5304b2a..0e3f67b 100644 --- a/CarCenter/CarCenterContracts/BindingModels/CarBindingModel.cs +++ b/CarCenter/CarCenterContracts/BindingModels/CarBindingModel.cs @@ -12,7 +12,6 @@ namespace CarCenterContracts.BindingModels { public int Id { get; set; } public int StorekeeperId { get; set; } - public int OrderId { get; set; } public CarBrand CarBrand { get; set; } = CarBrand.Неизвестно; public string Model { get; set; } = string.Empty; public CarClass CarClass { get; set; } = CarClass.Неизвестно; diff --git a/CarCenter/CarCenterContracts/ViewModels/CarViewModel.cs b/CarCenter/CarCenterContracts/ViewModels/CarViewModel.cs index 709bf2c..3a84783 100644 --- a/CarCenter/CarCenterContracts/ViewModels/CarViewModel.cs +++ b/CarCenter/CarCenterContracts/ViewModels/CarViewModel.cs @@ -15,11 +15,7 @@ namespace CarCenterContracts.ViewModels public int? OrderId { get; set; } [DisplayName("ФИО покупателя")] public string BuyerFCS { get; set; } = string.Empty; - [DisplayName("Цена особенности")] - public double FeaturePrice { get; set; } public int StorekeeperId { get; set; } - [DisplayName("Имя кладовщика")] - public string StorekeeperName { get; set; } = string.Empty; [DisplayName("Марка")] public CarBrand CarBrand { get; set; } [DisplayName("Модель")] diff --git a/CarCenter/CarCenterDatabaseImplement/Implements/CarStorage.cs b/CarCenter/CarCenterDatabaseImplement/Implements/CarStorage.cs index b0e0fa4..2bc5ae8 100644 --- a/CarCenter/CarCenterDatabaseImplement/Implements/CarStorage.cs +++ b/CarCenter/CarCenterDatabaseImplement/Implements/CarStorage.cs @@ -43,7 +43,7 @@ namespace CarCenterDatabaseImplement.Implements .Select(x => x.GetViewModel) .ToList(); } - else if (model.Id.HasValue) + else if (model.StorekeeperId.HasValue) { return context.Cars .Where(x => x.StorekeeperId == model.StorekeeperId) @@ -52,7 +52,6 @@ namespace CarCenterDatabaseImplement.Implements .Include(x => x.Feature) .Include(x => x.Order) .Include(x => x.Storekeeper) - .Where(x => x.Id == model.Id) .Select(x => x.GetViewModel) .ToList(); } diff --git a/CarCenter/CarCenterDatabaseImplement/Migrations/20240528143805_InitialCreate3.Designer.cs b/CarCenter/CarCenterDatabaseImplement/Migrations/20240528175849_Initia8.Designer.cs similarity index 98% rename from CarCenter/CarCenterDatabaseImplement/Migrations/20240528143805_InitialCreate3.Designer.cs rename to CarCenter/CarCenterDatabaseImplement/Migrations/20240528175849_Initia8.Designer.cs index 860192c..10db04f 100644 --- a/CarCenter/CarCenterDatabaseImplement/Migrations/20240528143805_InitialCreate3.Designer.cs +++ b/CarCenter/CarCenterDatabaseImplement/Migrations/20240528175849_Initia8.Designer.cs @@ -12,8 +12,8 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; namespace CarCenterDatabaseImplement.Migrations { [DbContext(typeof(CarCenterDatabase))] - [Migration("20240528143805_InitialCreate3")] - partial class InitialCreate3 + [Migration("20240528175849_Initia8")] + partial class Initia8 { protected override void BuildTargetModel(ModelBuilder modelBuilder) { @@ -76,7 +76,7 @@ namespace CarCenterDatabaseImplement.Migrations .IsRequired() .HasColumnType("text"); - b.Property("OrderId") + b.Property("OrderId") .HasColumnType("integer"); b.Property("Price") @@ -363,9 +363,7 @@ namespace CarCenterDatabaseImplement.Migrations b.HasOne("CarCenterDatabaseImplement.Models.Order", "Order") .WithMany("Cars") - .HasForeignKey("OrderId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + .HasForeignKey("OrderId"); b.HasOne("CarCenterDatabaseImplement.Models.Storekeeper", "Storekeeper") .WithMany("Cars") diff --git a/CarCenter/CarCenterDatabaseImplement/Migrations/20240528143805_InitialCreate3.cs b/CarCenter/CarCenterDatabaseImplement/Migrations/20240528175849_Initia8.cs similarity index 98% rename from CarCenter/CarCenterDatabaseImplement/Migrations/20240528143805_InitialCreate3.cs rename to CarCenter/CarCenterDatabaseImplement/Migrations/20240528175849_Initia8.cs index 07524b5..4b8531f 100644 --- a/CarCenter/CarCenterDatabaseImplement/Migrations/20240528143805_InitialCreate3.cs +++ b/CarCenter/CarCenterDatabaseImplement/Migrations/20240528175849_Initia8.cs @@ -6,7 +6,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; namespace CarCenterDatabaseImplement.Migrations { - public partial class InitialCreate3 : Migration + public partial class Initia8 : Migration { protected override void Up(MigrationBuilder migrationBuilder) { @@ -174,7 +174,6 @@ namespace CarCenterDatabaseImplement.Migrations Id = table.Column(type: "integer", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), StorekeeperId = table.Column(type: "integer", nullable: false), - OrderId = table.Column(type: "integer", nullable: false), FeatureId = table.Column(type: "integer", nullable: true), CarBrand = table.Column(type: "integer", nullable: false), Model = table.Column(type: "text", nullable: false), @@ -182,7 +181,8 @@ namespace CarCenterDatabaseImplement.Migrations Year = table.Column(type: "integer", nullable: false), Price = table.Column(type: "double precision", nullable: false), VINnumber = table.Column(type: "bigint", nullable: false), - FeatureID = table.Column(type: "integer", nullable: false) + FeatureID = table.Column(type: "integer", nullable: false), + OrderId = table.Column(type: "integer", nullable: true) }, constraints: table => { @@ -196,8 +196,7 @@ namespace CarCenterDatabaseImplement.Migrations name: "FK_Cars_Orders_OrderId", column: x => x.OrderId, principalTable: "Orders", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); + principalColumn: "Id"); table.ForeignKey( name: "FK_Cars_Storekeepers_StorekeeperId", column: x => x.StorekeeperId, diff --git a/CarCenter/CarCenterDatabaseImplement/Migrations/CarCenterDatabaseModelSnapshot.cs b/CarCenter/CarCenterDatabaseImplement/Migrations/CarCenterDatabaseModelSnapshot.cs index 87fc91f..6b18836 100644 --- a/CarCenter/CarCenterDatabaseImplement/Migrations/CarCenterDatabaseModelSnapshot.cs +++ b/CarCenter/CarCenterDatabaseImplement/Migrations/CarCenterDatabaseModelSnapshot.cs @@ -74,7 +74,7 @@ namespace CarCenterDatabaseImplement.Migrations .IsRequired() .HasColumnType("text"); - b.Property("OrderId") + b.Property("OrderId") .HasColumnType("integer"); b.Property("Price") @@ -361,9 +361,7 @@ namespace CarCenterDatabaseImplement.Migrations b.HasOne("CarCenterDatabaseImplement.Models.Order", "Order") .WithMany("Cars") - .HasForeignKey("OrderId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + .HasForeignKey("OrderId"); b.HasOne("CarCenterDatabaseImplement.Models.Storekeeper", "Storekeeper") .WithMany("Cars") diff --git a/CarCenter/CarCenterDatabaseImplement/Models/Car.cs b/CarCenter/CarCenterDatabaseImplement/Models/Car.cs index 5598b54..25645d8 100644 --- a/CarCenter/CarCenterDatabaseImplement/Models/Car.cs +++ b/CarCenter/CarCenterDatabaseImplement/Models/Car.cs @@ -17,7 +17,6 @@ namespace CarCenterDatabaseImplement.Models { public int Id { get; private set; } public int StorekeeperId { get; set; } - public int OrderId { get; set; } public int? FeatureId { get; set; } [Required] public CarBrand CarBrand { get; set; } = CarBrand.Неизвестно; @@ -35,7 +34,7 @@ namespace CarCenterDatabaseImplement.Models public int FeatureID { get; set; } public virtual Storekeeper Storekeeper { get; set; } public virtual Feature Feature { get; set; } - public virtual Order Order { get; set; } + public virtual Order? Order { get; set; } private Dictionary? _carBundlings = null; [ForeignKey("CarId")] @@ -63,7 +62,6 @@ namespace CarCenterDatabaseImplement.Models Id = model.Id, StorekeeperId = model.StorekeeperId, FeatureId = model.FeatureID, - OrderId = model.OrderId, CarBrand = model.CarBrand, Model = model.Model, CarClass = model.CarClass, @@ -101,7 +99,6 @@ namespace CarCenterDatabaseImplement.Models } StorekeeperId = model.StorekeeperId; FeatureId = model.FeatureID; - OrderId = model.OrderId; CarBrand = model.CarBrand; Model = model.Model; CarClass = model.CarClass; @@ -114,9 +111,6 @@ namespace CarCenterDatabaseImplement.Models { Id = Id, StorekeeperId = StorekeeperId, - StorekeeperName = Storekeeper?.Name ?? string.Empty,// не понял че было - FeaturePrice = Feature?.Price ?? 0, - OrderId = OrderId, BuyerFCS = Order?.BuyerFCS ?? string.Empty, CarBrand = CarBrand, Model = Model, diff --git a/CarCenter/CarCenterStorekeeperApp/Controllers/HomeController.cs b/CarCenter/CarCenterStorekeeperApp/Controllers/HomeController.cs index a26e7f0..e14e614 100644 --- a/CarCenter/CarCenterStorekeeperApp/Controllers/HomeController.cs +++ b/CarCenter/CarCenterStorekeeperApp/Controllers/HomeController.cs @@ -1,12 +1,14 @@ using CarCenterContracts.BindingModels; using CarCenterContracts.ViewModels; using CarCenterStorekeeperApp.Models; -using ImplementerApp; +using StorekeeperApp; using Microsoft.AspNetCore.Mvc; using StorekeeperApp; using System.Diagnostics; using System.IO; using System.Numerics; +using ImplementerApp; +using CarCenterDataModels.Enums; namespace CarCenterStorekeeperApp.Controllers { @@ -168,6 +170,79 @@ namespace CarCenterStorekeeperApp.Controllers } return View(); } + [HttpGet] + public IActionResult IndexCar() + { + if (UserStorekeeper.user != null) + { + var productions = _data.GetCars(UserStorekeeper.user.Id); + return View(productions); + } + return RedirectToAction("IndexNonReg"); + } + [HttpPost] + public IActionResult IndexCar(int id) + { + _data.DeleteCar(id); + return RedirectToAction("IndexCar"); + } + [HttpGet] + public IActionResult CreateCar(int id) + { + var bundlings = _data.GetBundlings(UserStorekeeper.user!.Id); + var features = _data.GetFeatures(UserStorekeeper.user!.Id); + ViewBag.AllBundlings = bundlings; + ViewBag.Features = features; + if (id != 0) + { + var value = _data.GetCar(id); + if (value != null) + return View(value); + } + return View(new CarViewModel()); + } + [HttpPost] + public IActionResult CreateCar(int id, int year, long VINnumber, CarBrand CarBrand, CarClass CarClass, int FeatureId, string Model, int[] bundlingIds) + { + CarBindingModel model = new CarBindingModel(); + model.Id = id; + model.Year = year; + model.VINnumber = VINnumber; + model.CarBrand = CarBrand; + model.CarClass = CarClass; + model.FeatureID = FeatureId; + model.Model = Model; + model.StorekeeperId = UserStorekeeper.user!.Id; + var bundlings = _data.GetBundlings(UserStorekeeper.user!.Id); + double sum = 0; + for (int i = 0; i < bundlingIds.Length; i++) + { + var bundling = bundlings!.FirstOrDefault(x => x.Id == bundlingIds[i])!; + model.CarBundlings[bundlingIds[i]] = bundling; + sum += bundling.Price; + } + model.Price = sum; + bool changed = false; + if (model.CarBundlings.Count > 0) + { + if (id != 0) + { + changed = _data.UpdateCar(model); + } + else + { + changed = _data.CreateCar(model); + } + } + if (changed) + return RedirectToAction("IndexCar"); + else + { + ViewBag.AllBundlings = bundlings; + return View(model); + } + } + [HttpGet] public IActionResult Privacy() { diff --git a/CarCenter/CarCenterStorekeeperApp/StorekeeperData.cs b/CarCenter/CarCenterStorekeeperApp/StorekeeperData.cs index 0b5bb09..349ded9 100644 --- a/CarCenter/CarCenterStorekeeperApp/StorekeeperData.cs +++ b/CarCenter/CarCenterStorekeeperApp/StorekeeperData.cs @@ -12,13 +12,15 @@ namespace StorekeeperApp private readonly IStorekeeperLogic _storekeeperLogic; private readonly IBundlingLogic _bundlingLogic; private readonly IFeatureLogic _featureLogic; + private readonly ICarLogic _carLogic; - public StorekeeperData(ILogger logger, IStorekeeperLogic storekeeperLogic, IBundlingLogic bundlingLogic, IFeatureLogic featureLogic) + public StorekeeperData(ILogger logger, IStorekeeperLogic storekeeperLogic, IBundlingLogic bundlingLogic, IFeatureLogic featureLogic, ICarLogic carLogic) { _logger = logger; _storekeeperLogic = storekeeperLogic; _bundlingLogic = bundlingLogic; _featureLogic = featureLogic; + _carLogic = carLogic; } public StorekeeperViewModel? Login(string email, string password) @@ -78,7 +80,26 @@ namespace StorekeeperApp { return _featureLogic.ReadElement(new() { Id = id }); } - + public List? GetCars(int userId) + { + return _carLogic.ReadList(new() { StorekeeperId = userId }); + } + public CarViewModel? GetCar(int id) + { + return _carLogic.ReadElement(new() { Id = id }); + } + public bool CreateCar(CarBindingModel model) + { + return _carLogic.Create(model); + } + public bool UpdateCar(CarBindingModel model) + { + return _carLogic.Update(model); + } + public bool DeleteCar(int carId) + { + return _carLogic.Delete(new() { Id = carId }); + } } } diff --git a/CarCenter/CarCenterStorekeeperApp/Views/Home/Cars.cshtml b/CarCenter/CarCenterStorekeeperApp/Views/Home/Cars.cshtml deleted file mode 100644 index 534b4ac..0000000 --- a/CarCenter/CarCenterStorekeeperApp/Views/Home/Cars.cshtml +++ /dev/null @@ -1,102 +0,0 @@ -@using CarCenterContracts.ViewModels -@model List -@{ - ViewData["Title"] = "Cars"; -} -
-

Машины

-
-
- @{ - if (Model == null) - { -

Надо войти в аккаунт.

- return; - } -

- Создать машину - Изменить машину - Удалить машину -

- - - - - - - - - - - - - - - - - - - @foreach (var car in Model) - { - - - - - - - - - - - - - - } - -
- Номер заказа - - Покупатель - - Цена особенности - - Имя кладовщика - - Марка - - Модель - - Класс - - Год выпуска - - Вин-номер - - Цена - - Комплектации -
- @Html.DisplayFor(modelItem => car.OrderId) - - @Html.DisplayFor(modelItem => car.BuyerFCS) - - @Html.DisplayFor(modelItem => car.FeaturePrice) - - @Html.DisplayFor(modelItem => car.StorekeeperName) - - @Html.DisplayFor(modelItem => car.CarBrand) - - @Html.DisplayFor(modelItem => car.Model) - - @Html.DisplayFor(modelItem => car.CarClass) - - @Html.DisplayFor(modelItem => car.Year) - - @Html.DisplayFor(modelItem => car.VINnumber) - - @Html.DisplayFor(modelItem => car.Price) - - @Html.DisplayFor(modelItem => car.CarBundlings) -
- } -
diff --git a/CarCenter/CarCenterStorekeeperApp/Views/Home/CreateCar.cshtml b/CarCenter/CarCenterStorekeeperApp/Views/Home/CreateCar.cshtml new file mode 100644 index 0000000..33017ea --- /dev/null +++ b/CarCenter/CarCenterStorekeeperApp/Views/Home/CreateCar.cshtml @@ -0,0 +1,213 @@ +@using CarCenterContracts.ViewModels; +@using CarCenterDataModels.Enums; + +@model CarViewModel + +@{ + ViewData["Title"] = "CreateCar"; + ViewBag.Bundlings = Model.CarBundlings; +} +
+

Создание автомобиля

+
+
+
+
Марка:
+
+ + +
+
+
+
Модель:
+
+ + +
+
+
+
Класс:
+
+ + +
+
+
+
Год выпуска:
+
+ + +
+
+
+
ВИН-номер:
+
+ + +
+
+
+
Особенность:
+
+ + +
+
+
+
Детали
+
+ + + + + + + + + + + + @foreach (var bundling in ViewBag.Bundlings) + { + + + + + + + + } + +
ID комплектации Стоимость Удалить
+ @bundling.Value.Id + @bundling.Value.Price
+
+ + +
+
+
Сумма:
+
+
+
+
+
+
+
+ + + + + diff --git a/CarCenter/CarCenterStorekeeperApp/Views/Home/Index.cshtml b/CarCenter/CarCenterStorekeeperApp/Views/Home/Index.cshtml index 237ecfa..7ea81a7 100644 --- a/CarCenter/CarCenterStorekeeperApp/Views/Home/Index.cshtml +++ b/CarCenter/CarCenterStorekeeperApp/Views/Home/Index.cshtml @@ -7,6 +7,7 @@
Комплектации Особенности + Автомобили Личные данные @* Меню отчетов *@ Выйти diff --git a/CarCenter/CarCenterStorekeeperApp/Views/Home/IndexCar.cshtml b/CarCenter/CarCenterStorekeeperApp/Views/Home/IndexCar.cshtml new file mode 100644 index 0000000..43bb948 --- /dev/null +++ b/CarCenter/CarCenterStorekeeperApp/Views/Home/IndexCar.cshtml @@ -0,0 +1,82 @@ +@using CarCenterContracts.ViewModels; + +@model List + +@{ + ViewData["Title"] = "Cars"; +} + +
+

Автомобили

+
+ +
+ @{ + if (Model == null) + { +

Авторизируйтесь

+ return; + } +

+ Создать автомобиль +

+ + + + + + + + + + + + + + @foreach (var item in Model) + { + + + + + + + + + + } + +
+ Номер + + Марка + + Модель + + Класс + + ВИН-номер + + Изменить автомобиль + + Удалить автомобиль +
+ @Html.DisplayFor(modelItem => item.Id) + + @Html.DisplayFor(modelItem => item.CarBrand) + + @Html.DisplayFor(modelItem => item.Model) + + @Html.DisplayFor(modelItem => item.CarClass) + + @Html.DisplayFor(modelItem => item.VINnumber) + + Изменить + +
+ + +
+
+ } +
\ No newline at end of file