diff options
Diffstat (limited to 'src/Services/AppReservationService.cs')
| -rw-r--r-- | src/Services/AppReservationService.cs | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/Services/AppReservationService.cs b/src/Services/AppReservationService.cs new file mode 100644 index 0000000..2fc121b --- /dev/null +++ b/src/Services/AppReservationService.cs @@ -0,0 +1,76 @@ +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; + } + } +}
\ No newline at end of file |
