diff --git a/BeautySalonView/BeautySalonContracts/BindingModels/ServiceBindingModel.cs b/BeautySalonView/BeautySalonContracts/BindingModels/ServiceBindingModel.cs index c55b0cd..ec74c68 100644 --- a/BeautySalonView/BeautySalonContracts/BindingModels/ServiceBindingModel.cs +++ b/BeautySalonView/BeautySalonContracts/BindingModels/ServiceBindingModel.cs @@ -14,8 +14,18 @@ namespace BeautySalonContracts.BindingModels public string ServiceName { get; set; } = string.Empty; public double ServicePrice { get; set; } public int StaffMemberId { get; set; } - public List ServiceCosmetic { get; set; } = new(); - public List ServiceProcedure { get; set; } = new(); - public List OrderService { get; set; } = new(); + //public List ServiceCosmetic { get; set; } = new(); + //public List ServiceProcedure { get; set; } = new(); + //public List OrderService { get; set; } = new(); + public Dictionary ServiceCosmetics + { + get; + set; + } = new(); + public Dictionary ServiceProcedures + { + get; + set; + } = new(); } } diff --git a/BeautySalonView/BeautySalonContracts/ViewModels/OrderViewModel.cs b/BeautySalonView/BeautySalonContracts/ViewModels/OrderViewModel.cs index dad121d..73b715e 100644 --- a/BeautySalonView/BeautySalonContracts/ViewModels/OrderViewModel.cs +++ b/BeautySalonView/BeautySalonContracts/ViewModels/OrderViewModel.cs @@ -19,6 +19,7 @@ namespace BeautySalonContracts.ViewModels public double OrderAmount { get; set; } public int ClientId { get; set; } + [DisplayName("Клиент")] public List OrderService { get; set; } = new(); public List OrderCosmetic { get; set; } = new(); diff --git a/BeautySalonView/BeautySalonContracts/ViewModels/ServiceViewModel.cs b/BeautySalonView/BeautySalonContracts/ViewModels/ServiceViewModel.cs index f142423..8570677 100644 --- a/BeautySalonView/BeautySalonContracts/ViewModels/ServiceViewModel.cs +++ b/BeautySalonView/BeautySalonContracts/ViewModels/ServiceViewModel.cs @@ -23,9 +23,9 @@ namespace BeautySalonContracts.ViewModels [DisplayName("Сотрудник")] public string StaffMemberName { get; set; } = string.Empty; - public List ServiceCosmetic { get; set; } = new(); - public List ServiceProcedure { get; set; } = new(); - public List OrderService { get; set; } = new(); + Dictionary ServiceCosmetics { get; } //список косметики "участвующей" в заказе + Dictionary ServiceProcedures { get; } //список процедур "участвующих" в заказе + //public List OrderService { get; set; } = new(); } } diff --git a/BeautySalonView/BeautySalonDatabaseImplement/Models/Service.cs b/BeautySalonView/BeautySalonDatabaseImplement/Models/Service.cs index 5131dac..2586d70 100644 --- a/BeautySalonView/BeautySalonDatabaseImplement/Models/Service.cs +++ b/BeautySalonView/BeautySalonDatabaseImplement/Models/Service.cs @@ -27,70 +27,75 @@ namespace BeautySalonDatabaseImplement.Models public int StaffMemberId { get; set; } public virtual StaffMember StaffMember { get; set; } - // связь услуги и заказов многие - ко - многим - [ForeignKey("ServiceId")] - public virtual List Orders { get; set; } = new(); - - // связь услуги и косметки многие - ко - многим - [ForeignKey("ServiceId")] - public virtual List Cosmetics { get; set; } = new(); - - // связь услуги и косметки многие - ко - многим - [ForeignKey("ServiceId")] - public virtual List Procedures { get; set; } = new(); - - private List? _serviceProcedures = null; + private Dictionary? _serviceCosmetics = null;//Это поле для хранения словаря OrderCosmetics. [NotMapped] - public List ServiceProcedures + public Dictionary ServiceCosmetics//представляет список косметики, участвующей в заказе. Не присутствует в базе данных. { get { - _serviceProcedures ??= Procedures - .Select(pc => new ServiceProcedureViewModel(pc.Procedure.GetViewModel, pc.ServiceProcedureCount)) - .ToList(); - return _serviceProcedures; - } - } - - private List? _serviceCosmetics = null; - [NotMapped] - public List ServiceCosmetics - { - get - { - _serviceCosmetics ??= Cosmetics - .Select(pc => new ServiceCosmeticViewModel(pc.Cosmetic.GetViewModel, pc.Service.GetViewModel, pc.ServiceCosmeticCount)) - .ToList(); + if (_serviceCosmetics == null) + { + _serviceCosmetics = Cosmetics + .ToDictionary(recPC => recPC.CosmeticId, recPC => recPC.Cosmetic.CosmeticName); + } return _serviceCosmetics; } } + [ForeignKey("serviceId")] + public virtual List Cosmetics { get; set; } = new();//представляет список косметических товаров для данного заказа. + + + + private Dictionary? _serviceProcedures = null;//Это поле для хранения словаря OrderCosmetics. + [NotMapped] + public Dictionary ServiceProcedures//представляет список косметики, участвующей в заказе. Не присутствует в базе данных. + { + get + { + if (_serviceProcedures == null) + { + _serviceProcedures = Procedures + .ToDictionary(recPC => recPC.ProcedureId, recPC => recPC.Procedure.ProcedureName); + } + return _serviceProcedures; + } + } + [ForeignKey("ServiceId")] + public virtual List Procedures { get; set; } = new();//представляет список косметических товаров для данного заказа. public static Service Create(BeautySalonDatabase context, ServiceBindingModel model) { - return new Service() + if (model == null) + { + return null; + } + var service = new Service() { Id = model.Id, ServiceName = model.ServiceName, ServicePrice = model.ServicePrice, - Cosmetics = model.ServiceCosmetic.Select(x => new ServiceCosmetic() + StaffMemberId = model.StaffMemberId, + Cosmetics = model.ServiceCosmetics.Select(x => new ServiceCosmetic { - Cosmetic = context.Cosmetics.First(y => y.Id == x.Cosmetic.Id), - ServiceCosmeticCount = x.Count + Cosmetic = context.Cosmetics.First(y => y.Id == x.Key) }).ToList(), - Procedures = model.ServiceProcedure.Select(x => new ServiceProcedure() + Procedures = model.ServiceProcedures.Select(x => new ServiceProcedure { - Procedure = context.Procedures.First(y => y.Id == x.Procedure.Id), - ServiceProcedureCount = x.Count - }).ToList(), - StaffMemberId = model.StaffMemberId + Procedure = context.Procedures.First(y => y.Id == x.Key) + }).ToList() }; + + return service; } + public void Update(ServiceBindingModel model) { ServiceName = model.ServiceName; ServicePrice = model.ServicePrice; StaffMemberId = model.StaffMemberId; + + } public ServiceViewModel GetViewModel => new() @@ -103,46 +108,63 @@ namespace BeautySalonDatabaseImplement.Models StaffMemberId = StaffMemberId, }; + + public void UpdateCosmetics(BeautySalonDatabase context, ServiceBindingModel model) { - var serviceCosmetics = context.ServiceCosmetics - .Where(x => x.ServiceId == model.Id) - .ToList(); - context.ServiceCosmetics - .RemoveRange(serviceCosmetics); + var serviceCosmetics = context.ServiceCosmetics.Where(rec => rec.ServiceId == model.Id).ToList(); + if (serviceCosmetics != null && serviceCosmetics.Count > 0) + { // удалили те, которых нет в модели + context.ServiceCosmetics.RemoveRange(serviceCosmetics.Where(rec => !model.ServiceCosmetics.ContainsKey(rec.CosmeticId))); + context.SaveChanges(); + // обновили количество у существующих записей + foreach (var updateCosmetic in serviceCosmetics) + { + model.ServiceCosmetics.Remove(updateCosmetic.CosmeticId); + } + context.SaveChanges(); + } var service = context.Services.First(x => x.Id == Id); - foreach (var record in model.ServiceCosmetic) + foreach (var rp in model.ServiceCosmetics) { context.ServiceCosmetics.Add(new ServiceCosmetic { Service = service, - Cosmetic = context.Cosmetics.First(x => x.Id == record.Cosmetic.Id), - ServiceCosmeticCount = record.Count + Cosmetic = context.Cosmetics.First(x => x.Id == rp.Key), }); context.SaveChanges(); } _serviceCosmetics = null; } + public void UpdateProcedures(BeautySalonDatabase context, ServiceBindingModel model) { - var serviceProcedures = context.ServiceProcedures - .Where(x => x.ServiceId == model.Id) - .ToList(); - context.ServiceProcedures - .RemoveRange(serviceProcedures); + var serviceProcedures = context.ServiceProcedures.Where(rec => rec.ServiceId == model.Id).ToList(); + if (serviceProcedures != null && serviceProcedures.Count > 0) + { // удалили те, которых нет в модели + context.ServiceProcedures.RemoveRange(serviceProcedures.Where(rec => !model.ServiceProcedures.ContainsKey(rec.ProcedureId))); + context.SaveChanges(); + // обновили количество у существующих записей + foreach (var updateCosmetic in serviceProcedures) + { + model.ServiceProcedures.Remove(updateCosmetic.ProcedureId); + } + context.SaveChanges(); + } var service = context.Services.First(x => x.Id == Id); - foreach (var record in model.ServiceProcedure) + foreach (var rp in model.ServiceProcedures) { context.ServiceProcedures.Add(new ServiceProcedure { Service = service, - Procedure = context.Procedures.First(x => x.Id == record.Procedure.Id), - ServiceProcedureCount = record.Count + Procedure = context.Procedures.First(x => x.Id == rp.Key), }); context.SaveChanges(); } _serviceProcedures = null; } + + } }