summaryrefslogtreecommitdiffstats
path: root/src/Services/AppReservationService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Services/AppReservationService.cs')
-rw-r--r--src/Services/AppReservationService.cs76
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