From bed8ee9b950f535f12ba1395b201b343218a33a5 Mon Sep 17 00:00:00 2001 From: artiogf Date: Fri, 28 Apr 2023 22:02:47 +0400 Subject: [PATCH] ISPOLNITEL_3_SUHNOSTI --- .../BindingModels/ExecurtionBindingModel.cs | 12 +- .../BindingModels/GidBindingModel.cs | 8 +- .../BindingModels/TourBindingModel.cs | 16 +- .../ViewModels/ExecurtionViewModel.cs | 8 +- .../ViewModels/GidViewModel.cs | 7 +- .../ViewModels/TourViewModel.cs | 10 +- TourCompanyDataModels/Models/GidTrip.cs | 12 ++ .../Models/IExecurtionModel.cs | 2 - TourCompanyDataModels/Models/IGidModel.cs | 13 +- .../Models/Execurtion.cs | 116 +++++++++++++ .../Models/ExecurtionTour.cs | 24 +++ TourCompanyDatabaseImplement/Models/Gid.cs | 101 ++++++++++++ .../Models/GidExecurtion.cs | 24 +++ .../Models/PlaceVisit.cs | 12 ++ TourCompanyDatabaseImplement/Models/Tour.cs | 155 ++++++++++++++++++ .../Models/TourGroup.cs | 97 +++++++++++ .../Models/TourGroupTour.cs | 29 ++++ TourCompanyDatabaseImplement/Models/User.cs | 19 +++ 18 files changed, 631 insertions(+), 34 deletions(-) create mode 100644 TourCompanyDataModels/Models/GidTrip.cs create mode 100644 TourCompanyDatabaseImplement/Models/Execurtion.cs create mode 100644 TourCompanyDatabaseImplement/Models/ExecurtionTour.cs create mode 100644 TourCompanyDatabaseImplement/Models/Gid.cs create mode 100644 TourCompanyDatabaseImplement/Models/GidExecurtion.cs create mode 100644 TourCompanyDatabaseImplement/Models/PlaceVisit.cs create mode 100644 TourCompanyDatabaseImplement/Models/Tour.cs create mode 100644 TourCompanyDatabaseImplement/Models/TourGroup.cs create mode 100644 TourCompanyDatabaseImplement/Models/TourGroupTour.cs create mode 100644 TourCompanyDatabaseImplement/Models/User.cs diff --git a/TourCompanyContracts/BindingModels/ExecurtionBindingModel.cs b/TourCompanyContracts/BindingModels/ExecurtionBindingModel.cs index 6b9685e..6545bae 100644 --- a/TourCompanyContracts/BindingModels/ExecurtionBindingModel.cs +++ b/TourCompanyContracts/BindingModels/ExecurtionBindingModel.cs @@ -16,11 +16,15 @@ namespace TourCompanyContracts.BindingModels public DateTime Date { get; set; } public int GidId { get; set; } + public string GidFIO { get; set; } = string.Empty; - public int UserId { get; set; } - public string TourName { get; set; } = string.Empty; + public int UserId { get; set; } + public string UserFIO { get; set; } = string.Empty; - public Dictionary ExecurtionTours { get; set; } = new(); - } + public int TuorId { get; set; } + + public Dictionary ExecurtionTours { get; set; } = new(); + public Dictionary ExecurtionGids { get; set; } = new(); + } } diff --git a/TourCompanyContracts/BindingModels/GidBindingModel.cs b/TourCompanyContracts/BindingModels/GidBindingModel.cs index a0a3568..831b80e 100644 --- a/TourCompanyContracts/BindingModels/GidBindingModel.cs +++ b/TourCompanyContracts/BindingModels/GidBindingModel.cs @@ -16,10 +16,12 @@ namespace TourCompanyContracts.BindingModels public int Experion { get; set; } public int TripId { get; set; } - public string TripName { get; set; } = string.Empty; + public Dictionary GidTrips { get; set; } = new(); - public int UserId { get; set; } + public int UserId { get; set; } public int ExecurtionId { get; set; } - } + public Dictionary GidExecurtions { get; set; } = new(); + + } } diff --git a/TourCompanyContracts/BindingModels/TourBindingModel.cs b/TourCompanyContracts/BindingModels/TourBindingModel.cs index 401c1a3..850fdaf 100644 --- a/TourCompanyContracts/BindingModels/TourBindingModel.cs +++ b/TourCompanyContracts/BindingModels/TourBindingModel.cs @@ -9,16 +9,18 @@ namespace TourCompanyContracts.BindingModels { public class TourBindingModel { - public int Id { get; set; } + public int Id { get; set; } - public string TourName { get; set; } = string.Empty; + public string TourName { get; set; } = string.Empty; + public int ExecurtionId { get; set; } + public int TourGroupId { get; set; } - public decimal Price { get; set; } + public decimal Price { get; set; } - public int UserId { get; set; } + public int UserId { get; set; } - public Dictionary ExecurtionTours { get; set; } = new(); + public Dictionary TourExecurtions { get; set; } = new(); - public Dictionary TourGroups { get; set; } = new(); - } + public Dictionary TourTourGroups { get; set; } = new(); + } } diff --git a/TourCompanyContracts/ViewModels/ExecurtionViewModel.cs b/TourCompanyContracts/ViewModels/ExecurtionViewModel.cs index 1bc46b3..d333bb9 100644 --- a/TourCompanyContracts/ViewModels/ExecurtionViewModel.cs +++ b/TourCompanyContracts/ViewModels/ExecurtionViewModel.cs @@ -15,12 +15,12 @@ namespace TourCompanyContracts.ViewModels public DateTime Date { get; set; } - public int Duration { get; set; } - public int GidId { get; set; } public int UserId { get; set; } + public int TourId { get; set; } - public Dictionary ExecurtionTours { get; set; } = new(); - } + public Dictionary ExecurtionTours { get; set; } = new(); + public Dictionary ExecurtionGids { get; set; } = new(); + } } diff --git a/TourCompanyContracts/ViewModels/GidViewModel.cs b/TourCompanyContracts/ViewModels/GidViewModel.cs index 0ba800a..c3e2cb0 100644 --- a/TourCompanyContracts/ViewModels/GidViewModel.cs +++ b/TourCompanyContracts/ViewModels/GidViewModel.cs @@ -16,10 +16,11 @@ namespace TourCompanyContracts.ViewModels public int Experion { get; set; } public int TripId { get; set; } - public string TripName { get; set; } = string.Empty; + public Dictionary GidTrips { get; set; } = new(); - public int UserId { get; set; } + public int UserId { get; set; } public int ExecurtionId { get; set; } - } + public Dictionary GidExecurtions { get; set; } = new(); + } } diff --git a/TourCompanyContracts/ViewModels/TourViewModel.cs b/TourCompanyContracts/ViewModels/TourViewModel.cs index 7ffa696..0ca1002 100644 --- a/TourCompanyContracts/ViewModels/TourViewModel.cs +++ b/TourCompanyContracts/ViewModels/TourViewModel.cs @@ -12,13 +12,15 @@ namespace TourCompanyContracts.ViewModels public int Id { get; set; } public string TourName { get; set; } = string.Empty; + public int ExecurtionId { get; set; } + public int TourGroupId { get; set; } - public decimal Price { get; set; } + public decimal Price { get; set; } public int UserId { get; set; } - public Dictionary ExecurtionTours { get; set; } = new(); + public Dictionary TourExecurtions { get; set; } = new(); - public Dictionary TourGroups { get; set; } = new(); - } + public Dictionary TourTourGroups { get; set; } = new(); + } } diff --git a/TourCompanyDataModels/Models/GidTrip.cs b/TourCompanyDataModels/Models/GidTrip.cs new file mode 100644 index 0000000..14b2ff2 --- /dev/null +++ b/TourCompanyDataModels/Models/GidTrip.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TourCompanyDataModels.Models +{ + internal class GidTrip + { + } +} diff --git a/TourCompanyDataModels/Models/IExecurtionModel.cs b/TourCompanyDataModels/Models/IExecurtionModel.cs index ff43621..ef0c431 100644 --- a/TourCompanyDataModels/Models/IExecurtionModel.cs +++ b/TourCompanyDataModels/Models/IExecurtionModel.cs @@ -13,8 +13,6 @@ namespace TourCompanyDataModels.Models public DateTime Date { get; } - public int Duration { get; } - public int GidId { get; } public int UserId { get; } diff --git a/TourCompanyDataModels/Models/IGidModel.cs b/TourCompanyDataModels/Models/IGidModel.cs index 16ddf03..d0b2b97 100644 --- a/TourCompanyDataModels/Models/IGidModel.cs +++ b/TourCompanyDataModels/Models/IGidModel.cs @@ -9,15 +9,14 @@ namespace TourCompanyDataModels.Models { public interface IGidModel : IId { - public string FIO { get;} + public string FIO { get;} - public int Experion { get; } + public int Experion { get;} - public int TripId { get; } - public string TripName { get; } + public Dictionary GidTrips { get;} - public int UserId { get; } + public int UserId { get;} - public int ExecurtionId { get; } - } + public Dictionary GidExecurtions { get; } + } } diff --git a/TourCompanyDatabaseImplement/Models/Execurtion.cs b/TourCompanyDatabaseImplement/Models/Execurtion.cs new file mode 100644 index 0000000..7df5201 --- /dev/null +++ b/TourCompanyDatabaseImplement/Models/Execurtion.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TourCompanyContracts.BindingModels; +using TourCompanyContracts.ViewModels; +using TourCompanyDataModels.Models; + +namespace TourCompanyDatabaseImplement.Models +{ + public class Execurtion : IExecurtionModel + { + public int Id { get; set; } + + public string Purpose { get; set; } = string.Empty; + + public DateTime Date { get; set; } + + public int GidId { get; set; } + + public int UserId { get; set; } + public int TourId { get; set; } + + public Dictionary? _execurtionTours = null; + public Dictionary? _execurtionGids = null; + public virtual List Gids { get; set; } = new(); + public virtual List Tours { get; set; } = new(); + + public Dictionary ExecurtionGids + { + get + { + if (_execurtionGids == null) + { + _execurtionGids = Gids + .ToDictionary(recPC => recPC.GidId, recPC => recPC.Gid as IGidModel); + } + return _execurtionGids; + } + } + public Dictionary ExecurtionTours + { + get + { + if (_execurtionTours == null) + { + _execurtionTours = Tours + .ToDictionary(recPC => recPC.TourId, recPC => recPC.Tour as ITourModel); + } + return _execurtionTours; + } + } + public static Execurtion Create(TourCompanyDatabase context, ExecurtionBindingModel model) + { + return new Execurtion() + { + Id = model.Id, + Purpose = model.Purpose, + Date = model.Date, + UserId = model.UserId, + Gids = model.ExecurtionGids.Select(x => new GidExecurtion + { + Gid = context.Gids.First(y => y.Id == x.Key) + }).ToList() + }; + } + public void Update(ExecurtionBindingModel model) + { + Purpose = model.Purpose; + Date = model.Date; + } + public ExecurtionViewModel GetViewModel + { + get + { + using var context = new TourCompanyDatabase(); + return new ExecurtionViewModel + { + Id = Id, + Purpose = Purpose, + Date = Date, + UserId = UserId, + ExecurtionGids = ExecurtionGids + }; + } + } + public void UpdateGids(TourCompanyDatabase context, ExecurtionBindingModel model) + { + var execurtionGids = context.ExecurtionGids.Where(rec => rec.ExecurtionId == model.Id).ToList(); + if (execurtionGids != null && execurtionGids.dateExecurtion != null) + { // удалили те, которых нет в модели + context.ExecurtionGids.RemoveRange(execurtionGids.Where(rec => !model.ExecurtionGids.ContainsKey(rec.GidId))); + context.SaveChanges(); + // обновили количество у существующих записей + foreach (var UpdateExecurtion in execurtionGids) + { + UpdateExecurtion.dateExecurtion = model.ExecurtionGids[UpdateExecurtion.GidId].Item2; + model.ExecurtionGids.Remove(UpdateExecurtion.GidId); + } + context.SaveChanges(); + } + var execurtion = context.Gids.First(x => x.Id == Id); + foreach (var pc in model.ExecurtionGids) + { + context.ExecurtionGids.Add(new GidExecurtion + { + Execurtion = execurtion, + Gid = context.Gids.First(x => x.Id == pc.Key) + }); + context.SaveChanges(); + } + _execurtionGids = null; + } + } +} diff --git a/TourCompanyDatabaseImplement/Models/ExecurtionTour.cs b/TourCompanyDatabaseImplement/Models/ExecurtionTour.cs new file mode 100644 index 0000000..7331562 --- /dev/null +++ b/TourCompanyDatabaseImplement/Models/ExecurtionTour.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TourCompanyDatabaseImplement.Models +{ + public class ExecurtionTour + { + public int Id { get; set; } + + [Required] + public int TourId { get; set; } + + [Required] + public int ExecurtionId { get; set; } + public DateTime dateExecurtion { get; set; } + public virtual Tour Tour { get; set; } = new(); + + public virtual Execurtion Execurtion { get; set; } = new(); + } +} diff --git a/TourCompanyDatabaseImplement/Models/Gid.cs b/TourCompanyDatabaseImplement/Models/Gid.cs new file mode 100644 index 0000000..8f61f07 --- /dev/null +++ b/TourCompanyDatabaseImplement/Models/Gid.cs @@ -0,0 +1,101 @@ +using TourCompanyDatabaseImplement.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TourCompanyContracts.BindingModels; +using TourCompanyContracts.ViewModels; +using TourCompanyDataModels.Models; + +namespace TourCompanyDatabaseImplement.Models +{ + public class Gid : IGidModel + { + public int Id { get; set; } + + public string FIO { get; set; } = string.Empty; + + public int Experion { get; set; } + + public int UserId { get; set; } + public Dictionary? _gidExecurtions = null; + public virtual List Execurtions { get; set; } = new(); + public Dictionary GidExecurtions + { + get + { + if (_gidExecurtions == null) + { + _gidExecurtions = Execurtions + .ToDictionary(recPC => recPC.ExecurtionId, recPC => (recPC.Execurtion as IExecurtionModel, recPC.dateExecurtion)); + } + return _gidExecurtions; + } + } + public static Gid Create(TourCompanyDatabase context, GidBindingModel model) + { + return new Gid() + { + Id = model.Id, + FIO = model.FIO, + Experion = model.Experion, + UserId = model.UserId, + Execurtions = model.GidExecurtions.Select(x => new GidExecurtion + { + Execurtion = context.Execurtions.First(y => y.Id == x.Key), + dateExecurtion = x.Value.Item2 + }).ToList() + }; + } + public void Update(GidBindingModel model) + { + FIO = model.FIO; + Experion = model.Experion; + } + public GidViewModel GetViewModel + { + get + { + using var context = new TourCompanyDatabase(); + return new GidViewModel + { + Id = Id, + FIO = FIO, + Experion = Experion, + UserId = UserId, + GidExecurtions = GidExecurtions + }; + } + } + public void UpdateExecurtions(TourCompanyDatabase context, GidBindingModel model) + { + var gidExecurtions = context.GidExecurtions.Where(rec => rec.GidId == model.Id).ToList(); + if (gidExecurtions != null && gidExecurtions.dateExecurtion != null) + { // удалили те, которых нет в модели + context.GidExecurtions.RemoveRange(gidExecurtions.Where(rec => !model.GidExecurtions.ContainsKey(rec.ExecurtionId))); + context.SaveChanges(); + // обновили количество у существующих записей + foreach (var UpdateExecurtion in gidExecurtions) + { + UpdateExecurtion.dateExecurtion = model.GidExecurtions[UpdateExecurtion.ExecurtionId].Item2; + model.GidExecurtions.Remove(UpdateExecurtion.Id); + } + context.SaveChanges(); + } + var gid = context.Gids.First(x => x.Id == Id); + foreach (var pc in model.GidExecurtions) + { + context.GidExecurtions.Add(new GidExecurtion + { + Gid = gid, + Execurtion = context.Execurtions.First(x => x.Id == pc.Key), + dateExecurtion = pc.Value.Item2 + }); + context.SaveChanges(); + } + _gidExecurtions = null; + } + + } +} diff --git a/TourCompanyDatabaseImplement/Models/GidExecurtion.cs b/TourCompanyDatabaseImplement/Models/GidExecurtion.cs new file mode 100644 index 0000000..ffa4628 --- /dev/null +++ b/TourCompanyDatabaseImplement/Models/GidExecurtion.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TourCompanyDatabaseImplement.Models +{ + public class GidExecurtion + { + public int Id { get; set; } + + [Required] + public int GidId { get; set; } + + [Required] + public int ExecurtionId { get; set; } + public DateTime dateExecurtion { get; set; } + public virtual Gid Gid { get; set; } = new(); + + public virtual Execurtion Execurtion { get; set; } = new(); + } +} diff --git a/TourCompanyDatabaseImplement/Models/PlaceVisit.cs b/TourCompanyDatabaseImplement/Models/PlaceVisit.cs new file mode 100644 index 0000000..fd79923 --- /dev/null +++ b/TourCompanyDatabaseImplement/Models/PlaceVisit.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TourCompanyDatabaseImplement.Models +{ + internal class PlaceVisit + { + } +} diff --git a/TourCompanyDatabaseImplement/Models/Tour.cs b/TourCompanyDatabaseImplement/Models/Tour.cs new file mode 100644 index 0000000..a301cc9 --- /dev/null +++ b/TourCompanyDatabaseImplement/Models/Tour.cs @@ -0,0 +1,155 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TourCompanyContracts.BindingModels; +using TourCompanyContracts.ViewModels; +using TourCompanyDataModels.Models; + +namespace TourCompanyDatabaseImplement.Models +{ + internal class Tour + { + public int Id { get; set; } + + public string TourName { get; set; } = string.Empty; + public int ExecurtionId { get; set; } + public int TourGroupId { get; set; } + + public decimal Price { get; set; } + + public int UserId { get; set; } + + public Dictionary? _tourExecurtions = null; + + public Dictionary? _tourTourGroups = null; + public virtual List TourGroups { get; set; } = new(); + public virtual List Execurtions { get; set; } = new(); + + public Dictionary TourExecurtions + { + get + { + if (_tourExecurtions == null) + { + _tourExecurtions = Execurtions + .ToDictionary(recPC => recPC.ExecurtionId, recPC => (recPC.Execurtion as IExecurtionModel, recPC.Execurtion.Date)); + } + return _tourExecurtions; + } + } + public Dictionary TourTourGroups + { + get + { + if (_tourTourGroups == null) + { + _tourTourGroups = TourGroups + .ToDictionary(recPC => recPC.TourGroupId, recPC => (recPC.TourGroup as ITourGroupModel, recPC.TourGroup.Number)); + } + return _tourTourGroups; + } + } + public static Tour Create(TourCompanyDatabase context, TourBindingModel model) + { + return new Tour() + { + Id = model.Id, + TourName = model.TourName, + Price = model.Price, + UserId = model.UserId, + Execurtions = model.TourExecurtions.Select(x => new GidExecurtion + { + Execurtion = context.Execurtions.First(y => y.Id == x.Key), + dateExecurtion = x.Value.Item2 + }).ToList(), + TourGroups = model.TourTourGroups.Select(x => new TourGroupTour + { + TourGroup = context.TourGroups.First(y => y.Id == x.Key), + TourGroupName = x.Value.Item2 + }).ToList() + + }; + } + public void Update(TourBindingModel model) + { + TourName = model.TourName; + Price = model.Price; + } + public TourViewModel GetViewModel + { + get + { + using var context = new TourCompanyDatabase(); + return new TourViewModel + { + Id = Id, + TourName = TourName, + Price = Price, + UserId = UserId, + TourExecurtions = TourExecurtions, + TourTourGroups = TourTourGroups + }; + } + } + public void UpdateExecurtions(TourCompanyDatabase context, TourBindingModel model) + { + var tourExecurtions = context.TourExecurtions.Where(rec => rec.TourId == model.Id).ToList(); + if (tourExecurtions != null && tourExecurtions.dateExecurtion != null) + { // удалили те, которых нет в модели + context.TourExecurtions.RemoveRange(tourExecurtions.Where(rec => !model.TourExecurtions.ContainsKey(rec.ExecurtionId))); + context.SaveChanges(); + // обновили количество у существующих записей + foreach (var UpdateExecurtion in tourExecurtions) + { + UpdateExecurtion.dateExecurtion = model.TourExecurtions[UpdateExecurtion.ExecurtionId].Item2; + model.TourExecurtions.Remove(UpdateExecurtion.ExecurtionId); + } + context.SaveChanges(); + } + var tour = context.Tours.First(x => x.Id == Id); + foreach (var pc in model.TourExecurtions) + { + context.TourExecurtions.Add(new ExecurtionTour + { + Tour = tour, + Execurtion = context.Execurtions.First(x => x.Id == pc.Key), + dateExecurtion = pc.Value.Item2 + }); + context.SaveChanges(); + } + _tourExecurtions = null; + } + public void UpdateTourGroups(TourCompanyDatabase context, TourBindingModel model) + { + var tourTourGroups = context.TourTourGroups.Where(rec => rec.TourId == model.Id).ToList(); + if (tourTourGroups != null && tourTourGroups.dateExecurtion != null) + { // удалили те, которых нет в модели + context.TourTourGroups.RemoveRange(tourTourGroups.Where(rec => !model.TourTourGroups.ContainsKey(rec.TourGroupId))); + context.SaveChanges(); + // обновили количество у существующих записей + foreach (var UpdateTourGroup in tourTourGroups) + { + UpdateTourGroup.TourGroupName = model.TourTourGroups[UpdateTourGroup.TourGroupId].Item2; + model.TourTourGroups.Remove(UpdateTourGroup.TourGroupId); + } + context.SaveChanges(); + } + var tour = context.Tours.First(x => x.Id == Id); + foreach (var pc in model.TourTourGroups) + { + context.TourTourGroups.Add(new TourGroupTour + { + Tour = tour, + TourGroup = context.TourGroups.First(x => x.Id == pc.Key), + TourGroupName = pc.Value.Item2 + }); + context.SaveChanges(); + } + _tourTourGroups = null; + } + + + } +} diff --git a/TourCompanyDatabaseImplement/Models/TourGroup.cs b/TourCompanyDatabaseImplement/Models/TourGroup.cs new file mode 100644 index 0000000..fe2f9be --- /dev/null +++ b/TourCompanyDatabaseImplement/Models/TourGroup.cs @@ -0,0 +1,97 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TourCompanyDataModels.Enums; +using TourCompanyDataModels.Models; +using TourCompanyContracts.BindingModels; +using TourCompanyContracts.ViewModels; +using TourCompanyDataModels.Models; +using System.Diagnostics; +using System.Reflection; + +namespace TourCompanyDatabaseImplement.Models +{ + internal class TourGroup : ITourGroupModel + { + public int Id { get; set; } + + public string Number { get; set; } = string.Empty; + + public TourType Type { get; set; } + + public int UserId { get; set; } + public Dictionary? _tourGroupTours = null; + public virtual List Tours { get; set; } = new(); + public virtual List Users { get; set; } = new(); + public Dictionary TourGroupTours + { + get + { + if (_tourGroupTours == null) + { + _tourGroupTours = Tours + .ToDictionary(recPC => recPC.TourId, recPC => (recPC.Tour as ITourModel, recPC.Price)); + } + return _tourGroupTours; + } + } + public static TourGroup Create(TourCompanyDatabase context, TourGroupBindingModel model) + { + return new TourGroup() + { + Id = model.Id, + Number = model.Number, + Type = model.Type, + UserId = model.UserId, + Tours = model.TourGroupTours.Select(x => new TourGroupTour{ + Tour = context.Tours.First(y => y.Id == x.Key), + Price = x.Value.Item2 + }).ToList() + }; + } + public void Update(TourGroupBindingModel model) + { + Number = model.Number; + Type = model.Type; + } + public TourGroupViewModel GetViewModel => new() + { + Id = Id, + Number = Number, + Type = Type, + UserId = UserId, + TourGroupTours = TourGroupTours + }; + + public void UpdateTours(TourCompanyDatabase context, TourGroupBindingModel model) + { + var tourGroupTours = context.TourGroupTours.Where(rec => rec.TourId == model.Id).ToList(); + if (tourGroupTours != null && tourGroupTours.Price > 0) + { // удалили те, которых нет в модели + context.TourGroupTours.RemoveRange(tourGroupTours.Where(rec => !model.TourGroupTours.ContainsKey(rec.TourId))); + context.SaveChanges(); + // обновили количество у существующих записей + foreach (var updateTour in tourGroupTours) + { + updateTour.Price = model.TourGroupTours[updateTour.TourId].Item2; + model.TourGroupTours.Remove(updateTour.TourId); + } + context.SaveChanges(); + } + var tourGroup = context.TourGroups.First(x => x.Id == Id); + foreach (var pc in model.TourGroupTours) + { + context.TourGroupTours.Add(new TourGroupTour + { + TourGroup = tourGroup, + Tour = context.Tours.First(x => x.Id == pc.Key), + Price = pc.Value.Item2 + }); + context.SaveChanges(); + } + _tourGroupTours = null; + } + } +} diff --git a/TourCompanyDatabaseImplement/Models/TourGroupTour.cs b/TourCompanyDatabaseImplement/Models/TourGroupTour.cs new file mode 100644 index 0000000..18d5127 --- /dev/null +++ b/TourCompanyDatabaseImplement/Models/TourGroupTour.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TourCompanyDatabaseImplement.Models +{ + internal class TourGroupTour + { + public int Id { get; set; } + + [Required] + public int TourGroupId { get; set; } + + [Required] + public int TourId { get; set; } + public string TourGroupName { get; set; } + + public decimal Price { get; set; } + + public virtual TourGroup TourGroup { get; set; } = new(); + + public virtual Tour Tour { get; set; } = new(); + + } +} diff --git a/TourCompanyDatabaseImplement/Models/User.cs b/TourCompanyDatabaseImplement/Models/User.cs new file mode 100644 index 0000000..b894618 --- /dev/null +++ b/TourCompanyDatabaseImplement/Models/User.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TourCompanyDatabaseImplement.Models +{ + internal class User + { + public int Id { get; set; } + + public string FIO { get; set; } = string.Empty; + + public string Email { get; set; } = string.Empty; + + public string Password { get; set; } = string.Empty; + } +}