From c751e67f1b9505fd83e4666f64d06fb235d1f077 Mon Sep 17 00:00:00 2001 From: ChaZIR Date: Tue, 30 Apr 2024 20:09:51 +0400 Subject: [PATCH] =?UTF-8?q?=D0=B1=D0=B4=20=D0=BF=D0=BB=D0=B0=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=BF=D0=BB=D0=B0=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ContractorImplements/ContractorStorage.cs | 106 +++++++++++++++ .../ExcursionGroupStorage.cs | 112 ++++++++++++++++ .../ContractorImplements/ExcursionStorage.cs | 123 ++++++++++++++++++ .../ContractorImplements/TourStorage.cs | 108 +++++++++++++++ .../Models/ContractorModels/Contractor.cs | 88 +++++++++++++ .../Models/ContractorModels/Excursion.cs | 67 ++++++++++ .../Models/ContractorModels/ExcursionGroup.cs | 109 ++++++++++++++++ .../ContractorModels/ExcursionGroupTour.cs | 24 ++++ .../Models/ContractorModels/ExcursionTour.cs | 24 ++++ .../Models/ContractorModels/Tour.cs | 69 ++++++++++ .../TravelCompanyDatabase.cs | 23 ++-- .../TravelCompanyDatabaseImplement.csproj | 5 - 12 files changed, 839 insertions(+), 19 deletions(-) create mode 100644 TravelCompany/TravelCompanyDatabaseImplement/Implements/ContractorImplements/ContractorStorage.cs create mode 100644 TravelCompany/TravelCompanyDatabaseImplement/Implements/ContractorImplements/ExcursionGroupStorage.cs create mode 100644 TravelCompany/TravelCompanyDatabaseImplement/Implements/ContractorImplements/ExcursionStorage.cs create mode 100644 TravelCompany/TravelCompanyDatabaseImplement/Implements/ContractorImplements/TourStorage.cs create mode 100644 TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/Contractor.cs create mode 100644 TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/Excursion.cs create mode 100644 TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/ExcursionGroup.cs create mode 100644 TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/ExcursionGroupTour.cs create mode 100644 TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/ExcursionTour.cs create mode 100644 TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/Tour.cs diff --git a/TravelCompany/TravelCompanyDatabaseImplement/Implements/ContractorImplements/ContractorStorage.cs b/TravelCompany/TravelCompanyDatabaseImplement/Implements/ContractorImplements/ContractorStorage.cs new file mode 100644 index 0000000..403be31 --- /dev/null +++ b/TravelCompany/TravelCompanyDatabaseImplement/Implements/ContractorImplements/ContractorStorage.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.Contracts; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TravelCompanyContracts.BindingModels.Contractor; +using TravelCompanyContracts.SearchModels.Contractor; +using TravelCompanyContracts.StoragesModels.Contractor; +using TravelCompanyContracts.ViewModels.Contractor.ViewModels; + +namespace TravelCompanyDatabaseImplement.Implements.ContractorImplements +{ + public class ContractorStorage : IContractorStorage + { + public List GetFullList() + { + using var context = new TravelCompanyDatabase(); + return context.Contractors + .Select(x => x.GetViewModel) + .ToList(); + } + + public List GetFilteredList(ContractorSearchModel model) + { + if (string.IsNullOrEmpty(model.Surname)) + { + return new(); + } + using var context = new TravelCompanyDatabase(); + return context.Contractors + .Where(x => x.Surname.Contains(model.Surname)) + .Select(x => x.GetViewModel) + .ToList(); + } + + public ContractorViewModel? GetElement(ContractorSearchModel model) + { + using var context = new TravelCompanyDatabase(); + if (model.Id.HasValue) + { + return context.Contractors + .FirstOrDefault(x => x.Id.Equals(model.Id)) + ?.GetViewModel; + } + if (!string.IsNullOrEmpty(model.Email) && !string.IsNullOrEmpty(model.Password)) + { + return context.Contractors + .FirstOrDefault(x => x.Email.Equals(model.Email) && x.Password.Equals(model.Password)) + ?.GetViewModel; + } + if (!string.IsNullOrEmpty(model.Email)) + { + return context.Contractors + .FirstOrDefault(x => x.Email.Equals(model.Email)) + ?.GetViewModel; + } + if (!string.IsNullOrEmpty(model.MobilePhone)) + { + return context.Contractors + .FirstOrDefault(x => x.MobilePhone.Equals(model.MobilePhone)) + ?.GetViewModel; + } + return null; + } + + public ContractorViewModel? Insert(ContractorBindingModel model) + { + var newContractor = Contractor.Create(model); + if (newContractor == null) + { + return null; + } + using var context = new TravelCompanyDatabase(); + context.Contractors.Add(newContractor); + context.SaveChanges(); + return newContractor.GetViewModel; + } + + public ContractorViewModel? Update(ContractorBindingModel model) + { + using var context = new TravelCompanyDatabase(); + var contractor = context.Contractors.FirstOrDefault(x => x.Id == model.Id); + if (contractor == null) + { + return null; + } + contractor.Update(model); + context.SaveChanges(); + return contractor.GetViewModel; + } + + public ContractorViewModel? Delete(ContractorBindingModel model) + { + using var context = new TravelCompanyDatabase(); + var element = context.Contractors.FirstOrDefault(x => x.Id == model.Id); + if (element != null) + { + context.Contractors.Remove(element); + context.SaveChanges(); + return element.GetViewModel; + } + return null; + } + } +} diff --git a/TravelCompany/TravelCompanyDatabaseImplement/Implements/ContractorImplements/ExcursionGroupStorage.cs b/TravelCompany/TravelCompanyDatabaseImplement/Implements/ContractorImplements/ExcursionGroupStorage.cs new file mode 100644 index 0000000..423dbec --- /dev/null +++ b/TravelCompany/TravelCompanyDatabaseImplement/Implements/ContractorImplements/ExcursionGroupStorage.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TravelCompanyContracts.BindingModels.Contractor; +using TravelCompanyContracts.SearchModels.Contractor; +using TravelCompanyContracts.StoragesModels.Contractor; +using TravelCompanyContracts.ViewModels.Contractor.ViewModels; + +namespace TravelCompanyDatabaseImplement.Implements.ContractorImplements +{ + public class ExcursionGroupStorage : IExcursionGroupStorage + { + public List GetFullList() + { + using var context = new TravelCompanyDatabase(); + return context.ExcursionGroups + .Include(x => x.Contractor) + .Select(x => x.GetViewModel) + .ToList(); + } + + public List GetFilteredList(ExcursionGroupSearchModel model) + { + using var context = new TravelCompanyDatabase(); + if (!string.IsNullOrEmpty(model.ExcursionGroupName)) + { + return context.ExcursionGroups + .Include(x => x.Contractor) + .Where(x => x.ExcursionGroupName.Contains(model.ExcursionGroupName)) + .ToList() + .Select(x => x.GetViewModel) + .ToList(); + } + if (model.ContractorID.HasValue) + { + return context.ExcursionGroups + .Include(x => x.Contractor) + .Where(x => x.UserId.Equals(model.ContractorID)) + .ToList() + .Select(x => x.GetViewModel) + .ToList(); + } + return new(); + } + + public ExcursionGroupViewModel? GetElement(ExcursionGroupSearchModel model) + { + if (string.IsNullOrEmpty(model.ExcursionGroupName) && !model.Id.HasValue) + { + return null; + } + using var context = new TravelCompanyDatabase(); + return context.ExcursionGroups + .Include(x => x.Contractor) + .FirstOrDefault(x => (!string.IsNullOrEmpty(model.ExcursionGroupName) && x.ExcursionGroupName == model.ExcursionGroupName) || + (model.Id.HasValue && x.Id == model.Id)) + ?.GetViewModel; + } + + public ExcursionGroupViewModel? Insert(ExcursionGroupBindingModel model) + { + using var context = new TravelCompanyDatabase(); + var newExcursionGroup = ExcursionGroup.Create(context, model); + if (newExcursionGroup == null) + { + return null; + } + context.ExcursionGroups.Add(newExcursionGroup); + context.SaveChanges(); + return newExcursionGroup.GetViewModel; + } + + public ExcursionGroupViewModel? Update(ExcursionGroupBindingModel model) + { + using var context = new TravelCompanyDatabase(); + using var transaction = context.Database.BeginTransaction(); + try + { + var excursionGroup = context.ExcursionGroups.FirstOrDefault(rec => rec.Id == model.Id); + if (excursionGroup == null) + { + return null; + } + excursionGroup.Update(model); + context.SaveChanges(); + transaction.Commit(); + return excursionGroup.GetViewModel; + } + catch + { + transaction.Rollback(); + throw; + } + } + + public ExcursionGroupViewModel? Delete(ExcursionGroupBindingModel model) + { + using var context = new TravelCompanyDatabase(); + var element = context.ExcursionGroups + .FirstOrDefault(rec => rec.Id == model.Id); + if (element != null) + { + context.ExcursionGroups.Remove(element); + context.SaveChanges(); + return element.GetViewModel; + } + return null; + } + } +} diff --git a/TravelCompany/TravelCompanyDatabaseImplement/Implements/ContractorImplements/ExcursionStorage.cs b/TravelCompany/TravelCompanyDatabaseImplement/Implements/ContractorImplements/ExcursionStorage.cs new file mode 100644 index 0000000..6ff0928 --- /dev/null +++ b/TravelCompany/TravelCompanyDatabaseImplement/Implements/ContractorImplements/ExcursionStorage.cs @@ -0,0 +1,123 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TravelCompanyContracts.BindingModels.Contractor; +using TravelCompanyContracts.SearchModels.Contractor; +using TravelCompanyContracts.StoragesModels.Contractor; +using TravelCompanyContracts.ViewModels.Contractor.ViewModels; + +namespace TravelCompanyDatabaseImplement.Implements.ContractorImplements +{ + public class ExcursionStorage : IExcursionStorage + { + public List GetFullList() + { + using var context = new TravelCompanyDatabase(); + return context.Excursions + .Include(x => x.Contractor) + .Include(x => x.Tours) + .ThenInclude(x => x.Tour) + .ToList() + .Select(x => x.GetViewModel) + .ToList(); + } + + public List GetFilteredList(ExcursionSearchModel model) + { + using var context = new TravelCompanyDatabase(); + if (!string.IsNullOrEmpty(model.ExcursionName)) + { + return context.Excursions + .Include(x => x.Contractor) + .Include(x => x.Tours) + .ThenInclude(x => x.Tour) + .Where(x => x.ExcursionName.Contains(model.ExcursionName)) + .ToList() + .Select(x => x.GetViewModel) + .ToList(); + } + if (model.ContractorID.HasValue) + { + return context.Excursions + .Include(x => x.Contractor) + .Include(x => x.Tours) + .ThenInclude(x => x.Tour) + .Where(x => x.ContractorID.Equals(model.ContractorID)) + .ToList() + .Select(x => x.GetViewModel) + .ToList(); + } + return new(); + } + + public ExcursionViewModel? GetElement(ExcursionSearchModel model) + { + if (string.IsNullOrEmpty(model.ExcursionName) && !model.Id.HasValue) + { + return null; + } + using var context = new TravelCompanyDatabase(); + return context.Excursions + .Include(x => x.Contractor) + .Include(x => x.Tours) + .ThenInclude(x => x.Tour) + .FirstOrDefault(x => (!string.IsNullOrEmpty(model.ExcursionName) && x.ExcursionName == model.ExcursionName) || + (model.Id.HasValue && x.Id == model.Id)) + ?.GetViewModel; + } + + public ExcursionViewModel? Insert(ExcursionBindingModel model) + { + using var context = new TravelCompanyDatabase(); + var newExcursion = Excursion.Create(context, model); + if (newExcursion == null) + { + return null; + } + context.Excursions.Add(newExcursion); + context.SaveChanges(); + return newExcursion.GetViewModel; + } + + public ExcursionViewModel? Update(ExcursionBindingModel model) + { + using var context = new TravelCompanyDatabase(); + using var transaction = context.Database.BeginTransaction(); + try + { + var excursion = context.Excursions.FirstOrDefault(rec => rec.Id == model.Id); + if (excursion == null) + { + return null; + } + excursion.Update(model); + context.SaveChanges(); + excursion.UpdateTours(context, model); + transaction.Commit(); + return excursion.GetViewModel; + } + catch + { + transaction.Rollback(); + throw; + } + } + + public ExcursionViewModel? Delete(ExcursionBindingModel model) + { + using var context = new TravelCompanyDatabase(); + var element = context.Excursions + .Include(x => x.Tours) + .FirstOrDefault(rec => rec.Id == model.Id); + if (element != null) + { + context.Excursions.Remove(element); + context.SaveChanges(); + return element.GetViewModel; + } + return null; + } + } +} diff --git a/TravelCompany/TravelCompanyDatabaseImplement/Implements/ContractorImplements/TourStorage.cs b/TravelCompany/TravelCompanyDatabaseImplement/Implements/ContractorImplements/TourStorage.cs new file mode 100644 index 0000000..ebc1c5c --- /dev/null +++ b/TravelCompany/TravelCompanyDatabaseImplement/Implements/ContractorImplements/TourStorage.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TravelCompanyContracts.BindingModels.Contractor; +using TravelCompanyContracts.SearchModels.Contractor; +using TravelCompanyContracts.StoragesModels.Contractor; +using TravelCompanyContracts.ViewModels.Contractor.ViewModels; + +namespace TravelCompanyDatabaseImplement.Implements.ContractorImplements +{ + public class TourStorage : ITourStorage + { + public List GetFullList() + { + using var context = new TravelCompanyDatabase(); + return context.Tours + .Include(x => x.Contractor) + .Select(x => x.GetViewModel) + .ToList(); + } + + public List GetFilteredList(TourSearchModel model) + { + using var context = new TravelCompanyDatabase(); + if (!string.IsNullOrEmpty(model.TourName)) + { + return context.Tours + .Include(x => x.Contractor) + .Where(x => x.TourName.Contains(model.TourName)) + .Select(x => x.GetViewModel) + .ToList(); + } + if (model.ContractorID.HasValue) + { + return context.Tours + .Include(x => x.Contractor) + .Where(x => x.UserId.Equals(model.ContractorID)) + .Select(x => x.GetViewModel) + .ToList(); + } + return new(); + } + + public TourViewModel? GetElement(TourSearchModel model) + { + if (string.IsNullOrEmpty(model.TourName) && !model.Id.HasValue) + { + return null; + } + using var context = new TravelCompanyDatabase(); + return context.Tours.Include(x => x.Contractor) + .FirstOrDefault(x => (!string.IsNullOrEmpty(model.TourName) && x.TourName == model.TourName) || + (model.Id.HasValue && x.Id == model.Id)) + ?.GetViewModel; + } + + public TourViewModel? Insert(TourBindingModel model) + { + var newTour = Tour.Create(model); + if (newTour == null) + { + return null; + } + using var context = new TravelCompanyDatabase(); + context.Tours.Add(newTour); + context.SaveChanges(); + return context.Tours + .Include(x => x.Contractor) + .FirstOrDefault(x => x.Id == newTour.Id) + ?.GetViewModel; + } + + public TourViewModel? Update(TourBindingModel model) + { + using var context = new TravelCompanyDatabase(); + var tour = context.Tours.FirstOrDefault(x => x.Id == model.Id); + if (tour == null) + { + return null; + } + tour.Update(model); + context.SaveChanges(); + return context.Tours + .Include(x => x.Contractor) + .FirstOrDefault(x => x.Id == model.Id) + ?.GetViewModel; + } + + public TourViewModel? Delete(TourBindingModel model) + { + using var context = new TravelCompanyDatabase(); + var element = context.Tours.FirstOrDefault(rec => rec.Id == model.Id); + if (element != null) + { + var deletedElement = context.Tours + .Include(x => x.Contractor) + .FirstOrDefault(x => x.Id == model.Id) + ?.GetViewModel; + context.Tours.Remove(element); + context.SaveChanges(); + return deletedElement; + } + return null; + } + } +} diff --git a/TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/Contractor.cs b/TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/Contractor.cs new file mode 100644 index 0000000..25471e7 --- /dev/null +++ b/TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/Contractor.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using TravelCompanyContracts.BindingModels.Contractor; +using TravelCompanyContracts.ViewModels.Contractor.ViewModels; +using TravelCompanyDataModels.Models.Contractor; + +namespace TravelCompanyDatabaseImplement.Models.ContractorModels +{ + public class Contractor : IContractorModel + { + public int Id { get; set; } + + [Required] + public string Surname { get; set; } = string.Empty; + + [Required] + public string Name { get; set; } = string.Empty; + + [Required] + public string Patronymic { get; set; } = string.Empty; + + [Required] + public string Email { get; set; } = string.Empty; + + [Required] + public string MobilePhone { get; set; } = string.Empty; + + [Required] + public string Password { get; set; } = string.Empty; + + [ForeignKey("ContractorID")] + public virtual List Excursions { get; set; } = new(); + + [ForeignKey("ContractorID")] + public virtual List ExcursionGroups { get; set; } = new(); + + [ForeignKey("ContractorID")] + public virtual List Tours { get; set; } = new(); + + public static Contractor? Create(ContractorBindingModel? model) + { + if (model == null) + { + return null; + } + return new Contractor() + { + Id = model.Id, + Surname = model.Surname, + Name = model.Name, + Patronymic = model.Patronymic, + Email = model.Email, + MobilePhone = model.MobilePhone, + Password = model.Password, + }; + } + public void Update(ContractorBindingModel? model) + { + if (model == null) + { + return; + } + Id = model.Id; + Surname = model.Surname; + Name = model.Name; + Patronymic = model.Patronymic; + Email = model.Email; + MobilePhone = model.MobilePhone; + Password = model.Password; + } + + public ContractorViewModel GetViewModel => new() + { + Id = Id, + Surname = Surname, + Name = Name, + Patronymic = Patronymic, + Email = Email, + MobilePhone = MobilePhone, + Password = Password + }; + } +} diff --git a/TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/Excursion.cs b/TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/Excursion.cs new file mode 100644 index 0000000..1fe9515 --- /dev/null +++ b/TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/Excursion.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using TravelCompanyContracts.BindingModels.Contractor; +using TravelCompanyContracts.ViewModels.Contractor.ViewModels; +using TravelCompanyDataModels.Models.Contractor; +using Microsoft.EntityFrameworkCore; +using TravelCompanyDatabaseImplement.Models.GuarantorModels; + +namespace TravelCompanyDatabaseImplement.Models.ContractorModels +{ + public class Excursion : IExcursionModel + { + public int Id { get; set; } + + [Required] + public string ExcursionName { get; set; } = string.Empty; + + [Required] + public int ExcursionPrice { get; set; } + + [Required] + public int ContractorID { get; set; } + + [ForeignKey("ExcursionId")] + public virtual List Tours { get; set; } = new(); + + [ForeignKey("ExcursionId")] + public virtual List Guides { get; set; } = new(); + + public static Excursion? Create(TravelCompanyDatabase context, ExcursionBindingModel? model) + { + if (model == null) + { + return null; + } + return new Excursion() + { + Id = model.Id, + ExcursionName = model.ExcursionName, + ExcursionPrice = model.ExcursionPrice, + ContractorID = model.ContractorID, + }; + } + public void Update(ExcursionBindingModel? model) + { + if (model == null) + { + return; + } + ExcursionName = model.ExcursionName; + ExcursionPrice = model.ExcursionPrice; + } + + public ExcursionViewModel GetViewModel => new() + { + Id = Id, + ExcursionName = ExcursionName, + ExcursionPrice = ExcursionPrice, + ContractorID = ContractorID + }; + } +} diff --git a/TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/ExcursionGroup.cs b/TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/ExcursionGroup.cs new file mode 100644 index 0000000..485d4ca --- /dev/null +++ b/TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/ExcursionGroup.cs @@ -0,0 +1,109 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using TravelCompanyContracts.BindingModels.Contractor; +using TravelCompanyContracts.ViewModels.Contractor.ViewModels; +using TravelCompanyDataModels.Models.Contractor; +using Microsoft.EntityFrameworkCore; +using TravelCompanyDatabaseImplement.Models.GuarantorModels; + +namespace TravelCompanyDatabaseImplement.Models.ContractorModels +{ + public class ExcursionGroup : IExcursionGroupModel + { + public int Id { get; set; } + + [Required] + public string ExcursionGroupName { get; set; } = string.Empty; + + [Required] + public int PeopleAmount { get; set; } + + [Required] + public int ContractorID { get; set; } + + [DeleteBehavior(DeleteBehavior.Restrict)] + public virtual Contractor Contractor { get; set; }} + + private Dictionary? _excursionGroupTours = null; + + [NotMapped] + public Dictionary ExcursionGroupTours + { + get + { + if (_excursionGroupTours == null) + { + _excursionGroupTours = Tours + .ToDictionary(recPC => recPC.TourId, recPC => recPC.Tour as ITourModel); + } + return _excursionGroupTours; + } + } + + [ForeignKey("ExcursionGroupId")] + public virtual List Tours { get; set; } = new(); + + public static ExcursionGroup? Create(TravelCompanyDatabase context, ExcursionGroupBindingModel? model) + { + if (model == null) + { + return null; + } + return new ExcursionGroup() + { + Id = model.Id, + ExcursionGroupName = model.ExcursionGroupName, + PeopleAmount = model.PeopleAmount, + ContractorID = model.ContractorID, + Tours = model.ExcursionGroupTours.Select(x => new ExcursionGroupTour + { + Tour = context.Tours.First(y => y.Id == x.Key) + }).ToList() + }; + } + public void Update(ExcursionGroupBindingModel? model) + { + if (model == null) + { + return; + } + ExcursionGroupName = model.ExcursionGroupName; + PeopleAmount = model.PeopleAmount; + } + + public ExcursionGroupViewModel GetViewModel => new() + { + Id = Id, + ExcursionGroupName = ExcursionGroupName, + PeopleAmount = PeopleAmount, + ContractorID = ContractorID, + ExcursionGroupTours = ExcursionGroupTours + }; + + public void UpdateTours(TravelCompanyDatabase context, ExcursionGroupBindingModel model) + { + var excursionGroupTours = context.ExcursionGroupTours.Where(rec => rec.ExcursionGroupId == model.Id).ToList(); + if (excursionGroupTours != null && excursionGroupTours.Count > 0) + { + context.ExcursionGroupTours.RemoveRange(excursionGroupTours.Where(rec => !model.ExcursionGroupTours.ContainsKey(rec.TourId))); + context.SaveChanges(); + } + var excursionGroup = context.ExcursionGroups.First(x => x.Id == Id); + foreach (var et in model.ExcursionGroupTours) + { + context.ExcursionGroupTours.Add(new ExcursionGroupTour + { + ExcursionGroup = excursionGroup, + Tour = context.Tours.First(x => x.Id == et.Key) + }); + context.SaveChanges(); + } + _excursionGroupTours = null; + } + } +} diff --git a/TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/ExcursionGroupTour.cs b/TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/ExcursionGroupTour.cs new file mode 100644 index 0000000..5246f43 --- /dev/null +++ b/TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/ExcursionGroupTour.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; + +namespace TravelCompanyDatabaseImplement.Models.ContractorModels +{ + public class ExcursionGroupTour + { + public int Id { get; set; } + + [Required] + public int ExcursionGroupId { get; set; } + + [Required] + public int TourId { get; set; } + + public virtual ExcursionGroup ExcursionGroup { get; set; } = new(); + + public virtual Tour Tour { get; set; } = new(); + } +} diff --git a/TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/ExcursionTour.cs b/TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/ExcursionTour.cs new file mode 100644 index 0000000..8122d7b --- /dev/null +++ b/TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/ExcursionTour.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; + +namespace TravelCompanyDatabaseImplement.Models.ContractorModels +{ + public class ExcursionTour + { + public int Id { get; set; } + + [Required] + public int ExcursionId { get; set; } + + [Required] + public int TourId { get; set; } + + public virtual Excursion Excursion { get; set; } = new(); + + public virtual Tour Tour { get; set; } = new(); + } +} diff --git a/TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/Tour.cs b/TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/Tour.cs new file mode 100644 index 0000000..b114b31 --- /dev/null +++ b/TravelCompany/TravelCompanyDatabaseImplement/Models/ContractorModels/Tour.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using TravelCompanyContracts.BindingModels.Contractor; +using TravelCompanyContracts.ViewModels.Contractor.ViewModels; +using TravelCompanyDataModels.Models.Contractor; +using Microsoft.EntityFrameworkCore; + +namespace TravelCompanyDatabaseImplement.Models.ContractorModels +{ + public class Tour : ITourModel + { + public int Id { get; set; } + + [Required] + public string TourName { get; set; } = string.Empty; + + [Required] + public DateTime TourDate { get; set; } + + [Required] + public int ContractorID { get; set; } + + [DeleteBehavior(DeleteBehavior.Restrict)] + public virtual Contractor Contractor { get; set; } + + [ForeignKey("TourId")] + public virtual List Excursions { get; set; } = new(); + + [ForeignKey("TourId")] + public virtual List ExcursionGroups { get; set; } = new(); + + public static Tour? Create(TourBindingModel? model) + { + if (model == null) + { + return null; + } + return new Tour() + { + Id = model.Id, + TourName = model.TourName, + TourDate = model.TourDate, + ContractorID = model.ContractorID, + }; + } + public void Update(TourBindingModel? model) + { + if (model == null) + { + return; + } + TourName = model.TourName; + TourDate = model.TourDate; + } + + public TourViewModel GetViewModel => new() + { + Id = Id, + TourName = TourName, + TourDate = TourDate, + ContractorID = ContractorID + }; + } +} diff --git a/TravelCompany/TravelCompanyDatabaseImplement/TravelCompanyDatabase.cs b/TravelCompany/TravelCompanyDatabaseImplement/TravelCompanyDatabase.cs index ac6a948..3b297b2 100644 --- a/TravelCompany/TravelCompanyDatabaseImplement/TravelCompanyDatabase.cs +++ b/TravelCompany/TravelCompanyDatabaseImplement/TravelCompanyDatabase.cs @@ -21,20 +21,15 @@ namespace TravelCompanyDatabaseImplement } base.OnConfiguring(optionsBuilder); } - public virtual DbSet Accounts { set; get; } - - public virtual DbSet Cards { set; get; } - - public virtual DbSet Cashiers { set; get; } - - public virtual DbSet CashWithdrawals { set; get; } - + public virtual DbSet Excursions { set; get; } + public virtual DbSet ExcursionGroups { set; get; } + public virtual DbSet Tours { set; get; } + public virtual DbSet ExcursionTours { set; get; } + public virtual DbSet ExcursionGroupTours { set; get; } + public virtual DbSet Guides { set; get; } + public virtual DbSet Places { set; get; } + public virtual DbSet Trips { set; get; } public virtual DbSet Guarantors { set; get; } - - public virtual DbSet Debitings { set; get; } - - public virtual DbSet Creditings { set; get; } - - public virtual DbSet MoneyTransfers { set; get; } + public virtual DbSet Contractors { set; get; } } } diff --git a/TravelCompany/TravelCompanyDatabaseImplement/TravelCompanyDatabaseImplement.csproj b/TravelCompany/TravelCompanyDatabaseImplement/TravelCompanyDatabaseImplement.csproj index e28f94a..091d082 100644 --- a/TravelCompany/TravelCompanyDatabaseImplement/TravelCompanyDatabaseImplement.csproj +++ b/TravelCompany/TravelCompanyDatabaseImplement/TravelCompanyDatabaseImplement.csproj @@ -6,11 +6,6 @@ enable - - - - -