using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using UnivateProperties_API.Containers.Timeshare; using UnivateProperties_API.Context; using UnivateProperties_API.Model.Timeshare; using UnivateProperties_API.Repository.Region; using UnivateProperties_API.Repository.Users; namespace UnivateProperties_API.Repository.Timeshare { public class WeekRepository : IRepository { private readonly DataContext _dbContext; public WeekRepository(DataContext dbContext) { _dbContext = dbContext; } public List Get(Func where) { return _dbContext.Weeks.Where(where).ToList(); } public List GetAll() { return _dbContext.Weeks.ToList(); } public TimeshareWeek GetDetailed(Func first) { var item = _dbContext.Weeks.FirstOrDefault(first); item = GetDetailedWeek(item); return item; } public List GetDtoListAll() { List list = new List(); foreach(var item in GetDetailedAll()) { list.Add(new WeekDto(item)); } return list; } public List GetDetailedAll() { var list = GetAll(); List weeklist = new List(); foreach(var item in list) { weeklist.Add(GetDetailedWeek(item)); } return weeklist; } private TimeshareWeek GetDetailedWeek(TimeshareWeek week) { if(week.AgencyId != null) { AgencyRepository agency = new AgencyRepository(_dbContext); week.Agency = agency.Get(x => x.Id == week.AgencyId).FirstOrDefault(); } if(week.AgentId != null) { AgentRepository agent = new AgentRepository(_dbContext); week.Agent = agent.Get(x => x.Id == week.AgentId).FirstOrDefault(); } if (week.StatusId != 0) { StatusRepository status = new StatusRepository(_dbContext); week.Status = status.Get(x => x.Id == week.StatusId).FirstOrDefault(); } if (week.RegionId != 0) { ProvinceRepository province = new ProvinceRepository(_dbContext); week.Region = province.Get(x => x.Id == week.RegionId).FirstOrDefault(); } if (week.OwnerId != 0) { IndividualRepository individual = new IndividualRepository(_dbContext); week.Owner = individual.Get(x => x.Id == week.OwnerId).FirstOrDefault(); } return week; } public void Insert(TimeshareWeek item) { item = GetDetailedWeek(item); // Set starting Status of A1 StatusRepository repo = new StatusRepository(_dbContext); item.Status = repo.GetDetailed(s => s.Code == "A1"); if(item.Status != null) { //Create initial item.Status = new Status() { Code = "A1", Description = "Pending verification", StatusType = StatusType.Timeshare, ModifiedBy = "KobusB" }; } _dbContext.Add(item); Save(); } public void Insert(IEnumerable items) { foreach (var item in items) { _dbContext.Add(item); } Save(); } public void Remove(TimeshareWeek item) { var i = _dbContext.Weeks.Find(item); _dbContext.Weeks.Remove(i); Save(); } public void Remove(IEnumerable items) { foreach (var item in items) { var i = _dbContext.Weeks.Find(item); _dbContext.Weeks.Remove(i); } Save(); } public void RemoveAtId(int item) { var i = _dbContext.Weeks.Find(item); _dbContext.Weeks.Remove(i); Save(); } public void Save() { _dbContext.SaveChanges(); } public void Update(TimeshareWeek item) { _dbContext.Entry(item).State = EntityState.Modified; Save(); } public List GetBy(WeekFilterDto week) { List item = GetDetailedAll(); if (!string.IsNullOrEmpty(week.RegionCode)) { item = item.Where(x => x.Region != null && x.Region.Code?.ToLower() == week.RegionCode.ToLower()).ToList(); } if (!string.IsNullOrEmpty(week.ResortCode)) { item = item.Where(x => x.ResortCode?.ToLower() == week.ResortCode).ToList(); } if (week.Date != null) { item = item.Where(x => x.ArrivalDate >= week.Date.Value.AddDays(-7) && x.DepartureDate <= week.Date.Value.AddDays(7)).ToList(); } if (week.MinAmount != null && week.MinAmount != 0) { item = item.Where(x => x.SellPrice >= week.MinAmount).ToList(); } if (week.MaxAmount != null && week.MaxAmount != 0) { item.Where(x => x.SellPrice <= week.MaxAmount).ToList(); } return item; } } }