using System; using System.Linq; using System.Text; using IOL.Fagprove.Data; using IOL.Fagprove.Data.Enums; using IOL.Fagprove.Data.Models; using IOL.Fagprove.Services.Interfaces; using IOL.Fagprove.Utilities; namespace IOL.Fagprove.Services { public class AppReservationService : IAppReservationService { private readonly AppDbContext _context; public AppReservationService(AppDbContext context) { _context = context; } public bool ReservationIsPossible(Reservation reservation) { var reservationsForThisCabin = _context.Reservations.Where(r => r.ReservationObjectId == reservation.ReservationObjectId && r.Status == ReservationStatus.Granted && DateTime.Compare(r.From, DateTime.Today) >= 0).ToList(); if (reservationsForThisCabin.Count == 0) return true; return reservationsForThisCabin.Select(item => item.From < reservation.To && reservation.From < item.To).All(overlaps => !overlaps); } public bool ReservationIsValid(Reservation reservation) { if (reservation.From == default) return false; if (reservation.To == default) return false; if (reservation.UserId == default) return false; if (reservation.ReservationObjectId == default) return false; if (reservation.To < reservation.From) return false; return reservation.From < reservation.To; } public bool SendReservationStatusMail(Reservation reservation) { var user = _context.Users.SingleOrDefault(u => u.Id == reservation.UserId); if (user == default) return false; if (reservation.Status == ReservationStatus.Pending) return false; var cabin = _context.Cabins.SingleOrDefault(c => c.Id == reservation.ReservationObjectId); var message = new StringBuilder(); var title = ""; message.AppendLine("Hei " + user.Name); message.AppendLine(); switch (reservation.Status) { case ReservationStatus.Granted: title = "Reservasjon innvilget"; message.AppendLine("Din reservasjon er godkjent!"); break; case ReservationStatus.Rejected: title = "Reservasjon avvist"; message.AppendLine("Din reservasjon er avvist!"); break; } message.AppendLine(); message.AppendLine("Hytte: " + cabin?.Name); message.AppendLine("Fra: " + reservation.From.ToString("dd-MM-yyyy")); message.AppendLine("Til: " + reservation.To.ToString("dd-MM-yyyy")); var statusMail = new Email { Message = message.ToString(), Recepient = user.Email, Title = title + " - Din bedrifts reservasjonstjeneste" }; statusMail.Send(); return statusMail.Sent; } } }