2023-05-19 17:52:18 +04:00

97 lines
3.2 KiB
C#

using System.ComponentModel.DataAnnotations.Schema;
using HotelContracts.BindingModels;
using HotelContracts.ViewModels;
using HotelDataModels.Models;
namespace HotelDatabaseImplement.Models;
public class Cleaning : ICleaningModel
{
public int Id { get; set; }
public DateTime Date { get; set; }
public int RoomId { get; set; }
[ForeignKey("CleaningId")]
public virtual List<CleaningInstrument> CleaningInstrument { get; set; } = new();
private Dictionary<int, ICleaningInstrumentsModel>? _cleaningInstruments = null;
[NotMapped]
public Dictionary<int, ICleaningInstrumentsModel> CleaningInstruments {
get
{
using var database = new HotelDataBase();
_cleaningInstruments ??= database.CleaningInstrument
.Where(x => x.CleaningId == Id)
.ToDictionary(x => x.CleaningInstrumentsId,
y => database.CleaningInstruments.FirstOrDefault(k => k.Id == y.CleaningInstrumentsId) as
ICleaningInstrumentsModel);
return _cleaningInstruments;
}
}
public static Cleaning Create(HotelDataBase dataBase, CleaningBindingModel model)
{
return new Cleaning
{
Id = model.Id,
Date = model.Date,
RoomId = model.RoomId,
CleaningInstrument = model.CleaningInstruments.Select(
x => new CleaningInstrument
{
CleaningInstruments = dataBase.CleaningInstruments.First(y => y.Id == x.Key)
}).ToList()
};
}
public void Update(CleaningBindingModel model)
{
Date = model.Date;
}
public void UpdateCleaningInstruments(HotelDataBase dataBase, CleaningBindingModel model)
{
var cleaningInstruments = dataBase.CleaningInstrument
.Where(x => x.CleaningId == model.Id)
.ToList();
dataBase.CleaningInstrument.RemoveRange(
cleaningInstruments.Where(x => !model.CleaningInstruments.ContainsKey(x.CleaningInstrumentsId))
);
dataBase.SaveChanges();
foreach (var toUpdate in cleaningInstruments)
{
model.CleaningInstruments.Remove(toUpdate.CleaningInstrumentsId);
}
dataBase.SaveChanges();
var cleaning = dataBase.Cleanings.First(x => x.Id == Id);
foreach (var cleaningInstrument in model.CleaningInstruments)
{
dataBase.CleaningInstrument.Add(new CleaningInstrument
{
Cleaning = cleaning,
CleaningInstruments = dataBase.CleaningInstruments
.First(x => x.Id == cleaningInstrument.Key)
});
dataBase.SaveChanges();
}
_cleaningInstruments = null;
}
public CleaningViewModel GetView
{
get
{
using var context = new HotelDataBase();
return new CleaningViewModel
{
Id = Id,
Date = Date,
CleaningInstruments = CleaningInstruments,
Room = context.Rooms.FirstOrDefault(x => x.Id == RoomId).GetView
};
}
}
}