From bd961535a286fe53fde19e125d1c203d32e72a6b Mon Sep 17 00:00:00 2001 From: Nastya_Kozlova Date: Sun, 28 Apr 2024 21:14:42 +0400 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=D0=B0=20?= =?UTF-8?q?=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D0=B8=20=D0=B2=20=D0=B1=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ViewModels/AdministratorViewModel.cs | 10 +- .../CarCenterDataBaseImplement.csproj | 1 - .../Models/Administrator.cs | 95 +++++++++++++++ .../CarCenterDataBaseImplement/Models/Car.cs | 75 ++++++++++++ .../Models/Equipment.cs | 112 ++++++++++++++++++ .../Models/EquipmentCar.cs | 22 ++++ .../Models/Inspection.cs | 106 +++++++++++++++++ .../Models/InspectionCar.cs | 21 ++++ 8 files changed, 436 insertions(+), 6 deletions(-) create mode 100644 CarCenter/CarCenterDataBaseImplement/Models/Administrator.cs create mode 100644 CarCenter/CarCenterDataBaseImplement/Models/Car.cs create mode 100644 CarCenter/CarCenterDataBaseImplement/Models/Equipment.cs create mode 100644 CarCenter/CarCenterDataBaseImplement/Models/EquipmentCar.cs create mode 100644 CarCenter/CarCenterDataBaseImplement/Models/Inspection.cs create mode 100644 CarCenter/CarCenterDataBaseImplement/Models/InspectionCar.cs diff --git a/CarCenter/CarCenterContracts/ViewModels/AdministratorViewModel.cs b/CarCenter/CarCenterContracts/ViewModels/AdministratorViewModel.cs index b1c36ad..fbc00fc 100644 --- a/CarCenter/CarCenterContracts/ViewModels/AdministratorViewModel.cs +++ b/CarCenter/CarCenterContracts/ViewModels/AdministratorViewModel.cs @@ -13,18 +13,18 @@ namespace CarCenterContracts.ViewModels public int Id { get; set; } [DisplayName("ФИО администратора")] - public string AdministratorFIO { get; } = string.Empty; + public string AdministratorFIO { get; set; } = string.Empty; [DisplayName("Телефон администратора")] - public string AdministratorNumber { get; } = string.Empty; + public string AdministratorNumber { get; set; } = string.Empty; [DisplayName("Логин администратора")] - public string AdministratorLogin { get; } = string.Empty; + public string AdministratorLogin { get; set; } = string.Empty; [DisplayName("Mail администратора")] - public string AdministratorEmail { get; } = string.Empty; + public string AdministratorEmail { get; set; } = string.Empty; [DisplayName("Пароль администратора")] - public string AdministratorPassword { get; } = string.Empty; + public string AdministratorPassword { get; set; } = string.Empty; } } diff --git a/CarCenter/CarCenterDataBaseImplement/CarCenterDataBaseImplement.csproj b/CarCenter/CarCenterDataBaseImplement/CarCenterDataBaseImplement.csproj index 3d9a6c7..66e3a1c 100644 --- a/CarCenter/CarCenterDataBaseImplement/CarCenterDataBaseImplement.csproj +++ b/CarCenter/CarCenterDataBaseImplement/CarCenterDataBaseImplement.csproj @@ -13,7 +13,6 @@ - diff --git a/CarCenter/CarCenterDataBaseImplement/Models/Administrator.cs b/CarCenter/CarCenterDataBaseImplement/Models/Administrator.cs new file mode 100644 index 0000000..2d19a61 --- /dev/null +++ b/CarCenter/CarCenterDataBaseImplement/Models/Administrator.cs @@ -0,0 +1,95 @@ +using CarCenterDataModels.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using CarCenterContracts.BindingModels; +using CarCenterContracts.ViewModels; + +namespace CarCenterDataBaseImplement.Models +{ + public class Administrator : IAdministratorModel + { + public int Id { get; private set; } + + [Required] + public string AdministratorFIO { get; set; } = string.Empty; + + [Required] + public string AdministratorEmail { get; set; } = string.Empty; + + [Required] + public string AdministratorPassword { get; set; } = string.Empty; + + [Required] + public string AdministratorLogin { get; set; } = string.Empty; + + [Required] + public string AdministratorNumber { get; set; } = string.Empty; + + + [ForeignKey("AdministratorId")] + public virtual List Equipments { get; set; } = new(); + + [ForeignKey("AdministratorId")] + public virtual List Cars { get; set; } = new(); + + [ForeignKey("AdministratorId")] + public virtual List Inspections { get; set; } = new(); + public static Administrator? Create(AdministratorBindingModel model) + { + if (model == null) + { + return null; + } + return new Administrator() + { + Id = model.Id, + AdministratorFIO = model.AdministratorFIO, + AdministratorEmail = model.AdministratorEmail, + AdministratorPassword = model.AdministratorPassword, + AdministratorLogin = model.AdministratorLogin, + AdministratorNumber = model.AdministratorNumber + }; + } + public static Administrator Create(AdministratorViewModel model) + { + return new Administrator + { + Id = model.Id, + AdministratorFIO = model.AdministratorFIO, + AdministratorEmail = model.AdministratorEmail, + AdministratorPassword = model.AdministratorPassword, + AdministratorLogin = model.AdministratorLogin, + AdministratorNumber = model.AdministratorNumber + }; + } + public void Update(AdministratorBindingModel model) + { + if (model == null) + { + return; + } + AdministratorFIO = model.AdministratorFIO; + AdministratorEmail = model.AdministratorEmail; + AdministratorPassword = model.AdministratorPassword; + AdministratorLogin = model.AdministratorLogin; + AdministratorNumber = model.AdministratorNumber; + } + public AdministratorViewModel GetViewModel => new() + { + Id = Id, + AdministratorFIO = AdministratorFIO, + AdministratorEmail = AdministratorEmail, + AdministratorPassword = AdministratorPassword, + AdministratorLogin = AdministratorLogin, + AdministratorNumber = AdministratorNumber + }; + + } +} + diff --git a/CarCenter/CarCenterDataBaseImplement/Models/Car.cs b/CarCenter/CarCenterDataBaseImplement/Models/Car.cs new file mode 100644 index 0000000..e8c7376 --- /dev/null +++ b/CarCenter/CarCenterDataBaseImplement/Models/Car.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using CarCenterDataModels.Models; +using CarCenterContracts.BindingModels; +using CarCenterContracts.ViewModels; + +namespace CarCenterDataBaseImplement.Models +{ + public class Car : ICarModel + { + public int Id { get; set; } + public int AdministratorId { get; set; } + + [Required] + public string BrandCar { get; set; } = string.Empty; + + [Required] + public string Model { get; set; } = string.Empty; + + public virtual Administrator Administrator { get; set; } + + [ForeignKey("CarId")] + public virtual List EquipmentCars { get; set; } = new(); + + [ForeignKey("CarId")] + public virtual List InspectionCar { get; set; } = new(); + public static Car? Create(CarBindingModel model) + { + if (model == null) + { + return null; + } + return new Car() + { + Id = model.Id, + BrandCar = model.BrandCar, + AdministratorId = model.AdministratorId, + Model= model.Model + }; + } + public static Car Create(CarViewModel model) + { + return new Car + { + Id = model.Id, + BrandCar = model.BrandCar, + AdministratorId = model.AdministratorId, + Model = model.Model + }; + } + public void Update(CarBindingModel model) + { + if (model == null) + { + return; + } + AdministratorId = model.AdministratorId; + BrandCar = model.BrandCar; + Model = model.Model; + } + public CarViewModel GetViewModel => new() + { + Id = Id, + BrandCar = BrandCar, + AdministratorId = AdministratorId, + Model = Model + }; + } +} diff --git a/CarCenter/CarCenterDataBaseImplement/Models/Equipment.cs b/CarCenter/CarCenterDataBaseImplement/Models/Equipment.cs new file mode 100644 index 0000000..3691f36 --- /dev/null +++ b/CarCenter/CarCenterDataBaseImplement/Models/Equipment.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CarCenterDataModels.Models; +using CarCenterContracts.BindingModels; +using CarCenterContracts.ViewModels; + +namespace CarCenterDataBaseImplement.Models +{ + public class Equipment : IEquipmentModel + { + [Required] + public string EquipmentName { get; set; } = string.Empty; + + [Required] + public double EquipmentPrice { get; set; } + public int AdministratorId { get; private set; } + public int? PreSaleWorkId { get; private set; } + public int Id { get; private set; } + + public virtual Administrator Administrator { get; set; } + public virtual PreSaleWork? PreSaleWork { get; set; } + + [ForeignKey("EquipmentId")] + public virtual List Cars { get; set; } + + private Dictionary _equipmentCars = null; + [NotMapped] + public Dictionary EquipmentCars + { + get + { + if (_equipmentCars == null) + { + using var context = new CarCenterDataBase(); + _equipmentCars = Cars + .ToDictionary(x => x.CarId, x => (context.Cars + .FirstOrDefault(y => y.Id == x.CarId)! as ICarModel)); + } + return _equipmentCars; + } + } + + public static Equipment Create(CarCenterDataBase context, EquipmentBindingModel model) + { + return new Equipment() + { + Id = model.Id, + EquipmentName = model.EquipmentName, + EquipmentPrice = model.EquipmentPrice, + AdministratorId = model.AdministratorId, + PreSaleWorkId = model.PreSaleWorkId, + Cars = model.EquipmentCars.Select(x => new EquipmentCar + { + Car = context.Cars.First(y => y.Id == x.Key), + }).ToList() + }; + } + + public void Update(EquipmentBindingModel model) + { + EquipmentName = model.EquipmentName; + EquipmentPrice = model.EquipmentPrice; + AdministratorId = model.AdministratorId; + PreSaleWorkId = model.PreSaleWorkId; + } + + public EquipmentViewModel GetViewModel => new() + { + Id = Id, + EquipmentName = EquipmentName, + AdministratorId = AdministratorId, + PreSaleWorkId = PreSaleWorkId, + EquipmentPrice = EquipmentPrice, + EquipmentCars = EquipmentCars + }; + + public void UpdateCars(CarCenterDataBase context, EquipmentBindingModel model) + { + var equipmentCars = context.EquipmentCars.Where(rec => rec.RoomId == model.Id).ToList(); + + if (equipmentCars != null && equipmentCars.Any()) + { + context.EquipmentCars.RemoveRange(equipmentCars.Where(rec => !model.EquipmentCars.ContainsKey(rec.CarId))); + context.SaveChanges(); + + foreach (var updateCar in equipmentCars) + { + model.EquipmentCars.Remove(updateCar.CarId); + } + context.SaveChanges(); + } + + var equipment = context.Equipments.First(x => x.Id == Id); + + foreach (var ec in model.EquipmentCars) + { + context.EquipmentCars.Add(new EquipmentCar + { + Equipment = equipment, + Car = context.Cars.First(x => x.Id == ec.Key), + }); + context.SaveChanges(); + } + _equipmentCars = null; + } + } +} diff --git a/CarCenter/CarCenterDataBaseImplement/Models/EquipmentCar.cs b/CarCenter/CarCenterDataBaseImplement/Models/EquipmentCar.cs new file mode 100644 index 0000000..57db56e --- /dev/null +++ b/CarCenter/CarCenterDataBaseImplement/Models/EquipmentCar.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace CarCenterDataBaseImplement.Models +{ + public class EquipmentCar + { + public int Id { get; set; } + public int EquipmentId { get; set; } + public int CarId { get; set; } + + [Required] + public int Count { get; set; } + public virtual Equipment Equipment { get; set; } = new(); + public virtual Car Car { get; set; } = new(); + } +} diff --git a/CarCenter/CarCenterDataBaseImplement/Models/Inspection.cs b/CarCenter/CarCenterDataBaseImplement/Models/Inspection.cs new file mode 100644 index 0000000..2ba22df --- /dev/null +++ b/CarCenter/CarCenterDataBaseImplement/Models/Inspection.cs @@ -0,0 +1,106 @@ +using CarCenterContracts.BindingModels; +using CarCenterContracts.ViewModels; +using CarCenterDataModels.Models; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CarCenterDataBaseImplement.Models +{ + public class Inspection : IInspectionModel + { + public DateTime? InspectionDate { get; set; } + public int AdministratorId { get; private set; } + public int? EmployeeId { get; private set; } + public int Id { get; private set; } + public string InspectionName { get; set; } = string.Empty; + public virtual Administrator Administrator { get; set; } + public virtual Employee? Employee { get; set; } + + [ForeignKey("InspectionId")] + public virtual List Cars { get; set; } + + private Dictionary _inspectionCars = null; + + [NotMapped] + public Dictionary InspectionCars + { + get + { + if (_inspectionCars == null) + { + using var context = new CarCenterDataBase(); + _inspectionCars = Cars + .ToDictionary(x => x.CarId, x => (context.Cars + .FirstOrDefault(y => y.Id == x.CarId)! as ICarModel)); + } + return _inspectionCars; + } + } + public static InspectionCars Create(CarCenterDataBase context, InspectionBindingModel model) + { + return new Inspection() + { + Id = model.Id, + EmployeeId = model.EmployeeId, + AdministratorId = model.AdministratorId, + InspectionName = model.InspectionName, + Cars = model.InspectionCars.Select(x => new InspectionCar + { + Car = context.Cars.First(y => y.Id == x.Key), + }).ToList() + }; + } + + public void Update(InspectionBindingModel model) + { + EmployeeId = model.EmployeeId; + InspectionName = model.InspectionName; + InspectionDate = model.InspectionDate; + } + + public InspectionViewModel GetViewModel => new() + { + Id = Id, + EmployeeId = EmployeeId, + AdministratorId = AdministratorId, + InspectionName = InspectionName, + InspectionDate = InspectionDate, + InspectionCars = InspectionCars, + EmplFIO = Employee?.EmployeeFIO + }; + + public void UpdateCars(CarCenterDataBase context, InspectionBindingModel model) + { + var inspectionCars = context.InspectionCars.Where(rec => rec.InspectionId == model.Id).ToList(); + + if (inspectionCars != null && inspectionCars.Any()) + { + context.InspectionCars.RemoveRange(inspectionCars.Where(rec => !model.InspectionCars.ContainsKey(rec.CarId))); + context.SaveChanges(); + + foreach (var updateCar in inspectionCars) + { + model.InspectionCars.Remove(updateCar.CarId); + } + context.SaveChanges(); + } + + var inspection = context.Inspections.First(x => x.Id == Id); + + foreach (var ic in model.InspectionCars) + { + context.InspectionCars.Add(new InspectionCar + { + Inspection = inspection, + Car = context.Cars.First(x => x.Id == ic.Key) + }); + context.SaveChanges(); + } + _inspectionCars = null; + } + } +} diff --git a/CarCenter/CarCenterDataBaseImplement/Models/InspectionCar.cs b/CarCenter/CarCenterDataBaseImplement/Models/InspectionCar.cs new file mode 100644 index 0000000..dd5b61d --- /dev/null +++ b/CarCenter/CarCenterDataBaseImplement/Models/InspectionCar.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace CarCenterDataBaseImplement.Models +{ + public class InspectionCar + { + public int Id { get; set; } + public int InspectionId { get; set; } + public int CarId { get; set; } + + [Required] + public virtual Inspection Inspection { get; set; } + public virtual Car Car { get; set; } + } +}