ISPOLNITEL_3_SUHNOSTI

This commit is contained in:
artiogf 2023-04-28 22:02:47 +04:00
parent 258724652b
commit bed8ee9b95
18 changed files with 631 additions and 34 deletions

View File

@ -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<int, (ITourModel, decimal)> ExecurtionTours { get; set; } = new();
}
public int TuorId { get; set; }
public Dictionary<int, ITourModel> ExecurtionTours { get; set; } = new();
public Dictionary<int, IGidModel> ExecurtionGids { get; set; } = new();
}
}

View File

@ -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<int, (ITripModel, string)> GidTrips { get; set; } = new();
public int UserId { get; set; }
public int UserId { get; set; }
public int ExecurtionId { get; set; }
}
public Dictionary<int, (IExecurtionModel, DateTime)> GidExecurtions { get; set; } = new();
}
}

View File

@ -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<int, (IExecurtionModel, DateTime)> ExecurtionTours { get; set; } = new();
public Dictionary<int, (IExecurtionModel, DateTime)> TourExecurtions { get; set; } = new();
public Dictionary<ITourGroupModel, decimal> TourGroups { get; set; } = new();
}
public Dictionary<int, (ITourGroupModel, string)> TourTourGroups { get; set; } = new();
}
}

View File

@ -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<int, (ITourModel, decimal)> ExecurtionTours { get; set; } = new();
}
public Dictionary<int, ITourModel> ExecurtionTours { get; set; } = new();
public Dictionary<int, IGidModel> ExecurtionGids { get; set; } = new();
}
}

View File

@ -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<int, (ITripModel, string)> GidTrips { get; set; } = new();
public int UserId { get; set; }
public int UserId { get; set; }
public int ExecurtionId { get; set; }
}
public Dictionary<int, (IExecurtionModel, DateTime)> GidExecurtions { get; set; } = new();
}
}

View File

@ -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<int, (IExecurtionModel, DateTime)> ExecurtionTours { get; set; } = new();
public Dictionary<int, (IExecurtionModel, DateTime)> TourExecurtions { get; set; } = new();
public Dictionary<ITourGroupModel, decimal> TourGroups { get; set; } = new();
}
public Dictionary<int, (ITourGroupModel, string)> TourTourGroups { get; set; } = new();
}
}

View File

@ -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
{
}
}

View File

@ -13,8 +13,6 @@ namespace TourCompanyDataModels.Models
public DateTime Date { get; }
public int Duration { get; }
public int GidId { get; }
public int UserId { get; }

View File

@ -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<int, (ITripModel, string)> GidTrips { get;}
public int UserId { get; }
public int UserId { get;}
public int ExecurtionId { get; }
}
public Dictionary<int, (IExecurtionModel, DateTime)> GidExecurtions { get; }
}
}

View File

@ -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<int, ITourModel>? _execurtionTours = null;
public Dictionary<int, IGidModel>? _execurtionGids = null;
public virtual List<GidExecurtion> Gids { get; set; } = new();
public virtual List<ExecurtionTour> Tours { get; set; } = new();
public Dictionary<int, IGidModel> ExecurtionGids
{
get
{
if (_execurtionGids == null)
{
_execurtionGids = Gids
.ToDictionary(recPC => recPC.GidId, recPC => recPC.Gid as IGidModel);
}
return _execurtionGids;
}
}
public Dictionary<int, ITourModel> 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;
}
}
}

View File

@ -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();
}
}

View File

@ -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<int, (IExecurtionModel, DateTime)>? _gidExecurtions = null;
public virtual List<GidExecurtion> Execurtions { get; set; } = new();
public Dictionary<int, (IExecurtionModel, DateTime)> 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;
}
}
}

View File

@ -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();
}
}

View File

@ -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
{
}
}

View File

@ -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<int, (IExecurtionModel, DateTime)>? _tourExecurtions = null;
public Dictionary<int, (ITourGroupModel, string)>? _tourTourGroups = null;
public virtual List<TourGroupTour> TourGroups { get; set; } = new();
public virtual List<ExecurtionTour> Execurtions { get; set; } = new();
public Dictionary<int, (IExecurtionModel, DateTime)> TourExecurtions
{
get
{
if (_tourExecurtions == null)
{
_tourExecurtions = Execurtions
.ToDictionary(recPC => recPC.ExecurtionId, recPC => (recPC.Execurtion as IExecurtionModel, recPC.Execurtion.Date));
}
return _tourExecurtions;
}
}
public Dictionary<int, (ITourGroupModel, string)> 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;
}
}
}

View File

@ -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<int, (ITourModel, decimal)>? _tourGroupTours = null;
public virtual List<TourGroupTour> Tours { get; set; } = new();
public virtual List<User> Users { get; set; } = new();
public Dictionary<int, (ITourModel, decimal)> 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;
}
}
}

View File

@ -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();
}
}

View File

@ -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;
}
}