87 lines
2.7 KiB
C#
Raw Normal View History

2023-04-07 13:15:55 +04:00
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
{
_cleaningInstruments ??= CleaningInstrument
.ToDictionary(
x => x.CleaningInstrumentsId,
x => x.CleaningInstruments as ICleaningInstrumentsModel
);
return _cleaningInstruments;
}
}
public static Cleaning Create(HotelDataBase dataBase, CleaningBindingModel model)
{
return new Cleaning
{
Id = model.Id,
Date = model.Date,
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 => new CleaningViewModel
{
Id = Id,
Date = Date,
CleaningInstruments = CleaningInstruments
};
}